@mcoda/core 0.1.9 → 0.1.12
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 +2 -2
- package/dist/api/AgentsApi.d.ts +1 -0
- package/dist/api/AgentsApi.d.ts.map +1 -1
- package/dist/api/AgentsApi.js +136 -11
- package/dist/api/QaTasksApi.d.ts.map +1 -1
- package/dist/api/QaTasksApi.js +4 -0
- package/dist/prompts/PdrPrompts.d.ts.map +1 -1
- package/dist/prompts/PdrPrompts.js +6 -0
- package/dist/prompts/SdsPrompts.d.ts.map +1 -1
- package/dist/prompts/SdsPrompts.js +7 -0
- package/dist/services/agents/AgentRatingService.d.ts +19 -0
- package/dist/services/agents/AgentRatingService.d.ts.map +1 -1
- package/dist/services/agents/AgentRatingService.js +66 -2
- package/dist/services/agents/GatewayAgentService.d.ts +8 -0
- package/dist/services/agents/GatewayAgentService.d.ts.map +1 -1
- package/dist/services/agents/GatewayAgentService.js +462 -65
- package/dist/services/agents/GatewayHandoff.d.ts +5 -1
- package/dist/services/agents/GatewayHandoff.d.ts.map +1 -1
- package/dist/services/agents/GatewayHandoff.js +65 -32
- package/dist/services/agents/RoutingService.d.ts +1 -0
- package/dist/services/agents/RoutingService.d.ts.map +1 -1
- package/dist/services/agents/RoutingService.js +4 -4
- package/dist/services/backlog/BacklogService.d.ts +23 -0
- package/dist/services/backlog/BacklogService.d.ts.map +1 -1
- package/dist/services/backlog/BacklogService.js +62 -7
- package/dist/services/backlog/TaskOrderingHeuristics.d.ts +12 -0
- package/dist/services/backlog/TaskOrderingHeuristics.d.ts.map +1 -0
- package/dist/services/backlog/TaskOrderingHeuristics.js +56 -0
- package/dist/services/backlog/TaskOrderingService.d.ts +16 -4
- package/dist/services/backlog/TaskOrderingService.d.ts.map +1 -1
- package/dist/services/backlog/TaskOrderingService.js +529 -73
- package/dist/services/docs/DocInventory.d.ts +11 -0
- package/dist/services/docs/DocInventory.d.ts.map +1 -0
- package/dist/services/docs/DocInventory.js +230 -0
- package/dist/services/docs/DocgenRunContext.d.ts +59 -0
- package/dist/services/docs/DocgenRunContext.d.ts.map +1 -0
- package/dist/services/docs/DocgenRunContext.js +4 -0
- package/dist/services/docs/DocsService.d.ts +59 -2
- package/dist/services/docs/DocsService.d.ts.map +1 -1
- package/dist/services/docs/DocsService.js +1701 -48
- package/dist/services/docs/alignment/DocAlignmentGraph.d.ts +23 -0
- package/dist/services/docs/alignment/DocAlignmentGraph.d.ts.map +1 -0
- package/dist/services/docs/alignment/DocAlignmentGraph.js +78 -0
- package/dist/services/docs/alignment/DocAlignmentPatcher.d.ts +19 -0
- package/dist/services/docs/alignment/DocAlignmentPatcher.d.ts.map +1 -0
- package/dist/services/docs/alignment/DocAlignmentPatcher.js +222 -0
- package/dist/services/docs/patch/DocPatchEngine.d.ts +57 -0
- package/dist/services/docs/patch/DocPatchEngine.d.ts.map +1 -0
- package/dist/services/docs/patch/DocPatchEngine.js +331 -0
- package/dist/services/docs/review/Glossary.d.ts +16 -0
- package/dist/services/docs/review/Glossary.d.ts.map +1 -0
- package/dist/services/docs/review/Glossary.js +47 -0
- package/dist/services/docs/review/ReviewReportRenderer.d.ts +3 -0
- package/dist/services/docs/review/ReviewReportRenderer.d.ts.map +1 -0
- package/dist/services/docs/review/ReviewReportRenderer.js +133 -0
- package/dist/services/docs/review/ReviewReportSchema.d.ts +39 -0
- package/dist/services/docs/review/ReviewReportSchema.d.ts.map +1 -0
- package/dist/services/docs/review/ReviewReportSchema.js +47 -0
- package/dist/services/docs/review/ReviewTypes.d.ts +76 -0
- package/dist/services/docs/review/ReviewTypes.d.ts.map +1 -0
- package/dist/services/docs/review/ReviewTypes.js +94 -0
- package/dist/services/docs/review/gates/AdminOpenApiSpecGate.d.ts +7 -0
- package/dist/services/docs/review/gates/AdminOpenApiSpecGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/AdminOpenApiSpecGate.js +93 -0
- package/dist/services/docs/review/gates/ApiPathConsistencyGate.d.ts +7 -0
- package/dist/services/docs/review/gates/ApiPathConsistencyGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/ApiPathConsistencyGate.js +308 -0
- package/dist/services/docs/review/gates/BuildReadyCompletenessGate.d.ts +8 -0
- package/dist/services/docs/review/gates/BuildReadyCompletenessGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/BuildReadyCompletenessGate.js +278 -0
- package/dist/services/docs/review/gates/DeploymentBlueprintGate.d.ts +8 -0
- package/dist/services/docs/review/gates/DeploymentBlueprintGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/DeploymentBlueprintGate.js +487 -0
- package/dist/services/docs/review/gates/NoMaybesGate.d.ts +8 -0
- package/dist/services/docs/review/gates/NoMaybesGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/NoMaybesGate.js +145 -0
- package/dist/services/docs/review/gates/OpenApiCoverageGate.d.ts +7 -0
- package/dist/services/docs/review/gates/OpenApiCoverageGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/OpenApiCoverageGate.js +266 -0
- package/dist/services/docs/review/gates/OpenApiSchemaSanityGate.d.ts +7 -0
- package/dist/services/docs/review/gates/OpenApiSchemaSanityGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/OpenApiSchemaSanityGate.js +59 -0
- package/dist/services/docs/review/gates/OpenQuestionsGate.d.ts +7 -0
- package/dist/services/docs/review/gates/OpenQuestionsGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/OpenQuestionsGate.js +200 -0
- package/dist/services/docs/review/gates/PdrInterfacesGate.d.ts +7 -0
- package/dist/services/docs/review/gates/PdrInterfacesGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/PdrInterfacesGate.js +159 -0
- package/dist/services/docs/review/gates/PdrOpenQuestionsGate.d.ts +8 -0
- package/dist/services/docs/review/gates/PdrOpenQuestionsGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/PdrOpenQuestionsGate.js +129 -0
- package/dist/services/docs/review/gates/PdrOwnershipGate.d.ts +7 -0
- package/dist/services/docs/review/gates/PdrOwnershipGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/PdrOwnershipGate.js +169 -0
- package/dist/services/docs/review/gates/PlaceholderArtifactGate.d.ts +10 -0
- package/dist/services/docs/review/gates/PlaceholderArtifactGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/PlaceholderArtifactGate.js +261 -0
- package/dist/services/docs/review/gates/RfpConsentGate.d.ts +6 -0
- package/dist/services/docs/review/gates/RfpConsentGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/RfpConsentGate.js +127 -0
- package/dist/services/docs/review/gates/RfpDefinitionGate.d.ts +7 -0
- package/dist/services/docs/review/gates/RfpDefinitionGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/RfpDefinitionGate.js +173 -0
- package/dist/services/docs/review/gates/SdsAdaptersGate.d.ts +7 -0
- package/dist/services/docs/review/gates/SdsAdaptersGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/SdsAdaptersGate.js +196 -0
- package/dist/services/docs/review/gates/SdsDecisionsGate.d.ts +7 -0
- package/dist/services/docs/review/gates/SdsDecisionsGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/SdsDecisionsGate.js +89 -0
- package/dist/services/docs/review/gates/SdsOpsGate.d.ts +7 -0
- package/dist/services/docs/review/gates/SdsOpsGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/SdsOpsGate.js +162 -0
- package/dist/services/docs/review/gates/SdsPolicyTelemetryGate.d.ts +7 -0
- package/dist/services/docs/review/gates/SdsPolicyTelemetryGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/SdsPolicyTelemetryGate.js +166 -0
- package/dist/services/docs/review/gates/SqlRequiredTablesGate.d.ts +7 -0
- package/dist/services/docs/review/gates/SqlRequiredTablesGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/SqlRequiredTablesGate.js +273 -0
- package/dist/services/docs/review/gates/SqlSyntaxGate.d.ts +7 -0
- package/dist/services/docs/review/gates/SqlSyntaxGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/SqlSyntaxGate.js +203 -0
- package/dist/services/docs/review/gates/TerminologyNormalizationGate.d.ts +9 -0
- package/dist/services/docs/review/gates/TerminologyNormalizationGate.d.ts.map +1 -0
- package/dist/services/docs/review/gates/TerminologyNormalizationGate.js +217 -0
- package/dist/services/docs/review/glossary.json +47 -0
- package/dist/services/estimate/EstimateService.d.ts +2 -0
- package/dist/services/estimate/EstimateService.d.ts.map +1 -1
- package/dist/services/estimate/EstimateService.js +66 -18
- package/dist/services/estimate/VelocityService.d.ts +4 -0
- package/dist/services/estimate/VelocityService.d.ts.map +1 -1
- package/dist/services/estimate/VelocityService.js +179 -36
- package/dist/services/estimate/types.d.ts +1 -0
- package/dist/services/estimate/types.d.ts.map +1 -1
- package/dist/services/execution/GatewayTrioService.d.ts +71 -4
- package/dist/services/execution/GatewayTrioService.d.ts.map +1 -1
- package/dist/services/execution/GatewayTrioService.js +1695 -328
- package/dist/services/execution/QaApiRunner.d.ts +30 -0
- package/dist/services/execution/QaApiRunner.d.ts.map +1 -0
- package/dist/services/execution/QaApiRunner.js +881 -0
- package/dist/services/execution/QaFollowupService.d.ts +1 -0
- package/dist/services/execution/QaFollowupService.d.ts.map +1 -1
- package/dist/services/execution/QaFollowupService.js +8 -2
- package/dist/services/execution/QaPlanValidator.d.ts +10 -0
- package/dist/services/execution/QaPlanValidator.d.ts.map +1 -0
- package/dist/services/execution/QaPlanValidator.js +128 -0
- package/dist/services/execution/QaProfileService.d.ts +21 -1
- package/dist/services/execution/QaProfileService.d.ts.map +1 -1
- package/dist/services/execution/QaProfileService.js +214 -29
- package/dist/services/execution/QaTasksService.d.ts +41 -1
- package/dist/services/execution/QaTasksService.d.ts.map +1 -1
- package/dist/services/execution/QaTasksService.js +2851 -500
- package/dist/services/execution/QaTestCommandBuilder.d.ts +51 -0
- package/dist/services/execution/QaTestCommandBuilder.d.ts.map +1 -0
- package/dist/services/execution/QaTestCommandBuilder.js +495 -0
- package/dist/services/execution/TaskSelectionService.d.ts +4 -2
- package/dist/services/execution/TaskSelectionService.d.ts.map +1 -1
- package/dist/services/execution/TaskSelectionService.js +144 -28
- package/dist/services/execution/TaskStateService.d.ts +19 -6
- package/dist/services/execution/TaskStateService.d.ts.map +1 -1
- package/dist/services/execution/TaskStateService.js +128 -13
- package/dist/services/execution/WorkOnTasksService.d.ts +19 -2
- package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -1
- package/dist/services/execution/WorkOnTasksService.js +3913 -1225
- package/dist/services/jobs/JobInsightsService.d.ts +4 -0
- package/dist/services/jobs/JobInsightsService.d.ts.map +1 -1
- package/dist/services/jobs/JobInsightsService.js +51 -5
- package/dist/services/jobs/JobResumeService.d.ts.map +1 -1
- package/dist/services/jobs/JobResumeService.js +23 -10
- package/dist/services/jobs/JobService.d.ts +56 -4
- package/dist/services/jobs/JobService.d.ts.map +1 -1
- package/dist/services/jobs/JobService.js +232 -1
- package/dist/services/openapi/OpenApiService.d.ts +41 -0
- package/dist/services/openapi/OpenApiService.d.ts.map +1 -1
- package/dist/services/openapi/OpenApiService.js +889 -98
- package/dist/services/planning/CreateTasksService.d.ts +15 -0
- package/dist/services/planning/CreateTasksService.d.ts.map +1 -1
- package/dist/services/planning/CreateTasksService.js +311 -6
- package/dist/services/planning/RefineTasksService.d.ts +4 -0
- package/dist/services/planning/RefineTasksService.d.ts.map +1 -1
- package/dist/services/planning/RefineTasksService.js +225 -24
- package/dist/services/review/CodeReviewService.d.ts +4 -0
- package/dist/services/review/CodeReviewService.d.ts.map +1 -1
- package/dist/services/review/CodeReviewService.js +778 -232
- package/dist/services/review/ReviewNormalizer.d.ts +9 -0
- package/dist/services/review/ReviewNormalizer.d.ts.map +1 -0
- package/dist/services/review/ReviewNormalizer.js +147 -0
- package/dist/services/shared/AuthErrors.d.ts +3 -0
- package/dist/services/shared/AuthErrors.d.ts.map +1 -0
- package/dist/services/shared/AuthErrors.js +17 -0
- package/dist/services/shared/DocdexGuidance.d.ts +7 -0
- package/dist/services/shared/DocdexGuidance.d.ts.map +1 -0
- package/dist/services/shared/DocdexGuidance.js +12 -0
- package/dist/services/shared/ProjectGuidance.d.ts +12 -1
- package/dist/services/shared/ProjectGuidance.d.ts.map +1 -1
- package/dist/services/shared/ProjectGuidance.js +64 -7
- package/dist/services/system/ToolDenylist.d.ts +13 -0
- package/dist/services/system/ToolDenylist.d.ts.map +1 -0
- package/dist/services/system/ToolDenylist.js +85 -0
- package/dist/services/telemetry/TelemetryService.d.ts.map +1 -1
- package/dist/services/telemetry/TelemetryService.js +39 -7
- package/dist/workspace/WorkspaceManager.d.ts +22 -0
- package/dist/workspace/WorkspaceManager.d.ts.map +1 -1
- package/dist/workspace/WorkspaceManager.js +203 -32
- package/package.json +6 -5
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Core services that power the mcoda CLI (docs, planning, jobs, telemetry, openapi
|
|
|
7
7
|
- Install: `npm i @mcoda/core`
|
|
8
8
|
|
|
9
9
|
## What it provides
|
|
10
|
-
- WorkspaceResolver for discovering/initializing
|
|
10
|
+
- WorkspaceResolver for discovering/initializing workspace data under `~/.mcoda/workspaces/<fingerprint>`.
|
|
11
11
|
- Service layer for docs, planning, execution, review, telemetry, and system updates.
|
|
12
12
|
- API wrappers (AgentsApi, TasksApi, QaTasksApi) used by the CLI.
|
|
13
13
|
|
|
@@ -21,7 +21,7 @@ const jobs = new JobService(workspace);
|
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Notes
|
|
24
|
-
- Most services expect a resolved workspace and read/write
|
|
24
|
+
- Most services expect a resolved workspace and read/write state under `~/.mcoda/workspaces/<fingerprint>`.
|
|
25
25
|
- Primarily used by the mcoda CLI; APIs may evolve.
|
|
26
26
|
|
|
27
27
|
## License
|
package/dist/api/AgentsApi.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ export declare class AgentsApi {
|
|
|
33
33
|
prompt: string;
|
|
34
34
|
}>;
|
|
35
35
|
private extractTokenUsage;
|
|
36
|
+
private extractTelemetryInfo;
|
|
36
37
|
runAgent(idOrSlug: string, prompts: string[], metadata?: Record<string, unknown>): Promise<{
|
|
37
38
|
agent: Pick<Agent, "id" | "slug">;
|
|
38
39
|
prompts: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentsApi.d.ts","sourceRoot":"","sources":["../../src/api/AgentsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAoB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC1B;AAED,qBAAa,SAAS;IACR,OAAO,CAAC,IAAI;IAAoB,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,cAAc;gBAAlF,IAAI,EAAE,gBAAgB,EAAU,YAAY,EAAE,YAAY,EAAU,cAAc,EAAE,cAAc;WAEzG,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAOnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAOd,YAAY;YAIZ,cAAc;IA+BtB,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAoBtC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAK/E,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAW5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAYlD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAY9E,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS1E,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAK3E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentsApi.d.ts","sourceRoot":"","sources":["../../src/api/AgentsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAoB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC1B;AAED,qBAAa,SAAS;IACR,OAAO,CAAC,IAAI;IAAoB,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,cAAc;gBAAlF,IAAI,EAAE,gBAAgB,EAAU,YAAY,EAAE,YAAY,EAAU,cAAc,EAAE,cAAc;WAEzG,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAOnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAOd,YAAY;YAIZ,cAAc;IA+BtB,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAoBtC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAK/E,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAW5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAYlD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAY9E,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS1E,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAK3E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBjD,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,MAAM,SAA4E,GACjF,OAAO,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAyD/E,OAAO,CAAC,iBAAiB;IA0GzB,OAAO,CAAC,oBAAoB;IAetB,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IAoE7F,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAe,EAC1B,WAAW,SAAY,GACtB,OAAO,CAAC,IAAI,CAAC;CAMjB"}
|
package/dist/api/AgentsApi.js
CHANGED
|
@@ -140,11 +140,13 @@ export class AgentsApi {
|
|
|
140
140
|
agentId: agent.id,
|
|
141
141
|
commandRunId: run.id,
|
|
142
142
|
modelName: agent.defaultModel,
|
|
143
|
+
commandName: "agent.test",
|
|
144
|
+
action: "health_check",
|
|
143
145
|
tokensPrompt: 0,
|
|
144
146
|
tokensCompletion: 0,
|
|
145
147
|
tokensTotal: 0,
|
|
146
148
|
timestamp: new Date().toISOString(),
|
|
147
|
-
metadata: { reason: "agent.test", healthStatus: health.status },
|
|
149
|
+
metadata: { reason: "agent.test", healthStatus: health.status, phase: "health_check", attempt: 1 },
|
|
148
150
|
});
|
|
149
151
|
return health;
|
|
150
152
|
});
|
|
@@ -154,19 +156,49 @@ export class AgentsApi {
|
|
|
154
156
|
const trimmedPrompt = prompt.trim() || "Hello from mcoda test-agent. Please reply with a short acknowledgement.";
|
|
155
157
|
return this.withCommandRun("agent.test", { id: agent.id, slug: agent.slug, prompt: trimmedPrompt }, async (run) => {
|
|
156
158
|
const health = await this.agentService.healthCheck(agent.id);
|
|
159
|
+
const startedAtMs = Date.now();
|
|
160
|
+
const startedAt = new Date(startedAtMs).toISOString();
|
|
157
161
|
const response = await this.agentService.invoke(agent.id, {
|
|
158
162
|
input: trimmedPrompt,
|
|
159
163
|
metadata: { command: "test-agent" },
|
|
160
164
|
});
|
|
165
|
+
const finishedAtMs = Date.now();
|
|
166
|
+
const finishedAt = new Date(finishedAtMs).toISOString();
|
|
167
|
+
const durationMs = finishedAtMs - startedAtMs;
|
|
168
|
+
const durationSeconds = durationMs / 1000;
|
|
169
|
+
const usage = this.extractTokenUsage(response.metadata);
|
|
170
|
+
const telemetry = this.extractTelemetryInfo(response.metadata);
|
|
171
|
+
const resolvedDurationMs = usage.durationMs ?? durationMs;
|
|
172
|
+
const resolvedDurationSeconds = resolvedDurationMs !== undefined ? resolvedDurationMs / 1000 : durationSeconds;
|
|
173
|
+
const resolvedStartedAt = usage.startedAt ?? startedAt;
|
|
174
|
+
const resolvedFinishedAt = usage.finishedAt ?? finishedAt;
|
|
161
175
|
await this.repo.recordTokenUsage({
|
|
162
176
|
agentId: agent.id,
|
|
163
177
|
commandRunId: run.id,
|
|
164
178
|
modelName: agent.defaultModel,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
179
|
+
commandName: "agent.test",
|
|
180
|
+
action: "probe",
|
|
181
|
+
invocationKind: telemetry.invocationKind,
|
|
182
|
+
provider: telemetry.provider,
|
|
183
|
+
currency: telemetry.currency,
|
|
184
|
+
tokensPrompt: usage.tokensPrompt ?? 0,
|
|
185
|
+
tokensCompletion: usage.tokensCompletion ?? 0,
|
|
186
|
+
tokensTotal: usage.tokensTotal ?? 0,
|
|
187
|
+
tokensCached: usage.tokensCached,
|
|
188
|
+
tokensCacheRead: usage.tokensCacheRead,
|
|
189
|
+
tokensCacheWrite: usage.tokensCacheWrite,
|
|
190
|
+
durationSeconds: resolvedDurationSeconds,
|
|
191
|
+
durationMs: resolvedDurationMs,
|
|
192
|
+
startedAt: resolvedStartedAt,
|
|
193
|
+
finishedAt: resolvedFinishedAt,
|
|
194
|
+
timestamp: resolvedFinishedAt ?? new Date().toISOString(),
|
|
195
|
+
metadata: {
|
|
196
|
+
reason: "agent.test",
|
|
197
|
+
healthStatus: health.status,
|
|
198
|
+
adapter: response.adapter,
|
|
199
|
+
phase: "probe",
|
|
200
|
+
attempt: 1,
|
|
201
|
+
},
|
|
170
202
|
});
|
|
171
203
|
return { health, response, prompt: trimmedPrompt };
|
|
172
204
|
});
|
|
@@ -175,7 +207,18 @@ export class AgentsApi {
|
|
|
175
207
|
if (!metadata || typeof metadata !== "object")
|
|
176
208
|
return {};
|
|
177
209
|
const usage = typeof metadata.usage === "object" && metadata.usage ? metadata.usage : undefined;
|
|
210
|
+
const promptDetails = typeof usage?.prompt_tokens_details === "object" && usage?.prompt_tokens_details
|
|
211
|
+
? usage.prompt_tokens_details
|
|
212
|
+
: undefined;
|
|
213
|
+
const cacheDetails = typeof usage?.cache === "object" && usage?.cache ? usage.cache : undefined;
|
|
178
214
|
const toNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
215
|
+
const toTimestamp = (value) => {
|
|
216
|
+
if (typeof value === "string" && value.trim())
|
|
217
|
+
return value;
|
|
218
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
219
|
+
return new Date(value).toISOString();
|
|
220
|
+
return undefined;
|
|
221
|
+
};
|
|
179
222
|
const tokensPrompt = toNumber(metadata.tokensPrompt) ??
|
|
180
223
|
toNumber(metadata.tokens_prompt) ??
|
|
181
224
|
toNumber(usage?.prompt_tokens) ??
|
|
@@ -194,7 +237,67 @@ export class AgentsApi {
|
|
|
194
237
|
if (tokensTotal === undefined && tokensPrompt !== undefined && tokensCompletion !== undefined) {
|
|
195
238
|
tokensTotal = tokensPrompt + tokensCompletion;
|
|
196
239
|
}
|
|
197
|
-
|
|
240
|
+
const tokensCached = toNumber(metadata.tokensCached) ??
|
|
241
|
+
toNumber(metadata.tokens_cached) ??
|
|
242
|
+
toNumber(metadata.cachedTokens) ??
|
|
243
|
+
toNumber(metadata.cached_tokens) ??
|
|
244
|
+
toNumber(usage?.cached_tokens) ??
|
|
245
|
+
toNumber(usage?.cachedTokens) ??
|
|
246
|
+
toNumber(promptDetails?.cached_tokens) ??
|
|
247
|
+
toNumber(promptDetails?.cachedTokens) ??
|
|
248
|
+
toNumber(cacheDetails?.cached_tokens) ??
|
|
249
|
+
toNumber(cacheDetails?.cachedTokens);
|
|
250
|
+
const tokensCacheRead = toNumber(metadata.tokensCacheRead) ??
|
|
251
|
+
toNumber(metadata.tokens_cache_read) ??
|
|
252
|
+
toNumber(metadata.cacheRead) ??
|
|
253
|
+
toNumber(metadata.cache_read) ??
|
|
254
|
+
toNumber(usage?.tokens_cache_read) ??
|
|
255
|
+
toNumber(usage?.cache_read) ??
|
|
256
|
+
toNumber(usage?.cacheRead) ??
|
|
257
|
+
toNumber(promptDetails?.cache_read) ??
|
|
258
|
+
toNumber(promptDetails?.cacheRead) ??
|
|
259
|
+
toNumber(cacheDetails?.cache_read) ??
|
|
260
|
+
toNumber(cacheDetails?.cacheRead);
|
|
261
|
+
const tokensCacheWrite = toNumber(metadata.tokensCacheWrite) ??
|
|
262
|
+
toNumber(metadata.tokens_cache_write) ??
|
|
263
|
+
toNumber(metadata.cacheWrite) ??
|
|
264
|
+
toNumber(metadata.cache_write) ??
|
|
265
|
+
toNumber(usage?.tokens_cache_write) ??
|
|
266
|
+
toNumber(usage?.cache_write) ??
|
|
267
|
+
toNumber(usage?.cacheWrite) ??
|
|
268
|
+
toNumber(promptDetails?.cache_write) ??
|
|
269
|
+
toNumber(promptDetails?.cacheWrite) ??
|
|
270
|
+
toNumber(cacheDetails?.cache_write) ??
|
|
271
|
+
toNumber(cacheDetails?.cacheWrite);
|
|
272
|
+
const durationSeconds = toNumber(metadata.durationSeconds) ??
|
|
273
|
+
toNumber(metadata.duration_seconds);
|
|
274
|
+
const durationMs = toNumber(metadata.durationMs) ??
|
|
275
|
+
toNumber(metadata.duration_ms) ??
|
|
276
|
+
toNumber(metadata.elapsed_ms) ??
|
|
277
|
+
toNumber(metadata.latency_ms) ??
|
|
278
|
+
toNumber(metadata.latencyMs) ??
|
|
279
|
+
toNumber(usage?.duration_ms) ??
|
|
280
|
+
(durationSeconds !== undefined ? durationSeconds * 1000 : undefined);
|
|
281
|
+
const startedAt = toTimestamp(metadata.startedAt) ??
|
|
282
|
+
toTimestamp(metadata.started_at) ??
|
|
283
|
+
toTimestamp(metadata.startTime) ??
|
|
284
|
+
toTimestamp(metadata.start_time);
|
|
285
|
+
const finishedAt = toTimestamp(metadata.finishedAt) ??
|
|
286
|
+
toTimestamp(metadata.finished_at) ??
|
|
287
|
+
toTimestamp(metadata.endTime) ??
|
|
288
|
+
toTimestamp(metadata.end_time) ??
|
|
289
|
+
toTimestamp(metadata.completed_at);
|
|
290
|
+
return { tokensPrompt, tokensCompletion, tokensTotal, tokensCached, tokensCacheRead, tokensCacheWrite, durationMs, startedAt, finishedAt };
|
|
291
|
+
}
|
|
292
|
+
extractTelemetryInfo(metadata) {
|
|
293
|
+
if (!metadata || typeof metadata !== "object")
|
|
294
|
+
return {};
|
|
295
|
+
const toString = (value) => typeof value === "string" && value.trim() ? value : undefined;
|
|
296
|
+
return {
|
|
297
|
+
invocationKind: toString(metadata.invocationKind) ?? toString(metadata.invocation_kind),
|
|
298
|
+
provider: toString(metadata.provider) ?? toString(metadata.vendor),
|
|
299
|
+
currency: toString(metadata.currency),
|
|
300
|
+
};
|
|
198
301
|
}
|
|
199
302
|
async runAgent(idOrSlug, prompts, metadata) {
|
|
200
303
|
const agent = await this.resolveAgent(idOrSlug);
|
|
@@ -206,7 +309,8 @@ export class AgentsApi {
|
|
|
206
309
|
const responses = [];
|
|
207
310
|
for (let index = 0; index < cleaned.length; index += 1) {
|
|
208
311
|
const input = cleaned[index];
|
|
209
|
-
const
|
|
312
|
+
const startedAtMs = Date.now();
|
|
313
|
+
const startedAt = new Date(startedAtMs).toISOString();
|
|
210
314
|
const response = await this.agentService.invoke(agent.id, {
|
|
211
315
|
input,
|
|
212
316
|
metadata: {
|
|
@@ -215,21 +319,42 @@ export class AgentsApi {
|
|
|
215
319
|
...metadata,
|
|
216
320
|
},
|
|
217
321
|
});
|
|
218
|
-
const
|
|
322
|
+
const finishedAtMs = Date.now();
|
|
323
|
+
const finishedAt = new Date(finishedAtMs).toISOString();
|
|
324
|
+
const durationMs = finishedAtMs - startedAtMs;
|
|
325
|
+
const durationSeconds = durationMs / 1000;
|
|
219
326
|
const usage = this.extractTokenUsage(response.metadata);
|
|
327
|
+
const telemetry = this.extractTelemetryInfo(response.metadata);
|
|
328
|
+
const resolvedDurationMs = usage.durationMs ?? durationMs;
|
|
329
|
+
const resolvedDurationSeconds = resolvedDurationMs !== undefined ? resolvedDurationMs / 1000 : durationSeconds;
|
|
330
|
+
const resolvedStartedAt = usage.startedAt ?? startedAt;
|
|
331
|
+
const resolvedFinishedAt = usage.finishedAt ?? finishedAt;
|
|
220
332
|
await this.repo.recordTokenUsage({
|
|
221
333
|
agentId: agent.id,
|
|
222
334
|
commandRunId: run.id,
|
|
223
335
|
modelName: response.model ?? agent.defaultModel,
|
|
336
|
+
commandName: "agent.run",
|
|
337
|
+
action: "invoke",
|
|
338
|
+
invocationKind: telemetry.invocationKind,
|
|
339
|
+
provider: telemetry.provider,
|
|
340
|
+
currency: telemetry.currency,
|
|
224
341
|
tokensPrompt: usage.tokensPrompt,
|
|
225
342
|
tokensCompletion: usage.tokensCompletion,
|
|
226
343
|
tokensTotal: usage.tokensTotal,
|
|
227
|
-
|
|
228
|
-
|
|
344
|
+
tokensCached: usage.tokensCached,
|
|
345
|
+
tokensCacheRead: usage.tokensCacheRead,
|
|
346
|
+
tokensCacheWrite: usage.tokensCacheWrite,
|
|
347
|
+
durationSeconds: resolvedDurationSeconds,
|
|
348
|
+
durationMs: resolvedDurationMs,
|
|
349
|
+
startedAt: resolvedStartedAt,
|
|
350
|
+
finishedAt: resolvedFinishedAt,
|
|
351
|
+
timestamp: resolvedFinishedAt ?? new Date().toISOString(),
|
|
229
352
|
metadata: {
|
|
230
353
|
reason: "agent.run",
|
|
231
354
|
adapter: response.adapter,
|
|
232
355
|
promptIndex: index,
|
|
356
|
+
phase: "agent_run",
|
|
357
|
+
attempt: 1,
|
|
233
358
|
},
|
|
234
359
|
});
|
|
235
360
|
responses.push(response);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QaTasksApi.d.ts","sourceRoot":"","sources":["../../src/api/QaTasksApi.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,cAAc,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1G,qBAAa,UAAU;WACR,KAAK,CAChB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACnF,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"QaTasksApi.d.ts","sourceRoot":"","sources":["../../src/api/QaTasksApi.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,cAAc,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1G,qBAAa,UAAU;WACR,KAAK,CAChB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACnF,OAAO,CAAC,eAAe,CAAC;CAqC5B"}
|
package/dist/api/QaTasksApi.js
CHANGED
|
@@ -5,6 +5,7 @@ export class QaTasksApi {
|
|
|
5
5
|
const workspace = await WorkspaceResolver.resolveWorkspace({
|
|
6
6
|
cwd: process.cwd(),
|
|
7
7
|
explicitWorkspace: request.workspaceRoot,
|
|
8
|
+
noRepoWrites: true,
|
|
8
9
|
});
|
|
9
10
|
const service = await QaTasksService.create(workspace, { noTelemetry: request.noTelemetry ?? false });
|
|
10
11
|
try {
|
|
@@ -15,6 +16,8 @@ export class QaTasksApi {
|
|
|
15
16
|
storyKey: request.storyKey,
|
|
16
17
|
taskKeys: request.taskKeys,
|
|
17
18
|
statusFilter: request.statusFilter,
|
|
19
|
+
ignoreStatusFilter: request.ignoreStatusFilter,
|
|
20
|
+
limit: request.limit,
|
|
18
21
|
mode: request.mode,
|
|
19
22
|
resumeJobId: request.resumeJobId,
|
|
20
23
|
profileName: request.profileName,
|
|
@@ -29,6 +32,7 @@ export class QaTasksApi {
|
|
|
29
32
|
notes: request.notes,
|
|
30
33
|
evidenceUrl: request.evidenceUrl,
|
|
31
34
|
allowDirty: request.allowDirty,
|
|
35
|
+
cleanIgnorePaths: request.cleanIgnorePaths,
|
|
32
36
|
});
|
|
33
37
|
}
|
|
34
38
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdrPrompts.d.ts","sourceRoot":"","sources":["../../src/prompts/PdrPrompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PdrPrompts.d.ts","sourceRoot":"","sources":["../../src/prompts/PdrPrompts.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,QAO3B,CAAC;AAET,eAAO,MAAM,4BAA4B,QAEjC,CAAC;AAET,eAAO,MAAM,0BAA0B,QAgB/B,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { GLOSSARY_PROMPT_SNIPPET } from "../services/docs/review/Glossary.js";
|
|
1
2
|
export const DEFAULT_PDR_JOB_PROMPT = `
|
|
2
3
|
You generate Product Design Reviews (PDR) grounded strictly in provided RFPs and related docs.
|
|
3
4
|
Summarize intent, constraints, interfaces, risks, and open questions concisely with clear headings.
|
|
4
5
|
Avoid inventing APIs or requirements; highlight uncertainties and assumptions for follow-up.
|
|
5
6
|
Explicitly specify the technology stack. If none is stated, default to TypeScript, React, MySQL, Redis, and Bash scripting where needed, unless the domain clearly demands another stack (e.g., Python for ML).
|
|
7
|
+
|
|
8
|
+
${GLOSSARY_PROMPT_SNIPPET}
|
|
6
9
|
`.trim();
|
|
7
10
|
export const DEFAULT_PDR_CHARACTER_PROMPT = `
|
|
8
11
|
Be precise, risk-aware, and concise. Prefer bullet points. Cite assumptions and avoid speculation. Always state the technology stack with rationale.
|
|
@@ -17,7 +20,10 @@ Produce Markdown with the following sections at minimum:
|
|
|
17
20
|
- Interfaces / APIs (do not invent endpoints; if missing, list as open questions)
|
|
18
21
|
- Non-Functional Requirements
|
|
19
22
|
- Risks & Mitigations
|
|
23
|
+
- Resolved Decisions (include when open questions are resolved)
|
|
20
24
|
- Open Questions
|
|
21
25
|
|
|
22
26
|
Call out gaps and missing specifications explicitly. Keep outputs grounded in the given context.
|
|
27
|
+
|
|
28
|
+
${GLOSSARY_PROMPT_SNIPPET}
|
|
23
29
|
`.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SdsPrompts.d.ts","sourceRoot":"","sources":["../../src/prompts/SdsPrompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SdsPrompts.d.ts","sourceRoot":"","sources":["../../src/prompts/SdsPrompts.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,QAK3B,CAAC;AAET,eAAO,MAAM,4BAA4B,QAEjC,CAAC;AAET,eAAO,MAAM,0BAA0B,QAuB/B,CAAC;AAET,eAAO,MAAM,oBAAoB,QAkBzB,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { GLOSSARY_PROMPT_SNIPPET } from "../services/docs/review/Glossary.js";
|
|
1
2
|
export const DEFAULT_SDS_JOB_PROMPT = `
|
|
2
3
|
You generate Software Design Specifications (SDS) that stay aligned to the provided PDR, RFP, and OpenAPI context.
|
|
3
4
|
Highlight architecture, data, interfaces, non-functional requirements, risks, and open questions with traceability back to sources.
|
|
5
|
+
|
|
6
|
+
${GLOSSARY_PROMPT_SNIPPET}
|
|
4
7
|
`.trim();
|
|
5
8
|
export const DEFAULT_SDS_CHARACTER_PROMPT = `
|
|
6
9
|
Be architectural, explicit, and risk-aware. Avoid speculation, cite assumptions, and flag gaps that need clarification.
|
|
@@ -21,10 +24,13 @@ Mandatory sections (include even if you must mark TODOs):
|
|
|
21
24
|
- Failure Modes & Resilience
|
|
22
25
|
- Risks & Mitigations
|
|
23
26
|
- Assumptions
|
|
27
|
+
- Resolved Decisions (include when open questions are resolved)
|
|
24
28
|
- Open Questions
|
|
25
29
|
- Acceptance Criteria
|
|
26
30
|
|
|
27
31
|
If context is missing, call it out explicitly and list the questions needed to complete the SDS.
|
|
32
|
+
|
|
33
|
+
${GLOSSARY_PROMPT_SNIPPET}
|
|
28
34
|
`.trim();
|
|
29
35
|
export const DEFAULT_SDS_TEMPLATE = `
|
|
30
36
|
# Software Design Specification
|
|
@@ -41,6 +47,7 @@ export const DEFAULT_SDS_TEMPLATE = `
|
|
|
41
47
|
## Failure Modes & Resilience
|
|
42
48
|
## Risks & Mitigations
|
|
43
49
|
## Assumptions
|
|
50
|
+
## Resolved Decisions
|
|
44
51
|
## Open Questions
|
|
45
52
|
## Acceptance Criteria
|
|
46
53
|
`.trim();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AgentService } from "@mcoda/agents";
|
|
2
2
|
import { GlobalRepository, WorkspaceRepository } from "@mcoda/db";
|
|
3
|
+
import { Agent, AgentHealth } from "@mcoda/shared";
|
|
3
4
|
import { RoutingService } from "./RoutingService.js";
|
|
4
5
|
import { WorkspaceResolution } from "../../workspace/WorkspaceManager.js";
|
|
5
6
|
export type AgentRatingRequest = {
|
|
@@ -15,6 +16,24 @@ export type AgentRatingRequest = {
|
|
|
15
16
|
reviewerAgentName?: string;
|
|
16
17
|
ratingWindow?: number;
|
|
17
18
|
};
|
|
19
|
+
export type AgentCapabilityCandidate = {
|
|
20
|
+
agent: Agent;
|
|
21
|
+
capabilities: string[];
|
|
22
|
+
healthStatus?: AgentHealth["status"] | "unknown";
|
|
23
|
+
};
|
|
24
|
+
export type AgentCapabilitySelection = {
|
|
25
|
+
agent: Agent;
|
|
26
|
+
capabilities: string[];
|
|
27
|
+
missingRequired: string[];
|
|
28
|
+
missingPreferred: string[];
|
|
29
|
+
meetsRequired: boolean;
|
|
30
|
+
reason: string;
|
|
31
|
+
};
|
|
32
|
+
export declare const selectBestAgentForCapabilities: (input: {
|
|
33
|
+
candidates: AgentCapabilityCandidate[];
|
|
34
|
+
required: string[];
|
|
35
|
+
preferred?: string[];
|
|
36
|
+
}) => AgentCapabilitySelection | undefined;
|
|
18
37
|
export declare class AgentRatingService {
|
|
19
38
|
private workspace;
|
|
20
39
|
private deps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentRatingService.d.ts","sourceRoot":"","sources":["../../../src/services/agents/AgentRatingService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentRatingService.d.ts","sourceRoot":"","sources":["../../../src/services/agents/AgentRatingService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AA0C1E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAeF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAQF,eAAO,MAAM,8BAA8B,GAAI,OAAO;IACpD,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,KAAG,wBAAwB,GAAG,SAwD9B,CAAC;AAEF,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,IAAI;gBADJ,SAAS,EAAE,mBAAmB,EAC9B,IAAI,EAAE;QACZ,aAAa,EAAE,mBAAmB,CAAC;QACnC,UAAU,EAAE,gBAAgB,CAAC;QAC7B,YAAY,EAAE,YAAY,CAAC;QAC3B,cAAc,EAAE,cAAc,CAAC;KAChC;WAGU,MAAM,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAa1E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,CAAC,gBAAgB;YAIV,gBAAgB;YAahB,eAAe;YAWf,SAAS;IAoBvB,OAAO,CAAC,eAAe;YAgBT,mBAAmB;YA0BnB,kBAAkB;YA2BlB,WAAW;IAYzB,OAAO,CAAC,cAAc;IAShB,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YA4GxC,mBAAmB;CAOlC"}
|
|
@@ -34,6 +34,70 @@ const extractJson = (raw) => {
|
|
|
34
34
|
return undefined;
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
+
const uniqueList = (values) => Array.from(new Set(values.map((value) => (value ?? "").trim()).filter(Boolean)));
|
|
38
|
+
const countMatches = (caps, required) => required.reduce((total, cap) => (caps.includes(cap) ? total + 1 : total), 0);
|
|
39
|
+
export const selectBestAgentForCapabilities = (input) => {
|
|
40
|
+
const required = uniqueList(input.required ?? []);
|
|
41
|
+
const preferred = uniqueList(input.preferred ?? []);
|
|
42
|
+
const scored = input.candidates
|
|
43
|
+
.filter((candidate) => candidate.agent)
|
|
44
|
+
.filter((candidate) => candidate.healthStatus !== "unreachable")
|
|
45
|
+
.map((candidate) => {
|
|
46
|
+
const caps = uniqueList(candidate.capabilities ?? []);
|
|
47
|
+
const requiredMatches = countMatches(caps, required);
|
|
48
|
+
const preferredMatches = countMatches(caps, preferred);
|
|
49
|
+
const hasRequired = required.length === 0 || requiredMatches === required.length;
|
|
50
|
+
const rating = Number(candidate.agent.rating ?? 0);
|
|
51
|
+
const reasoning = Number(candidate.agent.reasoningRating ?? rating);
|
|
52
|
+
const cost = Number.isFinite(candidate.agent.costPerMillion)
|
|
53
|
+
? Number(candidate.agent.costPerMillion)
|
|
54
|
+
: Number.POSITIVE_INFINITY;
|
|
55
|
+
const slug = candidate.agent.slug ?? candidate.agent.id;
|
|
56
|
+
return {
|
|
57
|
+
...candidate,
|
|
58
|
+
caps,
|
|
59
|
+
requiredMatches,
|
|
60
|
+
preferredMatches,
|
|
61
|
+
hasRequired,
|
|
62
|
+
rating,
|
|
63
|
+
reasoning,
|
|
64
|
+
cost,
|
|
65
|
+
slug,
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
if (scored.length === 0)
|
|
69
|
+
return undefined;
|
|
70
|
+
const hasFullRequired = scored.some((candidate) => candidate.hasRequired);
|
|
71
|
+
scored.sort((a, b) => {
|
|
72
|
+
if (a.hasRequired !== b.hasRequired)
|
|
73
|
+
return a.hasRequired ? -1 : 1;
|
|
74
|
+
if (a.requiredMatches !== b.requiredMatches)
|
|
75
|
+
return b.requiredMatches - a.requiredMatches;
|
|
76
|
+
if (a.preferredMatches !== b.preferredMatches)
|
|
77
|
+
return b.preferredMatches - a.preferredMatches;
|
|
78
|
+
if (a.rating !== b.rating)
|
|
79
|
+
return b.rating - a.rating;
|
|
80
|
+
if (a.reasoning !== b.reasoning)
|
|
81
|
+
return b.reasoning - a.reasoning;
|
|
82
|
+
if (a.cost !== b.cost)
|
|
83
|
+
return a.cost - b.cost;
|
|
84
|
+
return a.slug.localeCompare(b.slug);
|
|
85
|
+
});
|
|
86
|
+
const pick = scored[0];
|
|
87
|
+
const missingRequired = required.filter((cap) => !pick.caps.includes(cap));
|
|
88
|
+
const missingPreferred = preferred.filter((cap) => !pick.caps.includes(cap));
|
|
89
|
+
const reason = hasFullRequired
|
|
90
|
+
? `selected highest-ranked agent with ${pick.preferredMatches}/${preferred.length} preferred capabilities`
|
|
91
|
+
: `no agent satisfies all required capabilities; selected highest-ranked match (${pick.requiredMatches}/${required.length} required)`;
|
|
92
|
+
return {
|
|
93
|
+
agent: pick.agent,
|
|
94
|
+
capabilities: pick.caps,
|
|
95
|
+
missingRequired,
|
|
96
|
+
missingPreferred,
|
|
97
|
+
meetsRequired: missingRequired.length === 0,
|
|
98
|
+
reason,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
37
101
|
export class AgentRatingService {
|
|
38
102
|
constructor(workspace, deps) {
|
|
39
103
|
this.workspace = workspace;
|
|
@@ -59,7 +123,7 @@ export class AgentRatingService {
|
|
|
59
123
|
}
|
|
60
124
|
}
|
|
61
125
|
ratingPromptPath() {
|
|
62
|
-
return path.join(this.workspace.
|
|
126
|
+
return path.join(this.workspace.mcodaDir, "prompts", "agent-rating.md");
|
|
63
127
|
}
|
|
64
128
|
async loadRatingPrompt() {
|
|
65
129
|
const promptPath = this.ratingPromptPath();
|
|
@@ -291,7 +355,7 @@ export class AgentRatingService {
|
|
|
291
355
|
async writeRatingArtifact(jobId, payload) {
|
|
292
356
|
if (!jobId)
|
|
293
357
|
return;
|
|
294
|
-
const outDir = path.join(this.workspace.
|
|
358
|
+
const outDir = path.join(this.workspace.mcodaDir, "jobs", jobId);
|
|
295
359
|
await fs.mkdir(outDir, { recursive: true });
|
|
296
360
|
const filePath = path.join(outDir, "rating.json");
|
|
297
361
|
await fs.writeFile(filePath, JSON.stringify(payload, null, 2), "utf8");
|
|
@@ -31,6 +31,7 @@ export interface GatewayAnalysis {
|
|
|
31
31
|
discipline: string;
|
|
32
32
|
filesLikelyTouched: string[];
|
|
33
33
|
filesToCreate: string[];
|
|
34
|
+
dirsToCreate: string[];
|
|
34
35
|
assumptions: string[];
|
|
35
36
|
risks: string[];
|
|
36
37
|
docdexNotes: string[];
|
|
@@ -57,6 +58,7 @@ export interface GatewayAgentResult {
|
|
|
57
58
|
chosenAgent: GatewayAgentDecision;
|
|
58
59
|
warnings: string[];
|
|
59
60
|
}
|
|
61
|
+
type AgentTierHint = "strong" | "specialist";
|
|
60
62
|
export interface GatewayAgentRequest extends TaskSelectionFilters {
|
|
61
63
|
workspace: WorkspaceResolution;
|
|
62
64
|
job: string;
|
|
@@ -68,6 +70,7 @@ export interface GatewayAgentRequest extends TaskSelectionFilters {
|
|
|
68
70
|
rateAgents?: boolean;
|
|
69
71
|
avoidAgents?: string[];
|
|
70
72
|
forceStronger?: boolean;
|
|
73
|
+
forceTier?: AgentTierHint;
|
|
71
74
|
}
|
|
72
75
|
export declare class GatewayAgentService {
|
|
73
76
|
private workspace;
|
|
@@ -77,6 +80,9 @@ export declare class GatewayAgentService {
|
|
|
77
80
|
static create(workspace: WorkspaceResolution): Promise<GatewayAgentService>;
|
|
78
81
|
private readPromptFiles;
|
|
79
82
|
close(): Promise<void>;
|
|
83
|
+
setDocdexAvailability(available: boolean, reason?: string): void;
|
|
84
|
+
saveRepoMemory(text: string): Promise<void>;
|
|
85
|
+
savePreference(category: string, content: string, agentId?: string): Promise<void>;
|
|
80
86
|
private loadGatewayPrompts;
|
|
81
87
|
private resolveGatewayAgent;
|
|
82
88
|
private invokeGatewayAgent;
|
|
@@ -90,6 +96,8 @@ export declare class GatewayAgentService {
|
|
|
90
96
|
private listCandidates;
|
|
91
97
|
private chooseCandidate;
|
|
92
98
|
private selectAgentForJob;
|
|
99
|
+
preflightExecutionAgents(job: string, overrideAgent?: string): Promise<void>;
|
|
93
100
|
run(request: GatewayAgentRequest): Promise<GatewayAgentResult>;
|
|
94
101
|
}
|
|
102
|
+
export {};
|
|
95
103
|
//# sourceMappingURL=GatewayAgentService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GatewayAgentService.d.ts","sourceRoot":"","sources":["../../../src/services/agents/GatewayAgentService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GatewayAgentService.d.ts","sourceRoot":"","sources":["../../../src/services/agents/GatewayAgentService.ts"],"names":[],"mappings":"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"}
|