@jokerized/getresearchdone 0.4.1

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 (711) hide show
  1. package/.claude-plugin/plugin.json +103 -0
  2. package/README.md +211 -0
  3. package/agents/grd-baseline-assessor.md +684 -0
  4. package/agents/grd-code-reviewer.md +300 -0
  5. package/agents/grd-codebase-mapper.md +355 -0
  6. package/agents/grd-critique-agent.md +119 -0
  7. package/agents/grd-debugger.md +519 -0
  8. package/agents/grd-deep-diver.md +737 -0
  9. package/agents/grd-eval-planner.md +913 -0
  10. package/agents/grd-eval-reporter.md +717 -0
  11. package/agents/grd-executor.md +683 -0
  12. package/agents/grd-feasibility-analyst.md +624 -0
  13. package/agents/grd-integration-checker.md +367 -0
  14. package/agents/grd-knowledge-miner.md +81 -0
  15. package/agents/grd-migrator.md +88 -0
  16. package/agents/grd-phase-researcher.md +697 -0
  17. package/agents/grd-plan-checker.md +443 -0
  18. package/agents/grd-planner.md +1532 -0
  19. package/agents/grd-product-owner.md +562 -0
  20. package/agents/grd-project-researcher.md +513 -0
  21. package/agents/grd-research-synthesizer.md +273 -0
  22. package/agents/grd-roadmapper.md +798 -0
  23. package/agents/grd-surveyor.md +566 -0
  24. package/agents/grd-verifier.md +893 -0
  25. package/bin/gd.js +4 -0
  26. package/bin/gd.ts +227 -0
  27. package/bin/grd-manifest.js +4 -0
  28. package/bin/grd-manifest.ts +286 -0
  29. package/bin/grd-mcp-server.js +4 -0
  30. package/bin/grd-mcp-server.ts +124 -0
  31. package/bin/grd-tools.js +4 -0
  32. package/bin/grd-tools.ts +2471 -0
  33. package/bin/postinstall.js +4 -0
  34. package/bin/postinstall.ts +80 -0
  35. package/commands/add-phase.md +123 -0
  36. package/commands/add-todo.md +87 -0
  37. package/commands/assess-baseline.md +289 -0
  38. package/commands/autopilot.md +100 -0
  39. package/commands/autoplan.md +55 -0
  40. package/commands/check-todos.md +87 -0
  41. package/commands/compare-methods.md +262 -0
  42. package/commands/complete-milestone.md +225 -0
  43. package/commands/debug.md +372 -0
  44. package/commands/deep-dive.md +288 -0
  45. package/commands/discover.md +281 -0
  46. package/commands/discuss-phase.md +188 -0
  47. package/commands/discuss.md +55 -0
  48. package/commands/eval-report.md +310 -0
  49. package/commands/evolve.md +79 -0
  50. package/commands/execute-phase.md +1017 -0
  51. package/commands/feasibility.md +292 -0
  52. package/commands/help.md +407 -0
  53. package/commands/init.md +1508 -0
  54. package/commands/insert-phase.md +113 -0
  55. package/commands/iterate.md +327 -0
  56. package/commands/list-phase-assumptions.md +217 -0
  57. package/commands/long-term-roadmap.md +202 -0
  58. package/commands/map-codebase.md +111 -0
  59. package/commands/migrate.md +159 -0
  60. package/commands/new-milestone.md +169 -0
  61. package/commands/pause-work.md +83 -0
  62. package/commands/plan-milestone-gaps.md +373 -0
  63. package/commands/plan-phase.md +655 -0
  64. package/commands/principles.md +328 -0
  65. package/commands/product-plan.md +319 -0
  66. package/commands/progress.md +481 -0
  67. package/commands/quick.md +167 -0
  68. package/commands/reapply-patches.md +154 -0
  69. package/commands/remove-phase.md +97 -0
  70. package/commands/requirement.md +96 -0
  71. package/commands/resume-project.md +113 -0
  72. package/commands/settings.md +1144 -0
  73. package/commands/survey.md +242 -0
  74. package/commands/sync.md +246 -0
  75. package/commands/tracker-setup.md +322 -0
  76. package/commands/update.md +202 -0
  77. package/commands/verify-phase.md +335 -0
  78. package/commands/verify-work.md +701 -0
  79. package/commands/wireup.md +29 -0
  80. package/dist/bin/gd.d.ts +3 -0
  81. package/dist/bin/gd.d.ts.map +1 -0
  82. package/dist/bin/gd.js +178 -0
  83. package/dist/bin/gd.js.map +1 -0
  84. package/dist/bin/grd-manifest.d.ts +3 -0
  85. package/dist/bin/grd-manifest.d.ts.map +1 -0
  86. package/dist/bin/grd-manifest.js +202 -0
  87. package/dist/bin/grd-manifest.js.map +1 -0
  88. package/dist/bin/grd-mcp-server.d.ts +3 -0
  89. package/dist/bin/grd-mcp-server.d.ts.map +1 -0
  90. package/dist/bin/grd-mcp-server.js +71 -0
  91. package/dist/bin/grd-mcp-server.js.map +1 -0
  92. package/dist/bin/grd-tools.d.ts +3 -0
  93. package/dist/bin/grd-tools.d.ts.map +1 -0
  94. package/dist/bin/grd-tools.js +1680 -0
  95. package/dist/bin/grd-tools.js.map +1 -0
  96. package/dist/bin/postinstall.d.ts +3 -0
  97. package/dist/bin/postinstall.d.ts.map +1 -0
  98. package/dist/bin/postinstall.js +61 -0
  99. package/dist/bin/postinstall.js.map +1 -0
  100. package/dist/lib/autopilot-milestone.d.ts +2 -0
  101. package/dist/lib/autopilot-milestone.d.ts.map +1 -0
  102. package/dist/lib/autopilot-milestone.js +94 -0
  103. package/dist/lib/autopilot-milestone.js.map +1 -0
  104. package/dist/lib/autopilot-pipeline.d.ts +2 -0
  105. package/dist/lib/autopilot-pipeline.d.ts.map +1 -0
  106. package/dist/lib/autopilot-pipeline.js +830 -0
  107. package/dist/lib/autopilot-pipeline.js.map +1 -0
  108. package/dist/lib/autopilot-waves.d.ts +2 -0
  109. package/dist/lib/autopilot-waves.d.ts.map +1 -0
  110. package/dist/lib/autopilot-waves.js +266 -0
  111. package/dist/lib/autopilot-waves.js.map +1 -0
  112. package/dist/lib/autopilot.d.ts +2 -0
  113. package/dist/lib/autopilot.d.ts.map +1 -0
  114. package/dist/lib/autopilot.js +1314 -0
  115. package/dist/lib/autopilot.js.map +1 -0
  116. package/dist/lib/autoplan.d.ts +2 -0
  117. package/dist/lib/autoplan.d.ts.map +1 -0
  118. package/dist/lib/autoplan.js +198 -0
  119. package/dist/lib/autoplan.js.map +1 -0
  120. package/dist/lib/autoresearch.d.ts +2 -0
  121. package/dist/lib/autoresearch.d.ts.map +1 -0
  122. package/dist/lib/autoresearch.js +626 -0
  123. package/dist/lib/autoresearch.js.map +1 -0
  124. package/dist/lib/backend.d.ts +2 -0
  125. package/dist/lib/backend.d.ts.map +1 -0
  126. package/dist/lib/backend.js +1036 -0
  127. package/dist/lib/backend.js.map +1 -0
  128. package/dist/lib/benchmark.d.ts +99 -0
  129. package/dist/lib/benchmark.d.ts.map +1 -0
  130. package/dist/lib/benchmark.js +278 -0
  131. package/dist/lib/benchmark.js.map +1 -0
  132. package/dist/lib/citations.d.ts +2 -0
  133. package/dist/lib/citations.d.ts.map +1 -0
  134. package/dist/lib/citations.js +642 -0
  135. package/dist/lib/citations.js.map +1 -0
  136. package/dist/lib/cleanup.d.ts +2 -0
  137. package/dist/lib/cleanup.d.ts.map +1 -0
  138. package/dist/lib/cleanup.js +1222 -0
  139. package/dist/lib/cleanup.js.map +1 -0
  140. package/dist/lib/cli/adapters.d.ts +10 -0
  141. package/dist/lib/cli/adapters.d.ts.map +1 -0
  142. package/dist/lib/cli/adapters.js +27 -0
  143. package/dist/lib/cli/adapters.js.map +1 -0
  144. package/dist/lib/cli/agent.d.ts +17 -0
  145. package/dist/lib/cli/agent.d.ts.map +1 -0
  146. package/dist/lib/cli/agent.js +53 -0
  147. package/dist/lib/cli/agent.js.map +1 -0
  148. package/dist/lib/cli/index.d.ts +21 -0
  149. package/dist/lib/cli/index.d.ts.map +1 -0
  150. package/dist/lib/cli/index.js +264 -0
  151. package/dist/lib/cli/index.js.map +1 -0
  152. package/dist/lib/cli/output.d.ts +20 -0
  153. package/dist/lib/cli/output.d.ts.map +1 -0
  154. package/dist/lib/cli/output.js +22 -0
  155. package/dist/lib/cli/output.js.map +1 -0
  156. package/dist/lib/cli/scan-dispatch.d.ts +9 -0
  157. package/dist/lib/cli/scan-dispatch.d.ts.map +1 -0
  158. package/dist/lib/cli/scan-dispatch.js +107 -0
  159. package/dist/lib/cli/scan-dispatch.js.map +1 -0
  160. package/dist/lib/cli/tools.d.ts +16 -0
  161. package/dist/lib/cli/tools.d.ts.map +1 -0
  162. package/dist/lib/cli/tools.js +168 -0
  163. package/dist/lib/cli/tools.js.map +1 -0
  164. package/dist/lib/commands/_dashboard-parsers.d.ts +2 -0
  165. package/dist/lib/commands/_dashboard-parsers.d.ts.map +1 -0
  166. package/dist/lib/commands/_dashboard-parsers.js +192 -0
  167. package/dist/lib/commands/_dashboard-parsers.js.map +1 -0
  168. package/dist/lib/commands/analysis.d.ts +2 -0
  169. package/dist/lib/commands/analysis.d.ts.map +1 -0
  170. package/dist/lib/commands/analysis.js +1418 -0
  171. package/dist/lib/commands/analysis.js.map +1 -0
  172. package/dist/lib/commands/assumptions.d.ts +2 -0
  173. package/dist/lib/commands/assumptions.d.ts.map +1 -0
  174. package/dist/lib/commands/assumptions.js +166 -0
  175. package/dist/lib/commands/assumptions.js.map +1 -0
  176. package/dist/lib/commands/blame.d.ts +2 -0
  177. package/dist/lib/commands/blame.d.ts.map +1 -0
  178. package/dist/lib/commands/blame.js +133 -0
  179. package/dist/lib/commands/blame.js.map +1 -0
  180. package/dist/lib/commands/budget.d.ts +2 -0
  181. package/dist/lib/commands/budget.d.ts.map +1 -0
  182. package/dist/lib/commands/budget.js +100 -0
  183. package/dist/lib/commands/budget.js.map +1 -0
  184. package/dist/lib/commands/check-plans.d.ts +2 -0
  185. package/dist/lib/commands/check-plans.d.ts.map +1 -0
  186. package/dist/lib/commands/check-plans.js +190 -0
  187. package/dist/lib/commands/check-plans.js.map +1 -0
  188. package/dist/lib/commands/config.d.ts +2 -0
  189. package/dist/lib/commands/config.d.ts.map +1 -0
  190. package/dist/lib/commands/config.js +188 -0
  191. package/dist/lib/commands/config.js.map +1 -0
  192. package/dist/lib/commands/dashboard.d.ts +2 -0
  193. package/dist/lib/commands/dashboard.d.ts.map +1 -0
  194. package/dist/lib/commands/dashboard.js +466 -0
  195. package/dist/lib/commands/dashboard.js.map +1 -0
  196. package/dist/lib/commands/estimate.d.ts +2 -0
  197. package/dist/lib/commands/estimate.d.ts.map +1 -0
  198. package/dist/lib/commands/estimate.js +148 -0
  199. package/dist/lib/commands/estimate.js.map +1 -0
  200. package/dist/lib/commands/eval-diff.d.ts +2 -0
  201. package/dist/lib/commands/eval-diff.d.ts.map +1 -0
  202. package/dist/lib/commands/eval-diff.js +213 -0
  203. package/dist/lib/commands/eval-diff.js.map +1 -0
  204. package/dist/lib/commands/freshness.d.ts +2 -0
  205. package/dist/lib/commands/freshness.d.ts.map +1 -0
  206. package/dist/lib/commands/freshness.js +163 -0
  207. package/dist/lib/commands/freshness.js.map +1 -0
  208. package/dist/lib/commands/health.d.ts +2 -0
  209. package/dist/lib/commands/health.d.ts.map +1 -0
  210. package/dist/lib/commands/health.js +435 -0
  211. package/dist/lib/commands/health.js.map +1 -0
  212. package/dist/lib/commands/index.d.ts +2 -0
  213. package/dist/lib/commands/index.d.ts.map +1 -0
  214. package/dist/lib/commands/index.js +128 -0
  215. package/dist/lib/commands/index.js.map +1 -0
  216. package/dist/lib/commands/install.d.ts +56 -0
  217. package/dist/lib/commands/install.d.ts.map +1 -0
  218. package/dist/lib/commands/install.js +214 -0
  219. package/dist/lib/commands/install.js.map +1 -0
  220. package/dist/lib/commands/knowhow-aggregator.d.ts +2 -0
  221. package/dist/lib/commands/knowhow-aggregator.d.ts.map +1 -0
  222. package/dist/lib/commands/knowhow-aggregator.js +279 -0
  223. package/dist/lib/commands/knowhow-aggregator.js.map +1 -0
  224. package/dist/lib/commands/knowledge-search.d.ts +2 -0
  225. package/dist/lib/commands/knowledge-search.d.ts.map +1 -0
  226. package/dist/lib/commands/knowledge-search.js +113 -0
  227. package/dist/lib/commands/knowledge-search.js.map +1 -0
  228. package/dist/lib/commands/long-term-roadmap.d.ts +2 -0
  229. package/dist/lib/commands/long-term-roadmap.d.ts.map +1 -0
  230. package/dist/lib/commands/long-term-roadmap.js +272 -0
  231. package/dist/lib/commands/long-term-roadmap.js.map +1 -0
  232. package/dist/lib/commands/patterns.d.ts +91 -0
  233. package/dist/lib/commands/patterns.d.ts.map +1 -0
  234. package/dist/lib/commands/patterns.js +391 -0
  235. package/dist/lib/commands/patterns.js.map +1 -0
  236. package/dist/lib/commands/phase-info.d.ts +2 -0
  237. package/dist/lib/commands/phase-info.d.ts.map +1 -0
  238. package/dist/lib/commands/phase-info.js +509 -0
  239. package/dist/lib/commands/phase-info.js.map +1 -0
  240. package/dist/lib/commands/plan-lint.d.ts +56 -0
  241. package/dist/lib/commands/plan-lint.d.ts.map +1 -0
  242. package/dist/lib/commands/plan-lint.js +481 -0
  243. package/dist/lib/commands/plan-lint.js.map +1 -0
  244. package/dist/lib/commands/plan-phase.d.ts +53 -0
  245. package/dist/lib/commands/plan-phase.d.ts.map +1 -0
  246. package/dist/lib/commands/plan-phase.js +288 -0
  247. package/dist/lib/commands/plan-phase.js.map +1 -0
  248. package/dist/lib/commands/progress.d.ts +2 -0
  249. package/dist/lib/commands/progress.d.ts.map +1 -0
  250. package/dist/lib/commands/progress.js +266 -0
  251. package/dist/lib/commands/progress.js.map +1 -0
  252. package/dist/lib/commands/quality.d.ts +2 -0
  253. package/dist/lib/commands/quality.d.ts.map +1 -0
  254. package/dist/lib/commands/quality.js +80 -0
  255. package/dist/lib/commands/quality.js.map +1 -0
  256. package/dist/lib/commands/rollback.d.ts +2 -0
  257. package/dist/lib/commands/rollback.d.ts.map +1 -0
  258. package/dist/lib/commands/rollback.js +145 -0
  259. package/dist/lib/commands/rollback.js.map +1 -0
  260. package/dist/lib/commands/scan.d.ts +25 -0
  261. package/dist/lib/commands/scan.d.ts.map +1 -0
  262. package/dist/lib/commands/scan.js +28 -0
  263. package/dist/lib/commands/scan.js.map +1 -0
  264. package/dist/lib/commands/search.d.ts +2 -0
  265. package/dist/lib/commands/search.d.ts.map +1 -0
  266. package/dist/lib/commands/search.js +212 -0
  267. package/dist/lib/commands/search.js.map +1 -0
  268. package/dist/lib/commands/select-candidate.d.ts +128 -0
  269. package/dist/lib/commands/select-candidate.d.ts.map +1 -0
  270. package/dist/lib/commands/select-candidate.js +518 -0
  271. package/dist/lib/commands/select-candidate.js.map +1 -0
  272. package/dist/lib/commands/singularity.d.ts +2 -0
  273. package/dist/lib/commands/singularity.d.ts.map +1 -0
  274. package/dist/lib/commands/singularity.js +185 -0
  275. package/dist/lib/commands/singularity.js.map +1 -0
  276. package/dist/lib/commands/slug-timestamp.d.ts +2 -0
  277. package/dist/lib/commands/slug-timestamp.d.ts.map +1 -0
  278. package/dist/lib/commands/slug-timestamp.js +54 -0
  279. package/dist/lib/commands/slug-timestamp.js.map +1 -0
  280. package/dist/lib/commands/tail.d.ts +2 -0
  281. package/dist/lib/commands/tail.d.ts.map +1 -0
  282. package/dist/lib/commands/tail.js +100 -0
  283. package/dist/lib/commands/tail.js.map +1 -0
  284. package/dist/lib/commands/todo.d.ts +2 -0
  285. package/dist/lib/commands/todo.d.ts.map +1 -0
  286. package/dist/lib/commands/todo.js +200 -0
  287. package/dist/lib/commands/todo.js.map +1 -0
  288. package/dist/lib/commands/watch.d.ts +2 -0
  289. package/dist/lib/commands/watch.d.ts.map +1 -0
  290. package/dist/lib/commands/watch.js +72 -0
  291. package/dist/lib/commands/watch.js.map +1 -0
  292. package/dist/lib/complexity.d.ts +55 -0
  293. package/dist/lib/complexity.d.ts.map +1 -0
  294. package/dist/lib/complexity.js +80 -0
  295. package/dist/lib/complexity.js.map +1 -0
  296. package/dist/lib/context/agents.d.ts +2 -0
  297. package/dist/lib/context/agents.d.ts.map +1 -0
  298. package/dist/lib/context/agents.js +344 -0
  299. package/dist/lib/context/agents.js.map +1 -0
  300. package/dist/lib/context/base.d.ts +2 -0
  301. package/dist/lib/context/base.d.ts.map +1 -0
  302. package/dist/lib/context/base.js +81 -0
  303. package/dist/lib/context/base.js.map +1 -0
  304. package/dist/lib/context/execute.d.ts +2 -0
  305. package/dist/lib/context/execute.d.ts.map +1 -0
  306. package/dist/lib/context/execute.js +753 -0
  307. package/dist/lib/context/execute.js.map +1 -0
  308. package/dist/lib/context/index.d.ts +2 -0
  309. package/dist/lib/context/index.d.ts.map +1 -0
  310. package/dist/lib/context/index.js +88 -0
  311. package/dist/lib/context/index.js.map +1 -0
  312. package/dist/lib/context/progress.d.ts +2 -0
  313. package/dist/lib/context/progress.d.ts.map +1 -0
  314. package/dist/lib/context/progress.js +178 -0
  315. package/dist/lib/context/progress.js.map +1 -0
  316. package/dist/lib/context/project.d.ts +2 -0
  317. package/dist/lib/context/project.d.ts.map +1 -0
  318. package/dist/lib/context/project.js +413 -0
  319. package/dist/lib/context/project.js.map +1 -0
  320. package/dist/lib/context/research.d.ts +2 -0
  321. package/dist/lib/context/research.d.ts.map +1 -0
  322. package/dist/lib/context/research.js +466 -0
  323. package/dist/lib/context/research.js.map +1 -0
  324. package/dist/lib/dead-ends.d.ts +28 -0
  325. package/dist/lib/dead-ends.d.ts.map +1 -0
  326. package/dist/lib/dead-ends.js +451 -0
  327. package/dist/lib/dead-ends.js.map +1 -0
  328. package/dist/lib/deps.d.ts +2 -0
  329. package/dist/lib/deps.d.ts.map +1 -0
  330. package/dist/lib/deps.js +630 -0
  331. package/dist/lib/deps.js.map +1 -0
  332. package/dist/lib/discussion.d.ts +2 -0
  333. package/dist/lib/discussion.d.ts.map +1 -0
  334. package/dist/lib/discussion.js +1041 -0
  335. package/dist/lib/discussion.js.map +1 -0
  336. package/dist/lib/drift.d.ts +36 -0
  337. package/dist/lib/drift.d.ts.map +1 -0
  338. package/dist/lib/drift.js +481 -0
  339. package/dist/lib/drift.js.map +1 -0
  340. package/dist/lib/evolve/_dimensions-features.d.ts +2 -0
  341. package/dist/lib/evolve/_dimensions-features.d.ts.map +1 -0
  342. package/dist/lib/evolve/_dimensions-features.js +369 -0
  343. package/dist/lib/evolve/_dimensions-features.js.map +1 -0
  344. package/dist/lib/evolve/_dimensions.d.ts +2 -0
  345. package/dist/lib/evolve/_dimensions.d.ts.map +1 -0
  346. package/dist/lib/evolve/_dimensions.js +358 -0
  347. package/dist/lib/evolve/_dimensions.js.map +1 -0
  348. package/dist/lib/evolve/_product-ideation.d.ts +2 -0
  349. package/dist/lib/evolve/_product-ideation.d.ts.map +1 -0
  350. package/dist/lib/evolve/_product-ideation.js +281 -0
  351. package/dist/lib/evolve/_product-ideation.js.map +1 -0
  352. package/dist/lib/evolve/_prompts.d.ts +2 -0
  353. package/dist/lib/evolve/_prompts.d.ts.map +1 -0
  354. package/dist/lib/evolve/_prompts.js +153 -0
  355. package/dist/lib/evolve/_prompts.js.map +1 -0
  356. package/dist/lib/evolve/cli.d.ts +2 -0
  357. package/dist/lib/evolve/cli.d.ts.map +1 -0
  358. package/dist/lib/evolve/cli.js +224 -0
  359. package/dist/lib/evolve/cli.js.map +1 -0
  360. package/dist/lib/evolve/discovery.d.ts +2 -0
  361. package/dist/lib/evolve/discovery.d.ts.map +1 -0
  362. package/dist/lib/evolve/discovery.js +391 -0
  363. package/dist/lib/evolve/discovery.js.map +1 -0
  364. package/dist/lib/evolve/index.d.ts +2 -0
  365. package/dist/lib/evolve/index.d.ts.map +1 -0
  366. package/dist/lib/evolve/index.js +88 -0
  367. package/dist/lib/evolve/index.js.map +1 -0
  368. package/dist/lib/evolve/orchestrator.d.ts +2 -0
  369. package/dist/lib/evolve/orchestrator.d.ts.map +1 -0
  370. package/dist/lib/evolve/orchestrator.js +851 -0
  371. package/dist/lib/evolve/orchestrator.js.map +1 -0
  372. package/dist/lib/evolve/scoring.d.ts +2 -0
  373. package/dist/lib/evolve/scoring.d.ts.map +1 -0
  374. package/dist/lib/evolve/scoring.js +118 -0
  375. package/dist/lib/evolve/scoring.js.map +1 -0
  376. package/dist/lib/evolve/state.d.ts +2 -0
  377. package/dist/lib/evolve/state.d.ts.map +1 -0
  378. package/dist/lib/evolve/state.js +264 -0
  379. package/dist/lib/evolve/state.js.map +1 -0
  380. package/dist/lib/evolve/types.d.ts +249 -0
  381. package/dist/lib/evolve/types.d.ts.map +1 -0
  382. package/dist/lib/evolve/types.js +3 -0
  383. package/dist/lib/evolve/types.js.map +1 -0
  384. package/dist/lib/frontmatter.d.ts +2 -0
  385. package/dist/lib/frontmatter.d.ts.map +1 -0
  386. package/dist/lib/frontmatter.js +513 -0
  387. package/dist/lib/frontmatter.js.map +1 -0
  388. package/dist/lib/gates.d.ts +2 -0
  389. package/dist/lib/gates.d.ts.map +1 -0
  390. package/dist/lib/gates.js +578 -0
  391. package/dist/lib/gates.js.map +1 -0
  392. package/dist/lib/genome.d.ts +10 -0
  393. package/dist/lib/genome.d.ts.map +1 -0
  394. package/dist/lib/genome.js +368 -0
  395. package/dist/lib/genome.js.map +1 -0
  396. package/dist/lib/got.d.ts +2 -0
  397. package/dist/lib/got.d.ts.map +1 -0
  398. package/dist/lib/got.js +280 -0
  399. package/dist/lib/got.js.map +1 -0
  400. package/dist/lib/invariants.d.ts +2 -0
  401. package/dist/lib/invariants.d.ts.map +1 -0
  402. package/dist/lib/invariants.js +298 -0
  403. package/dist/lib/invariants.js.map +1 -0
  404. package/dist/lib/knowledge.d.ts +2 -0
  405. package/dist/lib/knowledge.d.ts.map +1 -0
  406. package/dist/lib/knowledge.js +658 -0
  407. package/dist/lib/knowledge.js.map +1 -0
  408. package/dist/lib/long-term-roadmap.d.ts +2 -0
  409. package/dist/lib/long-term-roadmap.d.ts.map +1 -0
  410. package/dist/lib/long-term-roadmap.js +602 -0
  411. package/dist/lib/long-term-roadmap.js.map +1 -0
  412. package/dist/lib/markdown-split.d.ts +2 -0
  413. package/dist/lib/markdown-split.d.ts.map +1 -0
  414. package/dist/lib/markdown-split.js +199 -0
  415. package/dist/lib/markdown-split.js.map +1 -0
  416. package/dist/lib/mcp-server.d.ts +2 -0
  417. package/dist/lib/mcp-server.d.ts.map +1 -0
  418. package/dist/lib/mcp-server.js +2424 -0
  419. package/dist/lib/mcp-server.js.map +1 -0
  420. package/dist/lib/metrics.d.ts +16 -0
  421. package/dist/lib/metrics.d.ts.map +1 -0
  422. package/dist/lib/metrics.js +48 -0
  423. package/dist/lib/metrics.js.map +1 -0
  424. package/dist/lib/overstory.d.ts +2 -0
  425. package/dist/lib/overstory.d.ts.map +1 -0
  426. package/dist/lib/overstory.js +211 -0
  427. package/dist/lib/overstory.js.map +1 -0
  428. package/dist/lib/parallel.d.ts +2 -0
  429. package/dist/lib/parallel.d.ts.map +1 -0
  430. package/dist/lib/parallel.js +349 -0
  431. package/dist/lib/parallel.js.map +1 -0
  432. package/dist/lib/paths.d.ts +2 -0
  433. package/dist/lib/paths.d.ts.map +1 -0
  434. package/dist/lib/paths.js +254 -0
  435. package/dist/lib/paths.js.map +1 -0
  436. package/dist/lib/phase-complete-llm.d.ts +22 -0
  437. package/dist/lib/phase-complete-llm.d.ts.map +1 -0
  438. package/dist/lib/phase-complete-llm.js +331 -0
  439. package/dist/lib/phase-complete-llm.js.map +1 -0
  440. package/dist/lib/phase-complete.d.ts +46 -0
  441. package/dist/lib/phase-complete.d.ts.map +1 -0
  442. package/dist/lib/phase-complete.js +278 -0
  443. package/dist/lib/phase-complete.js.map +1 -0
  444. package/dist/lib/phase-io.d.ts +2 -0
  445. package/dist/lib/phase-io.d.ts.map +1 -0
  446. package/dist/lib/phase-io.js +126 -0
  447. package/dist/lib/phase-io.js.map +1 -0
  448. package/dist/lib/phase.d.ts +2 -0
  449. package/dist/lib/phase.d.ts.map +1 -0
  450. package/dist/lib/phase.js +1344 -0
  451. package/dist/lib/phase.js.map +1 -0
  452. package/dist/lib/plan-tournament.d.ts +63 -0
  453. package/dist/lib/plan-tournament.d.ts.map +1 -0
  454. package/dist/lib/plan-tournament.js +353 -0
  455. package/dist/lib/plan-tournament.js.map +1 -0
  456. package/dist/lib/refinement.d.ts +74 -0
  457. package/dist/lib/refinement.d.ts.map +1 -0
  458. package/dist/lib/refinement.js +283 -0
  459. package/dist/lib/refinement.js.map +1 -0
  460. package/dist/lib/requirements.d.ts +2 -0
  461. package/dist/lib/requirements.d.ts.map +1 -0
  462. package/dist/lib/requirements.js +355 -0
  463. package/dist/lib/requirements.js.map +1 -0
  464. package/dist/lib/research-bundle.d.ts +2 -0
  465. package/dist/lib/research-bundle.d.ts.map +1 -0
  466. package/dist/lib/research-bundle.js +246 -0
  467. package/dist/lib/research-bundle.js.map +1 -0
  468. package/dist/lib/roadmap.d.ts +2 -0
  469. package/dist/lib/roadmap.d.ts.map +1 -0
  470. package/dist/lib/roadmap.js +541 -0
  471. package/dist/lib/roadmap.js.map +1 -0
  472. package/dist/lib/sample.d.ts +16 -0
  473. package/dist/lib/sample.d.ts.map +1 -0
  474. package/dist/lib/sample.js +20 -0
  475. package/dist/lib/sample.js.map +1 -0
  476. package/dist/lib/scaffold.d.ts +2 -0
  477. package/dist/lib/scaffold.d.ts.map +1 -0
  478. package/dist/lib/scaffold.js +355 -0
  479. package/dist/lib/scaffold.js.map +1 -0
  480. package/dist/lib/scan/_utils.d.ts +11 -0
  481. package/dist/lib/scan/_utils.d.ts.map +1 -0
  482. package/dist/lib/scan/_utils.js +36 -0
  483. package/dist/lib/scan/_utils.js.map +1 -0
  484. package/dist/lib/scan/base64.d.ts +15 -0
  485. package/dist/lib/scan/base64.d.ts.map +1 -0
  486. package/dist/lib/scan/base64.js +66 -0
  487. package/dist/lib/scan/base64.js.map +1 -0
  488. package/dist/lib/scan/ignorefile.d.ts +30 -0
  489. package/dist/lib/scan/ignorefile.d.ts.map +1 -0
  490. package/dist/lib/scan/ignorefile.js +101 -0
  491. package/dist/lib/scan/ignorefile.js.map +1 -0
  492. package/dist/lib/scan/injection.d.ts +14 -0
  493. package/dist/lib/scan/injection.d.ts.map +1 -0
  494. package/dist/lib/scan/injection.js +39 -0
  495. package/dist/lib/scan/injection.js.map +1 -0
  496. package/dist/lib/scan/patterns.d.ts +17 -0
  497. package/dist/lib/scan/patterns.d.ts.map +1 -0
  498. package/dist/lib/scan/patterns.js +123 -0
  499. package/dist/lib/scan/patterns.js.map +1 -0
  500. package/dist/lib/scan/strip-markdown.d.ts +7 -0
  501. package/dist/lib/scan/strip-markdown.d.ts.map +1 -0
  502. package/dist/lib/scan/strip-markdown.js +38 -0
  503. package/dist/lib/scan/strip-markdown.js.map +1 -0
  504. package/dist/lib/scan/types.d.ts +23 -0
  505. package/dist/lib/scan/types.d.ts.map +1 -0
  506. package/dist/lib/scan/types.js +3 -0
  507. package/dist/lib/scan/types.js.map +1 -0
  508. package/dist/lib/scheduler-wait.d.ts +2 -0
  509. package/dist/lib/scheduler-wait.d.ts.map +1 -0
  510. package/dist/lib/scheduler-wait.js +59 -0
  511. package/dist/lib/scheduler-wait.js.map +1 -0
  512. package/dist/lib/scheduler.d.ts +254 -0
  513. package/dist/lib/scheduler.d.ts.map +1 -0
  514. package/dist/lib/scheduler.js +1147 -0
  515. package/dist/lib/scheduler.js.map +1 -0
  516. package/dist/lib/state.d.ts +2 -0
  517. package/dist/lib/state.d.ts.map +1 -0
  518. package/dist/lib/state.js +744 -0
  519. package/dist/lib/state.js.map +1 -0
  520. package/dist/lib/think.d.ts +18 -0
  521. package/dist/lib/think.d.ts.map +1 -0
  522. package/dist/lib/think.js +317 -0
  523. package/dist/lib/think.js.map +1 -0
  524. package/dist/lib/tracker.d.ts +2 -0
  525. package/dist/lib/tracker.d.ts.map +1 -0
  526. package/dist/lib/tracker.js +1121 -0
  527. package/dist/lib/tracker.js.map +1 -0
  528. package/dist/lib/types.d.ts +1514 -0
  529. package/dist/lib/types.d.ts.map +1 -0
  530. package/dist/lib/types.js +4 -0
  531. package/dist/lib/types.js.map +1 -0
  532. package/dist/lib/utils.d.ts +2 -0
  533. package/dist/lib/utils.d.ts.map +1 -0
  534. package/dist/lib/utils.js +1363 -0
  535. package/dist/lib/utils.js.map +1 -0
  536. package/dist/lib/verify.d.ts +2 -0
  537. package/dist/lib/verify.d.ts.map +1 -0
  538. package/dist/lib/verify.js +1153 -0
  539. package/dist/lib/verify.js.map +1 -0
  540. package/dist/lib/wireup/autofix.d.ts +2 -0
  541. package/dist/lib/wireup/autofix.d.ts.map +1 -0
  542. package/dist/lib/wireup/autofix.js +188 -0
  543. package/dist/lib/wireup/autofix.js.map +1 -0
  544. package/dist/lib/wireup/cli.d.ts +2 -0
  545. package/dist/lib/wireup/cli.d.ts.map +1 -0
  546. package/dist/lib/wireup/cli.js +194 -0
  547. package/dist/lib/wireup/cli.js.map +1 -0
  548. package/dist/lib/wireup/detection.d.ts +47 -0
  549. package/dist/lib/wireup/detection.d.ts.map +1 -0
  550. package/dist/lib/wireup/detection.js +410 -0
  551. package/dist/lib/wireup/detection.js.map +1 -0
  552. package/dist/lib/wireup/discovery.d.ts +2 -0
  553. package/dist/lib/wireup/discovery.d.ts.map +1 -0
  554. package/dist/lib/wireup/discovery.js +934 -0
  555. package/dist/lib/wireup/discovery.js.map +1 -0
  556. package/dist/lib/wireup/execution.d.ts +2 -0
  557. package/dist/lib/wireup/execution.d.ts.map +1 -0
  558. package/dist/lib/wireup/execution.js +573 -0
  559. package/dist/lib/wireup/execution.js.map +1 -0
  560. package/dist/lib/wireup/index.d.ts +2 -0
  561. package/dist/lib/wireup/index.d.ts.map +1 -0
  562. package/dist/lib/wireup/index.js +85 -0
  563. package/dist/lib/wireup/index.js.map +1 -0
  564. package/dist/lib/wireup/orchestrator.d.ts +2 -0
  565. package/dist/lib/wireup/orchestrator.d.ts.map +1 -0
  566. package/dist/lib/wireup/orchestrator.js +366 -0
  567. package/dist/lib/wireup/orchestrator.js.map +1 -0
  568. package/dist/lib/wireup/report.d.ts +47 -0
  569. package/dist/lib/wireup/report.d.ts.map +1 -0
  570. package/dist/lib/wireup/report.js +201 -0
  571. package/dist/lib/wireup/report.js.map +1 -0
  572. package/dist/lib/wireup/scenarios.d.ts +2 -0
  573. package/dist/lib/wireup/scenarios.d.ts.map +1 -0
  574. package/dist/lib/wireup/scenarios.js +516 -0
  575. package/dist/lib/wireup/scenarios.js.map +1 -0
  576. package/dist/lib/wireup/state.d.ts +2 -0
  577. package/dist/lib/wireup/state.d.ts.map +1 -0
  578. package/dist/lib/wireup/state.js +102 -0
  579. package/dist/lib/wireup/state.js.map +1 -0
  580. package/dist/lib/wireup/types.d.ts +376 -0
  581. package/dist/lib/wireup/types.d.ts.map +1 -0
  582. package/dist/lib/wireup/types.js +3 -0
  583. package/dist/lib/wireup/types.js.map +1 -0
  584. package/dist/lib/worktree.d.ts +2 -0
  585. package/dist/lib/worktree.d.ts.map +1 -0
  586. package/dist/lib/worktree.js +999 -0
  587. package/dist/lib/worktree.js.map +1 -0
  588. package/lib/autopilot-milestone.ts +136 -0
  589. package/lib/autopilot-pipeline.ts +1179 -0
  590. package/lib/autopilot-waves.ts +361 -0
  591. package/lib/autopilot.ts +1874 -0
  592. package/lib/autoplan.ts +280 -0
  593. package/lib/autoresearch.js +4 -0
  594. package/lib/autoresearch.ts +886 -0
  595. package/lib/backend.ts +1252 -0
  596. package/lib/benchmark.ts +341 -0
  597. package/lib/citations.ts +760 -0
  598. package/lib/cleanup.ts +1588 -0
  599. package/lib/cli/adapters.ts +41 -0
  600. package/lib/cli/agent.ts +83 -0
  601. package/lib/cli/index.ts +273 -0
  602. package/lib/cli/output.ts +33 -0
  603. package/lib/cli/scan-dispatch.ts +130 -0
  604. package/lib/cli/tools.ts +198 -0
  605. package/lib/commands/_dashboard-parsers.ts +275 -0
  606. package/lib/commands/analysis.ts +1851 -0
  607. package/lib/commands/assumptions.ts +232 -0
  608. package/lib/commands/blame.ts +174 -0
  609. package/lib/commands/budget.ts +148 -0
  610. package/lib/commands/check-plans.ts +233 -0
  611. package/lib/commands/config.ts +287 -0
  612. package/lib/commands/dashboard.ts +680 -0
  613. package/lib/commands/estimate.ts +204 -0
  614. package/lib/commands/eval-diff.ts +252 -0
  615. package/lib/commands/freshness.ts +213 -0
  616. package/lib/commands/health.ts +607 -0
  617. package/lib/commands/index.ts +266 -0
  618. package/lib/commands/install.ts +307 -0
  619. package/lib/commands/knowhow-aggregator.ts +345 -0
  620. package/lib/commands/knowledge-search.ts +153 -0
  621. package/lib/commands/long-term-roadmap.ts +390 -0
  622. package/lib/commands/patterns.ts +465 -0
  623. package/lib/commands/phase-info.ts +698 -0
  624. package/lib/commands/plan-lint.ts +546 -0
  625. package/lib/commands/plan-phase.ts +375 -0
  626. package/lib/commands/progress.ts +319 -0
  627. package/lib/commands/quality.ts +138 -0
  628. package/lib/commands/rollback.ts +195 -0
  629. package/lib/commands/scan.ts +72 -0
  630. package/lib/commands/search.ts +300 -0
  631. package/lib/commands/select-candidate.ts +687 -0
  632. package/lib/commands/singularity.ts +222 -0
  633. package/lib/commands/slug-timestamp.ts +74 -0
  634. package/lib/commands/tail.ts +129 -0
  635. package/lib/commands/todo.ts +273 -0
  636. package/lib/commands/watch.ts +80 -0
  637. package/lib/complexity.ts +117 -0
  638. package/lib/context/agents.ts +505 -0
  639. package/lib/context/base.ts +123 -0
  640. package/lib/context/execute.ts +977 -0
  641. package/lib/context/index.ts +110 -0
  642. package/lib/context/progress.ts +278 -0
  643. package/lib/context/project.ts +531 -0
  644. package/lib/context/research.ts +646 -0
  645. package/lib/dead-ends.ts +506 -0
  646. package/lib/deps.ts +773 -0
  647. package/lib/discussion.ts +1275 -0
  648. package/lib/drift.ts +519 -0
  649. package/lib/evolve/_dimensions-features.ts +525 -0
  650. package/lib/evolve/_dimensions.ts +511 -0
  651. package/lib/evolve/_product-ideation.ts +405 -0
  652. package/lib/evolve/_prompts.ts +178 -0
  653. package/lib/evolve/cli.ts +330 -0
  654. package/lib/evolve/discovery.ts +571 -0
  655. package/lib/evolve/index.ts +105 -0
  656. package/lib/evolve/orchestrator.ts +1139 -0
  657. package/lib/evolve/scoring.ts +167 -0
  658. package/lib/evolve/state.ts +330 -0
  659. package/lib/evolve/types.ts +290 -0
  660. package/lib/frontmatter.ts +615 -0
  661. package/lib/gates.ts +695 -0
  662. package/lib/genome.ts +402 -0
  663. package/lib/got.js +4 -0
  664. package/lib/got.ts +361 -0
  665. package/lib/invariants.ts +378 -0
  666. package/lib/knowledge.ts +768 -0
  667. package/lib/long-term-roadmap.ts +806 -0
  668. package/lib/markdown-split.ts +273 -0
  669. package/lib/mcp-server.ts +3292 -0
  670. package/lib/metrics.ts +49 -0
  671. package/lib/overstory.ts +270 -0
  672. package/lib/parallel.ts +570 -0
  673. package/lib/paths.ts +293 -0
  674. package/lib/phase-complete-llm.ts +376 -0
  675. package/lib/phase-complete.ts +366 -0
  676. package/lib/phase-io.ts +101 -0
  677. package/lib/phase.ts +1981 -0
  678. package/lib/plan-tournament.ts +426 -0
  679. package/lib/refinement.ts +349 -0
  680. package/lib/requirements.ts +469 -0
  681. package/lib/research-bundle.ts +300 -0
  682. package/lib/roadmap.ts +775 -0
  683. package/lib/scaffold.ts +480 -0
  684. package/lib/scan/_utils.ts +37 -0
  685. package/lib/scan/base64.ts +90 -0
  686. package/lib/scan/ignorefile.ts +109 -0
  687. package/lib/scan/injection.ts +67 -0
  688. package/lib/scan/patterns.ts +139 -0
  689. package/lib/scan/strip-markdown.ts +39 -0
  690. package/lib/scan/types.ts +28 -0
  691. package/lib/scheduler-wait.ts +58 -0
  692. package/lib/scheduler.ts +1370 -0
  693. package/lib/state.ts +1000 -0
  694. package/lib/think.ts +365 -0
  695. package/lib/tracker.ts +1591 -0
  696. package/lib/types.ts +1663 -0
  697. package/lib/utils.ts +1479 -0
  698. package/lib/verify.ts +1434 -0
  699. package/lib/wireup/autofix.ts +241 -0
  700. package/lib/wireup/cli.ts +278 -0
  701. package/lib/wireup/detection.ts +542 -0
  702. package/lib/wireup/discovery.ts +1063 -0
  703. package/lib/wireup/execution.ts +686 -0
  704. package/lib/wireup/index.ts +117 -0
  705. package/lib/wireup/orchestrator.ts +519 -0
  706. package/lib/wireup/report.ts +286 -0
  707. package/lib/wireup/scenarios.ts +616 -0
  708. package/lib/wireup/state.ts +139 -0
  709. package/lib/wireup/types.ts +436 -0
  710. package/lib/worktree.ts +1309 -0
  711. package/package.json +67 -0
@@ -0,0 +1,570 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * GRD Parallel Execution -- Multi-phase independence validation, context building, mode selection
5
+ *
6
+ * Provides tooling for validating that requested phases can execute in parallel
7
+ * (no dependency edges between them), building per-phase execution context with
8
+ * worktree paths, and selecting parallel vs sequential mode based on backend capabilities.
9
+ *
10
+ * Depends on: lib/deps.ts (buildDependencyGraph), lib/utils.ts, lib/backend.ts, lib/roadmap.ts
11
+ */
12
+
13
+
14
+ import type {
15
+ DependencyGraph,
16
+ BackendCapabilities,
17
+ GrdConfig,
18
+ MilestoneInfo,
19
+ PhaseInfo,
20
+ GateViolation,
21
+ PreflightResult,
22
+ ArtifactDAG,
23
+ PlanArtifact,
24
+ } from './types';
25
+
26
+ const {
27
+ output,
28
+ loadConfig,
29
+ findPhaseInternal,
30
+ getMilestoneInfo,
31
+ }: {
32
+ output: (result: unknown, raw: boolean, rawValue?: unknown) => void;
33
+ loadConfig: (cwd: string) => GrdConfig;
34
+ findPhaseInternal: (cwd: string, phase: string) => PhaseInfo | null;
35
+ getMilestoneInfo: (cwd: string) => MilestoneInfo;
36
+ } = require('./utils');
37
+ const {
38
+ detectBackend,
39
+ getBackendCapabilities,
40
+ }: {
41
+ detectBackend: (cwd: string) => string;
42
+ getBackendCapabilities: (backend: string) => BackendCapabilities;
43
+ } = require('./backend');
44
+ const {
45
+ worktreePath,
46
+ }: {
47
+ worktreePath: (cwd: string, milestone: string, phase: string) => string;
48
+ } = require('./worktree');
49
+ const {
50
+ buildDependencyGraph,
51
+ }: {
52
+ buildDependencyGraph: (
53
+ phases: Array<{ number: string; name: string; depends_on?: string | null }>
54
+ ) => DependencyGraph;
55
+ } = require('./deps');
56
+ const {
57
+ analyzeRoadmap,
58
+ }: {
59
+ analyzeRoadmap: (cwd: string) => {
60
+ error?: string;
61
+ phases?: Array<{
62
+ number: string;
63
+ name: string;
64
+ depends_on?: string | null;
65
+ disk_status?: string;
66
+ roadmap_complete?: boolean;
67
+ }>;
68
+ };
69
+ } = require('./roadmap');
70
+ const {
71
+ runPreflightGates,
72
+ }: {
73
+ runPreflightGates: (cwd: string, command: string, options: { phase: string }) => PreflightResult;
74
+ } = require('./gates');
75
+
76
+ // ─── Domain Types ──────────────────────────────────────────────────────────
77
+
78
+ /**
79
+ * Result of validating whether requested phases are independent (no direct edges).
80
+ */
81
+ interface ValidationResult {
82
+ valid: boolean;
83
+ conflicts?: Array<{ from: string; to: string }>;
84
+ phases: string[];
85
+ }
86
+
87
+ /**
88
+ * Per-phase context in parallel execution with worktree paths and plan info.
89
+ */
90
+ interface PhaseContext {
91
+ phase_number: string;
92
+ phase_name: string | null;
93
+ phase_slug: string | null;
94
+ phase_dir: string;
95
+ worktree_path: string | null;
96
+ worktree_branch: string;
97
+ native_isolation: boolean;
98
+ plans: string[];
99
+ incomplete_plans: string[];
100
+ plan_count: number;
101
+ }
102
+
103
+ /**
104
+ * Full context returned by buildParallelContext consumed by execute-phase command.
105
+ */
106
+ interface ParallelContext {
107
+ mode: 'parallel' | 'sequential';
108
+ fallback_note: string | null;
109
+ backend: string;
110
+ backend_capabilities: BackendCapabilities;
111
+ use_teams: boolean;
112
+ team_timeout_minutes: number;
113
+ max_concurrent_teammates: number;
114
+ milestone_version: string;
115
+ milestone_name: string;
116
+ phases: PhaseContext[];
117
+ phase_count: number;
118
+ status_tracker: { phases: Record<string, { status: string }> };
119
+ error?: string;
120
+ independence_validated?: boolean;
121
+ gate_warnings?: GateViolation[];
122
+ }
123
+
124
+ /**
125
+ * Options for buildParallelContext.
126
+ */
127
+ interface BuildParallelContextOptions {
128
+ nativeWorktreeAvailable?: boolean;
129
+ }
130
+
131
+ // ─── validateIndependentPhases ──────────────────────────────────────────────
132
+
133
+ /**
134
+ * Validate that requested phases have no direct dependency edges between them.
135
+ *
136
+ * Only checks DIRECT edges (not transitive paths). This is correct because the
137
+ * command template already receives parallel_groups from deps analysis for ordering.
138
+ * The validation here prevents the user from requesting two phases where one
139
+ * directly depends on the other.
140
+ * @param graph - Dependency graph containing all phase edges
141
+ * @param requestedPhases - Array of phase number strings to validate
142
+ * @returns Validation result indicating whether phases are independent, with any conflict pairs
143
+ */
144
+ function validateIndependentPhases(
145
+ graph: DependencyGraph,
146
+ requestedPhases: string[]
147
+ ): ValidationResult {
148
+ if (requestedPhases.length <= 1) {
149
+ return { valid: true, phases: requestedPhases };
150
+ }
151
+
152
+ const requestedSet = new Set(requestedPhases);
153
+ const conflicts: Array<{ from: string; to: string }> = [];
154
+
155
+ for (const edge of graph.edges) {
156
+ if (requestedSet.has(edge.from) && requestedSet.has(edge.to)) {
157
+ conflicts.push({ from: edge.from, to: edge.to });
158
+ }
159
+ }
160
+
161
+ if (conflicts.length > 0) {
162
+ return { valid: false, conflicts, phases: requestedPhases };
163
+ }
164
+
165
+ return { valid: true, phases: requestedPhases };
166
+ }
167
+
168
+ // ─── buildParallelContext ───────────────────────────────────────────────────
169
+
170
+ /**
171
+ * Build structured JSON context for parallel execution of multiple phases.
172
+ *
173
+ * Loads config, detects backend capabilities, resolves per-phase info (directory,
174
+ * plans, worktree paths), and selects parallel vs sequential mode. Returns a
175
+ * context object consumed by the execute-phase command template.
176
+ * @param cwd - Absolute path to the working directory (project root)
177
+ * @param phaseNumbers - Array of phase number strings to build context for
178
+ * @param options - Optional configuration for native worktree availability
179
+ * @returns Full parallel execution context, or an error object if a phase is not found
180
+ */
181
+ function buildParallelContext(
182
+ cwd: string,
183
+ phaseNumbers: string[],
184
+ options?: BuildParallelContextOptions
185
+ ): ParallelContext | { error: string } {
186
+ const { nativeWorktreeAvailable = false } = options || {};
187
+ const config: GrdConfig = loadConfig(cwd);
188
+ const backend: string = detectBackend(cwd);
189
+ const capabilities: BackendCapabilities = getBackendCapabilities(backend);
190
+ const milestone: MilestoneInfo = getMilestoneInfo(cwd);
191
+
192
+ // Determine mode: parallel only if backend supports teams AND config allows it
193
+ const mode: 'parallel' | 'sequential' =
194
+ capabilities.teams === true && config.use_teams !== false ? 'parallel' : 'sequential';
195
+
196
+ // Build fallback note for sequential mode
197
+ const fallback_note: string | null =
198
+ mode === 'sequential'
199
+ ? 'Parallel execution available on Claude Code backend with teams enabled'
200
+ : null;
201
+
202
+ // Build per-phase context objects
203
+ const phaseContexts: PhaseContext[] = [];
204
+ for (const phaseNum of phaseNumbers) {
205
+ const phaseInfo: PhaseInfo | null = findPhaseInternal(cwd, phaseNum);
206
+ if (!phaseInfo) {
207
+ return { error: `Phase ${phaseNum} not found` };
208
+ }
209
+
210
+ const template: string = config.phase_branch_template || 'grd/{milestone}/{phase}-{slug}';
211
+ const worktree_branch: string = template
212
+ .replace('{milestone}', milestone.version)
213
+ .replace('{phase}', phaseInfo.phase_number)
214
+ .replace('{slug}', phaseInfo.phase_slug || 'phase');
215
+
216
+ // When native isolation is available, skip worktree_path pre-computation
217
+ // Claude Code creates worktrees natively via its isolation: worktree mechanism
218
+ const wt_path: string | null = nativeWorktreeAvailable
219
+ ? null
220
+ : worktreePath(cwd, milestone.version, phaseInfo.phase_number);
221
+
222
+ phaseContexts.push({
223
+ phase_number: phaseInfo.phase_number,
224
+ phase_name: phaseInfo.phase_name,
225
+ phase_slug: phaseInfo.phase_slug,
226
+ phase_dir: phaseInfo.directory,
227
+ worktree_path: wt_path,
228
+ worktree_branch,
229
+ native_isolation: nativeWorktreeAvailable,
230
+ plans: phaseInfo.plans,
231
+ incomplete_plans: phaseInfo.incomplete_plans,
232
+ plan_count: phaseInfo.plans ? phaseInfo.plans.length : 0,
233
+ });
234
+ }
235
+
236
+ // Build status tracker with per-phase pending state
237
+ const status_tracker: { phases: Record<string, { status: string }> } = { phases: {} };
238
+ for (const ctx of phaseContexts) {
239
+ status_tracker.phases[ctx.phase_number] = { status: 'pending' };
240
+ }
241
+
242
+ return {
243
+ mode,
244
+ fallback_note,
245
+ backend,
246
+ backend_capabilities: capabilities,
247
+ use_teams: config.use_teams,
248
+ team_timeout_minutes: config.team_timeout_minutes,
249
+ max_concurrent_teammates: config.max_concurrent_teammates,
250
+ milestone_version: milestone.version,
251
+ milestone_name: milestone.name,
252
+ phases: phaseContexts,
253
+ phase_count: phaseNumbers.length,
254
+ status_tracker,
255
+ };
256
+ }
257
+
258
+ // ─── buildWaves ──────────────────────────────────────────────────────────────
259
+
260
+ /**
261
+ * Wave assignment result: a wave number and the plan IDs that execute in that wave.
262
+ */
263
+ interface WaveAssignment {
264
+ wave: number;
265
+ plans: string[];
266
+ }
267
+
268
+ /**
269
+ * Options for buildWaves.
270
+ */
271
+ interface BuildWavesOptions {
272
+ artifactDAG?: ArtifactDAG;
273
+ }
274
+
275
+ /**
276
+ * Assign plans to execution waves using a combined dependency model.
277
+ *
278
+ * Merges two dependency mechanisms into a single constraint set per plan:
279
+ * 1. Explicit `depends_on` field in PLAN.md frontmatter (coarse phase-level gates).
280
+ * 2. Fine-grained artifact DAG: for each plan's `requires` entries, look up the
281
+ * provider plan in `artifactDAG.providers` and treat it as a hard dependency.
282
+ *
283
+ * Kahn's level-based topological sort assigns each plan to the earliest wave where
284
+ * all its dependencies have been satisfied. Plans without `provides`/`requires`
285
+ * fields (empty arrays) are backward compatible — they only respect `depends_on`.
286
+ *
287
+ * If a cycle is detected (remaining plans with unresolvable dependencies), all
288
+ * remaining plans are placed in the last wave and a warning is written to stderr.
289
+ *
290
+ * @param plans - Plan artifacts parsed from PLAN.md frontmatter
291
+ * @param options - Optional config including a pre-built ArtifactDAG
292
+ * @returns Array of WaveAssignment objects sorted by wave number
293
+ */
294
+ function buildWaves(plans: PlanArtifact[], options?: BuildWavesOptions): WaveAssignment[] {
295
+ if (plans.length === 0) {
296
+ return [];
297
+ }
298
+
299
+ const artifactDAG = options?.artifactDAG;
300
+
301
+ // Build plan ID for each plan using the same format as buildArtifactDAG
302
+ const planIdOf = (p: PlanArtifact): string =>
303
+ `${p.phase}-${String(p.plan).padStart(2, '0')}`;
304
+
305
+ // Build a set of all valid plan IDs for membership checks
306
+ const planIds = new Set<string>(plans.map(planIdOf));
307
+
308
+ // Build combined dependency set for each plan
309
+ // combined deps: Set<planId> that must be completed before this plan
310
+ const combinedDeps = new Map<string, Set<string>>();
311
+ for (const plan of plans) {
312
+ const id = planIdOf(plan);
313
+ const deps = new Set<string>();
314
+
315
+ // 1. Explicit depends_on: these are plan IDs like "94-01" directly
316
+ for (const dep of plan.depends_on) {
317
+ if (planIds.has(dep)) {
318
+ deps.add(dep);
319
+ }
320
+ }
321
+
322
+ // 2. Artifact DAG requires: look up each required artifact's provider plan
323
+ if (artifactDAG !== undefined) {
324
+ for (const artifact of plan.requires) {
325
+ const providerPlanId = artifactDAG.providers[artifact];
326
+ if (providerPlanId !== undefined && providerPlanId !== id && planIds.has(providerPlanId)) {
327
+ deps.add(providerPlanId);
328
+ }
329
+ }
330
+ }
331
+
332
+ combinedDeps.set(id, deps);
333
+ }
334
+
335
+ // Build in-degree and adjacency for Kahn's algorithm
336
+ // Edge: dependency → dependent (dep must run before dependent)
337
+ const adjacency = new Map<string, string[]>(); // dep → [dependents]
338
+ const inDegree = new Map<string, number>();
339
+
340
+ for (const id of planIds) {
341
+ adjacency.set(id, []);
342
+ inDegree.set(id, 0);
343
+ }
344
+
345
+ for (const [id, deps] of combinedDeps) {
346
+ for (const dep of deps) {
347
+ (adjacency.get(dep) as string[]).push(id);
348
+ inDegree.set(id, (inDegree.get(id) as number) + 1);
349
+ }
350
+ }
351
+
352
+ // Level-based Kahn's — each iteration yields one wave
353
+ const waves: WaveAssignment[] = [];
354
+ const remaining = new Set<string>(planIds);
355
+ let waveNumber = 1;
356
+
357
+ while (remaining.size > 0) {
358
+ const batch: string[] = [];
359
+ for (const id of remaining) {
360
+ if ((inDegree.get(id) as number) === 0) {
361
+ batch.push(id);
362
+ }
363
+ }
364
+
365
+ if (batch.length === 0) {
366
+ // Cycle detected — place all remaining plans in the last wave and warn
367
+ process.stderr.write(
368
+ `[buildWaves] Warning: cycle detected among plans [${Array.from(remaining).join(', ')}]; placing all in wave ${waveNumber}\n`
369
+ );
370
+ batch.push(...Array.from(remaining));
371
+ batch.sort();
372
+ waves.push({ wave: waveNumber, plans: batch });
373
+ break;
374
+ }
375
+
376
+ // Sort lexicographically for deterministic output
377
+ batch.sort();
378
+ waves.push({ wave: waveNumber, plans: batch });
379
+
380
+ // Decrement in-degree for dependents and remove from remaining
381
+ for (const id of batch) {
382
+ remaining.delete(id);
383
+ for (const dependent of adjacency.get(id) as string[]) {
384
+ if (remaining.has(dependent)) {
385
+ inDegree.set(dependent, (inDegree.get(dependent) as number) - 1);
386
+ }
387
+ }
388
+ }
389
+
390
+ waveNumber++;
391
+ }
392
+
393
+ return waves;
394
+ }
395
+
396
+ // ─── cmdInitExecuteParallel ─────────────────────────────────────────────────
397
+
398
+ /**
399
+ * CLI command: Validate phase independence and build parallel execution context.
400
+ *
401
+ * Follows the established cmdInit* pattern: validates inputs, runs preflight gates,
402
+ * checks roadmap for requested phases, validates independence via dependency graph,
403
+ * builds context, and outputs structured JSON.
404
+ * @param cwd - Absolute path to the working directory (project root)
405
+ * @param phaseNumbers - Array of phase number strings requested for parallel execution
406
+ * @param _includes - Unused set of include filters (reserved for future use)
407
+ * @param raw - Whether to output plain text instead of JSON
408
+ * @returns void (outputs JSON or error to stdout)
409
+ */
410
+ function cmdInitExecuteParallel(
411
+ cwd: string,
412
+ phaseNumbers: string[],
413
+ _includes: Set<string>,
414
+ raw: boolean
415
+ ): void {
416
+ // Validate at least one phase requested
417
+ if (!phaseNumbers || phaseNumbers.length === 0) {
418
+ output({ error: 'At least one phase number is required' }, raw);
419
+ return;
420
+ }
421
+
422
+ // Run preflight gates (reuse execute-phase gates with first phase)
423
+ const gates: PreflightResult = runPreflightGates(cwd, 'execute-phase', {
424
+ phase: phaseNumbers[0],
425
+ });
426
+ if (!gates.passed) {
427
+ output({ gate_failed: true, gate_errors: gates.errors, gate_warnings: gates.warnings }, raw);
428
+ return;
429
+ }
430
+
431
+ // Analyze roadmap to get all phases
432
+ const roadmapResult = analyzeRoadmap(cwd);
433
+ if (roadmapResult.error || !roadmapResult.phases || roadmapResult.phases.length === 0) {
434
+ output({ error: roadmapResult.error || 'ROADMAP.md not found or empty' }, raw);
435
+ return;
436
+ }
437
+
438
+ // Verify all requested phases exist in roadmap
439
+ const roadmapPhaseNumbers = new Set(roadmapResult.phases.map((p) => p.number));
440
+ const missing: string[] = phaseNumbers.filter((pn) => !roadmapPhaseNumbers.has(pn));
441
+ if (missing.length > 0) {
442
+ output({ error: `Phase(s) not found in roadmap: ${missing.join(', ')}` }, raw);
443
+ return;
444
+ }
445
+
446
+ // Build dependency graph and validate independence
447
+ const graph: DependencyGraph = buildDependencyGraph(roadmapResult.phases);
448
+ const validation: ValidationResult = validateIndependentPhases(graph, phaseNumbers);
449
+
450
+ if (!validation.valid) {
451
+ const conflictStr: string = validation
452
+ .conflicts!.map((c) => `Phase ${c.from} -> Phase ${c.to}`)
453
+ .join(', ');
454
+ output(
455
+ {
456
+ error: `Phases are not independent: ${conflictStr}`,
457
+ conflicts: validation.conflicts,
458
+ },
459
+ raw
460
+ );
461
+ return;
462
+ }
463
+
464
+ // Build parallel context with native isolation awareness
465
+ const backend: string = detectBackend(cwd);
466
+ const capabilities: BackendCapabilities = getBackendCapabilities(backend);
467
+ const context = buildParallelContext(cwd, phaseNumbers, {
468
+ nativeWorktreeAvailable: capabilities.native_worktree_isolation,
469
+ }) as ParallelContext;
470
+ if (context.error) {
471
+ output(context, raw, `Error: ${context.error}`);
472
+ return;
473
+ }
474
+
475
+ // Add independence validation flag
476
+ context.independence_validated = true;
477
+
478
+ // Include gate warnings if any
479
+ if (gates.warnings && gates.warnings.length > 0) {
480
+ context.gate_warnings = gates.warnings;
481
+ }
482
+
483
+ output(
484
+ context,
485
+ raw,
486
+ `Backend: ${context.backend}, ${context.phase_count} phases, mode: ${context.mode}`
487
+ );
488
+ }
489
+
490
+ // ─── formatProgressBar ──────────────────────────────────────────────────────
491
+
492
+ /**
493
+ * Format a progress bar string like `[####______] 40%`
494
+ */
495
+ function formatProgressBar(current: number, total: number, width?: number): string {
496
+ const barWidth: number = width || 20;
497
+ const pct: number = total === 0 ? 0 : Math.min(1, current / total);
498
+ const filled: number = Math.round(pct * barWidth);
499
+ const empty: number = barWidth - filled;
500
+ const bar: string = '#'.repeat(filled) + '_'.repeat(empty);
501
+ const pctLabel: string = Math.round(pct * 100) + '%';
502
+ return `[${bar}] ${pctLabel}`;
503
+ }
504
+
505
+ // ─── streamPhaseProgress ────────────────────────────────────────────────────
506
+
507
+ /**
508
+ * Write formatted phase progress to stderr.
509
+ */
510
+ function streamPhaseProgress(
511
+ phaseNum: string,
512
+ current: number,
513
+ total: number,
514
+ status?: string
515
+ ): void {
516
+ const padded: string = String(phaseNum).padStart(2, '0');
517
+ const bar: string = formatProgressBar(current, total);
518
+ const statusPart: string = status ? ` [${status}]` : '';
519
+ const line: string = `Phase ${padded}: ${current} of ${total} ${bar}${statusPart}\n`;
520
+ process.stderr.write(line);
521
+ }
522
+
523
+ // ─── cmdParallelProgress ────────────────────────────────────────────────────
524
+
525
+ /**
526
+ * CLI command for progress updates during parallel execution.
527
+ * Accepts --phase, --plan, --total-plans, --status args.
528
+ */
529
+ function cmdParallelProgress(args: string[], raw: boolean): void {
530
+ // Parse args
531
+ let phase: string | null = null;
532
+ let plan: number | null = null;
533
+ let totalPlans: number | null = null;
534
+ let status: string | null = null;
535
+
536
+ for (let i = 0; i < args.length; i++) {
537
+ if (args[i] === '--phase' && args[i + 1]) phase = args[++i];
538
+ else if (args[i] === '--plan' && args[i + 1]) plan = parseInt(args[++i], 10);
539
+ else if (args[i] === '--total-plans' && args[i + 1]) totalPlans = parseInt(args[++i], 10);
540
+ else if (args[i] === '--status' && args[i + 1]) status = args[++i];
541
+ }
542
+
543
+ if (phase === null || plan === null || totalPlans === null) {
544
+ output(
545
+ { error: 'Usage: parallel-progress --phase N --plan M --total-plans T [--status label]' },
546
+ raw
547
+ );
548
+ return;
549
+ }
550
+
551
+ const bar: string = formatProgressBar(plan, totalPlans);
552
+
553
+ if (raw) {
554
+ output({ phase, plan, total_plans: totalPlans, bar, status }, raw);
555
+ } else {
556
+ streamPhaseProgress(phase, plan, totalPlans, status || undefined);
557
+ }
558
+ }
559
+
560
+ // ─── Exports ──────────────────────────────────────────────────────────────────
561
+
562
+ module.exports = {
563
+ validateIndependentPhases,
564
+ buildParallelContext,
565
+ buildWaves,
566
+ cmdInitExecuteParallel,
567
+ formatProgressBar,
568
+ streamPhaseProgress,
569
+ cmdParallelProgress,
570
+ };