Files
pmp-tool/dist-server/server/execution-api.js
xiaohei 61ed9e9dc3
Some checks failed
CI / lint-and-typecheck (push) Failing after 30s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
feat: MVP v0.5 complete - All P0 features implemented and frontend verified. Backend API structure ready, pending final ES module configuration for deployment.
2026-04-12 01:46:38 +08:00

97 lines
4.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";
/**
* 执行记录 REST API
* Hono路由Agent执行日志的CRUD接口
*
* 接口列表:
* GET /api/projects/:id/executions - 获取项目执行记录
* GET /api/projects/:id/executions/:eid - 获取单条执行记录
* POST /api/projects/:id/executions - 创建执行记录
* GET /api/projects/:id/decisions - 获取决策记录
* GET /api/projects/:id/knowledge - 获取知识库摘要
*/
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.executionApiHandlers = void 0;
// In-memory store (replace with PostgreSQL later)
var executionStore = new Map();
var decisionStore = new Map();
/**
* 路由定义Hono风格
* 使用时app.route('/api', executionRoutes)
*/
exports.executionApiHandlers = {
// GET /api/projects/:id/executions
getExecutions: function (projectId, filters) {
var records = executionStore.get(projectId) || [];
if (filters === null || filters === void 0 ? void 0 : filters.agentId) {
records = records.filter(function (r) { return r.agentId === filters.agentId; });
}
if (filters === null || filters === void 0 ? void 0 : filters.taskId) {
records = records.filter(function (r) { return r.taskId === filters.taskId; });
}
var offset = (filters === null || filters === void 0 ? void 0 : filters.offset) || 0;
var limit = (filters === null || filters === void 0 ? void 0 : filters.limit) || 50;
return records.slice(offset, offset + limit);
},
// GET /api/projects/:id/executions/:eid
getExecution: function (projectId, executionId) {
var records = executionStore.get(projectId) || [];
return records.find(function (r) { return r.id === executionId; }) || null;
},
// POST /api/projects/:id/executions
createExecution: function (projectId, log) {
var record = __assign(__assign({}, log), { id: "exec-".concat(Date.now(), "-").concat(Math.random().toString(36).slice(2, 8)), createdAt: new Date().toISOString() });
var existing = executionStore.get(projectId) || [];
existing.push(record);
executionStore.set(projectId, existing);
return record;
},
// GET /api/projects/:id/decisions
getDecisions: function (projectId) {
return decisionStore.get(projectId) || [];
},
// POST /api/projects/:id/decisions
createDecision: function (projectId, decision) {
var record = __assign(__assign({}, decision), { id: "dec-".concat(Date.now(), "-").concat(Math.random().toString(36).slice(2, 8)), createdAt: new Date().toISOString() });
var existing = decisionStore.get(projectId) || [];
existing.push(record);
decisionStore.set(projectId, existing);
return record;
},
// GET /api/projects/:id/stats
getStats: function (projectId) {
var records = executionStore.get(projectId) || [];
var byModel = {};
var byType = {};
var totalScore = 0;
var totalTokens = 0;
var totalDuration = 0;
for (var _i = 0, records_1 = records; _i < records_1.length; _i++) {
var r = records_1[_i];
byModel[r.model] = (byModel[r.model] || 0) + 1;
totalScore += r.score;
totalTokens += r.tokensUsed;
totalDuration += r.durationMs;
}
return {
totalExecutions: records.length,
avgScore: records.length > 0 ? Math.round((totalScore / records.length) * 10) / 10 : 0,
totalTokens: totalTokens,
avgDurationMs: records.length > 0 ? Math.round(totalDuration / records.length) : 0,
byModel: byModel,
byType: byType,
};
},
};