@mcoda/core 0.1.4

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.
Files changed (142) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +9 -0
  4. package/dist/api/AgentsApi.d.ts +36 -0
  5. package/dist/api/AgentsApi.d.ts.map +1 -0
  6. package/dist/api/AgentsApi.js +176 -0
  7. package/dist/api/QaTasksApi.d.ts +8 -0
  8. package/dist/api/QaTasksApi.d.ts.map +1 -0
  9. package/dist/api/QaTasksApi.js +36 -0
  10. package/dist/api/TasksApi.d.ts +7 -0
  11. package/dist/api/TasksApi.d.ts.map +1 -0
  12. package/dist/api/TasksApi.js +34 -0
  13. package/dist/config/ConfigService.d.ts +3 -0
  14. package/dist/config/ConfigService.d.ts.map +1 -0
  15. package/dist/config/ConfigService.js +2 -0
  16. package/dist/domain/dependencies/Dependency.d.ts +3 -0
  17. package/dist/domain/dependencies/Dependency.d.ts.map +1 -0
  18. package/dist/domain/dependencies/Dependency.js +2 -0
  19. package/dist/domain/epics/Epic.d.ts +3 -0
  20. package/dist/domain/epics/Epic.d.ts.map +1 -0
  21. package/dist/domain/epics/Epic.js +2 -0
  22. package/dist/domain/projects/Project.d.ts +3 -0
  23. package/dist/domain/projects/Project.d.ts.map +1 -0
  24. package/dist/domain/projects/Project.js +2 -0
  25. package/dist/domain/tasks/Task.d.ts +3 -0
  26. package/dist/domain/tasks/Task.d.ts.map +1 -0
  27. package/dist/domain/tasks/Task.js +2 -0
  28. package/dist/domain/userStories/UserStory.d.ts +3 -0
  29. package/dist/domain/userStories/UserStory.d.ts.map +1 -0
  30. package/dist/domain/userStories/UserStory.js +2 -0
  31. package/dist/index.d.ts +28 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +27 -0
  34. package/dist/prompts/PdrPrompts.d.ts +4 -0
  35. package/dist/prompts/PdrPrompts.d.ts.map +1 -0
  36. package/dist/prompts/PdrPrompts.js +21 -0
  37. package/dist/prompts/PromptLoader.d.ts +3 -0
  38. package/dist/prompts/PromptLoader.d.ts.map +1 -0
  39. package/dist/prompts/PromptLoader.js +2 -0
  40. package/dist/prompts/SdsPrompts.d.ts +5 -0
  41. package/dist/prompts/SdsPrompts.d.ts.map +1 -0
  42. package/dist/prompts/SdsPrompts.js +44 -0
  43. package/dist/services/agents/AgentManagementService.d.ts +3 -0
  44. package/dist/services/agents/AgentManagementService.d.ts.map +1 -0
  45. package/dist/services/agents/AgentManagementService.js +2 -0
  46. package/dist/services/agents/GatewayAgentService.d.ts +92 -0
  47. package/dist/services/agents/GatewayAgentService.d.ts.map +1 -0
  48. package/dist/services/agents/GatewayAgentService.js +870 -0
  49. package/dist/services/agents/RoutingApiClient.d.ts +23 -0
  50. package/dist/services/agents/RoutingApiClient.d.ts.map +1 -0
  51. package/dist/services/agents/RoutingApiClient.js +62 -0
  52. package/dist/services/agents/RoutingService.d.ts +50 -0
  53. package/dist/services/agents/RoutingService.d.ts.map +1 -0
  54. package/dist/services/agents/RoutingService.js +386 -0
  55. package/dist/services/agents/generated/RoutingApiClient.d.ts +21 -0
  56. package/dist/services/agents/generated/RoutingApiClient.d.ts.map +1 -0
  57. package/dist/services/agents/generated/RoutingApiClient.js +68 -0
  58. package/dist/services/backlog/BacklogService.d.ts +98 -0
  59. package/dist/services/backlog/BacklogService.d.ts.map +1 -0
  60. package/dist/services/backlog/BacklogService.js +453 -0
  61. package/dist/services/backlog/TaskOrderingService.d.ts +88 -0
  62. package/dist/services/backlog/TaskOrderingService.d.ts.map +1 -0
  63. package/dist/services/backlog/TaskOrderingService.js +675 -0
  64. package/dist/services/docs/DocsService.d.ts +82 -0
  65. package/dist/services/docs/DocsService.d.ts.map +1 -0
  66. package/dist/services/docs/DocsService.js +1631 -0
  67. package/dist/services/estimate/EstimateService.d.ts +12 -0
  68. package/dist/services/estimate/EstimateService.d.ts.map +1 -0
  69. package/dist/services/estimate/EstimateService.js +103 -0
  70. package/dist/services/estimate/VelocityService.d.ts +19 -0
  71. package/dist/services/estimate/VelocityService.d.ts.map +1 -0
  72. package/dist/services/estimate/VelocityService.js +237 -0
  73. package/dist/services/estimate/types.d.ts +30 -0
  74. package/dist/services/estimate/types.d.ts.map +1 -0
  75. package/dist/services/estimate/types.js +1 -0
  76. package/dist/services/execution/ExecutionService.d.ts +3 -0
  77. package/dist/services/execution/ExecutionService.d.ts.map +1 -0
  78. package/dist/services/execution/ExecutionService.js +2 -0
  79. package/dist/services/execution/QaFollowupService.d.ts +38 -0
  80. package/dist/services/execution/QaFollowupService.d.ts.map +1 -0
  81. package/dist/services/execution/QaFollowupService.js +236 -0
  82. package/dist/services/execution/QaProfileService.d.ts +22 -0
  83. package/dist/services/execution/QaProfileService.d.ts.map +1 -0
  84. package/dist/services/execution/QaProfileService.js +142 -0
  85. package/dist/services/execution/QaTasksService.d.ts +101 -0
  86. package/dist/services/execution/QaTasksService.d.ts.map +1 -0
  87. package/dist/services/execution/QaTasksService.js +1117 -0
  88. package/dist/services/execution/TaskSelectionService.d.ts +50 -0
  89. package/dist/services/execution/TaskSelectionService.d.ts.map +1 -0
  90. package/dist/services/execution/TaskSelectionService.js +281 -0
  91. package/dist/services/execution/TaskStateService.d.ts +19 -0
  92. package/dist/services/execution/TaskStateService.d.ts.map +1 -0
  93. package/dist/services/execution/TaskStateService.js +59 -0
  94. package/dist/services/execution/WorkOnTasksService.d.ts +80 -0
  95. package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -0
  96. package/dist/services/execution/WorkOnTasksService.js +1833 -0
  97. package/dist/services/jobs/JobInsightsService.d.ts +97 -0
  98. package/dist/services/jobs/JobInsightsService.d.ts.map +1 -0
  99. package/dist/services/jobs/JobInsightsService.js +263 -0
  100. package/dist/services/jobs/JobResumeService.d.ts +16 -0
  101. package/dist/services/jobs/JobResumeService.d.ts.map +1 -0
  102. package/dist/services/jobs/JobResumeService.js +113 -0
  103. package/dist/services/jobs/JobService.d.ts +149 -0
  104. package/dist/services/jobs/JobService.d.ts.map +1 -0
  105. package/dist/services/jobs/JobService.js +490 -0
  106. package/dist/services/jobs/JobsApiClient.d.ts +73 -0
  107. package/dist/services/jobs/JobsApiClient.d.ts.map +1 -0
  108. package/dist/services/jobs/JobsApiClient.js +67 -0
  109. package/dist/services/openapi/OpenApiService.d.ts +54 -0
  110. package/dist/services/openapi/OpenApiService.d.ts.map +1 -0
  111. package/dist/services/openapi/OpenApiService.js +503 -0
  112. package/dist/services/planning/CreateTasksService.d.ts +68 -0
  113. package/dist/services/planning/CreateTasksService.d.ts.map +1 -0
  114. package/dist/services/planning/CreateTasksService.js +989 -0
  115. package/dist/services/planning/KeyHelpers.d.ts +5 -0
  116. package/dist/services/planning/KeyHelpers.d.ts.map +1 -0
  117. package/dist/services/planning/KeyHelpers.js +62 -0
  118. package/dist/services/planning/PlanningService.d.ts +3 -0
  119. package/dist/services/planning/PlanningService.d.ts.map +1 -0
  120. package/dist/services/planning/PlanningService.js +2 -0
  121. package/dist/services/planning/RefineTasksService.d.ts +56 -0
  122. package/dist/services/planning/RefineTasksService.d.ts.map +1 -0
  123. package/dist/services/planning/RefineTasksService.js +1328 -0
  124. package/dist/services/review/CodeReviewService.d.ts +103 -0
  125. package/dist/services/review/CodeReviewService.d.ts.map +1 -0
  126. package/dist/services/review/CodeReviewService.js +1187 -0
  127. package/dist/services/system/SystemUpdateService.d.ts +55 -0
  128. package/dist/services/system/SystemUpdateService.d.ts.map +1 -0
  129. package/dist/services/system/SystemUpdateService.js +136 -0
  130. package/dist/services/tasks/TaskApiResolver.d.ts +7 -0
  131. package/dist/services/tasks/TaskApiResolver.d.ts.map +1 -0
  132. package/dist/services/tasks/TaskApiResolver.js +41 -0
  133. package/dist/services/tasks/TaskDetailService.d.ts +106 -0
  134. package/dist/services/tasks/TaskDetailService.d.ts.map +1 -0
  135. package/dist/services/tasks/TaskDetailService.js +332 -0
  136. package/dist/services/telemetry/TelemetryService.d.ts +53 -0
  137. package/dist/services/telemetry/TelemetryService.d.ts.map +1 -0
  138. package/dist/services/telemetry/TelemetryService.js +434 -0
  139. package/dist/workspace/WorkspaceManager.d.ts +35 -0
  140. package/dist/workspace/WorkspaceManager.d.ts.map +1 -0
  141. package/dist/workspace/WorkspaceManager.js +201 -0
  142. package/package.json +45 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+ - Initial public packaging for @mcoda/core.
5
+
6
+ ## 0.1.4
7
+ - Initial release.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 bekir dag
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # @mcoda/core
2
+
3
+ Core services and APIs used by the mcoda CLI.
4
+
5
+ ## Usage
6
+ This package is primarily an internal dependency of `mcoda`.
7
+
8
+ ## License
9
+ MIT - see `LICENSE`.
@@ -0,0 +1,36 @@
1
+ import { Agent, AgentAuthMetadata, AgentHealth, AgentPromptManifest, CreateAgentInput, UpdateAgentInput } from "@mcoda/shared";
2
+ import { GlobalRepository } from "@mcoda/db";
3
+ import { AgentService, InvocationResult } from "@mcoda/agents";
4
+ import { RoutingService } from "../services/agents/RoutingService.js";
5
+ export interface AgentResponse extends Agent {
6
+ capabilities: string[];
7
+ prompts?: AgentPromptManifest;
8
+ health?: AgentHealth;
9
+ auth?: AgentAuthMetadata;
10
+ models?: Agent["models"];
11
+ }
12
+ export declare class AgentsApi {
13
+ private repo;
14
+ private agentService;
15
+ private routingService;
16
+ constructor(repo: GlobalRepository, agentService: AgentService, routingService: RoutingService);
17
+ static create(): Promise<AgentsApi>;
18
+ close(): Promise<void>;
19
+ private resolveAgent;
20
+ private withCommandRun;
21
+ listAgents(): Promise<AgentResponse[]>;
22
+ createAgent(input: CreateAgentInput): Promise<AgentResponse>;
23
+ getAgent(idOrSlug: string): Promise<AgentResponse>;
24
+ updateAgent(idOrSlug: string, patch: UpdateAgentInput): Promise<AgentResponse>;
25
+ deleteAgent(idOrSlug: string, force?: boolean): Promise<void>;
26
+ setAgentAuth(idOrSlug: string, secret: string): Promise<AgentAuthMetadata>;
27
+ getAgentPrompts(idOrSlug: string): Promise<AgentPromptManifest | undefined>;
28
+ testAgent(idOrSlug: string): Promise<AgentHealth>;
29
+ probeAgent(idOrSlug: string, prompt?: string): Promise<{
30
+ health: AgentHealth;
31
+ response: InvocationResult;
32
+ prompt: string;
33
+ }>;
34
+ setDefaultAgent(idOrSlug: string, workspaceId?: string, commandName?: string): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=AgentsApi.d.ts.map
@@ -0,0 +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;AAC/D,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,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;IAkBjD,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;IA2BzE,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAe,EAC1B,WAAW,SAAY,GACtB,OAAO,CAAC,IAAI,CAAC;CAMjB"}
@@ -0,0 +1,176 @@
1
+ import { CryptoHelper, } from "@mcoda/shared";
2
+ import { GlobalRepository } from "@mcoda/db";
3
+ import { AgentService } from "@mcoda/agents";
4
+ import { RoutingService } from "../services/agents/RoutingService.js";
5
+ export class AgentsApi {
6
+ constructor(repo, agentService, routingService) {
7
+ this.repo = repo;
8
+ this.agentService = agentService;
9
+ this.routingService = routingService;
10
+ }
11
+ static async create() {
12
+ const repo = await GlobalRepository.create();
13
+ const agentService = new AgentService(repo);
14
+ const routingService = await RoutingService.create();
15
+ return new AgentsApi(repo, agentService, routingService);
16
+ }
17
+ async close() {
18
+ await this.repo.close();
19
+ if (this.routingService?.close) {
20
+ await this.routingService.close();
21
+ }
22
+ }
23
+ async resolveAgent(idOrSlug) {
24
+ return this.agentService.resolveAgent(idOrSlug);
25
+ }
26
+ async withCommandRun(commandName, payload, fn) {
27
+ const run = await this.repo.createCommandRun({
28
+ commandName,
29
+ startedAt: new Date().toISOString(),
30
+ status: "running",
31
+ payload,
32
+ });
33
+ try {
34
+ const result = await fn(run);
35
+ await this.repo.completeCommandRun(run.id, {
36
+ status: "succeeded",
37
+ completedAt: new Date().toISOString(),
38
+ exitCode: 0,
39
+ result: payload ? { payload, output: result } : { output: result },
40
+ });
41
+ return result;
42
+ }
43
+ catch (error) {
44
+ await this.repo.completeCommandRun(run.id, {
45
+ status: "failed",
46
+ completedAt: new Date().toISOString(),
47
+ exitCode: 1,
48
+ errorSummary: error.message,
49
+ });
50
+ throw error;
51
+ }
52
+ }
53
+ async listAgents() {
54
+ const agents = await this.repo.listAgents();
55
+ const health = await this.repo.listAgentHealthSummary();
56
+ const healthById = new Map(health.map((h) => [h.agentId, h]));
57
+ const results = [];
58
+ for (const agent of agents) {
59
+ const [capabilities, models] = await Promise.all([
60
+ this.repo.getAgentCapabilities(agent.id),
61
+ this.repo.getAgentModels(agent.id),
62
+ ]);
63
+ results.push({
64
+ ...agent,
65
+ capabilities,
66
+ models,
67
+ health: healthById.get(agent.id),
68
+ });
69
+ }
70
+ return results;
71
+ }
72
+ async createAgent(input) {
73
+ return this.withCommandRun("agent.add", { slug: input.slug, adapter: input.adapter }, async () => {
74
+ const agent = await this.repo.createAgent(input);
75
+ const [capabilities, models] = await Promise.all([
76
+ this.repo.getAgentCapabilities(agent.id),
77
+ this.repo.getAgentModels(agent.id),
78
+ ]);
79
+ return { ...agent, capabilities, models };
80
+ });
81
+ }
82
+ async getAgent(idOrSlug) {
83
+ const agent = await this.resolveAgent(idOrSlug);
84
+ const [capabilities, prompts, health, auth, models] = await Promise.all([
85
+ this.repo.getAgentCapabilities(agent.id),
86
+ this.repo.getAgentPrompts(agent.id),
87
+ this.repo.getAgentHealth(agent.id),
88
+ this.repo.getAgentAuthMetadata(agent.id),
89
+ this.repo.getAgentModels(agent.id),
90
+ ]);
91
+ return { ...agent, capabilities, prompts, health, auth, models };
92
+ }
93
+ async updateAgent(idOrSlug, patch) {
94
+ const agent = await this.resolveAgent(idOrSlug);
95
+ return this.withCommandRun("agent.update", { id: agent.id, patch }, async () => {
96
+ const updated = await this.repo.updateAgent(agent.id, patch);
97
+ const [capabilities, models] = await Promise.all([
98
+ this.repo.getAgentCapabilities(agent.id),
99
+ this.repo.getAgentModels(agent.id),
100
+ ]);
101
+ return { ...updated, capabilities, models };
102
+ });
103
+ }
104
+ async deleteAgent(idOrSlug, force = false) {
105
+ const agent = await this.resolveAgent(idOrSlug);
106
+ if (!force) {
107
+ const refs = await this.repo.findWorkspaceReferences(agent.id);
108
+ if (refs.length > 0) {
109
+ const details = refs
110
+ .map((r) => `${r.workspaceId === "__GLOBAL__" ? "global" : r.workspaceId}:${r.commandName}`)
111
+ .join(", ");
112
+ throw new Error(`Agent is referenced by routing defaults (${details}); re-run with --force to delete`);
113
+ }
114
+ }
115
+ await this.withCommandRun("agent.delete", { id: agent.id, slug: agent.slug }, async () => {
116
+ await this.repo.deleteAgent(agent.id);
117
+ });
118
+ }
119
+ async setAgentAuth(idOrSlug, secret) {
120
+ const agent = await this.resolveAgent(idOrSlug);
121
+ return this.withCommandRun("agent.auth.set", { id: agent.id }, async () => {
122
+ const encrypted = await CryptoHelper.encryptSecret(secret);
123
+ await this.repo.setAgentAuth(agent.id, encrypted);
124
+ return this.repo.getAgentAuthMetadata(agent.id);
125
+ });
126
+ }
127
+ async getAgentPrompts(idOrSlug) {
128
+ const agent = await this.resolveAgent(idOrSlug);
129
+ return this.repo.getAgentPrompts(agent.id);
130
+ }
131
+ async testAgent(idOrSlug) {
132
+ const agent = await this.resolveAgent(idOrSlug);
133
+ return this.withCommandRun("agent.test", { id: agent.id, slug: agent.slug }, async (run) => {
134
+ const health = await this.agentService.healthCheck(agent.id);
135
+ await this.repo.recordTokenUsage({
136
+ agentId: agent.id,
137
+ commandRunId: run.id,
138
+ modelName: agent.defaultModel,
139
+ tokensPrompt: 0,
140
+ tokensCompletion: 0,
141
+ tokensTotal: 0,
142
+ timestamp: new Date().toISOString(),
143
+ metadata: { reason: "agent.test", healthStatus: health.status },
144
+ });
145
+ return health;
146
+ });
147
+ }
148
+ async probeAgent(idOrSlug, prompt = "Hello from mcoda test-agent. Please reply with a short acknowledgement.") {
149
+ const agent = await this.resolveAgent(idOrSlug);
150
+ const trimmedPrompt = prompt.trim() || "Hello from mcoda test-agent. Please reply with a short acknowledgement.";
151
+ return this.withCommandRun("agent.test", { id: agent.id, slug: agent.slug, prompt: trimmedPrompt }, async (run) => {
152
+ const health = await this.agentService.healthCheck(agent.id);
153
+ const response = await this.agentService.invoke(agent.id, {
154
+ input: trimmedPrompt,
155
+ metadata: { command: "test-agent" },
156
+ });
157
+ await this.repo.recordTokenUsage({
158
+ agentId: agent.id,
159
+ commandRunId: run.id,
160
+ modelName: agent.defaultModel,
161
+ tokensPrompt: 0,
162
+ tokensCompletion: 0,
163
+ tokensTotal: 0,
164
+ timestamp: new Date().toISOString(),
165
+ metadata: { reason: "agent.test", healthStatus: health.status, adapter: response.adapter },
166
+ });
167
+ return { health, response, prompt: trimmedPrompt };
168
+ });
169
+ }
170
+ async setDefaultAgent(idOrSlug, workspaceId = "__GLOBAL__", commandName = "default") {
171
+ const agent = await this.resolveAgent(idOrSlug);
172
+ await this.withCommandRun("agent.set-default", { workspaceId, commandName, agent: agent.slug }, async () => {
173
+ await this.routingService.updateWorkspaceDefaults(workspaceId, { set: { [commandName]: agent.slug } });
174
+ });
175
+ }
176
+ }
@@ -0,0 +1,8 @@
1
+ import { QaTasksRequest, QaTasksResponse } from "../services/execution/QaTasksService.js";
2
+ export declare class QaTasksApi {
3
+ static runQa(request: Partial<QaTasksRequest> & {
4
+ workspaceRoot?: string;
5
+ noTelemetry?: boolean;
6
+ }): Promise<QaTasksResponse>;
7
+ }
8
+ //# sourceMappingURL=QaTasksApi.d.ts.map
@@ -0,0 +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;CA+B5B"}
@@ -0,0 +1,36 @@
1
+ import { WorkspaceResolver } from "../workspace/WorkspaceManager.js";
2
+ import { QaTasksService } from "../services/execution/QaTasksService.js";
3
+ export class QaTasksApi {
4
+ static async runQa(request) {
5
+ const workspace = await WorkspaceResolver.resolveWorkspace({
6
+ cwd: process.cwd(),
7
+ explicitWorkspace: request.workspaceRoot,
8
+ });
9
+ const service = await QaTasksService.create(workspace, { noTelemetry: request.noTelemetry ?? false });
10
+ try {
11
+ return await service.run({
12
+ workspace,
13
+ projectKey: request.projectKey,
14
+ epicKey: request.epicKey,
15
+ storyKey: request.storyKey,
16
+ taskKeys: request.taskKeys,
17
+ statusFilter: request.statusFilter,
18
+ mode: request.mode,
19
+ resumeJobId: request.resumeJobId,
20
+ profileName: request.profileName,
21
+ level: request.level,
22
+ testCommand: request.testCommand,
23
+ agentName: request.agentName,
24
+ agentStream: request.agentStream,
25
+ createFollowupTasks: request.createFollowupTasks,
26
+ dryRun: request.dryRun,
27
+ result: request.result,
28
+ notes: request.notes,
29
+ evidenceUrl: request.evidenceUrl,
30
+ });
31
+ }
32
+ finally {
33
+ await service.close();
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,7 @@
1
+ import { RefineTasksRequest, RefineTasksResult } from "@mcoda/shared";
2
+ export declare class TasksApi {
3
+ static refineTasks(request: RefineTasksRequest & {
4
+ workspaceRoot?: string;
5
+ }): Promise<RefineTasksResult>;
6
+ }
7
+ //# sourceMappingURL=TasksApi.d.ts.map
@@ -0,0 +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;CA6B/G"}
@@ -0,0 +1,34 @@
1
+ import { WorkspaceResolver } from "../workspace/WorkspaceManager.js";
2
+ import { RefineTasksService } from "../services/planning/RefineTasksService.js";
3
+ export class TasksApi {
4
+ static async refineTasks(request) {
5
+ const workspace = await WorkspaceResolver.resolveWorkspace({
6
+ cwd: process.cwd(),
7
+ explicitWorkspace: request.workspaceRoot,
8
+ });
9
+ const service = await RefineTasksService.create(workspace);
10
+ try {
11
+ return await service.refineTasks({
12
+ workspace,
13
+ projectKey: request.projectKey,
14
+ epicKey: request.epicKey,
15
+ storyKey: request.userStoryKey,
16
+ taskKeys: request.taskKeys,
17
+ statusFilter: request.statusFilter,
18
+ maxTasks: request.maxTasks,
19
+ strategy: request.strategy,
20
+ agentName: request.agentIdOverride,
21
+ agentStream: true,
22
+ fromDb: true,
23
+ dryRun: request.dryRun,
24
+ planInPath: request.planInPath,
25
+ planOutPath: request.planOutPath,
26
+ jobId: undefined,
27
+ outputJson: false,
28
+ });
29
+ }
30
+ finally {
31
+ await service.close();
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,3 @@
1
+ export declare class ConfigService {
2
+ }
3
+ //# sourceMappingURL=ConfigService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigService.d.ts","sourceRoot":"","sources":["../../src/config/ConfigService.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class ConfigService {
2
+ }
@@ -0,0 +1,3 @@
1
+ export declare class Dependency {
2
+ }
3
+ //# sourceMappingURL=Dependency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dependency.d.ts","sourceRoot":"","sources":["../../../src/domain/dependencies/Dependency.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class Dependency {
2
+ }
@@ -0,0 +1,3 @@
1
+ export declare class Epic {
2
+ }
3
+ //# sourceMappingURL=Epic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Epic.d.ts","sourceRoot":"","sources":["../../../src/domain/epics/Epic.ts"],"names":[],"mappings":"AAAA,qBAAa,IAAI;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class Epic {
2
+ }
@@ -0,0 +1,3 @@
1
+ export declare class Project {
2
+ }
3
+ //# sourceMappingURL=Project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../../src/domain/projects/Project.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class Project {
2
+ }
@@ -0,0 +1,3 @@
1
+ export declare class Task {
2
+ }
3
+ //# sourceMappingURL=Task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Task.d.ts","sourceRoot":"","sources":["../../../src/domain/tasks/Task.ts"],"names":[],"mappings":"AAAA,qBAAa,IAAI;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class Task {
2
+ }
@@ -0,0 +1,3 @@
1
+ export declare class UserStory {
2
+ }
3
+ //# sourceMappingURL=UserStory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserStory.d.ts","sourceRoot":"","sources":["../../../src/domain/userStories/UserStory.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class UserStory {
2
+ }
@@ -0,0 +1,28 @@
1
+ export * from "./api/AgentsApi.js";
2
+ export * from "./services/docs/DocsService.js";
3
+ export * from "./services/openapi/OpenApiService.js";
4
+ export * from "./services/jobs/JobService.js";
5
+ export * from "./services/jobs/JobInsightsService.js";
6
+ export * from "./services/jobs/JobResumeService.js";
7
+ export * from "./services/planning/CreateTasksService.js";
8
+ export * from "./services/planning/RefineTasksService.js";
9
+ export * from "./services/planning/KeyHelpers.js";
10
+ export * from "./services/execution/TaskSelectionService.js";
11
+ export * from "./services/execution/TaskStateService.js";
12
+ export * from "./services/execution/WorkOnTasksService.js";
13
+ export * from "./services/execution/QaTasksService.js";
14
+ export * from "./services/review/CodeReviewService.js";
15
+ export * from "./api/TasksApi.js";
16
+ export * from "./api/QaTasksApi.js";
17
+ export * from "./services/backlog/BacklogService.js";
18
+ export * from "./services/estimate/EstimateService.js";
19
+ export * from "./services/estimate/VelocityService.js";
20
+ export * from "./services/estimate/types.js";
21
+ export * from "./services/telemetry/TelemetryService.js";
22
+ export * from "./services/tasks/TaskDetailService.js";
23
+ export * from "./services/backlog/TaskOrderingService.js";
24
+ export * from "./services/agents/RoutingService.js";
25
+ export * from "./services/agents/GatewayAgentService.js";
26
+ export * from "./workspace/WorkspaceManager.js";
27
+ export * from "./services/system/SystemUpdateService.js";
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ export * from "./api/AgentsApi.js";
2
+ export * from "./services/docs/DocsService.js";
3
+ export * from "./services/openapi/OpenApiService.js";
4
+ export * from "./services/jobs/JobService.js";
5
+ export * from "./services/jobs/JobInsightsService.js";
6
+ export * from "./services/jobs/JobResumeService.js";
7
+ export * from "./services/planning/CreateTasksService.js";
8
+ export * from "./services/planning/RefineTasksService.js";
9
+ export * from "./services/planning/KeyHelpers.js";
10
+ export * from "./services/execution/TaskSelectionService.js";
11
+ export * from "./services/execution/TaskStateService.js";
12
+ export * from "./services/execution/WorkOnTasksService.js";
13
+ export * from "./services/execution/QaTasksService.js";
14
+ export * from "./services/review/CodeReviewService.js";
15
+ export * from "./api/TasksApi.js";
16
+ export * from "./api/QaTasksApi.js";
17
+ export * from "./services/backlog/BacklogService.js";
18
+ export * from "./services/estimate/EstimateService.js";
19
+ export * from "./services/estimate/VelocityService.js";
20
+ export * from "./services/estimate/types.js";
21
+ export * from "./services/telemetry/TelemetryService.js";
22
+ export * from "./services/tasks/TaskDetailService.js";
23
+ export * from "./services/backlog/TaskOrderingService.js";
24
+ export * from "./services/agents/RoutingService.js";
25
+ export * from "./services/agents/GatewayAgentService.js";
26
+ export * from "./workspace/WorkspaceManager.js";
27
+ export * from "./services/system/SystemUpdateService.js";
@@ -0,0 +1,4 @@
1
+ export declare const DEFAULT_PDR_JOB_PROMPT: string;
2
+ export declare const DEFAULT_PDR_CHARACTER_PROMPT: string;
3
+ export declare const DEFAULT_PDR_RUNBOOK_PROMPT: string;
4
+ //# sourceMappingURL=PdrPrompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdrPrompts.d.ts","sourceRoot":"","sources":["../../src/prompts/PdrPrompts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,QAI3B,CAAC;AAET,eAAO,MAAM,4BAA4B,QAEjC,CAAC;AAET,eAAO,MAAM,0BAA0B,QAY/B,CAAC"}
@@ -0,0 +1,21 @@
1
+ export const DEFAULT_PDR_JOB_PROMPT = `
2
+ You generate Product Design Reviews (PDR) grounded strictly in provided RFPs and related docs.
3
+ Summarize intent, constraints, interfaces, risks, and open questions concisely with clear headings.
4
+ Avoid inventing APIs or requirements; highlight uncertainties and assumptions for follow-up.
5
+ `.trim();
6
+ export const DEFAULT_PDR_CHARACTER_PROMPT = `
7
+ Be precise, risk-aware, and concise. Prefer bullet points. Cite assumptions and avoid speculation.
8
+ `.trim();
9
+ export const DEFAULT_PDR_RUNBOOK_PROMPT = `
10
+ Produce Markdown with the following sections at minimum:
11
+ - Introduction
12
+ - Scope
13
+ - Requirements & Constraints
14
+ - Architecture Overview
15
+ - Interfaces / APIs (do not invent endpoints; if missing, list as open questions)
16
+ - Non-Functional Requirements
17
+ - Risks & Mitigations
18
+ - Open Questions
19
+
20
+ Call out gaps and missing specifications explicitly. Keep outputs grounded in the given context.
21
+ `.trim();
@@ -0,0 +1,3 @@
1
+ export declare class PromptLoader {
2
+ }
3
+ //# sourceMappingURL=PromptLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptLoader.d.ts","sourceRoot":"","sources":["../../src/prompts/PromptLoader.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class PromptLoader {
2
+ }
@@ -0,0 +1,5 @@
1
+ export declare const DEFAULT_SDS_JOB_PROMPT: string;
2
+ export declare const DEFAULT_SDS_CHARACTER_PROMPT: string;
3
+ export declare const DEFAULT_SDS_RUNBOOK_PROMPT: string;
4
+ export declare const DEFAULT_SDS_TEMPLATE: string;
5
+ //# sourceMappingURL=SdsPrompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdsPrompts.d.ts","sourceRoot":"","sources":["../../src/prompts/SdsPrompts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,QAG3B,CAAC;AAET,eAAO,MAAM,4BAA4B,QAEjC,CAAC;AAET,eAAO,MAAM,0BAA0B,QAmB/B,CAAC;AAET,eAAO,MAAM,oBAAoB,QAgBzB,CAAC"}
@@ -0,0 +1,44 @@
1
+ export const DEFAULT_SDS_JOB_PROMPT = `
2
+ You generate Software Design Specifications (SDS) that stay aligned to the provided PDR, RFP, and OpenAPI context.
3
+ Highlight architecture, data, interfaces, non-functional requirements, risks, and open questions with traceability back to sources.
4
+ `.trim();
5
+ export const DEFAULT_SDS_CHARACTER_PROMPT = `
6
+ Be architectural, explicit, and risk-aware. Avoid speculation, cite assumptions, and flag gaps that need clarification.
7
+ `.trim();
8
+ export const DEFAULT_SDS_RUNBOOK_PROMPT = `
9
+ Produce Markdown that follows the SDS structure below. Keep outputs grounded in the supplied context; never invent APIs that are not in the PDR/RFP/OpenAPI.
10
+
11
+ Mandatory sections (include even if you must mark TODOs):
12
+ - Introduction
13
+ - Goals & Scope
14
+ - Architecture Overview
15
+ - Components & Responsibilities
16
+ - Data Model & Persistence
17
+ - Interfaces & Contracts (reference OpenAPI operations when available)
18
+ - Non-Functional Requirements
19
+ - Security & Compliance
20
+ - Failure Modes & Resilience
21
+ - Risks & Mitigations
22
+ - Assumptions
23
+ - Open Questions
24
+ - Acceptance Criteria
25
+
26
+ If context is missing, call it out explicitly and list the questions needed to complete the SDS.
27
+ `.trim();
28
+ export const DEFAULT_SDS_TEMPLATE = `
29
+ # Software Design Specification
30
+
31
+ ## Introduction
32
+ ## Goals & Scope
33
+ ## Architecture Overview
34
+ ## Components & Responsibilities
35
+ ## Data Model & Persistence
36
+ ## Interfaces & Contracts
37
+ ## Non-Functional Requirements
38
+ ## Security & Compliance
39
+ ## Failure Modes & Resilience
40
+ ## Risks & Mitigations
41
+ ## Assumptions
42
+ ## Open Questions
43
+ ## Acceptance Criteria
44
+ `.trim();
@@ -0,0 +1,3 @@
1
+ export declare class AgentManagementService {
2
+ }
3
+ //# sourceMappingURL=AgentManagementService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentManagementService.d.ts","sourceRoot":"","sources":["../../../src/services/agents/AgentManagementService.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAsB;CAAG"}
@@ -0,0 +1,2 @@
1
+ export class AgentManagementService {
2
+ }