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,288 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert";
3
- import path from "node:path";
4
- import os from "node:os";
5
- import { CreateTasksService } from "../CreateTasksService.js";
6
- import { WorkspaceResolution } from "../../../workspace/WorkspaceManager.js";
7
- import { createEpicKeyGenerator, createStoryKeyGenerator, createTaskKeyGenerator } from "../KeyHelpers.js";
8
-
9
- const workspaceRoot = "/tmp/mcoda-test";
10
- const workspace: WorkspaceResolution = {
11
- workspaceRoot,
12
- workspaceId: workspaceRoot,
13
- mcodaDir: path.join(workspaceRoot, ".mcoda"),
14
- id: workspaceRoot,
15
- legacyWorkspaceIds: [],
16
- workspaceDbPath: path.join(workspaceRoot, ".mcoda", "mcoda.db"),
17
- globalDbPath: path.join(os.homedir(), ".mcoda", "mcoda.db"),
18
- };
19
-
20
- const fakeDoc = {
21
- id: "doc-1",
22
- docType: "SDS",
23
- content: "Sample content",
24
- createdAt: new Date().toISOString(),
25
- updatedAt: new Date().toISOString(),
26
- segments: [{ id: "seg-1", docId: "doc-1", index: 0, content: "Segment content" }],
27
- };
28
-
29
- class StubDocdex {
30
- async fetchDocumentById(id: string) {
31
- return { ...fakeDoc, id };
32
- }
33
- async ensureRegisteredFromFile() {
34
- return fakeDoc;
35
- }
36
- }
37
-
38
- class StubAgentService {
39
- private queue: string[];
40
- constructor(outputs: string[]) {
41
- this.queue = [...outputs];
42
- }
43
- async resolveAgent() {
44
- return { id: "agent-1", slug: "agent-1", adapter: "local-model", defaultModel: "stub" } as any;
45
- }
46
- async invoke() {
47
- return { output: this.queue.shift() ?? "" };
48
- }
49
- }
50
-
51
- class StubRoutingService {
52
- private agent = { id: "agent-1", slug: "agent-1", adapter: "local-model", defaultModel: "stub" } as any;
53
- async resolveAgentForCommand() {
54
- return {
55
- agent: this.agent,
56
- agentId: this.agent.id,
57
- agentSlug: this.agent.slug,
58
- model: this.agent.defaultModel,
59
- capabilities: [],
60
- healthStatus: "healthy",
61
- source: "workspace_default",
62
- routingPreview: { workspaceId: workspace.workspaceId, commandName: "create-tasks" } as any,
63
- };
64
- }
65
- }
66
-
67
- class StubRepo {
68
- async getWorkspaceDefaults() {
69
- return [];
70
- }
71
- async close() {}
72
- }
73
-
74
- class StubWorkspaceRepo {
75
- projects: any[] = [];
76
- epics: any[] = [];
77
- stories: any[] = [];
78
- tasks: any[] = [];
79
- deps: any[] = [];
80
- storyTotals: Record<string, number | null> = {};
81
- epicTotals: Record<string, number | null> = {};
82
- async withTransaction<T>(fn: () => Promise<T>): Promise<T> {
83
- return fn();
84
- }
85
- async createProjectIfMissing(input: any) {
86
- const existing = this.projects.find((p) => p.key === input.key);
87
- if (existing) return existing;
88
- const row = { id: `p-${this.projects.length + 1}`, ...input };
89
- this.projects.push(row);
90
- return row;
91
- }
92
- async listEpicKeys() {
93
- return this.epics.map((e) => e.key);
94
- }
95
- async listStoryKeys(epicId: string) {
96
- return this.stories.filter((s) => s.epicId === epicId).map((s) => s.key);
97
- }
98
- async listTaskKeys(storyId: string) {
99
- return this.tasks.filter((t) => t.userStoryId === storyId).map((t) => t.key);
100
- }
101
- async insertEpics(epics: any[]) {
102
- const rows = epics.map((e, idx) => ({
103
- ...e,
104
- id: `e-${this.epics.length + idx + 1}`,
105
- createdAt: new Date().toISOString(),
106
- updatedAt: new Date().toISOString(),
107
- }));
108
- this.epics.push(...rows);
109
- return rows;
110
- }
111
- async insertStories(stories: any[]) {
112
- const rows = stories.map((s, idx) => ({
113
- ...s,
114
- id: `s-${this.stories.length + idx + 1}`,
115
- createdAt: new Date().toISOString(),
116
- updatedAt: new Date().toISOString(),
117
- }));
118
- this.stories.push(...rows);
119
- return rows;
120
- }
121
- async insertTasks(tasks: any[]) {
122
- const rows = tasks.map((t, idx) => ({
123
- ...t,
124
- id: `t-${this.tasks.length + idx + 1}`,
125
- createdAt: new Date().toISOString(),
126
- updatedAt: new Date().toISOString(),
127
- }));
128
- this.tasks.push(...rows);
129
- return rows;
130
- }
131
- async insertTaskDependencies(deps: any[]) {
132
- const rows = deps.map((d, idx) => ({
133
- ...d,
134
- id: `d-${this.deps.length + idx + 1}`,
135
- createdAt: new Date().toISOString(),
136
- updatedAt: new Date().toISOString(),
137
- }));
138
- this.deps.push(...rows);
139
- return rows;
140
- }
141
- async createTaskRun(input: any) {
142
- return { id: `tr-${this.tasks.length + 1}`, ...input };
143
- }
144
- async updateStoryPointsTotal(id: string, total: number | null) {
145
- this.storyTotals[id] = total;
146
- }
147
- async updateEpicStoryPointsTotal(id: string, total: number | null) {
148
- this.epicTotals[id] = total;
149
- }
150
- async close() {}
151
- }
152
-
153
- class StubJobService {
154
- commandRuns: any[] = [];
155
- jobs: any[] = [];
156
- checkpoints: any[] = [];
157
- async startCommandRun() {
158
- const rec = {
159
- id: `cmd-${this.commandRuns.length + 1}`,
160
- commandName: "create-tasks",
161
- workspaceId: workspace.workspaceId,
162
- status: "running",
163
- startedAt: new Date().toISOString(),
164
- };
165
- this.commandRuns.push(rec);
166
- return rec;
167
- }
168
- async startJob(type: string, commandRunId: string) {
169
- const rec = {
170
- id: `job-${this.jobs.length + 1}`,
171
- type,
172
- state: "running",
173
- commandRunId,
174
- workspaceId: workspace.workspaceId,
175
- createdAt: new Date().toISOString(),
176
- updatedAt: new Date().toISOString(),
177
- };
178
- this.jobs.push(rec);
179
- return rec as any;
180
- }
181
- async writeCheckpoint(jobId: string, ckpt: any) {
182
- this.checkpoints.push({ jobId, ...ckpt });
183
- }
184
- async appendLog() {}
185
- async recordTokenUsage() {}
186
- async updateJobStatus(jobId: string, state: string, meta?: any) {
187
- const idx = this.jobs.findIndex((j) => j.id === jobId);
188
- if (idx >= 0) this.jobs[idx] = { ...this.jobs[idx], state, meta };
189
- }
190
- async finishCommandRun(id: string, status: string, _error?: string, _spProcessed?: number) {
191
- const idx = this.commandRuns.findIndex((c) => c.id === id);
192
- if (idx >= 0) this.commandRuns[idx] = { ...this.commandRuns[idx], status };
193
- }
194
- async close() {}
195
- }
196
-
197
- test("Key generators respect existing keys", () => {
198
- const epicGen = createEpicKeyGenerator("web", ["web-01"]);
199
- assert.equal(epicGen(), "web-02");
200
- const storyGen = createStoryKeyGenerator("web-02", ["web-02-us-01"]);
201
- assert.equal(storyGen(), "web-02-us-02");
202
- const taskGen = createTaskKeyGenerator("web-02-us-02", ["web-02-us-02-t01"]);
203
- assert.equal(taskGen(), "web-02-us-02-t02");
204
- });
205
-
206
- test("createTasks generates epics, stories, tasks with dependencies and totals", async () => {
207
- const outputs = [
208
- JSON.stringify({
209
- epics: [
210
- {
211
- localId: "e1",
212
- area: "web",
213
- title: "Epic One",
214
- description: "Epic desc",
215
- acceptanceCriteria: ["ac1"],
216
- },
217
- ],
218
- }),
219
- JSON.stringify({
220
- stories: [
221
- {
222
- localId: "us1",
223
- title: "Story One",
224
- description: "Story desc",
225
- acceptanceCriteria: ["s ac1"],
226
- },
227
- ],
228
- }),
229
- JSON.stringify({
230
- tasks: [
231
- {
232
- localId: "t1",
233
- title: "Task One",
234
- type: "feature",
235
- description: "Task desc",
236
- estimatedStoryPoints: 3,
237
- priorityHint: 5,
238
- dependsOnKeys: [],
239
- },
240
- ],
241
- }),
242
- ];
243
- const service = new CreateTasksService(workspace, {
244
- docdex: new StubDocdex() as any,
245
- jobService: new StubJobService() as any,
246
- agentService: new StubAgentService(outputs) as any,
247
- routingService: new StubRoutingService() as any,
248
- repo: new StubRepo() as any,
249
- workspaceRepo: new StubWorkspaceRepo() as any,
250
- });
251
-
252
- const result = await service.createTasks({
253
- workspace,
254
- projectKey: "web",
255
- inputs: [],
256
- agentStream: false,
257
- });
258
-
259
- assert.equal(result.epics.length, 1);
260
- assert.equal(result.stories.length, 1);
261
- assert.equal(result.tasks.length, 1);
262
- assert.equal(result.dependencies.length, 0);
263
- assert.equal(result.tasks[0].status, "not_started");
264
- assert.equal(result.tasks[0].storyPoints, 3);
265
- });
266
-
267
- test("createTasks fails on invalid agent output", async () => {
268
- const outputs = ["not json"];
269
- const jobService = new StubJobService();
270
- const service = new CreateTasksService(workspace, {
271
- docdex: new StubDocdex() as any,
272
- jobService: jobService as any,
273
- agentService: new StubAgentService(outputs) as any,
274
- routingService: new StubRoutingService() as any,
275
- repo: new StubRepo() as any,
276
- workspaceRepo: new StubWorkspaceRepo() as any,
277
- });
278
- await assert.rejects(
279
- () =>
280
- service.createTasks({
281
- workspace,
282
- projectKey: "web",
283
- inputs: [],
284
- agentStream: false,
285
- }),
286
- /valid JSON/i,
287
- );
288
- });
@@ -1,16 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { normalizeAreaCode, createEpicKeyGenerator } from "../KeyHelpers.js";
4
-
5
- describe("KeyHelpers", () => {
6
- it("normalizes area aliases", () => {
7
- assert.equal(normalizeAreaCode("frontend", "proj"), "web");
8
- assert.equal(normalizeAreaCode("infra", "proj"), "ops");
9
- });
10
-
11
- it("generates epic keys with area codes", () => {
12
- const gen = createEpicKeyGenerator("proj", ["web-01"]);
13
- const key = gen("frontend");
14
- assert.equal(key, "web-02");
15
- });
16
- });
@@ -1,172 +0,0 @@
1
- import { describe, it, beforeEach, afterEach } from "node:test";
2
- import assert from "node:assert/strict";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import fs from "node:fs/promises";
6
- import { RefineTasksService } from "../RefineTasksService.js";
7
- import { WorkspaceResolver } from "../../../workspace/WorkspaceManager.js";
8
- import { WorkspaceRepository } from "@mcoda/db";
9
- import type { RefineTasksPlan } from "@mcoda/shared";
10
-
11
- describe("RefineTasksService", () => {
12
- let workspaceDir: string;
13
- let repo: WorkspaceRepository;
14
- let planPath: string;
15
- let taskKey: string;
16
- let workspace: Awaited<ReturnType<typeof WorkspaceResolver.resolveWorkspace>>;
17
- let service: RefineTasksService;
18
- let storyId: string;
19
- let epicId: string;
20
-
21
- beforeEach(async () => {
22
- workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "mcoda-refine-"));
23
- workspace = await WorkspaceResolver.resolveWorkspace({ cwd: workspaceDir, explicitWorkspace: workspaceDir });
24
- service = await RefineTasksService.create(workspace);
25
- repo = (service as any).workspaceRepo as WorkspaceRepository;
26
-
27
- const project = await repo.createProjectIfMissing({ key: "demo", name: "demo" });
28
- const [epic] = await repo.insertEpics([
29
- { projectId: project.id, key: "demo-01", title: "Demo Epic", description: "Epic" },
30
- ]);
31
- epicId = epic.id;
32
- const [story] = await repo.insertStories([
33
- { projectId: project.id, epicId: epic.id, key: "demo-01-us-01", title: "Story", description: "Story" },
34
- ]);
35
- storyId = story.id;
36
- const [task] = await repo.insertTasks([
37
- {
38
- projectId: project.id,
39
- epicId: epic.id,
40
- userStoryId: story.id,
41
- key: "demo-01-us-01-t01",
42
- title: "Initial task",
43
- description: "desc",
44
- status: "not_started",
45
- },
46
- ]);
47
- taskKey = task.key;
48
-
49
- const plan: RefineTasksPlan = {
50
- strategy: "estimate",
51
- operations: [{ op: "update_estimate", taskKey, storyPoints: 5 }],
52
- warnings: [],
53
- };
54
- planPath = path.join(workspaceDir, "plan.json");
55
- await fs.writeFile(planPath, JSON.stringify(plan, null, 2), "utf8");
56
-
57
- });
58
-
59
- afterEach(async () => {
60
- await service?.close();
61
- await fs.rm(workspaceDir, { recursive: true, force: true });
62
- });
63
-
64
- it("applies plan-in operations without invoking an agent", async () => {
65
- const result = await service.refineTasks({
66
- workspace,
67
- projectKey: "demo",
68
- planInPath: planPath,
69
- strategy: "estimate",
70
- agentStream: false,
71
- fromDb: true,
72
- apply: true,
73
- dryRun: false,
74
- });
75
-
76
- assert.equal(result.applied, true);
77
- assert.ok(result.updatedTasks?.includes(taskKey));
78
-
79
- const row = await repo.getDb().get<{ story_points: number }>(`SELECT story_points FROM tasks WHERE key = ?`, taskKey);
80
- assert.equal(row?.story_points, 5);
81
- });
82
-
83
- it("updates rollups on estimate changes", async () => {
84
- const plan: RefineTasksPlan = {
85
- strategy: "estimate",
86
- operations: [{ op: "update_estimate", taskKey, storyPoints: 3 }],
87
- };
88
- const tmpPlan = path.join(workspaceDir, "plan-rollup.json");
89
- await fs.writeFile(tmpPlan, JSON.stringify(plan, null, 2), "utf8");
90
- await service.refineTasks({
91
- workspace,
92
- projectKey: "demo",
93
- planInPath: tmpPlan,
94
- strategy: "estimate",
95
- agentStream: false,
96
- fromDb: true,
97
- apply: true,
98
- dryRun: false,
99
- });
100
- const storyRow = await repo.getDb().get<{ total: number }>(
101
- `SELECT story_points_total as total FROM user_stories WHERE id = ?`,
102
- storyId,
103
- );
104
- const epicRow = await repo.getDb().get<{ total: number }>(
105
- `SELECT story_points_total as total FROM epics WHERE id = ?`,
106
- epicId,
107
- );
108
- assert.equal(storyRow?.total, 3);
109
- assert.equal(epicRow?.total, 3);
110
- });
111
-
112
- it("skips operations outside status filter", async () => {
113
- // Mark original task as blocked and create another eligible task to keep selection non-empty.
114
- await repo.getDb().run(`UPDATE tasks SET status = 'blocked' WHERE key = ?`, taskKey);
115
- const [eligible] = await repo.insertTasks([
116
- {
117
- projectId: (await repo.getProjectByKey("demo"))!.id,
118
- epicId,
119
- userStoryId: storyId,
120
- key: "demo-01-us-01-t02",
121
- title: "Eligible task",
122
- description: "desc",
123
- status: "not_started",
124
- },
125
- ]);
126
-
127
- const plan: RefineTasksPlan = {
128
- strategy: "estimate",
129
- operations: [{ op: "update_estimate", taskKey, storyPoints: 8 }],
130
- };
131
- const tmpPlan = path.join(workspaceDir, "plan-status.json");
132
- await fs.writeFile(tmpPlan, JSON.stringify(plan, null, 2), "utf8");
133
- const result = await service.refineTasks({
134
- workspace,
135
- projectKey: "demo",
136
- planInPath: tmpPlan,
137
- strategy: "estimate",
138
- agentStream: false,
139
- fromDb: true,
140
- statusFilter: ["not_started"],
141
- });
142
- assert.equal(result.updatedTasks?.length ?? 0, 0);
143
- assert.ok(result.plan.warnings?.some((w) => w.includes("not in selection")));
144
- const row = await repo.getDb().get<{ story_points: number | null }>(
145
- `SELECT story_points FROM tasks WHERE key = ?`,
146
- taskKey,
147
- );
148
- assert.equal(row?.story_points ?? null, null);
149
- // Eligible task should still exist untouched.
150
- const okRow = await repo.getDb().get<{ key: string }>(`SELECT key FROM tasks WHERE id = ?`, eligible.id);
151
- assert.equal(okRow?.key, eligible.key);
152
- });
153
-
154
- it("rejects plan-in operations targeting unknown tasks", async () => {
155
- const plan: RefineTasksPlan = {
156
- strategy: "estimate",
157
- operations: [{ op: "update_estimate", taskKey: "does-not-exist", storyPoints: 2 }],
158
- };
159
- const tmpPlan = path.join(workspaceDir, "plan-bad.json");
160
- await fs.writeFile(tmpPlan, JSON.stringify(plan, null, 2), "utf8");
161
- const result = await service.refineTasks({
162
- workspace,
163
- projectKey: "demo",
164
- planInPath: tmpPlan,
165
- strategy: "estimate",
166
- agentStream: false,
167
- fromDb: true,
168
- });
169
- assert.equal(result.updatedTasks?.length ?? 0, 0);
170
- assert.ok(result.plan.warnings?.some((w) => w.includes("not in selection")));
171
- });
172
- });