@mcoda/core 0.1.8 → 0.1.11
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/CHANGELOG.md +3 -0
- package/README.md +2 -2
- package/dist/api/AgentsApi.d.ts +9 -1
- package/dist/api/AgentsApi.d.ts.map +1 -1
- package/dist/api/AgentsApi.js +201 -6
- package/dist/api/QaTasksApi.d.ts.map +1 -1
- package/dist/api/QaTasksApi.js +6 -0
- package/dist/api/TasksApi.d.ts.map +1 -1
- package/dist/api/TasksApi.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/prompts/PdrPrompts.d.ts.map +1 -1
- package/dist/prompts/PdrPrompts.js +9 -1
- package/dist/prompts/SdsPrompts.d.ts.map +1 -1
- package/dist/prompts/SdsPrompts.js +9 -0
- package/dist/services/agents/AgentRatingFormula.d.ts +27 -0
- package/dist/services/agents/AgentRatingFormula.d.ts.map +1 -0
- package/dist/services/agents/AgentRatingFormula.js +45 -0
- package/dist/services/agents/AgentRatingService.d.ts +60 -0
- package/dist/services/agents/AgentRatingService.d.ts.map +1 -0
- package/dist/services/agents/AgentRatingService.js +363 -0
- package/dist/services/agents/GatewayAgentService.d.ts +11 -0
- package/dist/services/agents/GatewayAgentService.d.ts.map +1 -1
- package/dist/services/agents/GatewayAgentService.js +525 -84
- package/dist/services/agents/GatewayHandoff.d.ts +11 -0
- package/dist/services/agents/GatewayHandoff.d.ts.map +1 -0
- package/dist/services/agents/GatewayHandoff.js +141 -0
- 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 +17 -4
- package/dist/services/backlog/TaskOrderingService.d.ts.map +1 -1
- package/dist/services/backlog/TaskOrderingService.js +538 -79
- 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 +70 -3
- package/dist/services/docs/DocsService.d.ts.map +1 -1
- package/dist/services/docs/DocsService.js +1930 -89
- 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 +200 -0
- package/dist/services/execution/GatewayTrioService.d.ts.map +1 -0
- package/dist/services/execution/GatewayTrioService.js +2492 -0
- 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 +2 -0
- package/dist/services/execution/QaFollowupService.d.ts.map +1 -1
- package/dist/services/execution/QaFollowupService.js +9 -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 +27 -1
- package/dist/services/execution/QaProfileService.d.ts.map +1 -1
- package/dist/services/execution/QaProfileService.js +354 -7
- package/dist/services/execution/QaTasksService.d.ts +59 -1
- package/dist/services/execution/QaTasksService.d.ts.map +1 -1
- package/dist/services/execution/QaTasksService.js +3347 -318
- 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 +32 -1
- package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -1
- package/dist/services/execution/WorkOnTasksService.js +4667 -722
- 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 +51 -0
- package/dist/services/openapi/OpenApiService.d.ts.map +1 -1
- package/dist/services/openapi/OpenApiService.js +953 -106
- package/dist/services/planning/CreateTasksService.d.ts +21 -0
- package/dist/services/planning/CreateTasksService.d.ts.map +1 -1
- package/dist/services/planning/CreateTasksService.js +569 -31
- package/dist/services/planning/RefineTasksService.d.ts +9 -0
- package/dist/services/planning/RefineTasksService.d.ts.map +1 -1
- package/dist/services/planning/RefineTasksService.js +409 -59
- package/dist/services/review/CodeReviewService.d.ts +18 -0
- package/dist/services/review/CodeReviewService.d.ts.map +1 -1
- package/dist/services/review/CodeReviewService.js +1309 -167
- 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 +17 -0
- package/dist/services/shared/ProjectGuidance.d.ts.map +1 -0
- package/dist/services/shared/ProjectGuidance.js +78 -0
- 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/tasks/TaskCommentFormatter.d.ts +20 -0
- package/dist/services/tasks/TaskCommentFormatter.d.ts.map +1 -0
- package/dist/services/tasks/TaskCommentFormatter.js +54 -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 +26 -0
- package/dist/workspace/WorkspaceManager.d.ts.map +1 -1
- package/dist/workspace/WorkspaceManager.js +206 -32
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Agent, AgentAuthMetadata, AgentHealth, AgentPromptManifest, CreateAgentInput, UpdateAgentInput } from "@mcoda/shared";
|
|
2
|
-
import { GlobalRepository } from "@mcoda/db";
|
|
2
|
+
import { AgentRunRatingRow, GlobalRepository } from "@mcoda/db";
|
|
3
3
|
import { AgentService, InvocationResult } from "@mcoda/agents";
|
|
4
4
|
import { RoutingService } from "../services/agents/RoutingService.js";
|
|
5
5
|
export interface AgentResponse extends Agent {
|
|
@@ -19,6 +19,7 @@ export declare class AgentsApi {
|
|
|
19
19
|
private resolveAgent;
|
|
20
20
|
private withCommandRun;
|
|
21
21
|
listAgents(): Promise<AgentResponse[]>;
|
|
22
|
+
listAgentRunRatings(idOrSlug: string, limit?: number): Promise<AgentRunRatingRow[]>;
|
|
22
23
|
createAgent(input: CreateAgentInput): Promise<AgentResponse>;
|
|
23
24
|
getAgent(idOrSlug: string): Promise<AgentResponse>;
|
|
24
25
|
updateAgent(idOrSlug: string, patch: UpdateAgentInput): Promise<AgentResponse>;
|
|
@@ -31,6 +32,13 @@ export declare class AgentsApi {
|
|
|
31
32
|
response: InvocationResult;
|
|
32
33
|
prompt: string;
|
|
33
34
|
}>;
|
|
35
|
+
private extractTokenUsage;
|
|
36
|
+
private extractTelemetryInfo;
|
|
37
|
+
runAgent(idOrSlug: string, prompts: string[], metadata?: Record<string, unknown>): Promise<{
|
|
38
|
+
agent: Pick<Agent, "id" | "slug">;
|
|
39
|
+
prompts: string[];
|
|
40
|
+
responses: InvocationResult[];
|
|
41
|
+
}>;
|
|
34
42
|
setDefaultAgent(idOrSlug: string, workspaceId?: string, commandName?: string): Promise<void>;
|
|
35
43
|
}
|
|
36
44
|
//# sourceMappingURL=AgentsApi.d.ts.map
|
|
@@ -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,EAAoB,gBAAgB,EAAE,MAAM,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
|
@@ -69,6 +69,10 @@ export class AgentsApi {
|
|
|
69
69
|
}
|
|
70
70
|
return results;
|
|
71
71
|
}
|
|
72
|
+
async listAgentRunRatings(idOrSlug, limit = 50) {
|
|
73
|
+
const agent = await this.resolveAgent(idOrSlug);
|
|
74
|
+
return this.repo.listAgentRunRatings(agent.id, limit);
|
|
75
|
+
}
|
|
72
76
|
async createAgent(input) {
|
|
73
77
|
return this.withCommandRun("agent.add", { slug: input.slug, adapter: input.adapter }, async () => {
|
|
74
78
|
const agent = await this.repo.createAgent(input);
|
|
@@ -136,11 +140,13 @@ export class AgentsApi {
|
|
|
136
140
|
agentId: agent.id,
|
|
137
141
|
commandRunId: run.id,
|
|
138
142
|
modelName: agent.defaultModel,
|
|
143
|
+
commandName: "agent.test",
|
|
144
|
+
action: "health_check",
|
|
139
145
|
tokensPrompt: 0,
|
|
140
146
|
tokensCompletion: 0,
|
|
141
147
|
tokensTotal: 0,
|
|
142
148
|
timestamp: new Date().toISOString(),
|
|
143
|
-
metadata: { reason: "agent.test", healthStatus: health.status },
|
|
149
|
+
metadata: { reason: "agent.test", healthStatus: health.status, phase: "health_check", attempt: 1 },
|
|
144
150
|
});
|
|
145
151
|
return health;
|
|
146
152
|
});
|
|
@@ -150,23 +156,212 @@ export class AgentsApi {
|
|
|
150
156
|
const trimmedPrompt = prompt.trim() || "Hello from mcoda test-agent. Please reply with a short acknowledgement.";
|
|
151
157
|
return this.withCommandRun("agent.test", { id: agent.id, slug: agent.slug, prompt: trimmedPrompt }, async (run) => {
|
|
152
158
|
const health = await this.agentService.healthCheck(agent.id);
|
|
159
|
+
const startedAtMs = Date.now();
|
|
160
|
+
const startedAt = new Date(startedAtMs).toISOString();
|
|
153
161
|
const response = await this.agentService.invoke(agent.id, {
|
|
154
162
|
input: trimmedPrompt,
|
|
155
163
|
metadata: { command: "test-agent" },
|
|
156
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;
|
|
157
175
|
await this.repo.recordTokenUsage({
|
|
158
176
|
agentId: agent.id,
|
|
159
177
|
commandRunId: run.id,
|
|
160
178
|
modelName: agent.defaultModel,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
+
},
|
|
166
202
|
});
|
|
167
203
|
return { health, response, prompt: trimmedPrompt };
|
|
168
204
|
});
|
|
169
205
|
}
|
|
206
|
+
extractTokenUsage(metadata) {
|
|
207
|
+
if (!metadata || typeof metadata !== "object")
|
|
208
|
+
return {};
|
|
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;
|
|
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
|
+
};
|
|
222
|
+
const tokensPrompt = toNumber(metadata.tokensPrompt) ??
|
|
223
|
+
toNumber(metadata.tokens_prompt) ??
|
|
224
|
+
toNumber(usage?.prompt_tokens) ??
|
|
225
|
+
toNumber(usage?.promptTokens) ??
|
|
226
|
+
toNumber(usage?.prompt_tokens);
|
|
227
|
+
const tokensCompletion = toNumber(metadata.tokensCompletion) ??
|
|
228
|
+
toNumber(metadata.tokens_completion) ??
|
|
229
|
+
toNumber(usage?.completion_tokens) ??
|
|
230
|
+
toNumber(usage?.completionTokens) ??
|
|
231
|
+
toNumber(usage?.completion_tokens);
|
|
232
|
+
let tokensTotal = toNumber(metadata.tokensTotal) ??
|
|
233
|
+
toNumber(metadata.tokens_total) ??
|
|
234
|
+
toNumber(usage?.total_tokens) ??
|
|
235
|
+
toNumber(usage?.totalTokens) ??
|
|
236
|
+
toNumber(usage?.total_tokens);
|
|
237
|
+
if (tokensTotal === undefined && tokensPrompt !== undefined && tokensCompletion !== undefined) {
|
|
238
|
+
tokensTotal = tokensPrompt + tokensCompletion;
|
|
239
|
+
}
|
|
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
|
+
};
|
|
301
|
+
}
|
|
302
|
+
async runAgent(idOrSlug, prompts, metadata) {
|
|
303
|
+
const agent = await this.resolveAgent(idOrSlug);
|
|
304
|
+
const cleaned = prompts.map((prompt) => prompt.trim()).filter(Boolean);
|
|
305
|
+
if (cleaned.length === 0) {
|
|
306
|
+
throw new Error("No prompts provided.");
|
|
307
|
+
}
|
|
308
|
+
return this.withCommandRun("agent.run", { id: agent.id, slug: agent.slug, promptCount: cleaned.length }, async (run) => {
|
|
309
|
+
const responses = [];
|
|
310
|
+
for (let index = 0; index < cleaned.length; index += 1) {
|
|
311
|
+
const input = cleaned[index];
|
|
312
|
+
const startedAtMs = Date.now();
|
|
313
|
+
const startedAt = new Date(startedAtMs).toISOString();
|
|
314
|
+
const response = await this.agentService.invoke(agent.id, {
|
|
315
|
+
input,
|
|
316
|
+
metadata: {
|
|
317
|
+
command: "agent-run",
|
|
318
|
+
promptIndex: index,
|
|
319
|
+
...metadata,
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
const finishedAtMs = Date.now();
|
|
323
|
+
const finishedAt = new Date(finishedAtMs).toISOString();
|
|
324
|
+
const durationMs = finishedAtMs - startedAtMs;
|
|
325
|
+
const durationSeconds = durationMs / 1000;
|
|
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;
|
|
332
|
+
await this.repo.recordTokenUsage({
|
|
333
|
+
agentId: agent.id,
|
|
334
|
+
commandRunId: run.id,
|
|
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,
|
|
341
|
+
tokensPrompt: usage.tokensPrompt,
|
|
342
|
+
tokensCompletion: usage.tokensCompletion,
|
|
343
|
+
tokensTotal: usage.tokensTotal,
|
|
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(),
|
|
352
|
+
metadata: {
|
|
353
|
+
reason: "agent.run",
|
|
354
|
+
adapter: response.adapter,
|
|
355
|
+
promptIndex: index,
|
|
356
|
+
phase: "agent_run",
|
|
357
|
+
attempt: 1,
|
|
358
|
+
},
|
|
359
|
+
});
|
|
360
|
+
responses.push(response);
|
|
361
|
+
}
|
|
362
|
+
return { agent: { id: agent.id, slug: agent.slug }, prompts: cleaned, responses };
|
|
363
|
+
});
|
|
364
|
+
}
|
|
170
365
|
async setDefaultAgent(idOrSlug, workspaceId = "__GLOBAL__", commandName = "default") {
|
|
171
366
|
const agent = await this.resolveAgent(idOrSlug);
|
|
172
367
|
await this.withCommandRun("agent.set-default", { workspaceId, commandName, agent: agent.slug }, async () => {
|
|
@@ -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,
|
|
@@ -22,11 +25,14 @@ export class QaTasksApi {
|
|
|
22
25
|
testCommand: request.testCommand,
|
|
23
26
|
agentName: request.agentName,
|
|
24
27
|
agentStream: request.agentStream,
|
|
28
|
+
rateAgents: request.rateAgents,
|
|
25
29
|
createFollowupTasks: request.createFollowupTasks,
|
|
26
30
|
dryRun: request.dryRun,
|
|
27
31
|
result: request.result,
|
|
28
32
|
notes: request.notes,
|
|
29
33
|
evidenceUrl: request.evidenceUrl,
|
|
34
|
+
allowDirty: request.allowDirty,
|
|
35
|
+
cleanIgnorePaths: request.cleanIgnorePaths,
|
|
30
36
|
});
|
|
31
37
|
}
|
|
32
38
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksApi.d.ts","sourceRoot":"","sources":["../../src/api/TasksApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAItE,qBAAa,QAAQ;WACN,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TasksApi.d.ts","sourceRoot":"","sources":["../../src/api/TasksApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAItE,qBAAa,QAAQ;WACN,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA8B/G"}
|
package/dist/api/TasksApi.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export * from "./services/execution/TaskSelectionService.js";
|
|
|
11
11
|
export * from "./services/execution/TaskStateService.js";
|
|
12
12
|
export * from "./services/execution/WorkOnTasksService.js";
|
|
13
13
|
export * from "./services/execution/QaTasksService.js";
|
|
14
|
+
export * from "./services/execution/GatewayTrioService.js";
|
|
14
15
|
export * from "./services/review/CodeReviewService.js";
|
|
15
16
|
export * from "./api/TasksApi.js";
|
|
16
17
|
export * from "./api/QaTasksApi.js";
|
|
@@ -23,6 +24,9 @@ export * from "./services/tasks/TaskDetailService.js";
|
|
|
23
24
|
export * from "./services/backlog/TaskOrderingService.js";
|
|
24
25
|
export * from "./services/agents/RoutingService.js";
|
|
25
26
|
export * from "./services/agents/GatewayAgentService.js";
|
|
27
|
+
export * from "./services/agents/GatewayHandoff.js";
|
|
28
|
+
export * from "./services/agents/AgentRatingService.js";
|
|
29
|
+
export * from "./services/agents/AgentRatingFormula.js";
|
|
26
30
|
export * from "./workspace/WorkspaceManager.js";
|
|
27
31
|
export * from "./services/system/SystemUpdateService.js";
|
|
28
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAChD,cAAc,0CAA0C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,0CAA0C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export * from "./services/execution/TaskSelectionService.js";
|
|
|
11
11
|
export * from "./services/execution/TaskStateService.js";
|
|
12
12
|
export * from "./services/execution/WorkOnTasksService.js";
|
|
13
13
|
export * from "./services/execution/QaTasksService.js";
|
|
14
|
+
export * from "./services/execution/GatewayTrioService.js";
|
|
14
15
|
export * from "./services/review/CodeReviewService.js";
|
|
15
16
|
export * from "./api/TasksApi.js";
|
|
16
17
|
export * from "./api/QaTasksApi.js";
|
|
@@ -23,5 +24,8 @@ export * from "./services/tasks/TaskDetailService.js";
|
|
|
23
24
|
export * from "./services/backlog/TaskOrderingService.js";
|
|
24
25
|
export * from "./services/agents/RoutingService.js";
|
|
25
26
|
export * from "./services/agents/GatewayAgentService.js";
|
|
27
|
+
export * from "./services/agents/GatewayHandoff.js";
|
|
28
|
+
export * from "./services/agents/AgentRatingService.js";
|
|
29
|
+
export * from "./services/agents/AgentRatingFormula.js";
|
|
26
30
|
export * from "./workspace/WorkspaceManager.js";
|
|
27
31
|
export * from "./services/system/SystemUpdateService.js";
|
|
@@ -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,21 +1,29 @@
|
|
|
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.
|
|
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}
|
|
5
9
|
`.trim();
|
|
6
10
|
export const DEFAULT_PDR_CHARACTER_PROMPT = `
|
|
7
|
-
Be precise, risk-aware, and concise. Prefer bullet points. Cite assumptions and avoid speculation.
|
|
11
|
+
Be precise, risk-aware, and concise. Prefer bullet points. Cite assumptions and avoid speculation. Always state the technology stack with rationale.
|
|
8
12
|
`.trim();
|
|
9
13
|
export const DEFAULT_PDR_RUNBOOK_PROMPT = `
|
|
10
14
|
Produce Markdown with the following sections at minimum:
|
|
11
15
|
- Introduction
|
|
12
16
|
- Scope
|
|
17
|
+
- Technology Stack (detail frontend, backend, data, infra, tooling; default to TypeScript/React/MySQL/Redis/Bash unless domain clearly indicates otherwise)
|
|
13
18
|
- Requirements & Constraints
|
|
14
19
|
- Architecture Overview
|
|
15
20
|
- Interfaces / APIs (do not invent endpoints; if missing, list as open questions)
|
|
16
21
|
- Non-Functional Requirements
|
|
17
22
|
- Risks & Mitigations
|
|
23
|
+
- Resolved Decisions (include when open questions are resolved)
|
|
18
24
|
- Open Questions
|
|
19
25
|
|
|
20
26
|
Call out gaps and missing specifications explicitly. Keep outputs grounded in the given context.
|
|
27
|
+
|
|
28
|
+
${GLOSSARY_PROMPT_SNIPPET}
|
|
21
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.
|
|
@@ -13,6 +16,7 @@ Mandatory sections (include even if you must mark TODOs):
|
|
|
13
16
|
- Goals & Scope
|
|
14
17
|
- Architecture Overview
|
|
15
18
|
- Components & Responsibilities
|
|
19
|
+
- Planned Folder Tree (include a detailed final structure, scripts, and tooling paths)
|
|
16
20
|
- Data Model & Persistence
|
|
17
21
|
- Interfaces & Contracts (reference OpenAPI operations when available)
|
|
18
22
|
- Non-Functional Requirements
|
|
@@ -20,10 +24,13 @@ Mandatory sections (include even if you must mark TODOs):
|
|
|
20
24
|
- Failure Modes & Resilience
|
|
21
25
|
- Risks & Mitigations
|
|
22
26
|
- Assumptions
|
|
27
|
+
- Resolved Decisions (include when open questions are resolved)
|
|
23
28
|
- Open Questions
|
|
24
29
|
- Acceptance Criteria
|
|
25
30
|
|
|
26
31
|
If context is missing, call it out explicitly and list the questions needed to complete the SDS.
|
|
32
|
+
|
|
33
|
+
${GLOSSARY_PROMPT_SNIPPET}
|
|
27
34
|
`.trim();
|
|
28
35
|
export const DEFAULT_SDS_TEMPLATE = `
|
|
29
36
|
# Software Design Specification
|
|
@@ -32,6 +39,7 @@ export const DEFAULT_SDS_TEMPLATE = `
|
|
|
32
39
|
## Goals & Scope
|
|
33
40
|
## Architecture Overview
|
|
34
41
|
## Components & Responsibilities
|
|
42
|
+
## Planned Folder Tree
|
|
35
43
|
## Data Model & Persistence
|
|
36
44
|
## Interfaces & Contracts
|
|
37
45
|
## Non-Functional Requirements
|
|
@@ -39,6 +47,7 @@ export const DEFAULT_SDS_TEMPLATE = `
|
|
|
39
47
|
## Failure Modes & Resilience
|
|
40
48
|
## Risks & Mitigations
|
|
41
49
|
## Assumptions
|
|
50
|
+
## Resolved Decisions
|
|
42
51
|
## Open Questions
|
|
43
52
|
## Acceptance Criteria
|
|
44
53
|
`.trim();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type RatingBudgets = {
|
|
2
|
+
costUsd: number;
|
|
3
|
+
durationSeconds: number;
|
|
4
|
+
iterations: number;
|
|
5
|
+
};
|
|
6
|
+
export type RatingWeights = {
|
|
7
|
+
quality: number;
|
|
8
|
+
cost: number;
|
|
9
|
+
time: number;
|
|
10
|
+
iterations: number;
|
|
11
|
+
};
|
|
12
|
+
export type RunScoreInput = {
|
|
13
|
+
qualityScore: number;
|
|
14
|
+
totalCost: number;
|
|
15
|
+
durationSeconds: number;
|
|
16
|
+
iterations: number;
|
|
17
|
+
budgets?: Partial<RatingBudgets>;
|
|
18
|
+
weights?: Partial<RatingWeights>;
|
|
19
|
+
};
|
|
20
|
+
export declare const DEFAULT_RATING_WEIGHTS: RatingWeights;
|
|
21
|
+
export declare const DEFAULT_RATING_BUDGETS: RatingBudgets;
|
|
22
|
+
export declare const normalizeScore: (value: number, maxValue?: number) => number;
|
|
23
|
+
export declare const normalizeBudget: (value: number, budget: number) => number;
|
|
24
|
+
export declare const computeRunScore: (input: RunScoreInput) => number;
|
|
25
|
+
export declare const updateEmaRating: (current: number, score: number, alpha: number) => number;
|
|
26
|
+
export declare const computeAlpha: (windowSize: number) => number;
|
|
27
|
+
//# sourceMappingURL=AgentRatingFormula.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentRatingFormula.d.ts","sourceRoot":"","sources":["../../../src/services/agents/AgentRatingFormula.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,aAKpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AASF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,iBAAa,KAAG,MAA4C,CAAC;AAE3G,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MAA0C,CAAC;AAE3G,eAAO,MAAM,eAAe,GAAI,OAAO,aAAa,KAAG,MAatD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,MAM/E,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,KAAG,MAGjD,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export const DEFAULT_RATING_WEIGHTS = {
|
|
2
|
+
quality: 1.0,
|
|
3
|
+
cost: 0.15,
|
|
4
|
+
time: 0.1,
|
|
5
|
+
iterations: 0.2,
|
|
6
|
+
};
|
|
7
|
+
export const DEFAULT_RATING_BUDGETS = {
|
|
8
|
+
costUsd: 0.05,
|
|
9
|
+
durationSeconds: 600,
|
|
10
|
+
iterations: 2,
|
|
11
|
+
};
|
|
12
|
+
const clamp = (value, min = 0, max = 1) => Math.max(min, Math.min(max, value));
|
|
13
|
+
const safeDivide = (value, denom) => {
|
|
14
|
+
if (!Number.isFinite(value) || !Number.isFinite(denom) || denom <= 0)
|
|
15
|
+
return 0;
|
|
16
|
+
return value / denom;
|
|
17
|
+
};
|
|
18
|
+
export const normalizeScore = (value, maxValue = 10) => clamp(safeDivide(value, maxValue));
|
|
19
|
+
export const normalizeBudget = (value, budget) => clamp(safeDivide(value, budget));
|
|
20
|
+
export const computeRunScore = (input) => {
|
|
21
|
+
const weights = { ...DEFAULT_RATING_WEIGHTS, ...(input.weights ?? {}) };
|
|
22
|
+
const budgets = { ...DEFAULT_RATING_BUDGETS, ...(input.budgets ?? {}) };
|
|
23
|
+
const qualityNorm = normalizeScore(input.qualityScore, 10);
|
|
24
|
+
const costNorm = normalizeBudget(input.totalCost, budgets.costUsd);
|
|
25
|
+
const timeNorm = normalizeBudget(input.durationSeconds, budgets.durationSeconds);
|
|
26
|
+
const iterNorm = normalizeBudget(input.iterations, budgets.iterations);
|
|
27
|
+
const weighted = weights.quality * qualityNorm -
|
|
28
|
+
weights.cost * costNorm -
|
|
29
|
+
weights.time * timeNorm -
|
|
30
|
+
weights.iterations * iterNorm;
|
|
31
|
+
return Math.round(clamp(weighted, 0, 1) * 1000) / 100; // 0-10 with 2 decimal precision
|
|
32
|
+
};
|
|
33
|
+
export const updateEmaRating = (current, score, alpha) => {
|
|
34
|
+
if (!Number.isFinite(current))
|
|
35
|
+
return score;
|
|
36
|
+
if (!Number.isFinite(score))
|
|
37
|
+
return current;
|
|
38
|
+
const safeAlpha = clamp(alpha, 0, 1);
|
|
39
|
+
const next = current + safeAlpha * (score - current);
|
|
40
|
+
return Math.round(next * 100) / 100;
|
|
41
|
+
};
|
|
42
|
+
export const computeAlpha = (windowSize) => {
|
|
43
|
+
const size = Math.max(1, windowSize);
|
|
44
|
+
return 2 / (size + 1);
|
|
45
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { AgentService } from "@mcoda/agents";
|
|
2
|
+
import { GlobalRepository, WorkspaceRepository } from "@mcoda/db";
|
|
3
|
+
import { Agent, AgentHealth } from "@mcoda/shared";
|
|
4
|
+
import { RoutingService } from "./RoutingService.js";
|
|
5
|
+
import { WorkspaceResolution } from "../../workspace/WorkspaceManager.js";
|
|
6
|
+
export type AgentRatingRequest = {
|
|
7
|
+
workspace: WorkspaceResolution;
|
|
8
|
+
agentId: string;
|
|
9
|
+
commandName: string;
|
|
10
|
+
jobId?: string;
|
|
11
|
+
commandRunId?: string;
|
|
12
|
+
taskId?: string;
|
|
13
|
+
taskKey?: string;
|
|
14
|
+
discipline?: string;
|
|
15
|
+
complexity?: number;
|
|
16
|
+
reviewerAgentName?: string;
|
|
17
|
+
ratingWindow?: number;
|
|
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;
|
|
37
|
+
export declare class AgentRatingService {
|
|
38
|
+
private workspace;
|
|
39
|
+
private deps;
|
|
40
|
+
constructor(workspace: WorkspaceResolution, deps: {
|
|
41
|
+
workspaceRepo: WorkspaceRepository;
|
|
42
|
+
globalRepo: GlobalRepository;
|
|
43
|
+
agentService: AgentService;
|
|
44
|
+
routingService: RoutingService;
|
|
45
|
+
});
|
|
46
|
+
static create(workspace: WorkspaceResolution): Promise<AgentRatingService>;
|
|
47
|
+
close(): Promise<void>;
|
|
48
|
+
private ratingPromptPath;
|
|
49
|
+
private loadRatingPrompt;
|
|
50
|
+
private resolveReviewer;
|
|
51
|
+
private loadUsage;
|
|
52
|
+
private countIterations;
|
|
53
|
+
private loadDurationSeconds;
|
|
54
|
+
private buildReviewContext;
|
|
55
|
+
private runReviewer;
|
|
56
|
+
private computeBudgets;
|
|
57
|
+
rate(request: AgentRatingRequest): Promise<void>;
|
|
58
|
+
private writeRatingArtifact;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=AgentRatingService.d.ts.map
|
|
@@ -0,0 +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;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"}
|