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,33 +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 { CliQaAdapter } from "../CliQaAdapter.js";
7
- import { QaProfile } from "@mcoda/shared/qa/QaProfile.js";
8
-
9
- test("CliQaAdapter runs command and writes logs", async () => {
10
- const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "mcoda-qa-cli-"));
11
- const adapter = new CliQaAdapter();
12
- const profile: QaProfile = {
13
- name: "unit",
14
- runner: "cli",
15
- test_command: 'node -e "console.log(\\"ok\\")"',
16
- };
17
- const ctx = {
18
- workspaceRoot: tmp,
19
- jobId: "job-1",
20
- taskKey: "task-1",
21
- env: process.env,
22
- artifactDir: path.join(tmp, ".mcoda", "jobs", "job-1", "qa", "task-1"),
23
- };
24
- const ensure = await adapter.ensureInstalled(profile, ctx);
25
- assert.equal(ensure.ok, true);
26
- const result = await adapter.invoke(profile, ctx);
27
- assert.equal(result.outcome, "pass");
28
- assert.equal(result.exitCode, 0);
29
- assert.ok(result.artifacts.length >= 2);
30
- const stdoutPath = path.join(tmp, result.artifacts[0]);
31
- const stdout = await fs.readFile(stdoutPath, "utf8");
32
- assert.match(stdout, /ok/);
33
- });
@@ -1,30 +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 { MaestroQaAdapter } from "../MaestroQaAdapter.js";
7
- import { QaProfile } from "@mcoda/shared/qa/QaProfile.js";
8
-
9
- test("MaestroQaAdapter runs test command and captures artifacts with install skip", async () => {
10
- const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "mcoda-qa-maestro-"));
11
- const adapter = new MaestroQaAdapter();
12
- const profile: QaProfile = {
13
- name: "mobile",
14
- runner: "maestro",
15
- test_command: 'node -e "console.log(\\"mobile ok\\")"',
16
- };
17
- const ctx = {
18
- workspaceRoot: tmp,
19
- jobId: "job-1",
20
- taskKey: "task-1",
21
- env: { ...process.env, MCODA_QA_SKIP_INSTALL: "1" },
22
- artifactDir: path.join(tmp, ".mcoda", "jobs", "job-1", "qa", "task-1"),
23
- };
24
- const ensure = await adapter.ensureInstalled(profile, ctx);
25
- assert.equal(ensure.ok, true);
26
- const result = await adapter.invoke(profile, ctx);
27
- assert.equal(result.outcome, "pass");
28
- assert.equal(result.exitCode, 0);
29
- assert.ok(result.artifacts.length >= 2);
30
- });
@@ -1,5 +0,0 @@
1
- export * from './QaTypes.js';
2
- export * from './QaAdapter.js';
3
- export * from './CliQaAdapter.js';
4
- export * from './ChromiumQaAdapter.js';
5
- export * from './MaestroQaAdapter.js';
@@ -1,50 +0,0 @@
1
- import { ApplyUpdateResponse, UpdateChannel, UpdateInfo } from "@mcoda/shared";
2
-
3
- const toQueryChannel = (channel?: UpdateChannel): string | undefined => {
4
- if (!channel) return undefined;
5
- if (channel === "nightly") return "nightly";
6
- return channel;
7
- };
8
-
9
- export class SystemClient {
10
- constructor(private baseUrl?: string) {}
11
-
12
- private ensureBaseUrl(): string {
13
- if (!this.baseUrl) {
14
- throw new Error("System update API is not configured (set MCODA_API_BASE_URL or MCODA_SYSTEM_API_URL).");
15
- }
16
- return this.baseUrl;
17
- }
18
-
19
- private async fetchJson<T>(input: URL, init?: RequestInit): Promise<T> {
20
- const resp = await fetch(input, {
21
- ...init,
22
- headers: { accept: "application/json", ...(init?.headers as Record<string, string> | undefined) },
23
- });
24
- if (!resp.ok) {
25
- const detail = await resp.text().catch(() => "");
26
- throw new Error(`System update request failed (${resp.status}): ${detail || resp.statusText}`);
27
- }
28
- return (await resp.json()) as T;
29
- }
30
-
31
- async checkUpdate(channel?: UpdateChannel): Promise<UpdateInfo> {
32
- const base = this.ensureBaseUrl();
33
- const url = new URL("/system/update", base);
34
- const queryChannel = toQueryChannel(channel);
35
- if (queryChannel) {
36
- url.searchParams.set("channel", queryChannel);
37
- }
38
- return this.fetchJson<UpdateInfo>(url);
39
- }
40
-
41
- async applyUpdate(body?: { channel?: UpdateChannel }): Promise<ApplyUpdateResponse> {
42
- const base = this.ensureBaseUrl();
43
- const url = new URL("/system/update", base);
44
- return this.fetchJson<ApplyUpdateResponse>(url, {
45
- method: "POST",
46
- headers: { "content-type": "application/json" },
47
- body: body && body.channel ? JSON.stringify({ channel: toQueryChannel(body.channel) }) : undefined,
48
- });
49
- }
50
- }
@@ -1,40 +0,0 @@
1
- import { describe, it, beforeEach, afterEach } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { SystemClient } from "../SystemClient.js";
4
-
5
- describe("SystemClient", () => {
6
- const originalFetch = globalThis.fetch;
7
- let lastRequest: { url?: string; method?: string; body?: string | null } = {};
8
-
9
- beforeEach(() => {
10
- globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => {
11
- const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
12
- lastRequest = { url, method: init?.method ?? "GET", body: init?.body ? String(init.body) : null };
13
- return {
14
- ok: true,
15
- status: 200,
16
- json: async () => ({ currentVersion: "0.1.2", latestVersion: "0.1.2", channel: "stable", updateAvailable: true }),
17
- } as Response;
18
- }) as typeof fetch;
19
- });
20
-
21
- afterEach(() => {
22
- globalThis.fetch = originalFetch;
23
- });
24
-
25
- it("builds update check URL with channel", async () => {
26
- const client = new SystemClient("https://api.test");
27
- await client.checkUpdate("beta");
28
- assert.ok(lastRequest.url?.includes("/system/update"));
29
- assert.ok(lastRequest.url?.includes("channel=beta"));
30
- assert.equal(lastRequest.method, "GET");
31
- });
32
-
33
- it("posts update apply payload", async () => {
34
- const client = new SystemClient("https://api.test");
35
- await client.applyUpdate({ channel: "nightly" });
36
- assert.ok(lastRequest.url?.includes("/system/update"));
37
- assert.equal(lastRequest.method, "POST");
38
- assert.equal(lastRequest.body, JSON.stringify({ channel: "nightly" }));
39
- });
40
- });
@@ -1,139 +0,0 @@
1
- export interface TokenUsageSummaryRow {
2
- workspace_id: string;
3
- project_id?: string | null;
4
- agent_id?: string | null;
5
- model_name?: string | null;
6
- command_name?: string | null;
7
- action?: string | null;
8
- job_id?: string | null;
9
- day?: string | null;
10
- calls: number;
11
- tokens_prompt: number;
12
- tokens_completion: number;
13
- tokens_total: number;
14
- cost_estimate: number | null;
15
- }
16
-
17
- export interface TokenUsageRow {
18
- workspace_id: string;
19
- agent_id: string | null;
20
- model_name: string | null;
21
- job_id: string | null;
22
- command_run_id: string | null;
23
- task_run_id: string | null;
24
- task_id: string | null;
25
- project_id: string | null;
26
- epic_id: string | null;
27
- user_story_id: string | null;
28
- tokens_prompt: number | null;
29
- tokens_completion: number | null;
30
- tokens_total: number | null;
31
- cost_estimate: number | null;
32
- duration_seconds: number | null;
33
- timestamp: string;
34
- command_name?: string | null;
35
- action?: string | null;
36
- error_kind?: string | null;
37
- metadata?: Record<string, unknown>;
38
- }
39
-
40
- export interface TelemetryConfig {
41
- localRecording: boolean;
42
- remoteExport: boolean;
43
- optOut: boolean;
44
- strict: boolean;
45
- [key: string]: unknown;
46
- }
47
-
48
- export class TelemetryClient {
49
- constructor(
50
- private options: {
51
- baseUrl: string;
52
- authToken?: string;
53
- },
54
- ) {}
55
-
56
- private async request<T>(pathname: string, init?: RequestInit): Promise<T> {
57
- const url = new URL(pathname, this.options.baseUrl);
58
- const headers: Record<string, string> = { "Content-Type": "application/json" };
59
- if (this.options.authToken) headers.authorization = `Bearer ${this.options.authToken}`;
60
- const response = await fetch(url, { ...init, headers: { ...headers, ...(init?.headers as any) } });
61
- if (!response.ok) {
62
- throw new Error(`Telemetry request failed (${response.status}): ${await response.text()}`);
63
- }
64
- if (response.status === 204) return undefined as T;
65
- return (await response.json()) as T;
66
- }
67
-
68
- async getSummary(params: {
69
- workspaceId: string;
70
- projectId?: string;
71
- agentId?: string;
72
- commandName?: string;
73
- jobId?: string;
74
- from?: string;
75
- to?: string;
76
- groupBy?: string[];
77
- }): Promise<TokenUsageSummaryRow[]> {
78
- const search = new URLSearchParams();
79
- search.set("workspace_id", params.workspaceId);
80
- if (params.projectId) search.set("project_id", params.projectId);
81
- if (params.agentId) search.set("agent_id", params.agentId);
82
- if (params.commandName) search.set("command_name", params.commandName);
83
- if (params.jobId) search.set("job_id", params.jobId);
84
- if (params.from) search.set("from", params.from);
85
- if (params.to) search.set("to", params.to);
86
- if (params.groupBy && params.groupBy.length > 0) {
87
- search.set("group_by", params.groupBy.join(","));
88
- }
89
- return this.request<TokenUsageSummaryRow[]>(`/telemetry/summary?${search.toString()}`);
90
- }
91
-
92
- async getTokenUsage(params: {
93
- workspaceId: string;
94
- projectId?: string;
95
- agentId?: string;
96
- commandName?: string;
97
- jobId?: string;
98
- taskId?: string;
99
- from?: string;
100
- to?: string;
101
- page?: number;
102
- pageSize?: number;
103
- sort?: string;
104
- }): Promise<TokenUsageRow[]> {
105
- const search = new URLSearchParams();
106
- search.set("workspace_id", params.workspaceId);
107
- if (params.projectId) search.set("project_id", params.projectId);
108
- if (params.agentId) search.set("agent_id", params.agentId);
109
- if (params.commandName) search.set("command_name", params.commandName);
110
- if (params.jobId) search.set("job_id", params.jobId);
111
- if (params.taskId) search.set("task_id", params.taskId);
112
- if (params.from) search.set("from", params.from);
113
- if (params.to) search.set("to", params.to);
114
- if (params.page !== undefined) search.set("page", String(params.page));
115
- if (params.pageSize !== undefined) search.set("page_size", String(params.pageSize));
116
- if (params.sort) search.set("sort", params.sort);
117
- return this.request<TokenUsageRow[]>(`/telemetry/token-usage?${search.toString()}`);
118
- }
119
-
120
- async getConfig(workspaceId: string): Promise<TelemetryConfig> {
121
- const search = new URLSearchParams();
122
- search.set("workspace_id", workspaceId);
123
- return this.request<TelemetryConfig>(`/telemetry/config?${search.toString()}`);
124
- }
125
-
126
- async optOut(workspaceId: string, strict?: boolean): Promise<TelemetryConfig> {
127
- return this.request<TelemetryConfig>(`/telemetry/opt-out`, {
128
- method: "POST",
129
- body: JSON.stringify({ workspace_id: workspaceId, strict: strict ?? false }),
130
- });
131
- }
132
-
133
- async optIn(workspaceId: string): Promise<TelemetryConfig> {
134
- return this.request<TelemetryConfig>(`/telemetry/opt-in`, {
135
- method: "POST",
136
- body: JSON.stringify({ workspace_id: workspaceId }),
137
- });
138
- }
139
- }
@@ -1,41 +0,0 @@
1
- import { describe, it, beforeEach, afterEach } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { TelemetryClient } from "../TelemetryClient.js";
4
-
5
- describe("TelemetryClient", () => {
6
- const originalFetch = globalThis.fetch;
7
- let lastRequest: { url?: string; method?: string; body?: string | null } = {};
8
-
9
- beforeEach(() => {
10
- globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => {
11
- const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
12
- lastRequest = { url, method: init?.method ?? "GET", body: init?.body ? String(init.body) : null };
13
- return {
14
- ok: true,
15
- status: 200,
16
- json: async () => ([]),
17
- } as Response;
18
- }) as typeof fetch;
19
- });
20
-
21
- afterEach(() => {
22
- globalThis.fetch = originalFetch;
23
- });
24
-
25
- it("builds summary query parameters", async () => {
26
- const client = new TelemetryClient({ baseUrl: "https://telemetry.test" });
27
- await client.getSummary({ workspaceId: "ws", projectId: "proj", groupBy: ["day"] });
28
- assert.ok(lastRequest.url?.includes("/telemetry/summary"));
29
- assert.ok(lastRequest.url?.includes("workspace_id=ws"));
30
- assert.ok(lastRequest.url?.includes("project_id=proj"));
31
- assert.ok(lastRequest.url?.includes("group_by=day"));
32
- });
33
-
34
- it("posts opt-out payload", async () => {
35
- const client = new TelemetryClient({ baseUrl: "https://telemetry.test" });
36
- await client.optOut("ws-1", true);
37
- assert.ok(lastRequest.url?.includes("/telemetry/opt-out"));
38
- assert.equal(lastRequest.method, "POST");
39
- assert.equal(lastRequest.body, JSON.stringify({ workspace_id: "ws-1", strict: true }));
40
- });
41
- });
File without changes
@@ -1,211 +0,0 @@
1
- import { exec as execCb, execFile as execFileCb, type ExecOptions } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import fs from "node:fs/promises";
4
- import path from "node:path";
5
-
6
- const exec = promisify(execCb);
7
- const execFile = promisify(execFileCb);
8
-
9
- export class VcsClient {
10
- private async runGit(cwd: string, args: string[]): Promise<{ stdout: string; stderr: string }> {
11
- const { stdout, stderr } = await execFile("git", args, { cwd });
12
- return { stdout, stderr };
13
- }
14
-
15
- private async gitDirExists(cwd: string): Promise<boolean> {
16
- try {
17
- await fs.access(path.join(cwd, ".git"));
18
- return true;
19
- } catch {
20
- return false;
21
- }
22
- }
23
-
24
- async ensureRepo(cwd: string): Promise<void> {
25
- if (await this.gitDirExists(cwd)) return;
26
- await this.runGit(cwd, ["init"]);
27
- }
28
-
29
- async hasRemote(cwd: string): Promise<boolean> {
30
- try {
31
- const { stdout } = await this.runGit(cwd, ["remote"]);
32
- return stdout.trim().length > 0;
33
- } catch {
34
- return false;
35
- }
36
- }
37
-
38
- async currentBranch(cwd: string): Promise<string | null> {
39
- try {
40
- const { stdout } = await this.runGit(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]);
41
- return stdout.trim();
42
- } catch {
43
- return null;
44
- }
45
- }
46
-
47
- async branchExists(cwd: string, branch: string): Promise<boolean> {
48
- try {
49
- await this.runGit(cwd, ["show-ref", "--verify", `refs/heads/${branch}`]);
50
- return true;
51
- } catch {
52
- return false;
53
- }
54
- }
55
-
56
- private async hasCommits(cwd: string): Promise<boolean> {
57
- try {
58
- await this.runGit(cwd, ["rev-parse", "--verify", "HEAD"]);
59
- return true;
60
- } catch {
61
- return false;
62
- }
63
- }
64
-
65
- private async ensureMainBranch(cwd: string): Promise<void> {
66
- await this.ensureRepo(cwd);
67
- if (await this.branchExists(cwd, "main")) return;
68
- const hasHistory = await this.hasCommits(cwd);
69
- if (!hasHistory) {
70
- await this.runGit(cwd, ["checkout", "--orphan", "main"]);
71
- await this.runGit(cwd, ["commit", "--allow-empty", "-m", "chore:init-repo"]);
72
- return;
73
- }
74
- const current = (await this.currentBranch(cwd)) ?? "HEAD";
75
- await this.runGit(cwd, ["checkout", "-b", "main", current]);
76
- }
77
-
78
- async ensureBaseBranch(cwd: string, base: string): Promise<void> {
79
- await this.ensureMainBranch(cwd);
80
- if (await this.branchExists(cwd, base)) return;
81
- const hasHistory = await this.hasCommits(cwd);
82
- const baseFrom = hasHistory
83
- ? (await this.branchExists(cwd, "main")) ? "main" : (await this.currentBranch(cwd)) ?? "HEAD"
84
- : undefined;
85
- const args = ["checkout", "-b", base];
86
- if (baseFrom) args.push(baseFrom);
87
- await this.runGit(cwd, args);
88
- }
89
-
90
- async checkoutBranch(cwd: string, branch: string): Promise<void> {
91
- await this.runGit(cwd, ["checkout", branch]);
92
- }
93
-
94
- async createOrCheckoutBranch(cwd: string, branch: string, base: string): Promise<void> {
95
- if (await this.branchExists(cwd, branch)) {
96
- await this.checkoutBranch(cwd, branch);
97
- return;
98
- }
99
- await this.runGit(cwd, ["checkout", "-b", branch, base]);
100
- }
101
-
102
- async applyPatch(cwd: string, patch: string): Promise<void> {
103
- const opts: ExecOptions = { cwd, shell: true } as any;
104
- const applyCmd = `cat <<'__PATCH__' | git apply --whitespace=nowarn\n${patch}\n__PATCH__`;
105
- try {
106
- await exec(applyCmd, opts as any);
107
- return;
108
- } catch (error) {
109
- // If the patch is already applied, a reverse --check succeeds; treat that as a no-op.
110
- const reverseCheckCmd = `cat <<'__PATCH__' | git apply --reverse --check --whitespace=nowarn\n${patch}\n__PATCH__`;
111
- try {
112
- await exec(reverseCheckCmd, opts as any);
113
- return;
114
- } catch {
115
- throw error;
116
- }
117
- }
118
- }
119
-
120
- async stage(cwd: string, paths: string[]): Promise<void> {
121
- await this.runGit(cwd, ["add", ...paths]);
122
- }
123
-
124
- async commit(
125
- cwd: string,
126
- message: string,
127
- options: { noVerify?: boolean; noGpgSign?: boolean } = {},
128
- ): Promise<void> {
129
- const args = ["commit", "-m", message];
130
- if (options.noVerify) args.push("--no-verify");
131
- if (options.noGpgSign) args.push("--no-gpg-sign");
132
- await this.runGit(cwd, args);
133
- }
134
-
135
- async merge(cwd: string, source: string, target: string, ensureClean = false): Promise<void> {
136
- await this.checkoutBranch(cwd, target);
137
- if (ensureClean) {
138
- await this.ensureClean(cwd);
139
- }
140
- await this.runGit(cwd, ["merge", "--no-edit", source]);
141
- }
142
-
143
- async push(cwd: string, remote: string, branch: string): Promise<void> {
144
- await this.runGit(cwd, ["push", remote, branch]);
145
- }
146
-
147
- async pull(cwd: string, remote: string, branch: string, ffOnly = true): Promise<void> {
148
- const args = ["pull"];
149
- if (ffOnly) args.push("--ff-only");
150
- args.push(remote, branch);
151
- await this.runGit(cwd, args);
152
- }
153
-
154
- async status(cwd: string): Promise<string> {
155
- const { stdout } = await this.runGit(cwd, ["status", "--porcelain"]);
156
- return stdout;
157
- }
158
-
159
- async dirtyPaths(cwd: string): Promise<string[]> {
160
- // Use NUL-terminated porcelain to avoid quoting/escaping issues and to handle renames reliably.
161
- // Format: `XY <path>\0` or for renames/copies: `XY <old>\0<new>\0`.
162
- const { stdout } = await this.runGit(cwd, ["status", "--porcelain", "-z"]);
163
- const entries = stdout.split("\0").filter(Boolean);
164
- const paths: string[] = [];
165
- for (let i = 0; i < entries.length; i += 1) {
166
- const entry = entries[i];
167
- if (entry.length < 4) continue;
168
- const x = entry[0];
169
- const path1 = entry.slice(3);
170
- if ((x === "R" || x === "C") && i + 1 < entries.length) {
171
- const path2 = entries[i + 1];
172
- if (path2) paths.push(path2);
173
- i += 1;
174
- continue;
175
- }
176
- if (path1) paths.push(path1);
177
- }
178
- return paths;
179
- }
180
-
181
- async conflictPaths(cwd: string): Promise<string[]> {
182
- try {
183
- const { stdout } = await this.runGit(cwd, ["diff", "--name-only", "--diff-filter=U"]);
184
- return stdout.split(/\r?\n/).filter(Boolean);
185
- } catch {
186
- return [];
187
- }
188
- }
189
-
190
- async ensureClean(cwd: string, ignoreDotMcoda = true): Promise<void> {
191
- const dirty = await this.dirtyPaths(cwd);
192
- const filtered = ignoreDotMcoda ? dirty.filter((p) => !p.startsWith(".mcoda")) : dirty;
193
- if (filtered.length) {
194
- throw new Error(`Working tree dirty: ${filtered.join(", ")}`);
195
- }
196
- }
197
-
198
- async lastCommitSha(cwd: string): Promise<string> {
199
- const { stdout } = await this.runGit(cwd, ["rev-parse", "HEAD"]);
200
- return stdout.trim();
201
- }
202
-
203
- async diff(cwd: string, base: string, head: string, paths?: string[]): Promise<string> {
204
- const args = ["diff", `${base}...${head}`];
205
- if (paths && paths.length) {
206
- args.push("--", ...paths);
207
- }
208
- const { stdout } = await this.runGit(cwd, args);
209
- return stdout;
210
- }
211
- }
@@ -1,26 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { VcsClient } from "../VcsClient.js";
4
-
5
- describe("VcsClient.dirtyPaths", () => {
6
- it("parses modified paths without stripping filename prefixes", async () => {
7
- const client = new VcsClient();
8
- (client as any).runGit = async () => ({
9
- stdout: ` M README.md\u0000A src/index.ts\u0000?? docs/new file.md\u0000`,
10
- stderr: "",
11
- });
12
- const paths = await client.dirtyPaths("/repo");
13
- assert.deepEqual(paths, ["README.md", "src/index.ts", "docs/new file.md"]);
14
- });
15
-
16
- it("returns the new path for renames/copies", async () => {
17
- const client = new VcsClient();
18
- (client as any).runGit = async () => ({
19
- stdout: `R old.txt\u0000new.txt\u0000C a.md\u0000b.md\u0000`,
20
- stderr: "",
21
- });
22
- const paths = await client.dirtyPaths("/repo");
23
- assert.deepEqual(paths, ["new.txt", "b.md"]);
24
- });
25
- });
26
-
@@ -1,14 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "rootDir": "src",
5
- "outDir": "dist",
6
- "declaration": true,
7
- "declarationMap": true,
8
- "paths": {
9
- "@mcoda/shared": ["packages/shared/dist/index.d.ts"],
10
- "@mcoda/shared/*": ["packages/shared/dist/*"]
11
- }
12
- },
13
- "include": ["src"]
14
- }
@@ -1,7 +0,0 @@
1
- # Changelog
2
-
3
- ## Unreleased
4
- - Initial public packaging for @mcoda/shared.
5
-
6
- ## 0.1.2
7
- - Initial release.
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 bekir dag
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,9 +0,0 @@
1
- # @mcoda/shared
2
-
3
- Shared utilities and schemas used across the mcoda workspace.
4
-
5
- ## Usage
6
- This package is primarily an internal dependency of `mcoda`.
7
-
8
- ## License
9
- MIT - see `LICENSE`.
@@ -1,40 +0,0 @@
1
- {
2
- "name": "@mcoda/shared",
3
- "version": "0.1.2",
4
- "description": "Shared utilities and schemas for mcoda.",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "files": [
9
- "dist",
10
- "!dist/**/__tests__/**",
11
- "!dist/**/*.test.*",
12
- "README.md",
13
- "CHANGELOG.md",
14
- "LICENSE"
15
- ],
16
- "scripts": {
17
- "build": "tsc -p tsconfig.json",
18
- "lint": "echo \"lint not configured\"",
19
- "test": "pnpm run build && node ../../scripts/run-node-tests.js dist"
20
- },
21
- "engines": {
22
- "node": ">=20"
23
- },
24
- "repository": {
25
- "type": "git",
26
- "url": "git+https://github.com/bekirdag/mcoda.git"
27
- },
28
- "bugs": {
29
- "url": "https://github.com/bekirdag/mcoda/issues"
30
- },
31
- "homepage": "https://github.com/bekirdag/mcoda#readme",
32
- "license": "MIT",
33
- "author": "bekir dag",
34
- "publishConfig": {
35
- "access": "public"
36
- },
37
- "dependencies": {
38
- "yaml": "^2.4.2"
39
- }
40
- }