@devflow-tools/server 0.14.4 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/bin/devflow-server.js +2 -0
- package/dist/app.module.d.ts.map +1 -1
- package/dist/app.module.js +4 -0
- package/dist/app.module.js.map +1 -1
- package/dist/auth/api-key.guard.d.ts.map +1 -1
- package/dist/auth/api-key.guard.js +11 -5
- package/dist/auth/api-key.guard.js.map +1 -1
- package/dist/benchmark/benchmark.controller.d.ts +7 -5
- package/dist/benchmark/benchmark.controller.d.ts.map +1 -1
- package/dist/benchmark/benchmark.controller.js +43 -4
- package/dist/benchmark/benchmark.controller.js.map +1 -1
- package/dist/benchmark/benchmark.service.d.ts +7 -9
- package/dist/benchmark/benchmark.service.d.ts.map +1 -1
- package/dist/benchmark/benchmark.service.js +27 -39
- package/dist/benchmark/benchmark.service.js.map +1 -1
- package/dist/common/dto.d.ts +0 -4
- package/dist/common/dto.d.ts.map +1 -1
- package/dist/common/http-exception.filter.d.ts.map +1 -1
- package/dist/common/http-exception.filter.js +4 -0
- package/dist/common/http-exception.filter.js.map +1 -1
- package/dist/context/context.controller.d.ts +2 -2
- package/dist/context/context.controller.d.ts.map +1 -1
- package/dist/context/context.controller.js +3 -0
- package/dist/context/context.controller.js.map +1 -1
- package/dist/context/context.controller.spec.js +2 -0
- package/dist/context/context.controller.spec.js.map +1 -1
- package/dist/context/context.service.d.ts +6 -13
- package/dist/context/context.service.d.ts.map +1 -1
- package/dist/context/context.service.js +30 -13
- package/dist/context/context.service.js.map +1 -1
- package/dist/database/database.module.d.ts.map +1 -1
- package/dist/database/database.module.js +2 -7
- package/dist/database/database.module.js.map +1 -1
- package/dist/governance/governance.controller.d.ts +16 -0
- package/dist/governance/governance.controller.d.ts.map +1 -0
- package/dist/governance/governance.controller.js +76 -0
- package/dist/governance/governance.controller.js.map +1 -0
- package/dist/governance/governance.module.d.ts +3 -0
- package/dist/governance/governance.module.d.ts.map +1 -0
- package/dist/governance/governance.module.js +16 -0
- package/dist/governance/governance.module.js.map +1 -0
- package/dist/governance/governance.service.d.ts +19 -0
- package/dist/governance/governance.service.d.ts.map +1 -0
- package/dist/governance/governance.service.js +169 -0
- package/dist/governance/governance.service.js.map +1 -0
- package/dist/knowledge/knowledge.controller.d.ts +6 -0
- package/dist/knowledge/knowledge.controller.d.ts.map +1 -1
- package/dist/knowledge/knowledge.controller.js +14 -0
- package/dist/knowledge/knowledge.controller.js.map +1 -1
- package/dist/knowledge/knowledge.service.d.ts +3 -1
- package/dist/knowledge/knowledge.service.d.ts.map +1 -1
- package/dist/knowledge/knowledge.service.js +7 -1
- package/dist/knowledge/knowledge.service.js.map +1 -1
- package/dist/live/live.controller.d.ts +5 -0
- package/dist/live/live.controller.d.ts.map +1 -0
- package/dist/live/live.controller.js +52 -0
- package/dist/live/live.controller.js.map +1 -0
- package/dist/live/live.controller.spec.d.ts +2 -0
- package/dist/live/live.controller.spec.d.ts.map +1 -0
- package/dist/live/live.controller.spec.js +25 -0
- package/dist/live/live.controller.spec.js.map +1 -0
- package/dist/live/live.module.d.ts +3 -0
- package/dist/live/live.module.d.ts.map +1 -0
- package/dist/live/live.module.js +15 -0
- package/dist/live/live.module.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +25 -3
- package/dist/main.js.map +1 -1
- package/dist/memory/memory.controller.d.ts +13 -28
- package/dist/memory/memory.controller.d.ts.map +1 -1
- package/dist/memory/memory.controller.js +85 -24
- package/dist/memory/memory.controller.js.map +1 -1
- package/dist/memory/memory.service.d.ts +8 -32
- package/dist/memory/memory.service.d.ts.map +1 -1
- package/dist/memory/memory.service.js +41 -45
- package/dist/memory/memory.service.js.map +1 -1
- package/dist/projects/projects.controller.d.ts +9 -2
- package/dist/projects/projects.controller.d.ts.map +1 -1
- package/dist/projects/projects.controller.js +42 -10
- package/dist/projects/projects.controller.js.map +1 -1
- package/dist/projects/projects.controller.spec.js +59 -16
- package/dist/projects/projects.controller.spec.js.map +1 -1
- package/dist/projects/projects.module.d.ts.map +1 -1
- package/dist/projects/projects.module.js +10 -2
- package/dist/projects/projects.module.js.map +1 -1
- package/dist/projects/projects.service.d.ts +7 -39
- package/dist/projects/projects.service.d.ts.map +1 -1
- package/dist/projects/projects.service.js +39 -19
- package/dist/projects/projects.service.js.map +1 -1
- package/dist/projects/projects.service.spec.d.ts +2 -0
- package/dist/projects/projects.service.spec.d.ts.map +1 -0
- package/dist/projects/projects.service.spec.js +99 -0
- package/dist/projects/projects.service.spec.js.map +1 -0
- package/dist/retrieval-contract.spec.d.ts +2 -0
- package/dist/retrieval-contract.spec.d.ts.map +1 -0
- package/dist/retrieval-contract.spec.js +53 -0
- package/dist/retrieval-contract.spec.js.map +1 -0
- package/dist/telemetry/telemetry.controller.d.ts +1 -5
- package/dist/telemetry/telemetry.controller.d.ts.map +1 -1
- package/dist/telemetry/telemetry.controller.js +3 -14
- package/dist/telemetry/telemetry.controller.js.map +1 -1
- package/dist/telemetry/telemetry.controller.spec.js +8 -2
- package/dist/telemetry/telemetry.controller.spec.js.map +1 -1
- package/dist/telemetry/telemetry.service.d.ts +1 -0
- package/dist/telemetry/telemetry.service.d.ts.map +1 -1
- package/dist/telemetry/telemetry.service.js +17 -48
- package/dist/telemetry/telemetry.service.js.map +1 -1
- package/dist/workflow/workflow.controller.d.ts +8 -2
- package/dist/workflow/workflow.controller.d.ts.map +1 -1
- package/dist/workflow/workflow.service.d.ts +8 -2
- package/dist/workflow/workflow.service.d.ts.map +1 -1
- package/dist/workflow/workflow.service.js +13 -5
- package/dist/workflow/workflow.service.js.map +1 -1
- package/package.json +16 -12
- package/dist/common/root-path.decorator.d.ts +0 -2
- package/dist/common/root-path.decorator.d.ts.map +0 -1
- package/dist/common/root-path.decorator.js +0 -6
- package/dist/common/root-path.decorator.js.map +0 -1
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ node node_modules/@devflow-tools/server/dist/main.js
|
|
|
32
32
|
| Workflows | `/api/workflows/runs/:id/approve` | 审批门禁(approve/reject) |
|
|
33
33
|
| Memory | `/api/memory` | 项目记忆管理 |
|
|
34
34
|
| Memory | `/api/memory/candidates/:id/approve` | 候选记忆审核 |
|
|
35
|
-
| Memory | `/api/memory/events` |
|
|
35
|
+
| Memory | `/api/memory/session-events` | Session tool event 记录 |
|
|
36
36
|
| Knowledge | `/api/knowledge/search` | 文档搜索 |
|
|
37
37
|
| Knowledge | `/api/knowledge/sync` | 知识源同步 |
|
|
38
38
|
| Knowledge | `/api/knowledge/sources` | 知识源状态查询 |
|
|
@@ -46,13 +46,13 @@ node node_modules/@devflow-tools/server/dist/main.js
|
|
|
46
46
|
|
|
47
47
|
## Authentication
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
除健康检查外,所有端点需要 `X-API-Key` 请求头。首次启动会生成 `~/.devflow/keys/local.key`(权限 400)。
|
|
50
50
|
|
|
51
51
|
## Environment Variables
|
|
52
52
|
|
|
53
53
|
| 变量 | 默认值 | 说明 |
|
|
54
54
|
|------|--------|------|
|
|
55
|
-
| `DEVFLOW_API_KEYS` |
|
|
55
|
+
| `DEVFLOW_API_KEYS` | 自动生成本地密钥 | 逗号分隔的 API 密钥列表 |
|
|
56
56
|
| `PORT` | `13337` | 服务端口 |
|
|
57
57
|
|
|
58
58
|
## License
|
package/dist/app.module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.d.ts","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.module.d.ts","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":"AAgBA,qBAmBa,SAAS;CAAG"}
|
package/dist/app.module.js
CHANGED
|
@@ -17,6 +17,8 @@ import { RegistryModule } from "./registry/registry.module.js";
|
|
|
17
17
|
import { DatabaseModule } from "./database/database.module.js";
|
|
18
18
|
import { ResponseInterceptor } from "./common/response.interceptor.js";
|
|
19
19
|
import { ServerController } from "./server.controller.js";
|
|
20
|
+
import { LiveModule } from "./live/live.module.js";
|
|
21
|
+
import { GovernanceModule } from "./governance/governance.module.js";
|
|
20
22
|
let AppModule = class AppModule {
|
|
21
23
|
};
|
|
22
24
|
AppModule = __decorate([
|
|
@@ -31,6 +33,8 @@ AppModule = __decorate([
|
|
|
31
33
|
WorkflowModule,
|
|
32
34
|
BenchmarkModule,
|
|
33
35
|
RegistryModule,
|
|
36
|
+
LiveModule,
|
|
37
|
+
GovernanceModule,
|
|
34
38
|
],
|
|
35
39
|
controllers: [ServerController],
|
|
36
40
|
providers: [
|
package/dist/app.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAqB9D,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,SAAS;IAnBrB,MAAM,CAAC;QACN,OAAO,EAAE;YACP,cAAc;YACd,UAAU;YACV,cAAc;YACd,aAAa;YACb,WAAW;YACX,eAAe;YACf,cAAc;YACd,eAAe;YACf,cAAc;YACd,UAAU;YACV,gBAAgB;SACjB;QACD,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,SAAS,EAAE;YACT,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE;SAC5D;KACF,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key.guard.d.ts","sourceRoot":"","sources":["../../src/auth/api-key.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"api-key.guard.d.ts","sourceRoot":"","sources":["../../src/auth/api-key.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAczC,qBACa,WAAY,YAAW,WAAW;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAE3D,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAgChD"}
|
|
@@ -14,10 +14,16 @@ import { Injectable, UnauthorizedException, Inject, } from "@nestjs/common";
|
|
|
14
14
|
import { Reflector } from "@nestjs/core";
|
|
15
15
|
import { IS_PUBLIC_KEY } from "./api-key.decorator.js";
|
|
16
16
|
import { AuthErrorCode } from "./errors.js";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
import { getLocalApiKey } from "@devflow-tools/sdk";
|
|
18
|
+
function getValidApiKeys() {
|
|
19
|
+
const configured = process.env.DEVFLOW_API_KEYS
|
|
20
|
+
?.split(",")
|
|
21
|
+
.map((key) => key.trim())
|
|
22
|
+
.filter(Boolean);
|
|
23
|
+
if (configured?.length)
|
|
24
|
+
return configured;
|
|
25
|
+
return [getLocalApiKey()];
|
|
26
|
+
}
|
|
21
27
|
let ApiKeyGuard = class ApiKeyGuard {
|
|
22
28
|
constructor(reflector) {
|
|
23
29
|
this.reflector = reflector;
|
|
@@ -40,7 +46,7 @@ let ApiKeyGuard = class ApiKeyGuard {
|
|
|
40
46
|
},
|
|
41
47
|
});
|
|
42
48
|
}
|
|
43
|
-
if (!
|
|
49
|
+
if (!getValidApiKeys().includes(apiKey)) {
|
|
44
50
|
throw new UnauthorizedException({
|
|
45
51
|
error: {
|
|
46
52
|
code: AuthErrorCode.INVALID_API_KEY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key.guard.js","sourceRoot":"","sources":["../../src/auth/api-key.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,UAAU,EAGV,qBAAqB,EACrB,MAAM,GACP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api-key.guard.js","sourceRoot":"","sources":["../../src/auth/api-key.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,UAAU,EAGV,qBAAqB,EACrB,MAAM,GACP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,SAAS,eAAe;IACtB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAC7C,EAAE,KAAK,CAAC,GAAG,CAAC;SACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,UAAU,EAAE,MAAM;QAAE,OAAO,UAAU,CAAC;IAC1C,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5B,CAAC;AAGM,IAAM,WAAW,GAAjB,MAAM,WAAW;IACtB,YAAuC,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE/D,WAAW,CAAC,OAAyB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,aAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAuB,CAAC;QAElE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,qBAAqB,CAAC;gBAC9B,KAAK,EAAE;oBACL,IAAI,EAAE,aAAa,CAAC,eAAe;oBACnC,OAAO,EAAE,8BAA8B;oBACvC,OAAO,EAAE,EAAE;iBACZ;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,qBAAqB,CAAC;gBAC9B,KAAK,EAAE;oBACL,IAAI,EAAE,aAAa,CAAC,eAAe;oBACnC,OAAO,EAAE,iBAAiB;oBAC1B,OAAO,EAAE,EAAE;iBACZ;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAnCY,WAAW;IADvB,UAAU,EAAE;IAEE,WAAA,MAAM,CAAC,SAAS,CAAC,CAAA;qCAAoB,SAAS;GADhD,WAAW,CAmCvB"}
|
|
@@ -2,10 +2,12 @@ import { BenchmarkService } from "./benchmark.service.js";
|
|
|
2
2
|
export declare class BenchmarkController {
|
|
3
3
|
private readonly service;
|
|
4
4
|
constructor(service: BenchmarkService);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
listReports(limit?: string): import("@devflow-tools/sdk").BenchmarkReportMeta[];
|
|
6
|
+
getLatestReport(suiteId?: string): import("@devflow-tools/sdk").BenchmarkSuiteReport | null;
|
|
7
|
+
getReport(runId: string): import("@devflow-tools/sdk").BenchmarkSuiteReport;
|
|
8
|
+
getResults(): {
|
|
9
|
+
reports: import("@devflow-tools/sdk").BenchmarkReportMeta[];
|
|
10
|
+
latest: import("@devflow-tools/sdk").BenchmarkSuiteReport | null;
|
|
11
|
+
};
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=benchmark.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.controller.d.ts","sourceRoot":"","sources":["../../src/benchmark/benchmark.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,qBACa,mBAAmB;IACQ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"benchmark.controller.d.ts","sourceRoot":"","sources":["../../src/benchmark/benchmark.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,qBACa,mBAAmB;IACQ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;IAGhF,WAAW,CAAiB,KAAK,CAAC,EAAE,MAAM;IAK1C,eAAe,CAAiB,OAAO,CAAC,EAAE,MAAM;IAKhD,SAAS,CAAc,KAAK,EAAE,MAAM;IAKpC,UAAU;;;;CAMX"}
|
|
@@ -10,21 +10,54 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
import { Controller, Get, Inject } from "@nestjs/common";
|
|
13
|
+
import { Controller, Get, Inject, Param, Query } from "@nestjs/common";
|
|
14
14
|
import { BenchmarkService } from "./benchmark.service.js";
|
|
15
15
|
let BenchmarkController = class BenchmarkController {
|
|
16
16
|
constructor(service) {
|
|
17
17
|
this.service = service;
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
return this.service.
|
|
19
|
+
listReports(limit) {
|
|
20
|
+
return this.service.listReports(parseLimit(limit));
|
|
21
|
+
}
|
|
22
|
+
getLatestReport(suiteId) {
|
|
23
|
+
return this.service.getLatestReport(suiteId);
|
|
24
|
+
}
|
|
25
|
+
getReport(runId) {
|
|
26
|
+
return this.service.getReport(runId);
|
|
27
|
+
}
|
|
28
|
+
getResults() {
|
|
29
|
+
return {
|
|
30
|
+
reports: this.service.listReports(),
|
|
31
|
+
latest: this.service.getLatestReport(),
|
|
32
|
+
};
|
|
21
33
|
}
|
|
22
34
|
};
|
|
35
|
+
__decorate([
|
|
36
|
+
Get("reports"),
|
|
37
|
+
__param(0, Query("limit")),
|
|
38
|
+
__metadata("design:type", Function),
|
|
39
|
+
__metadata("design:paramtypes", [String]),
|
|
40
|
+
__metadata("design:returntype", void 0)
|
|
41
|
+
], BenchmarkController.prototype, "listReports", null);
|
|
42
|
+
__decorate([
|
|
43
|
+
Get("reports/latest"),
|
|
44
|
+
__param(0, Query("suite")),
|
|
45
|
+
__metadata("design:type", Function),
|
|
46
|
+
__metadata("design:paramtypes", [String]),
|
|
47
|
+
__metadata("design:returntype", void 0)
|
|
48
|
+
], BenchmarkController.prototype, "getLatestReport", null);
|
|
49
|
+
__decorate([
|
|
50
|
+
Get("reports/:id"),
|
|
51
|
+
__param(0, Param("id")),
|
|
52
|
+
__metadata("design:type", Function),
|
|
53
|
+
__metadata("design:paramtypes", [String]),
|
|
54
|
+
__metadata("design:returntype", void 0)
|
|
55
|
+
], BenchmarkController.prototype, "getReport", null);
|
|
23
56
|
__decorate([
|
|
24
57
|
Get("results"),
|
|
25
58
|
__metadata("design:type", Function),
|
|
26
59
|
__metadata("design:paramtypes", []),
|
|
27
|
-
__metadata("design:returntype",
|
|
60
|
+
__metadata("design:returntype", void 0)
|
|
28
61
|
], BenchmarkController.prototype, "getResults", null);
|
|
29
62
|
BenchmarkController = __decorate([
|
|
30
63
|
Controller("benchmark"),
|
|
@@ -32,4 +65,10 @@ BenchmarkController = __decorate([
|
|
|
32
65
|
__metadata("design:paramtypes", [BenchmarkService])
|
|
33
66
|
], BenchmarkController);
|
|
34
67
|
export { BenchmarkController };
|
|
68
|
+
function parseLimit(value) {
|
|
69
|
+
if (!value)
|
|
70
|
+
return 50;
|
|
71
|
+
const parsed = Number.parseInt(value, 10);
|
|
72
|
+
return Number.isFinite(parsed) && parsed > 0 ? Math.min(parsed, 500) : 50;
|
|
73
|
+
}
|
|
35
74
|
//# sourceMappingURL=benchmark.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.controller.js","sourceRoot":"","sources":["../../src/benchmark/benchmark.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"benchmark.controller.js","sourceRoot":"","sources":["../../src/benchmark/benchmark.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGnD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,YAAuD,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAGpF,WAAW,CAAiB,KAAc;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAGD,eAAe,CAAiB,OAAgB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAGD,SAAS,CAAc,KAAa;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAGD,UAAU;QACR,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;SACvC,CAAC;IACJ,CAAC;CACF,CAAA;AArBC;IADC,GAAG,CAAC,SAAS,CAAC;IACF,WAAA,KAAK,CAAC,OAAO,CAAC,CAAA;;;;sDAE1B;AAGD;IADC,GAAG,CAAC,gBAAgB,CAAC;IACL,WAAA,KAAK,CAAC,OAAO,CAAC,CAAA;;;;0DAE9B;AAGD;IADC,GAAG,CAAC,aAAa,CAAC;IACR,WAAA,KAAK,CAAC,IAAI,CAAC,CAAA;;;;oDAErB;AAGD;IADC,GAAG,CAAC,SAAS,CAAC;;;;qDAMd;AAxBU,mBAAmB;IAD/B,UAAU,CAAC,WAAW,CAAC;IAET,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;qCAA2B,gBAAgB;GADrE,mBAAmB,CAyB/B;;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
+
import type { BenchmarkReportMeta, BenchmarkSuiteReport } from "@devflow-tools/sdk";
|
|
2
|
+
import type { DevFlowDatabase } from "@devflow-tools/database";
|
|
1
3
|
export declare class BenchmarkService {
|
|
2
|
-
private
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
results: never[];
|
|
8
|
-
isRealData: boolean;
|
|
9
|
-
message: string;
|
|
10
|
-
}>;
|
|
4
|
+
private readonly database;
|
|
5
|
+
constructor(database?: DevFlowDatabase);
|
|
6
|
+
listReports(limit?: number): BenchmarkReportMeta[];
|
|
7
|
+
getLatestReport(suiteId?: string): BenchmarkSuiteReport | null;
|
|
8
|
+
getReport(runId: string): BenchmarkSuiteReport;
|
|
11
9
|
}
|
|
12
10
|
//# sourceMappingURL=benchmark.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.service.d.ts","sourceRoot":"","sources":["../../src/benchmark/benchmark.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"benchmark.service.d.ts","sourceRoot":"","sources":["../../src/benchmark/benchmark.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,qBACa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;gBAEN,QAAQ,CAAC,EAAE,eAAe;IAItE,WAAW,CAAC,KAAK,SAAK,GAAG,mBAAmB,EAAE;IAI9C,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAI9D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB;CAa/C"}
|
|
@@ -7,52 +7,40 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { Inject, Injectable, NotFoundException, Optional } from "@nestjs/common";
|
|
14
|
+
import { ErrorCode } from "../common/error-codes.js";
|
|
12
15
|
let BenchmarkService = class BenchmarkService {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.
|
|
15
|
-
this.engine = new BenchmarkEngine();
|
|
16
|
-
this.registerDefaultScenarios();
|
|
16
|
+
constructor(database) {
|
|
17
|
+
this.database = database ?? null;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
{
|
|
21
|
-
id: 'understand-codebase',
|
|
22
|
-
category: 'understand',
|
|
23
|
-
desc: '理解代码库架构',
|
|
24
|
-
expectedFiles: 2,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
id: 'modify-component',
|
|
28
|
-
category: 'modify',
|
|
29
|
-
desc: '修改 React 组件',
|
|
30
|
-
expectedFiles: 1,
|
|
31
|
-
expectedComponents: 1,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: 'review-code',
|
|
35
|
-
category: 'review',
|
|
36
|
-
desc: '代码审查',
|
|
37
|
-
expectedIssues: 2,
|
|
38
|
-
},
|
|
39
|
-
];
|
|
40
|
-
for (const s of scenarios) {
|
|
41
|
-
this.engine.registerScenario(s);
|
|
42
|
-
this.scenarioIds.push(s.id);
|
|
43
|
-
}
|
|
19
|
+
listReports(limit = 50) {
|
|
20
|
+
return this.database?.listBenchmarkReports(limit) ?? [];
|
|
44
21
|
}
|
|
45
|
-
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
22
|
+
getLatestReport(suiteId) {
|
|
23
|
+
return this.database?.getLatestBenchmarkReport(suiteId) ?? null;
|
|
24
|
+
}
|
|
25
|
+
getReport(runId) {
|
|
26
|
+
const report = this.database?.getBenchmarkReport(runId) ?? null;
|
|
27
|
+
if (!report) {
|
|
28
|
+
throw new NotFoundException({
|
|
29
|
+
error: {
|
|
30
|
+
code: ErrorCode.REPORT_NOT_FOUND,
|
|
31
|
+
message: `Benchmark report "${runId}" not found`,
|
|
32
|
+
details: { runId },
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return report;
|
|
51
37
|
}
|
|
52
38
|
};
|
|
53
39
|
BenchmarkService = __decorate([
|
|
54
40
|
Injectable(),
|
|
55
|
-
|
|
41
|
+
__param(0, Optional()),
|
|
42
|
+
__param(0, Inject("DATABASE")),
|
|
43
|
+
__metadata("design:paramtypes", [Function])
|
|
56
44
|
], BenchmarkService);
|
|
57
45
|
export { BenchmarkService };
|
|
58
46
|
//# sourceMappingURL=benchmark.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.service.js","sourceRoot":"","sources":["../../src/benchmark/benchmark.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"benchmark.service.js","sourceRoot":"","sources":["../../src/benchmark/benchmark.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG9C,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAG3B,YAA4C,QAA0B;QACpE,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,KAAK,GAAG,EAAE;QACpB,OAAO,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED,eAAe,CAAC,OAAgB;QAC9B,OAAO,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAuB,OAAO,CAAC,IAAI,IAAI,CAAC;IACxF,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAuB,KAAK,CAAC,IAAI,IAAI,CAAC;QACtF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,iBAAiB,CAAC;gBAC1B,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,gBAAgB;oBAChC,OAAO,EAAE,qBAAqB,KAAK,aAAa;oBAChD,OAAO,EAAE,EAAE,KAAK,EAAE;iBACnB;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AA5BY,gBAAgB;IAD5B,UAAU,EAAE;IAIE,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,UAAU,CAAC,CAAA;;GAHhC,gBAAgB,CA4B5B"}
|
package/dist/common/dto.d.ts
CHANGED
package/dist/common/dto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/common/dto.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;CACH
|
|
1
|
+
{"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/common/dto.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-exception.filter.d.ts","sourceRoot":"","sources":["../../src/common/http-exception.filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,aAAa,EAId,MAAM,gBAAgB,CAAC;AAYxB,qBACa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAE/D,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"http-exception.filter.d.ts","sourceRoot":"","sources":["../../src/common/http-exception.filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,aAAa,EAId,MAAM,gBAAgB,CAAC;AAYxB,qBACa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAE/D,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;CA6DrD"}
|
|
@@ -28,6 +28,10 @@ let HttpExceptionFilter = HttpExceptionFilter_1 = class HttpExceptionFilter {
|
|
|
28
28
|
const body = exception.getResponse();
|
|
29
29
|
if (typeof body === "object" && body !== null && "error" in body) {
|
|
30
30
|
const errorVal = body.error;
|
|
31
|
+
if (status === HttpStatus.GONE && errorVal === "GONE") {
|
|
32
|
+
reply.status(status).send(body);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
31
35
|
// Already in ApiError format: { error: { code, message, details } }
|
|
32
36
|
if (typeof errorVal === "object" && errorVal !== null && "code" in errorVal) {
|
|
33
37
|
reply.status(status).send(body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-exception.filter.js","sourceRoot":"","sources":["../../src/common/http-exception.filter.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAEL,KAAK,EAEL,aAAa,EACb,UAAU,EACV,MAAM,GACP,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,SAAS,iBAAiB,CAAC,MAAc;IACvC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC,WAAW,CAAC;IACjD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC,iBAAiB,CAAC;IACvD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC,gBAAgB,CAAC;IACtD,OAAO,SAAS,CAAC,cAAc,CAAC;AAClC,CAAC;AAGM,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAAzB;QACY,WAAM,GAAG,IAAI,MAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"http-exception.filter.js","sourceRoot":"","sources":["../../src/common/http-exception.filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ContextService, IndexStatus, FeedbackEntry } from "./context.service.js";
|
|
2
2
|
import { ProjectsService } from "../projects/projects.service.js";
|
|
3
|
-
import type { ContextResult,
|
|
3
|
+
import type { ContextResult, GetProjectContextResult } from "@devflow-tools/sdk";
|
|
4
4
|
export declare class ContextController {
|
|
5
5
|
private readonly service;
|
|
6
6
|
private readonly projects;
|
|
@@ -21,7 +21,7 @@ export declare class ContextController {
|
|
|
21
21
|
query: string;
|
|
22
22
|
mode?: "fast" | "deep";
|
|
23
23
|
maxTokens?: number;
|
|
24
|
-
}, xProject?: string): Promise<
|
|
24
|
+
}, xProject?: string): Promise<GetProjectContextResult>;
|
|
25
25
|
feedback(body: {
|
|
26
26
|
rootPath?: string;
|
|
27
27
|
query: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.controller.d.ts","sourceRoot":"","sources":["../../src/context/context.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"context.controller.d.ts","sourceRoot":"","sources":["../../src/context/context.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,qBACa,iBAAiB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADT,OAAO,EAAE,cAAc,EACtB,QAAQ,EAAE,eAAe;IAGrE,OAAO,CAAC,eAAe;IAOjB,MAAM,CAAoB,QAAQ,CAAC,EAAE,MAAM,EAAgC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAO1H,KAAK,CAAS,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAgC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKjH,KAAK,CAAS,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAAgC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAK9K,SAAS,CAAS,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAAgC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQ5L,QAAQ,CAAS,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAgC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUrQ,eAAe;;;;;;;IAKf,UAAU,CAAgB,IAAI,EAAE,MAAM,EAAqB,QAAQ,CAAC,EAAE,MAAM,EAAgC,QAAQ,CAAC,EAAE,MAAM;CAGpI"}
|
|
@@ -37,6 +37,9 @@ let ContextController = class ContextController {
|
|
|
37
37
|
return this.service.buildContext(this.resolveRootPath(body.rootPath, xProject), body.query, body.mode ?? "fast", body.maxTokens);
|
|
38
38
|
}
|
|
39
39
|
async buildTask(body, xProject) {
|
|
40
|
+
if (typeof body.query !== 'string' || body.query.trim() === '') {
|
|
41
|
+
throw new BadRequestException('query is required');
|
|
42
|
+
}
|
|
40
43
|
return this.service.buildTaskContext(this.resolveRootPath(body.rootPath, xProject), body.query, body.mode ?? "fast", body.maxTokens);
|
|
41
44
|
}
|
|
42
45
|
async feedback(body, xProject) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.controller.js","sourceRoot":"","sources":["../../src/context/context.controller.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"context.controller.js","sourceRoot":"","sources":["../../src/context/context.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,8 @@ describe('ContextController', () => {
|
|
|
76
76
|
],
|
|
77
77
|
confidence: 0.85,
|
|
78
78
|
tokenCount: 1500,
|
|
79
|
+
_devflow_unique: { task_oriented: true },
|
|
80
|
+
_accuracy: { data_freshness_ms: 10, source_layer: 'composite', degradation: 'none' },
|
|
79
81
|
};
|
|
80
82
|
const mockService = {
|
|
81
83
|
buildTaskContext: vi.fn().mockResolvedValue(mockTaskContextResult),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.controller.spec.js","sourceRoot":"","sources":["../../src/context/context.controller.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAiB,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,+FAA+F;AAC/F,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;QACzB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;QACrB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;QACrB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;QACvB,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;KAC9B,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,oEAAoE;AACpE,EAAE,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;KAC9B,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,UAA6B,CAAC;IAClC,IAAI,OAAuB,CAAC;IAC5B,IAAI,eAAgC,CAAC;IAErC,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"context.controller.spec.js","sourceRoot":"","sources":["../../src/context/context.controller.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { ContextResult,
|
|
1
|
+
import type { ContextResult, GetProjectContextResult } from "@devflow-tools/sdk";
|
|
2
2
|
import { DataService } from "../data/data.service.js";
|
|
3
|
+
import { DevFlowDatabase } from "@devflow-tools/database";
|
|
3
4
|
export interface IndexStatus {
|
|
4
5
|
totalFiles: number;
|
|
5
6
|
totalSymbols: number;
|
|
@@ -12,23 +13,15 @@ export interface FeedbackEntry {
|
|
|
12
13
|
timestamp: number;
|
|
13
14
|
projectRoot: string;
|
|
14
15
|
}
|
|
15
|
-
export interface FeedbackInput {
|
|
16
|
-
projectRoot: string;
|
|
17
|
-
query: string;
|
|
18
|
-
taskType?: string;
|
|
19
|
-
feedback: "hit" | "partial" | "miss";
|
|
20
|
-
contextMode?: "general" | "task";
|
|
21
|
-
runId?: string;
|
|
22
|
-
tokenCount?: number;
|
|
23
|
-
}
|
|
24
16
|
export declare class ContextService {
|
|
25
17
|
private readonly dataService?;
|
|
26
|
-
private
|
|
27
|
-
constructor(dataService?: DataService | undefined);
|
|
18
|
+
private database?;
|
|
19
|
+
constructor(dataService?: DataService | undefined, database?: DevFlowDatabase);
|
|
20
|
+
private getDatabase;
|
|
28
21
|
indexProject(rootPath: string): Promise<IndexStatus>;
|
|
29
22
|
getStatus(rootPath: string): Promise<IndexStatus>;
|
|
30
23
|
buildContext(rootPath: string, query: string, mode: "fast" | "deep", maxTokens?: number): Promise<ContextResult>;
|
|
31
|
-
buildTaskContext(rootPath: string, query: string, mode: "fast" | "deep", maxTokens?: number): Promise<
|
|
24
|
+
buildTaskContext(rootPath: string, query: string, mode: "fast" | "deep", maxTokens?: number): Promise<GetProjectContextResult>;
|
|
32
25
|
findSymbol(rootPath: string, name: string): Promise<import("@devflow-tools/sdk").SymbolEntry[]>;
|
|
33
26
|
recordFeedback(rootPath: string, query: string, feedback: "hit" | "partial" | "miss", extra?: {
|
|
34
27
|
taskType?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.service.d.ts","sourceRoot":"","sources":["../../src/context/context.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"context.service.d.ts","sourceRoot":"","sources":["../../src/context/context.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAA6B,MAAM,yBAAyB,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBACa,cAAc;IAIU,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAHhE,OAAO,CAAC,QAAQ,CAAC,CAAkB;gBAGiB,WAAW,CAAC,EAAE,WAAW,YAAA,EAC3C,QAAQ,CAAC,EAAE,eAAe;IAK5D,OAAO,CAAC,WAAW;IAKb,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAYpD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBjD,YAAY,CAChB,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GACzE,OAAO,CAAC,aAAa,CAAC;IAKnB,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GACzE,OAAO,CAAC,uBAAuB,CAAC;IAO7B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAKzC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAuCnN,oBAAoB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAG1H"}
|
|
@@ -11,12 +11,17 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
13
|
import { Injectable, Inject, Optional } from "@nestjs/common";
|
|
14
|
-
import { createEngines } from "@devflow-tools/context-engine";
|
|
14
|
+
import { createEngines, getProjectContextResult } from "@devflow-tools/context-engine";
|
|
15
15
|
import { DataService } from "../data/data.service.js";
|
|
16
|
+
import { DevFlowDatabase, openGlobalDevFlowDatabase } from "@devflow-tools/database";
|
|
16
17
|
let ContextService = class ContextService {
|
|
17
|
-
constructor(dataService) {
|
|
18
|
+
constructor(dataService, database) {
|
|
18
19
|
this.dataService = dataService;
|
|
19
|
-
this.
|
|
20
|
+
this.database = database;
|
|
21
|
+
}
|
|
22
|
+
getDatabase() {
|
|
23
|
+
this.database ??= openGlobalDevFlowDatabase();
|
|
24
|
+
return this.database;
|
|
20
25
|
}
|
|
21
26
|
async indexProject(rootPath) {
|
|
22
27
|
const { indexer, codegraph } = await createEngines(rootPath);
|
|
@@ -54,16 +59,29 @@ let ContextService = class ContextService {
|
|
|
54
59
|
return context.build({ query, mode, maxTokens: maxTokens ?? 8000, includeGraph: mode === "deep" });
|
|
55
60
|
}
|
|
56
61
|
async buildTaskContext(rootPath, query, mode, maxTokens) {
|
|
57
|
-
const { context } = await createEngines(rootPath);
|
|
58
|
-
|
|
62
|
+
const { context, codegraph } = await createEngines(rootPath);
|
|
63
|
+
const lastUpdated = codegraph.getStats().lastUpdated;
|
|
64
|
+
const freshnessMs = lastUpdated > 0 ? Date.now() - lastUpdated : 0;
|
|
65
|
+
return getProjectContextResult(context, { query, mode, maxTokens: maxTokens ?? 8000 }, freshnessMs);
|
|
59
66
|
}
|
|
60
67
|
async findSymbol(rootPath, name) {
|
|
61
68
|
const { indexer } = await createEngines(rootPath);
|
|
62
69
|
return indexer.findSymbol(name);
|
|
63
70
|
}
|
|
64
71
|
async recordFeedback(rootPath, query, feedback, extra) {
|
|
65
|
-
const
|
|
66
|
-
|
|
72
|
+
const timestamp = Date.now();
|
|
73
|
+
const entry = { query, feedback, timestamp, projectRoot: rootPath };
|
|
74
|
+
this.getDatabase().insertFeedback({
|
|
75
|
+
id: `feedback:${timestamp}:${Math.random().toString(36).slice(2, 9)}`,
|
|
76
|
+
projectRoot: rootPath,
|
|
77
|
+
query,
|
|
78
|
+
rating: feedback,
|
|
79
|
+
taskType: extra?.taskType,
|
|
80
|
+
contextMode: extra?.contextMode,
|
|
81
|
+
runId: extra?.runId,
|
|
82
|
+
tokenCount: extra?.tokenCount,
|
|
83
|
+
createdAt: timestamp,
|
|
84
|
+
});
|
|
67
85
|
// Record as telemetry event so it enters the telemetry/ROI pipeline
|
|
68
86
|
if (this.dataService) {
|
|
69
87
|
await this.dataService.recordTelemetryEvent({
|
|
@@ -87,18 +105,17 @@ let ContextService = class ContextService {
|
|
|
87
105
|
return entry;
|
|
88
106
|
}
|
|
89
107
|
async getFeedbackSummaries() {
|
|
90
|
-
|
|
91
|
-
const hits = this.feedbackEntries.filter(e => e.feedback === "hit").length;
|
|
92
|
-
const partials = this.feedbackEntries.filter(e => e.feedback === "partial").length;
|
|
93
|
-
const misses = this.feedbackEntries.filter(e => e.feedback === "miss").length;
|
|
94
|
-
return { total, hits, partials, misses, hitRate: total > 0 ? hits / total : 0 };
|
|
108
|
+
return this.getDatabase().getFeedbackSummary();
|
|
95
109
|
}
|
|
96
110
|
};
|
|
97
111
|
ContextService = __decorate([
|
|
98
112
|
Injectable(),
|
|
99
113
|
__param(0, Optional()),
|
|
100
114
|
__param(0, Inject(DataService)),
|
|
101
|
-
|
|
115
|
+
__param(1, Optional()),
|
|
116
|
+
__param(1, Inject('DATABASE')),
|
|
117
|
+
__metadata("design:paramtypes", [DataService,
|
|
118
|
+
DevFlowDatabase])
|
|
102
119
|
], ContextService);
|
|
103
120
|
export { ContextService };
|
|
104
121
|
//# sourceMappingURL=context.service.js.map
|