mcoda 0.1.2 → 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 (461) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/README.md +9 -300
  3. package/dist/bin/McodaEntrypoint.d.ts +5 -0
  4. package/dist/bin/McodaEntrypoint.d.ts.map +1 -0
  5. package/dist/bin/McodaEntrypoint.js +175 -0
  6. package/dist/commands/agents/AgentsCommands.d.ts +4 -0
  7. package/dist/commands/agents/AgentsCommands.d.ts.map +1 -0
  8. package/dist/commands/agents/AgentsCommands.js +376 -0
  9. package/dist/commands/agents/GatewayAgentCommand.d.ts +4 -0
  10. package/dist/commands/agents/GatewayAgentCommand.d.ts.map +1 -0
  11. package/dist/commands/agents/GatewayAgentCommand.js +583 -0
  12. package/dist/commands/agents/TestAgentCommand.d.ts +4 -0
  13. package/dist/commands/agents/TestAgentCommand.d.ts.map +1 -0
  14. package/dist/commands/agents/TestAgentCommand.js +57 -0
  15. package/dist/commands/backlog/BacklogCommands.d.ts +17 -0
  16. package/dist/commands/backlog/BacklogCommands.d.ts.map +1 -0
  17. package/dist/commands/backlog/BacklogCommands.js +260 -0
  18. package/dist/commands/backlog/OrderTasksCommand.d.ts +16 -0
  19. package/dist/commands/backlog/OrderTasksCommand.d.ts.map +1 -0
  20. package/dist/commands/backlog/OrderTasksCommand.js +211 -0
  21. package/dist/commands/backlog/TaskShowCommands.d.ts +16 -0
  22. package/dist/commands/backlog/TaskShowCommands.d.ts.map +1 -0
  23. package/dist/commands/backlog/TaskShowCommands.js +275 -0
  24. package/dist/commands/docs/DocsCommands.d.ts +37 -0
  25. package/dist/commands/docs/DocsCommands.d.ts.map +1 -0
  26. package/dist/commands/docs/DocsCommands.js +381 -0
  27. package/dist/commands/estimate/EstimateCommands.d.ts +24 -0
  28. package/dist/commands/estimate/EstimateCommands.d.ts.map +1 -0
  29. package/dist/commands/estimate/EstimateCommands.js +259 -0
  30. package/dist/commands/jobs/JobsCommands.d.ts +24 -0
  31. package/dist/commands/jobs/JobsCommands.d.ts.map +1 -0
  32. package/dist/commands/jobs/JobsCommands.js +535 -0
  33. package/dist/commands/openapi/OpenapiCommands.d.ts +14 -0
  34. package/dist/commands/openapi/OpenapiCommands.d.ts.map +1 -0
  35. package/dist/commands/openapi/OpenapiCommands.js +157 -0
  36. package/dist/commands/planning/CreateTasksCommand.d.ts +17 -0
  37. package/dist/commands/planning/CreateTasksCommand.d.ts.map +1 -0
  38. package/dist/commands/planning/CreateTasksCommand.js +134 -0
  39. package/dist/commands/planning/MigrateTasksCommand.d.ts +15 -0
  40. package/dist/commands/planning/MigrateTasksCommand.d.ts.map +1 -0
  41. package/dist/commands/planning/MigrateTasksCommand.js +95 -0
  42. package/dist/commands/planning/PlanningCommands.d.ts +3 -0
  43. package/dist/commands/planning/PlanningCommands.d.ts.map +1 -0
  44. package/dist/commands/planning/PlanningCommands.js +2 -0
  45. package/dist/commands/planning/QaTasksCommand.d.ts +30 -0
  46. package/dist/commands/planning/QaTasksCommand.d.ts.map +1 -0
  47. package/dist/commands/planning/QaTasksCommand.js +293 -0
  48. package/dist/commands/planning/RefineTasksCommand.d.ts +30 -0
  49. package/dist/commands/planning/RefineTasksCommand.d.ts.map +1 -0
  50. package/dist/commands/planning/RefineTasksCommand.js +365 -0
  51. package/dist/commands/review/CodeReviewCommand.d.ts +21 -0
  52. package/dist/commands/review/CodeReviewCommand.d.ts.map +1 -0
  53. package/dist/commands/review/CodeReviewCommand.js +236 -0
  54. package/dist/commands/routing/RoutingCommands.d.ts +7 -0
  55. package/dist/commands/routing/RoutingCommands.d.ts.map +1 -0
  56. package/dist/commands/routing/RoutingCommands.js +484 -0
  57. package/dist/commands/telemetry/TelemetryCommands.d.ts +26 -0
  58. package/dist/commands/telemetry/TelemetryCommands.d.ts.map +1 -0
  59. package/dist/commands/telemetry/TelemetryCommands.js +313 -0
  60. package/dist/commands/update/UpdateCommands.d.ts +4 -0
  61. package/dist/commands/update/UpdateCommands.d.ts.map +1 -0
  62. package/dist/commands/update/UpdateCommands.js +280 -0
  63. package/dist/commands/work/WorkOnTasksCommand.d.ts +21 -0
  64. package/dist/commands/work/WorkOnTasksCommand.d.ts.map +1 -0
  65. package/dist/commands/work/WorkOnTasksCommand.js +238 -0
  66. package/dist/commands/workspace/SetWorkspaceCommand.d.ts +9 -0
  67. package/dist/commands/workspace/SetWorkspaceCommand.d.ts.map +1 -0
  68. package/dist/commands/workspace/SetWorkspaceCommand.js +128 -0
  69. package/dist/index.d.ts +19 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/package.json +31 -16
  72. package/.editorconfig +0 -9
  73. package/.eslintrc.cjs +0 -12
  74. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
  75. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  76. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  77. package/.github/workflows/ci.yml +0 -37
  78. package/.github/workflows/nightly.yml +0 -38
  79. package/.github/workflows/release-dry-run.yml +0 -40
  80. package/.github/workflows/release-please.yml +0 -22
  81. package/.github/workflows/release.yml +0 -139
  82. package/.prettierrc +0 -5
  83. package/.release-please-manifest.json +0 -8
  84. package/CLA.md +0 -42
  85. package/CONTRIBUTING.md +0 -38
  86. package/docs/oss_publishing_plan.md +0 -41
  87. package/docs/pdr/.gitkeep +0 -0
  88. package/docs/quality_gates.md +0 -32
  89. package/docs/rfp/.gitkeep +0 -0
  90. package/docs/sds/sds.md +0 -11963
  91. package/docs/usage.md +0 -72
  92. package/openapi/gen-openapi.ts +0 -1
  93. package/openapi/generated/clients/.gitkeep +0 -0
  94. package/openapi/generated/types/.gitkeep +0 -0
  95. package/openapi/generated/types/index.ts +0 -118
  96. package/openapi/mcoda.yaml +0 -2063
  97. package/pack-mcoda.sh +0 -88
  98. package/packages/agents/CHANGELOG.md +0 -7
  99. package/packages/agents/LICENSE +0 -21
  100. package/packages/agents/README.md +0 -9
  101. package/packages/agents/package.json +0 -41
  102. package/packages/agents/src/AgentService/.gitkeep +0 -0
  103. package/packages/agents/src/AgentService/AgentService.d.ts +0 -21
  104. package/packages/agents/src/AgentService/AgentService.d.ts.map +0 -1
  105. package/packages/agents/src/AgentService/AgentService.js +0 -141
  106. package/packages/agents/src/AgentService/AgentService.ts +0 -308
  107. package/packages/agents/src/__tests__/AgentService.test.ts +0 -284
  108. package/packages/agents/src/adapters/AdapterTypes.d.ts +0 -29
  109. package/packages/agents/src/adapters/AdapterTypes.d.ts.map +0 -1
  110. package/packages/agents/src/adapters/AdapterTypes.js +0 -1
  111. package/packages/agents/src/adapters/AdapterTypes.ts +0 -32
  112. package/packages/agents/src/adapters/codex/.gitkeep +0 -0
  113. package/packages/agents/src/adapters/codex/CodexAdapter.d.ts +0 -11
  114. package/packages/agents/src/adapters/codex/CodexAdapter.d.ts.map +0 -1
  115. package/packages/agents/src/adapters/codex/CodexAdapter.js +0 -43
  116. package/packages/agents/src/adapters/codex/CodexAdapter.ts +0 -63
  117. package/packages/agents/src/adapters/codex/CodexCliRunner.ts +0 -154
  118. package/packages/agents/src/adapters/gemini/.gitkeep +0 -0
  119. package/packages/agents/src/adapters/gemini/GeminiAdapter.d.ts +0 -11
  120. package/packages/agents/src/adapters/gemini/GeminiAdapter.d.ts.map +0 -1
  121. package/packages/agents/src/adapters/gemini/GeminiAdapter.js +0 -42
  122. package/packages/agents/src/adapters/gemini/GeminiAdapter.ts +0 -58
  123. package/packages/agents/src/adapters/gemini/GeminiCliRunner.ts +0 -75
  124. package/packages/agents/src/adapters/local/.gitkeep +0 -0
  125. package/packages/agents/src/adapters/local/LocalAdapter.d.ts +0 -11
  126. package/packages/agents/src/adapters/local/LocalAdapter.d.ts.map +0 -1
  127. package/packages/agents/src/adapters/local/LocalAdapter.js +0 -38
  128. package/packages/agents/src/adapters/local/LocalAdapter.ts +0 -43
  129. package/packages/agents/src/adapters/ollama/OllamaCliAdapter.ts +0 -58
  130. package/packages/agents/src/adapters/ollama/OllamaCliRunner.ts +0 -70
  131. package/packages/agents/src/adapters/ollama/OllamaRemoteAdapter.ts +0 -205
  132. package/packages/agents/src/adapters/openai/.gitkeep +0 -0
  133. package/packages/agents/src/adapters/openai/OpenAiAdapter.d.ts +0 -11
  134. package/packages/agents/src/adapters/openai/OpenAiAdapter.d.ts.map +0 -1
  135. package/packages/agents/src/adapters/openai/OpenAiAdapter.js +0 -51
  136. package/packages/agents/src/adapters/openai/OpenAiAdapter.ts +0 -56
  137. package/packages/agents/src/adapters/openai/OpenAiCliAdapter.ts +0 -62
  138. package/packages/agents/src/adapters/qa/.gitkeep +0 -0
  139. package/packages/agents/src/adapters/qa/QaAdapter.d.ts +0 -11
  140. package/packages/agents/src/adapters/qa/QaAdapter.d.ts.map +0 -1
  141. package/packages/agents/src/adapters/qa/QaAdapter.js +0 -37
  142. package/packages/agents/src/adapters/qa/QaAdapter.ts +0 -42
  143. package/packages/agents/src/adapters/zhipu/ZhipuApiAdapter.ts +0 -273
  144. package/packages/agents/src/index.d.ts +0 -8
  145. package/packages/agents/src/index.d.ts.map +0 -1
  146. package/packages/agents/src/index.js +0 -7
  147. package/packages/agents/src/index.ts +0 -11
  148. package/packages/agents/tsconfig.json +0 -14
  149. package/packages/cli/CHANGELOG.md +0 -7
  150. package/packages/cli/LICENSE +0 -21
  151. package/packages/cli/README.md +0 -23
  152. package/packages/cli/package.json +0 -61
  153. package/packages/cli/src/__tests__/AgentsCommands.test.ts +0 -137
  154. package/packages/cli/src/__tests__/BacklogCommands.test.ts +0 -40
  155. package/packages/cli/src/__tests__/CodeReviewCommand.test.ts +0 -594
  156. package/packages/cli/src/__tests__/CreateTasksCommand.test.ts +0 -40
  157. package/packages/cli/src/__tests__/DocsCommands.test.ts +0 -41
  158. package/packages/cli/src/__tests__/EstimateCommands.test.ts +0 -54
  159. package/packages/cli/src/__tests__/JobsCommands.behavior.test.ts +0 -311
  160. package/packages/cli/src/__tests__/JobsCommands.test.ts +0 -49
  161. package/packages/cli/src/__tests__/MigrateTasksCommand.test.ts +0 -36
  162. package/packages/cli/src/__tests__/OpenapiCommands.test.ts +0 -34
  163. package/packages/cli/src/__tests__/OrderTasksCommand.test.ts +0 -150
  164. package/packages/cli/src/__tests__/PlanningCommands.test.ts +0 -9
  165. package/packages/cli/src/__tests__/QaTasksCommand.test.ts +0 -58
  166. package/packages/cli/src/__tests__/RefineTasksCommand.test.ts +0 -63
  167. package/packages/cli/src/__tests__/RoutingCommands.test.ts +0 -302
  168. package/packages/cli/src/__tests__/SetWorkspaceCommand.test.ts +0 -18
  169. package/packages/cli/src/__tests__/TaskShowCommands.test.ts +0 -130
  170. package/packages/cli/src/__tests__/TelemetryCommands.test.ts +0 -35
  171. package/packages/cli/src/__tests__/TestAgentCommand.test.ts +0 -41
  172. package/packages/cli/src/__tests__/UpdateCommands.test.ts +0 -292
  173. package/packages/cli/src/__tests__/WorkOnTasksCommand.test.ts +0 -42
  174. package/packages/cli/src/bin/.gitkeep +0 -0
  175. package/packages/cli/src/bin/McodaEntrypoint.ts +0 -180
  176. package/packages/cli/src/commands/agents/.gitkeep +0 -0
  177. package/packages/cli/src/commands/agents/AgentsCommands.ts +0 -374
  178. package/packages/cli/src/commands/agents/GatewayAgentCommand.ts +0 -621
  179. package/packages/cli/src/commands/agents/TestAgentCommand.ts +0 -63
  180. package/packages/cli/src/commands/backlog/.gitkeep +0 -0
  181. package/packages/cli/src/commands/backlog/BacklogCommands.ts +0 -286
  182. package/packages/cli/src/commands/backlog/OrderTasksCommand.ts +0 -237
  183. package/packages/cli/src/commands/backlog/TaskShowCommands.ts +0 -289
  184. package/packages/cli/src/commands/docs/.gitkeep +0 -0
  185. package/packages/cli/src/commands/docs/DocsCommands.ts +0 -413
  186. package/packages/cli/src/commands/estimate/EstimateCommands.ts +0 -290
  187. package/packages/cli/src/commands/jobs/.gitkeep +0 -0
  188. package/packages/cli/src/commands/jobs/JobsCommands.ts +0 -595
  189. package/packages/cli/src/commands/openapi/OpenapiCommands.ts +0 -167
  190. package/packages/cli/src/commands/planning/.gitkeep +0 -0
  191. package/packages/cli/src/commands/planning/CreateTasksCommand.ts +0 -149
  192. package/packages/cli/src/commands/planning/MigrateTasksCommand.ts +0 -105
  193. package/packages/cli/src/commands/planning/PlanningCommands.ts +0 -1
  194. package/packages/cli/src/commands/planning/QaTasksCommand.ts +0 -320
  195. package/packages/cli/src/commands/planning/RefineTasksCommand.ts +0 -408
  196. package/packages/cli/src/commands/review/CodeReviewCommand.ts +0 -262
  197. package/packages/cli/src/commands/routing/.gitkeep +0 -0
  198. package/packages/cli/src/commands/routing/RoutingCommands.ts +0 -554
  199. package/packages/cli/src/commands/telemetry/.gitkeep +0 -0
  200. package/packages/cli/src/commands/telemetry/TelemetryCommands.ts +0 -348
  201. package/packages/cli/src/commands/update/.gitkeep +0 -0
  202. package/packages/cli/src/commands/update/UpdateCommands.ts +0 -301
  203. package/packages/cli/src/commands/work/WorkOnTasksCommand.ts +0 -264
  204. package/packages/cli/src/commands/workspace/SetWorkspaceCommand.ts +0 -132
  205. package/packages/cli/test/packaging_guardrails.test.js +0 -75
  206. package/packages/cli/tsconfig.json +0 -20
  207. package/packages/core/CHANGELOG.md +0 -7
  208. package/packages/core/LICENSE +0 -21
  209. package/packages/core/README.md +0 -9
  210. package/packages/core/package.json +0 -45
  211. package/packages/core/src/__tests__/SmokeClasses.test.ts +0 -32
  212. package/packages/core/src/api/AgentsApi.ts +0 -219
  213. package/packages/core/src/api/QaTasksApi.ts +0 -38
  214. package/packages/core/src/api/TasksApi.ts +0 -35
  215. package/packages/core/src/api/__tests__/AgentsApi.test.ts +0 -203
  216. package/packages/core/src/api/__tests__/QaTasksApi.test.ts +0 -51
  217. package/packages/core/src/api/__tests__/TasksApi.test.ts +0 -56
  218. package/packages/core/src/config/.gitkeep +0 -0
  219. package/packages/core/src/config/ConfigService.ts +0 -1
  220. package/packages/core/src/domain/dependencies/.gitkeep +0 -0
  221. package/packages/core/src/domain/dependencies/Dependency.ts +0 -1
  222. package/packages/core/src/domain/epics/.gitkeep +0 -0
  223. package/packages/core/src/domain/epics/Epic.ts +0 -1
  224. package/packages/core/src/domain/projects/.gitkeep +0 -0
  225. package/packages/core/src/domain/projects/Project.ts +0 -1
  226. package/packages/core/src/domain/tasks/.gitkeep +0 -0
  227. package/packages/core/src/domain/tasks/Task.ts +0 -1
  228. package/packages/core/src/domain/userStories/.gitkeep +0 -0
  229. package/packages/core/src/domain/userStories/UserStory.ts +0 -1
  230. package/packages/core/src/index.ts +0 -27
  231. package/packages/core/src/prompts/.gitkeep +0 -0
  232. package/packages/core/src/prompts/PdrPrompts.ts +0 -23
  233. package/packages/core/src/prompts/PromptLoader.ts +0 -1
  234. package/packages/core/src/prompts/SdsPrompts.ts +0 -47
  235. package/packages/core/src/services/agents/.gitkeep +0 -0
  236. package/packages/core/src/services/agents/AgentManagementService.ts +0 -1
  237. package/packages/core/src/services/agents/GatewayAgentService.ts +0 -956
  238. package/packages/core/src/services/agents/RoutingService.ts +0 -461
  239. package/packages/core/src/services/agents/__tests__/GatewayAgentService.test.ts +0 -72
  240. package/packages/core/src/services/agents/__tests__/RoutingService.test.ts +0 -267
  241. package/packages/core/src/services/agents/generated/RoutingApiClient.ts +0 -89
  242. package/packages/core/src/services/backlog/.gitkeep +0 -0
  243. package/packages/core/src/services/backlog/BacklogService.ts +0 -580
  244. package/packages/core/src/services/backlog/TaskOrderingService.ts +0 -868
  245. package/packages/core/src/services/backlog/__tests__/BacklogService.test.ts +0 -219
  246. package/packages/core/src/services/backlog/__tests__/TaskOrderingService.test.ts +0 -268
  247. package/packages/core/src/services/docs/.gitkeep +0 -0
  248. package/packages/core/src/services/docs/DocsService.ts +0 -1913
  249. package/packages/core/src/services/docs/__tests__/DocsService.test.ts +0 -350
  250. package/packages/core/src/services/estimate/EstimateService.ts +0 -111
  251. package/packages/core/src/services/estimate/VelocityService.ts +0 -272
  252. package/packages/core/src/services/estimate/__tests__/VelocityAndEstimate.test.ts +0 -209
  253. package/packages/core/src/services/estimate/types.ts +0 -41
  254. package/packages/core/src/services/execution/.gitkeep +0 -0
  255. package/packages/core/src/services/execution/ExecutionService.ts +0 -1
  256. package/packages/core/src/services/execution/QaFollowupService.ts +0 -289
  257. package/packages/core/src/services/execution/QaProfileService.ts +0 -160
  258. package/packages/core/src/services/execution/QaTasksService.ts +0 -1303
  259. package/packages/core/src/services/execution/TaskSelectionService.ts +0 -362
  260. package/packages/core/src/services/execution/TaskStateService.ts +0 -64
  261. package/packages/core/src/services/execution/WorkOnTasksService.ts +0 -2023
  262. package/packages/core/src/services/execution/__tests__/QaFollowupService.test.ts +0 -58
  263. package/packages/core/src/services/execution/__tests__/QaProfileService.test.ts +0 -49
  264. package/packages/core/src/services/execution/__tests__/QaTasksService.test.ts +0 -157
  265. package/packages/core/src/services/execution/__tests__/TaskSelectionService.test.ts +0 -179
  266. package/packages/core/src/services/execution/__tests__/TaskStateService.test.ts +0 -51
  267. package/packages/core/src/services/execution/__tests__/WorkOnTasksService.test.ts +0 -285
  268. package/packages/core/src/services/jobs/.gitkeep +0 -0
  269. package/packages/core/src/services/jobs/JobInsightsService.ts +0 -355
  270. package/packages/core/src/services/jobs/JobResumeService.ts +0 -119
  271. package/packages/core/src/services/jobs/JobService.ts +0 -648
  272. package/packages/core/src/services/jobs/JobsApiClient.ts +0 -113
  273. package/packages/core/src/services/jobs/__tests__/JobInsightsService.test.ts +0 -17
  274. package/packages/core/src/services/jobs/__tests__/JobResumeService.test.ts +0 -45
  275. package/packages/core/src/services/jobs/__tests__/JobService.test.ts +0 -44
  276. package/packages/core/src/services/openapi/OpenApiService.ts +0 -558
  277. package/packages/core/src/services/openapi/__tests__/OpenApiService.test.ts +0 -57
  278. package/packages/core/src/services/planning/.gitkeep +0 -0
  279. package/packages/core/src/services/planning/CreateTasksService.ts +0 -1280
  280. package/packages/core/src/services/planning/KeyHelpers.ts +0 -80
  281. package/packages/core/src/services/planning/PlanningService.ts +0 -1
  282. package/packages/core/src/services/planning/RefineTasksService.ts +0 -1552
  283. package/packages/core/src/services/planning/__tests__/CreateTasksService.test.ts +0 -288
  284. package/packages/core/src/services/planning/__tests__/KeyHelpers.test.ts +0 -16
  285. package/packages/core/src/services/planning/__tests__/RefineTasksService.test.ts +0 -172
  286. package/packages/core/src/services/review/CodeReviewService.ts +0 -1386
  287. package/packages/core/src/services/review/__tests__/CodeReviewService.test.ts +0 -89
  288. package/packages/core/src/services/system/SystemUpdateService.ts +0 -177
  289. package/packages/core/src/services/system/__tests__/SystemUpdateService.test.ts +0 -40
  290. package/packages/core/src/services/tasks/TaskApiResolver.ts +0 -37
  291. package/packages/core/src/services/tasks/TaskDetailService.ts +0 -494
  292. package/packages/core/src/services/tasks/__tests__/TaskApiResolver.test.ts +0 -41
  293. package/packages/core/src/services/tasks/__tests__/TaskDetailService.test.ts +0 -178
  294. package/packages/core/src/services/telemetry/.gitkeep +0 -0
  295. package/packages/core/src/services/telemetry/TelemetryService.ts +0 -515
  296. package/packages/core/src/services/telemetry/__tests__/TelemetryService.test.ts +0 -160
  297. package/packages/core/src/workspace/.gitkeep +0 -0
  298. package/packages/core/src/workspace/WorkspaceManager.ts +0 -234
  299. package/packages/core/tsconfig.json +0 -20
  300. package/packages/db/CHANGELOG.md +0 -7
  301. package/packages/db/LICENSE +0 -21
  302. package/packages/db/README.md +0 -9
  303. package/packages/db/package.json +0 -42
  304. package/packages/db/src/__tests__/GlobalRepository.test.ts +0 -109
  305. package/packages/db/src/__tests__/SchemaAlignment.test.ts +0 -80
  306. package/packages/db/src/__tests__/WorkspaceRepository.test.ts +0 -19
  307. package/packages/db/src/index.d.ts +0 -6
  308. package/packages/db/src/index.d.ts.map +0 -1
  309. package/packages/db/src/index.js +0 -5
  310. package/packages/db/src/index.ts +0 -6
  311. package/packages/db/src/migrations/global/.gitkeep +0 -0
  312. package/packages/db/src/migrations/global/GlobalMigrations.d.ts +0 -9
  313. package/packages/db/src/migrations/global/GlobalMigrations.d.ts.map +0 -1
  314. package/packages/db/src/migrations/global/GlobalMigrations.js +0 -68
  315. package/packages/db/src/migrations/global/GlobalMigrations.ts +0 -336
  316. package/packages/db/src/migrations/workspace/.gitkeep +0 -0
  317. package/packages/db/src/migrations/workspace/WorkspaceMigrations.d.ts +0 -9
  318. package/packages/db/src/migrations/workspace/WorkspaceMigrations.d.ts.map +0 -1
  319. package/packages/db/src/migrations/workspace/WorkspaceMigrations.js +0 -251
  320. package/packages/db/src/migrations/workspace/WorkspaceMigrations.ts +0 -248
  321. package/packages/db/src/repositories/global/.gitkeep +0 -0
  322. package/packages/db/src/repositories/global/GlobalRepository.d.ts +0 -30
  323. package/packages/db/src/repositories/global/GlobalRepository.d.ts.map +0 -1
  324. package/packages/db/src/repositories/global/GlobalRepository.js +0 -209
  325. package/packages/db/src/repositories/global/GlobalRepository.ts +0 -492
  326. package/packages/db/src/repositories/workspace/.gitkeep +0 -0
  327. package/packages/db/src/repositories/workspace/WorkspaceRepository.d.ts +0 -282
  328. package/packages/db/src/repositories/workspace/WorkspaceRepository.d.ts.map +0 -1
  329. package/packages/db/src/repositories/workspace/WorkspaceRepository.js +0 -773
  330. package/packages/db/src/repositories/workspace/WorkspaceRepository.ts +0 -1511
  331. package/packages/db/src/sqlite/connection.d.ts +0 -11
  332. package/packages/db/src/sqlite/connection.d.ts.map +0 -1
  333. package/packages/db/src/sqlite/connection.js +0 -31
  334. package/packages/db/src/sqlite/connection.ts +0 -35
  335. package/packages/db/src/sqlite/pragmas.d.ts +0 -5
  336. package/packages/db/src/sqlite/pragmas.d.ts.map +0 -1
  337. package/packages/db/src/sqlite/pragmas.js +0 -6
  338. package/packages/db/src/sqlite/pragmas.ts +0 -10
  339. package/packages/db/tsconfig.json +0 -13
  340. package/packages/generators/package.json +0 -21
  341. package/packages/generators/src/__tests__/Generators.test.ts +0 -19
  342. package/packages/generators/src/index.ts +0 -1
  343. package/packages/generators/src/openapi/generateTypes.ts +0 -1
  344. package/packages/generators/src/openapi/validateSchema.ts +0 -1
  345. package/packages/generators/src/scaffolding/docs/.gitkeep +0 -0
  346. package/packages/generators/src/scaffolding/docs/DocsScaffolder.ts +0 -1
  347. package/packages/generators/src/scaffolding/global/.gitkeep +0 -0
  348. package/packages/generators/src/scaffolding/global/GlobalScaffolder.ts +0 -1
  349. package/packages/generators/src/scaffolding/workspace/.gitkeep +0 -0
  350. package/packages/generators/src/scaffolding/workspace/WorkspaceScaffolder.ts +0 -1
  351. package/packages/generators/tsconfig.json +0 -10
  352. package/packages/integrations/CHANGELOG.md +0 -7
  353. package/packages/integrations/LICENSE +0 -21
  354. package/packages/integrations/README.md +0 -9
  355. package/packages/integrations/package.json +0 -47
  356. package/packages/integrations/src/docdex/.gitkeep +0 -0
  357. package/packages/integrations/src/docdex/DocdexClient.d.ts +0 -50
  358. package/packages/integrations/src/docdex/DocdexClient.d.ts.map +0 -1
  359. package/packages/integrations/src/docdex/DocdexClient.js +0 -216
  360. package/packages/integrations/src/docdex/DocdexClient.ts +0 -261
  361. package/packages/integrations/src/docdex/__tests__/DocdexClient.test.ts +0 -29
  362. package/packages/integrations/src/index.d.ts +0 -2
  363. package/packages/integrations/src/index.d.ts.map +0 -1
  364. package/packages/integrations/src/index.js +0 -4
  365. package/packages/integrations/src/index.ts +0 -5
  366. package/packages/integrations/src/issues/.gitkeep +0 -0
  367. package/packages/integrations/src/issues/IssuesClient.ts +0 -1
  368. package/packages/integrations/src/issues/__tests__/IssuesClient.test.ts +0 -10
  369. package/packages/integrations/src/qa/.gitkeep +0 -0
  370. package/packages/integrations/src/qa/ChromiumQaAdapter.ts +0 -89
  371. package/packages/integrations/src/qa/CliQaAdapter.ts +0 -95
  372. package/packages/integrations/src/qa/MaestroQaAdapter.ts +0 -91
  373. package/packages/integrations/src/qa/QaAdapter.ts +0 -7
  374. package/packages/integrations/src/qa/QaClient.ts +0 -1
  375. package/packages/integrations/src/qa/QaTypes.ts +0 -26
  376. package/packages/integrations/src/qa/__tests__/ChromiumQaAdapter.test.ts +0 -30
  377. package/packages/integrations/src/qa/__tests__/CliQaAdapter.test.ts +0 -33
  378. package/packages/integrations/src/qa/__tests__/MaestroQaAdapter.test.ts +0 -30
  379. package/packages/integrations/src/qa/index.ts +0 -5
  380. package/packages/integrations/src/system/SystemClient.ts +0 -50
  381. package/packages/integrations/src/system/__tests__/SystemClient.test.ts +0 -40
  382. package/packages/integrations/src/telemetry/TelemetryClient.ts +0 -139
  383. package/packages/integrations/src/telemetry/__tests__/TelemetryClient.test.ts +0 -41
  384. package/packages/integrations/src/vcs/.gitkeep +0 -0
  385. package/packages/integrations/src/vcs/VcsClient.ts +0 -211
  386. package/packages/integrations/src/vcs/__tests__/VcsClient.test.ts +0 -26
  387. package/packages/integrations/tsconfig.json +0 -14
  388. package/packages/shared/CHANGELOG.md +0 -7
  389. package/packages/shared/LICENSE +0 -21
  390. package/packages/shared/README.md +0 -9
  391. package/packages/shared/package.json +0 -40
  392. package/packages/shared/src/__tests__/CommandMetadata.test.ts +0 -15
  393. package/packages/shared/src/__tests__/ServiceShells.test.ts +0 -16
  394. package/packages/shared/src/crypto/.gitkeep +0 -0
  395. package/packages/shared/src/crypto/CryptoHelper.d.ts +0 -15
  396. package/packages/shared/src/crypto/CryptoHelper.d.ts.map +0 -1
  397. package/packages/shared/src/crypto/CryptoHelper.js +0 -54
  398. package/packages/shared/src/crypto/CryptoHelper.ts +0 -57
  399. package/packages/shared/src/errors/.gitkeep +0 -0
  400. package/packages/shared/src/errors/ErrorFactory.ts +0 -1
  401. package/packages/shared/src/index.d.ts +0 -6
  402. package/packages/shared/src/index.d.ts.map +0 -1
  403. package/packages/shared/src/index.js +0 -4
  404. package/packages/shared/src/index.ts +0 -35
  405. package/packages/shared/src/logging/.gitkeep +0 -0
  406. package/packages/shared/src/logging/Logger.ts +0 -1
  407. package/packages/shared/src/metadata/CommandMetadata.ts +0 -165
  408. package/packages/shared/src/openapi/.gitkeep +0 -0
  409. package/packages/shared/src/openapi/OpenApiTypes.d.ts +0 -216
  410. package/packages/shared/src/openapi/OpenApiTypes.d.ts.map +0 -1
  411. package/packages/shared/src/openapi/OpenApiTypes.js +0 -1
  412. package/packages/shared/src/openapi/OpenApiTypes.ts +0 -312
  413. package/packages/shared/src/paths/.gitkeep +0 -0
  414. package/packages/shared/src/paths/PathHelper.d.ts +0 -12
  415. package/packages/shared/src/paths/PathHelper.d.ts.map +0 -1
  416. package/packages/shared/src/paths/PathHelper.js +0 -24
  417. package/packages/shared/src/paths/PathHelper.ts +0 -29
  418. package/packages/shared/src/qa/QaProfile.ts +0 -14
  419. package/packages/shared/src/utils/.gitkeep +0 -0
  420. package/packages/shared/src/utils/UtilityService.ts +0 -1
  421. package/packages/shared/tsconfig.json +0 -10
  422. package/packages/testing/package.json +0 -26
  423. package/packages/testing/src/__tests__/TestingFakes.test.ts +0 -15
  424. package/packages/testing/src/cli/e2e/.gitkeep +0 -0
  425. package/packages/testing/src/cli/e2e/E2eSuite.ts +0 -1
  426. package/packages/testing/src/fakes/agents/.gitkeep +0 -0
  427. package/packages/testing/src/fakes/agents/FakeAgents.ts +0 -1
  428. package/packages/testing/src/fakes/docdex/.gitkeep +0 -0
  429. package/packages/testing/src/fakes/docdex/FakeDocdexClient.ts +0 -1
  430. package/packages/testing/src/fakes/qa/.gitkeep +0 -0
  431. package/packages/testing/src/fakes/qa/FakeQaClient.ts +0 -1
  432. package/packages/testing/src/fakes/vcs/.gitkeep +0 -0
  433. package/packages/testing/src/fakes/vcs/FakeVcsClient.ts +0 -1
  434. package/packages/testing/src/fixtures/db/.gitkeep +0 -0
  435. package/packages/testing/src/fixtures/db/DbFixtures.ts +0 -1
  436. package/packages/testing/src/fixtures/workspaces/.gitkeep +0 -0
  437. package/packages/testing/src/fixtures/workspaces/WorkspaceFixtures.ts +0 -1
  438. package/packages/testing/src/index.ts +0 -1
  439. package/packages/testing/tsconfig.json +0 -10
  440. package/pnpm-workspace.yaml +0 -2
  441. package/prompts/README.md +0 -5
  442. package/prompts/code-reviewer.md +0 -23
  443. package/prompts/code-writer.md +0 -35
  444. package/prompts/gateway-agent.md +0 -27
  445. package/prompts/qa-agent.md +0 -21
  446. package/release-please-config.json +0 -39
  447. package/scripts/build-all.ts +0 -1
  448. package/scripts/dev.ts +0 -1
  449. package/scripts/install-local-cli.sh +0 -28
  450. package/scripts/pack-npm-tarballs.js +0 -63
  451. package/scripts/release.ts +0 -1
  452. package/scripts/run-node-tests.js +0 -37
  453. package/tests/all.js +0 -127
  454. package/tests/api/openapi_spec.test.js +0 -21
  455. package/tests/artifacts.md +0 -31
  456. package/tests/component/cli_version.test.js +0 -38
  457. package/tests/integration/workspace_resolver.test.js +0 -44
  458. package/tests/unit/crypto_helper.test.js +0 -36
  459. package/tests/unit/path_helper.test.js +0 -20
  460. package/tsconfig.base.json +0 -32
  461. /package/{packages/cli/src/index.ts → dist/index.js} +0 -0
@@ -1,461 +0,0 @@
1
- import {
2
- Agent,
3
- AgentHealth,
4
- RoutingDefaults,
5
- RoutingDefaultsUpdate,
6
- RoutingPreview,
7
- RoutingProvenance,
8
- canonicalizeCommandName,
9
- getKnownDocdexScopes,
10
- getKnownQaProfiles,
11
- getCommandRequiredCapabilities,
12
- } from "@mcoda/shared";
13
- import { AgentService } from "@mcoda/agents";
14
- import { GlobalRepository } from "@mcoda/db";
15
- import { WorkspaceResolution } from "../../workspace/WorkspaceManager.js";
16
- import { RoutingApiClient, RoutingPreviewRequest } from "./generated/RoutingApiClient.js";
17
-
18
- export interface ResolveAgentParams {
19
- workspace: WorkspaceResolution;
20
- commandName: string;
21
- taskType?: string;
22
- overrideAgentSlug?: string;
23
- projectKey?: string;
24
- }
25
-
26
- export interface ResolvedAgent {
27
- agent: Agent;
28
- agentId: string;
29
- agentSlug: string;
30
- model?: string;
31
- capabilities: string[];
32
- healthStatus: AgentHealth["status"] | "unknown";
33
- source: RoutingProvenance;
34
- routingPreview: RoutingPreview;
35
- qaProfile?: string;
36
- docdexScope?: string;
37
- requiredCapabilities: string[];
38
- }
39
-
40
- export class RoutingService {
41
- constructor(
42
- private deps: {
43
- routingApi?: RoutingApiClient;
44
- agentService?: { resolveAgent(idOrSlug: string): Promise<Agent>; getCapabilities?(agentId: string): Promise<string[]>; close?(): Promise<void> };
45
- globalRepo?: GlobalRepository;
46
- },
47
- ) {}
48
-
49
- static async create(): Promise<RoutingService> {
50
- let routingApi: RoutingApiClient | undefined;
51
- try {
52
- routingApi = RoutingApiClient.create();
53
- } catch {
54
- routingApi = undefined;
55
- }
56
- const globalRepo = await GlobalRepository.create();
57
- const agentService = new AgentService(globalRepo);
58
- return new RoutingService({ routingApi, globalRepo, agentService });
59
- }
60
-
61
- async close(): Promise<void> {
62
- if ((this.deps.agentService as any)?.close) {
63
- await (this.deps.agentService as any).close();
64
- }
65
- if (!(this.deps.agentService as any)?.close && (this.deps.globalRepo as any)?.close) {
66
- await (this.deps.globalRepo as any).close();
67
- }
68
- }
69
-
70
- private requiredCapabilities(commandName: string, taskType?: string): string[] {
71
- const normalized = this.normalizeCommand(commandName);
72
- const required = [...getCommandRequiredCapabilities(normalized)];
73
- if (taskType) {
74
- const lower = taskType.toLowerCase();
75
- if (lower.includes("qa")) {
76
- required.push("qa_interpretation");
77
- }
78
- }
79
- return Array.from(new Set(required));
80
- }
81
-
82
- normalizeCommand(commandName: string): string {
83
- return canonicalizeCommandName(commandName);
84
- }
85
-
86
- private async fetchAgent(idOrSlug: string): Promise<Agent> {
87
- const apiAgent =
88
- (await this.deps.routingApi?.getAgent(idOrSlug)) ??
89
- (await this.deps.routingApi?.listAgents())?.find((a) => a.id === idOrSlug || a.slug === idOrSlug);
90
- if (apiAgent) return apiAgent;
91
- if (this.deps.agentService) {
92
- return this.deps.agentService.resolveAgent(idOrSlug);
93
- }
94
- if (this.deps.globalRepo) {
95
- const byId = await this.deps.globalRepo.getAgentById(idOrSlug);
96
- if (byId) return byId;
97
- const bySlug = await this.deps.globalRepo.getAgentBySlug(idOrSlug);
98
- if (bySlug) return bySlug;
99
- }
100
- throw new Error(`Agent ${idOrSlug} not found via routing API`);
101
- }
102
-
103
- private async fetchCapabilities(agent: Agent): Promise<string[]> {
104
- const caps = agent.capabilities ?? [];
105
- if (caps.length) return caps;
106
- if (this.deps.agentService?.getCapabilities) {
107
- return this.deps.agentService.getCapabilities(agent.id);
108
- }
109
- if (this.deps.globalRepo) {
110
- return this.deps.globalRepo.getAgentCapabilities(agent.id);
111
- }
112
- return [];
113
- }
114
-
115
- private normalizeProfile(value?: string): string | undefined {
116
- return value ? value.trim().toLowerCase().replace(/[_\s]+/g, "-") : undefined;
117
- }
118
-
119
- async getWorkspaceDefaults(workspace: WorkspaceResolution | string): Promise<RoutingDefaults> {
120
- const workspaceId = typeof workspace === "string" ? workspace : workspace.workspaceId;
121
- if (typeof workspace !== "string") {
122
- await this.migrateLegacyDefaults(workspace);
123
- }
124
- if (this.deps.routingApi) {
125
- return (await this.deps.routingApi.getWorkspaceDefaults(workspaceId)) ?? [];
126
- }
127
- if (this.deps.globalRepo) {
128
- return this.deps.globalRepo.getWorkspaceDefaults(workspaceId);
129
- }
130
- return [];
131
- }
132
-
133
- private async migrateLegacyDefaults(workspace: WorkspaceResolution): Promise<void> {
134
- if (!this.deps.routingApi) return;
135
- const legacyIds = workspace.legacyWorkspaceIds ?? [];
136
- if (!legacyIds.length) return;
137
- const current = (await this.deps.routingApi.getWorkspaceDefaults(workspace.workspaceId)) ?? [];
138
- if (current.length > 0) return;
139
- for (const legacyId of legacyIds) {
140
- const legacy = await this.deps.routingApi.getWorkspaceDefaults(legacyId);
141
- if (legacy && legacy.length) {
142
- const set: Record<string, string> = {};
143
- for (const entry of legacy) {
144
- const agent = await this.fetchAgent(entry.agentId);
145
- set[this.normalizeCommand(entry.commandName)] = agent.slug ?? agent.id;
146
- }
147
- await this.updateWorkspaceDefaults(workspace.workspaceId, { set });
148
- break;
149
- }
150
- }
151
- }
152
-
153
- async getAgentSummary(agentId: string): Promise<Agent | undefined> {
154
- try {
155
- return await this.fetchAgent(agentId);
156
- } catch {
157
- return undefined;
158
- }
159
- }
160
-
161
- async updateWorkspaceDefaults(workspaceId: string, update: RoutingDefaultsUpdate): Promise<RoutingDefaults> {
162
- const qaProfiles = getKnownQaProfiles().map((p) => this.normalizeProfile(p)).filter(Boolean);
163
- const docdexScopes = getKnownDocdexScopes().map((p) => this.normalizeProfile(p)).filter(Boolean);
164
- const normalizedQa = this.normalizeProfile(update.qaProfile);
165
- const normalizedDocdex = this.normalizeProfile(update.docdexScope);
166
- if (normalizedQa && qaProfiles.length && !qaProfiles.includes(normalizedQa)) {
167
- throw new Error(`Unknown QA profile ${update.qaProfile}; allowed values: ${qaProfiles.join(", ")}`);
168
- }
169
- if (normalizedDocdex && docdexScopes.length && !docdexScopes.includes(normalizedDocdex)) {
170
- throw new Error(`Unknown docdex scope ${update.docdexScope}; allowed values: ${docdexScopes.join(", ")}`);
171
- }
172
-
173
- const normalizedSet: Record<string, string> = {};
174
- const setEntries = Object.entries(update.set ?? {});
175
- for (const [commandName, agentSlug] of setEntries) {
176
- const normalizedCommand = this.normalizeCommand(commandName);
177
- const agent = await this.fetchAgent(agentSlug);
178
- const capabilities = await this.fetchCapabilities(agent);
179
- const required = this.requiredCapabilities(normalizedCommand);
180
- const missing = required.filter((cap) => !capabilities.includes(cap));
181
- if (missing.length) {
182
- throw new Error(
183
- `Agent ${agentSlug} is missing required capabilities for ${normalizedCommand}: ${missing.join(", ")}`,
184
- );
185
- }
186
- normalizedSet[normalizedCommand] = agent.slug ?? agent.id;
187
- }
188
-
189
- const normalizedReset = (update.reset ?? []).map((command) => this.normalizeCommand(command));
190
- if (this.deps.routingApi) {
191
- const updated = await this.deps.routingApi.updateWorkspaceDefaults(workspaceId, {
192
- ...update,
193
- qaProfile: normalizedQa ?? update.qaProfile,
194
- docdexScope: normalizedDocdex ?? update.docdexScope,
195
- set: Object.keys(normalizedSet).length ? normalizedSet : undefined,
196
- reset: normalizedReset.length ? normalizedReset : undefined,
197
- });
198
- return updated ?? [];
199
- }
200
-
201
- if (!this.deps.globalRepo) {
202
- throw new Error("Routing defaults are unavailable without a routing API or global repository");
203
- }
204
-
205
- for (const [commandName, agentSlug] of Object.entries(normalizedSet)) {
206
- const agent = await this.fetchAgent(agentSlug);
207
- await this.deps.globalRepo.setWorkspaceDefault(workspaceId, commandName, agent.id, {
208
- qaProfile: normalizedQa ?? update.qaProfile,
209
- docdexScope: normalizedDocdex ?? update.docdexScope,
210
- });
211
- }
212
- for (const commandName of normalizedReset) {
213
- await this.deps.globalRepo.removeWorkspaceDefault(workspaceId, commandName);
214
- }
215
- return this.deps.globalRepo.getWorkspaceDefaults(workspaceId);
216
- }
217
-
218
- private buildPreviewRequest(params: ResolveAgentParams): RoutingPreviewRequest {
219
- const commandName = this.normalizeCommand(params.commandName);
220
- return {
221
- workspaceId: params.workspace.workspaceId,
222
- commandName,
223
- agentOverride: params.overrideAgentSlug,
224
- taskType: params.taskType,
225
- projectKey: params.projectKey,
226
- requiredCapabilities: this.requiredCapabilities(commandName, params.taskType),
227
- };
228
- }
229
-
230
- async resolveAgentForCommand(params: ResolveAgentParams): Promise<ResolvedAgent> {
231
- await this.migrateLegacyDefaults(params.workspace);
232
- const normalizedCommand = this.normalizeCommand(params.commandName);
233
- const requiredCaps = this.requiredCapabilities(normalizedCommand, params.taskType);
234
-
235
- const fillHealth = async (agentId: string, current?: AgentHealth): Promise<AgentHealth | undefined> => {
236
- if (current && current.status) return current;
237
- const apiAgent = await this.deps.routingApi?.getAgent(agentId);
238
- if (apiAgent?.health) return apiAgent.health as AgentHealth;
239
- if (this.deps.globalRepo) {
240
- return this.deps.globalRepo.getAgentHealth(agentId);
241
- }
242
- return current;
243
- };
244
-
245
- const fallbackFromDefaults = async (): Promise<ResolvedAgent | null> => {
246
- const workspaceDefaults = (await this.deps.routingApi?.getWorkspaceDefaults(params.workspace.workspaceId)) ?? [];
247
- const globalDefaults = (await this.deps.routingApi?.getWorkspaceDefaults("__GLOBAL__")) ?? [];
248
- const findDefault = (defaults: RoutingDefaults, command: string) =>
249
- defaults.find((d) => this.normalizeCommand(d.commandName) === command);
250
- const candidates = [
251
- findDefault(workspaceDefaults, normalizedCommand),
252
- findDefault(globalDefaults, normalizedCommand),
253
- findDefault(workspaceDefaults, "default"),
254
- findDefault(globalDefaults, "default"),
255
- ].filter(Boolean) as RoutingDefaults;
256
-
257
- let chosen:
258
- | { agentId: string; source: RoutingProvenance; qaProfile?: string; docdexScope?: string }
259
- | undefined;
260
- let capabilities: string[] = [];
261
- let agent: Agent | undefined;
262
- for (const candidate of candidates) {
263
- const source =
264
- candidate.workspaceId === "__GLOBAL__"
265
- ? ("global_default" as RoutingProvenance)
266
- : ("workspace_default" as RoutingProvenance);
267
- const resolvedAgent = await this.fetchAgent(candidate.agentId);
268
- const caps = await this.fetchCapabilities(resolvedAgent);
269
- const missingFallback = requiredCaps.filter((cap) => !caps.includes(cap));
270
- if (missingFallback.length === 0) {
271
- chosen = { agentId: resolvedAgent.id, source, qaProfile: candidate.qaProfile, docdexScope: candidate.docdexScope };
272
- capabilities = caps;
273
- agent = resolvedAgent;
274
- const health = await fillHealth(resolvedAgent.id);
275
- if (health?.status === "unreachable") {
276
- continue;
277
- }
278
- break;
279
- }
280
- }
281
- if (!chosen || !agent) return null;
282
- const health = await fillHealth(agent.id);
283
- const preview: RoutingPreview = {
284
- workspaceId: params.workspace.workspaceId,
285
- commandName: normalizedCommand,
286
- resolvedAgent: { ...agent, capabilities, health },
287
- provenance: chosen.source,
288
- requiredCapabilities: requiredCaps,
289
- candidates: [
290
- {
291
- agent: { ...agent, capabilities, health },
292
- agentId: agent.id,
293
- agentSlug: agent.slug,
294
- source: chosen.source,
295
- capabilities,
296
- health,
297
- },
298
- ],
299
- };
300
- return {
301
- agent,
302
- agentId: agent.id,
303
- agentSlug: agent.slug,
304
- model: agent.defaultModel,
305
- capabilities,
306
- healthStatus: health?.status ?? "unknown",
307
- source: chosen.source,
308
- routingPreview: preview,
309
- requiredCapabilities: requiredCaps,
310
- qaProfile: chosen.qaProfile,
311
- docdexScope: chosen.docdexScope,
312
- };
313
- };
314
-
315
- if (this.deps.routingApi) {
316
- const preview = await this.deps.routingApi.preview(this.buildPreviewRequest(params));
317
- if (!preview || !preview.resolvedAgent) {
318
- throw new Error(`Routing preview did not return a resolved agent for ${normalizedCommand}`);
319
- }
320
-
321
- const resolvedAgent = preview.resolvedAgent;
322
- const previewCandidate =
323
- preview.candidates?.find((c) => c.agentId === resolvedAgent.id || c.agentSlug === resolvedAgent.slug) ??
324
- undefined;
325
- let capabilities =
326
- previewCandidate?.capabilities ?? preview.resolvedAgent.capabilities ?? preview.requiredCapabilities ?? [];
327
- if (!capabilities.length) {
328
- capabilities = await this.fetchCapabilities(resolvedAgent);
329
- }
330
-
331
- const missing = requiredCaps.filter((cap) => !capabilities.includes(cap));
332
- if (missing.length > 0) {
333
- if (params.overrideAgentSlug) {
334
- // try fetching full capabilities when override was provided as slug
335
- const overrideAgent = await this.fetchAgent(params.overrideAgentSlug);
336
- const overrideCaps = await this.fetchCapabilities(overrideAgent);
337
- const overrideMissing = requiredCaps.filter((cap) => !overrideCaps.includes(cap));
338
- if (overrideMissing.length === 0) {
339
- const health = await fillHealth(overrideAgent.id, previewCandidate?.health as AgentHealth | undefined);
340
- return {
341
- agent: overrideAgent,
342
- agentId: overrideAgent.id,
343
- agentSlug: overrideAgent.slug,
344
- model: overrideAgent.defaultModel,
345
- capabilities: overrideCaps,
346
- healthStatus: health?.status ?? "unknown",
347
- source: "override",
348
- routingPreview: preview,
349
- requiredCapabilities: requiredCaps,
350
- };
351
- }
352
- }
353
- const fallback = await fallbackFromDefaults();
354
- if (fallback) {
355
- return fallback;
356
- }
357
- throw new Error(
358
- `Resolved agent ${resolvedAgent.slug} is missing required capabilities for ${normalizedCommand}: ${missing.join(", ")}`,
359
- );
360
- }
361
-
362
- const health = (previewCandidate?.health as AgentHealth | undefined) ?? preview.resolvedAgent.health;
363
- const finalHealth = await fillHealth(resolvedAgent.id, health);
364
- const healthStatus = finalHealth?.status ?? health?.status ?? "unknown";
365
-
366
- if (healthStatus === "unreachable") {
367
- const fallback = await fallbackFromDefaults();
368
- if (fallback) return fallback;
369
- throw new Error(`Resolved agent ${resolvedAgent.slug} is unreachable`);
370
- }
371
-
372
- return {
373
- agent: resolvedAgent,
374
- agentId: resolvedAgent.id,
375
- agentSlug: resolvedAgent.slug,
376
- model: resolvedAgent.defaultModel,
377
- capabilities,
378
- healthStatus,
379
- source: preview.provenance ?? (params.overrideAgentSlug ? "override" : "workspace_default"),
380
- routingPreview: preview,
381
- qaProfile: preview.qaProfile,
382
- docdexScope: preview.docdexScope,
383
- requiredCapabilities: requiredCaps,
384
- };
385
- }
386
-
387
- if (!this.deps.globalRepo) {
388
- throw new Error("Routing is unavailable without a routing API or global repository");
389
- }
390
-
391
- const workspaceDefaults = await this.deps.globalRepo.getWorkspaceDefaults(params.workspace.workspaceId);
392
- const globalDefaults = await this.deps.globalRepo.getWorkspaceDefaults("__GLOBAL__");
393
-
394
- const findDefault = (defaults: RoutingDefaults, command: string) =>
395
- defaults.find((d) => this.normalizeCommand(d.commandName) === command);
396
- const commandDefault = findDefault(workspaceDefaults, normalizedCommand) ?? findDefault(globalDefaults, normalizedCommand);
397
- const genericDefault = findDefault(workspaceDefaults, "default") ?? findDefault(globalDefaults, "default");
398
-
399
- const selected: { agentId: string; source: RoutingProvenance; qaProfile?: string; docdexScope?: string } | undefined =
400
- params.overrideAgentSlug != null
401
- ? { agentId: params.overrideAgentSlug, source: "override" as RoutingProvenance }
402
- : commandDefault
403
- ? { agentId: commandDefault.agentId, source: commandDefault.workspaceId === "__GLOBAL__" ? "global_default" : "workspace_default", qaProfile: commandDefault.qaProfile, docdexScope: commandDefault.docdexScope }
404
- : genericDefault
405
- ? {
406
- agentId: genericDefault.agentId,
407
- source: genericDefault.workspaceId === "__GLOBAL__" ? "global_default" : "workspace_default",
408
- qaProfile: genericDefault.qaProfile,
409
- docdexScope: genericDefault.docdexScope,
410
- }
411
- : undefined;
412
-
413
- if (!selected) {
414
- throw new Error(`No routing defaults found for command ${normalizedCommand}`);
415
- }
416
-
417
- const agent = await this.fetchAgent(selected.agentId);
418
- const capabilities = await this.fetchCapabilities(agent);
419
- const missing = requiredCaps.filter((cap) => !capabilities.includes(cap));
420
- if (missing.length) {
421
- throw new Error(
422
- `Resolved agent ${agent.slug} is missing required capabilities for ${normalizedCommand}: ${missing.join(", ")}`,
423
- );
424
- }
425
-
426
- const health = await this.deps.globalRepo.getAgentHealth(agent.id);
427
- const preview: RoutingPreview = {
428
- workspaceId: params.workspace.workspaceId,
429
- commandName: normalizedCommand,
430
- resolvedAgent: { ...agent, capabilities, health },
431
- provenance: selected.source,
432
- requiredCapabilities: requiredCaps,
433
- qaProfile: selected.qaProfile,
434
- docdexScope: selected.docdexScope,
435
- candidates: [
436
- {
437
- agent: { ...agent, capabilities, health },
438
- agentId: agent.id,
439
- agentSlug: agent.slug,
440
- source: selected.source,
441
- capabilities,
442
- health,
443
- },
444
- ],
445
- };
446
-
447
- return {
448
- agent,
449
- agentId: agent.id,
450
- agentSlug: agent.slug,
451
- model: agent.defaultModel,
452
- capabilities,
453
- healthStatus: health?.status ?? "unknown",
454
- source: selected.source,
455
- routingPreview: preview,
456
- qaProfile: selected.qaProfile,
457
- docdexScope: selected.docdexScope,
458
- requiredCapabilities: requiredCaps,
459
- };
460
- }
461
- }
@@ -1,72 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import fs from "node:fs/promises";
4
- import os from "node:os";
5
- import path from "node:path";
6
- import { WorkspaceResolver } from "../../../workspace/WorkspaceManager.js";
7
- import { GatewayAgentService } from "../GatewayAgentService.js";
8
-
9
- test("GatewayAgentService returns analysis and agent decision", async () => {
10
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "mcoda-gateway-"));
11
- const workspace = await WorkspaceResolver.resolveWorkspace({ cwd: dir, explicitWorkspace: dir });
12
-
13
- const agent = { id: "agent-1", slug: "agent-1", adapter: "local", defaultModel: "stub", rating: 6, reasoningRating: 6 };
14
- const service = new (GatewayAgentService as any)(workspace, {
15
- agentService: {
16
- getPrompts: async () => ({
17
- jobPrompt: "Job",
18
- characterPrompt: "Char",
19
- commandPrompts: { "gateway-agent": "Prompt" },
20
- }),
21
- invoke: async () => ({
22
- output: JSON.stringify({
23
- summary: "Update docs",
24
- reasoningSummary: "Docs work",
25
- currentState: "Unknown",
26
- todo: "Update README",
27
- understanding: "Docs updated",
28
- plan: ["Review", "Edit", "Verify"],
29
- complexity: 3,
30
- discipline: "docs",
31
- filesLikelyTouched: ["README.md"],
32
- filesToCreate: [],
33
- assumptions: [],
34
- risks: [],
35
- docdexNotes: ["No matching docs"],
36
- }),
37
- }),
38
- },
39
- docdex: { search: async () => [] },
40
- globalRepo: {
41
- listAgents: async () => [agent],
42
- listAgentHealthSummary: async () => [{ agentId: agent.id, status: "healthy" }],
43
- getAgentCapabilities: async () => ["plan", "docdex_query", "code_write"],
44
- },
45
- jobService: {
46
- startCommandRun: async () => ({ id: "run-1" }),
47
- recordTokenUsage: async () => {},
48
- finishCommandRun: async () => {},
49
- },
50
- workspaceRepo: {},
51
- routingService: {
52
- resolveAgentForCommand: async () => ({ agent }),
53
- },
54
- });
55
-
56
- try {
57
- const result = await service.run({
58
- workspace,
59
- job: "work-on-tasks",
60
- inputText: "Update README",
61
- agentStream: false,
62
- });
63
-
64
- assert.equal(result.job, "work-on-tasks");
65
- assert.equal(result.gatewayAgent.id, agent.id);
66
- assert.equal(result.analysis.discipline, "docs");
67
- assert.equal(result.chosenAgent.agentId, agent.id);
68
- } finally {
69
- await service.close();
70
- await fs.rm(dir, { recursive: true, force: true });
71
- }
72
- });