@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,977 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * GRD Context/Execute -- Init context builders for execution and planning workflows
5
+ *
6
+ * Contains: cmdInitExecutePhase, cmdInitPlanPhase, cmdInitVerifyWork,
7
+ * cmdInitCodeReview, cmdInitPhaseResearch
8
+ *
9
+ * These are the largest and most complex cmdInit* functions, handling
10
+ * execution models, gate checks, plan inventories, and branch computation.
11
+ *
12
+ * Dependencies: base.ts, utils.ts, backend.ts, paths.ts, worktree.ts, gates.ts
13
+ */
14
+
15
+
16
+ import type {
17
+ GrdConfig,
18
+ PhaseInfo,
19
+ MilestoneInfo,
20
+ BackendCapabilities,
21
+ ExecGitResult,
22
+ PreflightResult,
23
+ WebMcpResult,
24
+ } from '../types';
25
+
26
+ const {
27
+ fs,
28
+ path,
29
+ safeReadFile,
30
+ safeReadMarkdown,
31
+ loadConfig,
32
+ findPhaseInternal,
33
+ resolveModelInternal,
34
+ pathExistsInternal,
35
+ generateSlugInternal,
36
+ getMilestoneInfo,
37
+ resolveModelForAgent,
38
+ resolveEffortForAgent,
39
+ execGit,
40
+ output,
41
+ error,
42
+ }: {
43
+ fs: typeof import('fs');
44
+ path: typeof import('path');
45
+ safeReadFile: (p: string) => string | null;
46
+ safeReadMarkdown: (p: string) => string | null;
47
+ loadConfig: (cwd: string) => GrdConfig;
48
+ findPhaseInternal: (cwd: string, phase: string) => PhaseInfo | null;
49
+ resolveModelInternal: (cwd: string, agent: string) => string;
50
+ pathExistsInternal: (cwd: string, target: string) => boolean;
51
+ generateSlugInternal: (text: string) => string | null;
52
+ getMilestoneInfo: (cwd: string) => MilestoneInfo;
53
+ resolveModelForAgent: (config: GrdConfig, agent: string, cwd?: string) => string;
54
+ resolveEffortForAgent: (config: GrdConfig, agentType: string, cwd?: string) => string | null;
55
+ execGit: (cwd: string, args: string[], opts?: { allowBlocked?: boolean }) => ExecGitResult;
56
+ output: (result: unknown, raw: boolean, rawValue?: unknown) => never;
57
+ error: (msg: string) => never;
58
+ } = require('../utils');
59
+
60
+ const {
61
+ detectBackend,
62
+ getBackendCapabilities,
63
+ detectWebMcp,
64
+ detectAvailableBackends,
65
+ }: {
66
+ detectBackend: (cwd: string) => string;
67
+ getBackendCapabilities: (b: string) => BackendCapabilities;
68
+ detectWebMcp: (cwd: string) => WebMcpResult;
69
+ detectAvailableBackends: (cwd?: string) => Record<string, import('../types').BackendAvailability>;
70
+ } = require('../backend');
71
+
72
+ const {
73
+ detectOverstory,
74
+ loadOverstoryConfig,
75
+ }: {
76
+ detectOverstory: (
77
+ cwd: string,
78
+ preloadedConfig?: import('../types').OverstoryConfig
79
+ ) => import('../types').OverstoryInfo | null;
80
+ loadOverstoryConfig: (cwd: string) => import('../types').OverstoryConfig;
81
+ } = require('../overstory');
82
+
83
+ const {
84
+ worktreePath,
85
+ }: {
86
+ worktreePath: (cwd: string, m: string, p: string) => string;
87
+ } = require('../worktree');
88
+
89
+ const {
90
+ runPreflightGates,
91
+ }: {
92
+ runPreflightGates: (cwd: string, cmd: string, opts?: Record<string, unknown>) => PreflightResult;
93
+ } = require('../gates');
94
+
95
+ const {
96
+ buildKnowledgeInjectionBlock,
97
+ extractModuleHints,
98
+ }: {
99
+ buildKnowledgeInjectionBlock: (cwd: string, phaseNum: string, moduleHints?: string[]) => string;
100
+ extractModuleHints: (phaseDir: string) => string[];
101
+ } = require('../knowledge');
102
+
103
+ const {
104
+ freezeInterfaces,
105
+ }: {
106
+ freezeInterfaces: (dag: import('../types').ArtifactDAG) => import('../types').FrozenInterface[];
107
+ } = require('../got');
108
+
109
+ const {
110
+ buildArtifactDAG,
111
+ }: {
112
+ buildArtifactDAG: (plans: import('../types').PlanArtifact[]) => import('../types').ArtifactDAG;
113
+ } = require('../deps');
114
+
115
+ const {
116
+ planningDir: getPlanningDir,
117
+ phasesDir: getPhasesDirPath,
118
+ researchDir: getResearchDirPath,
119
+ codebaseDir: getCodebaseDirPath,
120
+ todosDir: getTodosDirPath,
121
+ quickDir: getQuickDirPath,
122
+ standardsDir: getStandardsDirPath,
123
+ }: {
124
+ planningDir: (cwd: string) => string;
125
+ phasesDir: (cwd: string) => string;
126
+ researchDir: (cwd: string) => string;
127
+ codebaseDir: (cwd: string) => string;
128
+ todosDir: (cwd: string) => string;
129
+ quickDir: (cwd: string) => string;
130
+ standardsDir: (cwd: string) => string;
131
+ } = require('../paths');
132
+
133
+ const {
134
+ inferCeremonyLevel,
135
+ }: {
136
+ inferCeremonyLevel: (config: GrdConfig, phaseInfo: PhaseInfo | null, cwd: string) => string;
137
+ } = require('./base');
138
+
139
+ const {
140
+ extractFrontmatter,
141
+ }: {
142
+ extractFrontmatter: (content: string) => import('../types').FrontmatterObject;
143
+ } = require('../frontmatter');
144
+
145
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
146
+
147
+ /** Detect whether modelOverrides is configured in Claude settings. */
148
+ function _detectModelOverridesActive(cwd: string): boolean {
149
+ try {
150
+ const locations = [
151
+ path.join(cwd, '.claude', 'settings.json'),
152
+ path.join(process.env.HOME || '', '.claude', 'settings.json'),
153
+ ];
154
+ for (const loc of locations) {
155
+ if (!fs.existsSync(loc)) continue;
156
+ const data = JSON.parse(fs.readFileSync(loc, 'utf-8'));
157
+ if (
158
+ data &&
159
+ typeof data === 'object' &&
160
+ data.modelOverrides &&
161
+ typeof data.modelOverrides === 'object' &&
162
+ Object.keys(data.modelOverrides).length > 0
163
+ ) {
164
+ return true;
165
+ }
166
+ }
167
+ return false;
168
+ } catch (err) {
169
+ const code = (err as NodeJS.ErrnoException).code;
170
+ if (code !== 'ENOENT' && code !== 'ENOTDIR' && !(err instanceof SyntaxError)) {
171
+ process.stderr.write(
172
+ `[grd] WARNING: failed to detect model overrides: ${(err as Error).message}\n`
173
+ );
174
+ }
175
+ return false;
176
+ }
177
+ }
178
+
179
+ /** Try to find and read a file matching a suffix in a phase directory. */
180
+ function _readPhaseFile(cwd: string, phaseDir: string, suffix: string): string | null {
181
+ const phaseDirFull = path.join(cwd, phaseDir);
182
+ try {
183
+ const files: string[] = fs.readdirSync(phaseDirFull);
184
+ const match = files.find((f: string) => f.endsWith(suffix) || f === suffix.replace(/^-/, ''));
185
+ if (match) return safeReadMarkdown(path.join(phaseDirFull, match));
186
+ } catch {
187
+ // Phase directory may not exist yet
188
+ }
189
+ return null;
190
+ }
191
+
192
+ /**
193
+ * Extract the `## Reflection` section from a VERIFICATION.md body.
194
+ * Returns the section content (without the heading) up to the next `## `
195
+ * heading or the closing `---` separator, or null if the section is absent.
196
+ */
197
+ function _extractReflectionSection(verificationContent: string): string | null {
198
+ const idx = verificationContent.indexOf('## Reflection');
199
+ if (idx === -1) return null;
200
+ const after = verificationContent.slice(idx + '## Reflection'.length);
201
+ // Stop at next H2 (`\n## `), at a horizontal rule (`\n---`), or end of file.
202
+ const endMatch = after.search(/\n(?:## |---\s*\n)/);
203
+ const body = endMatch === -1 ? after : after.slice(0, endMatch);
204
+ const trimmed = body.trim();
205
+ return trimmed.length > 0 ? trimmed : null;
206
+ }
207
+
208
+ /**
209
+ * Walk prior phase directories and collect their `## Reflection` sections
210
+ * from `{phase}-VERIFICATION.md`. Returns the most recent `limit` entries in
211
+ * ascending phase order, excluding the current phase.
212
+ *
213
+ * Used by cmdInitPlanPhase to inject the hypothesis/predicted_outcome/
214
+ * actual_outcome history into the planner agent's context (Ouroboros
215
+ * integration Tier-1 #4).
216
+ */
217
+ /**
218
+ * Normalise a user-supplied phase argument to match the `phase_number`
219
+ * format that findPhaseInternal returns (zero-padded major component,
220
+ * decimal suffix preserved). Examples: `1` -> `01`, `01.10` -> `01.10`,
221
+ * `12.3` -> `12.3`. Returns null for empty/invalid input.
222
+ */
223
+ function _normalizePhaseArg(phase: string | null): string | null {
224
+ if (!phase) return null;
225
+ const m = phase.match(/^(\d+)(?:\.(\d+))?/);
226
+ if (!m) return null;
227
+ const major = m[1].padStart(2, '0');
228
+ return m[2] !== undefined ? `${major}.${m[2]}` : major;
229
+ }
230
+
231
+ /**
232
+ * Compare two phase IDs componentwise. Handles inserted decimal phases
233
+ * correctly (e.g. `01.10` > `01.9`, which `parseFloat` would reverse since
234
+ * it treats them as 1.1 and 1.9).
235
+ * @returns negative if a < b, 0 if equal, positive if a > b
236
+ */
237
+ function _comparePhaseIds(a: string, b: string): number {
238
+ const partsA = a.split('.').map((p) => parseInt(p, 10));
239
+ const partsB = b.split('.').map((p) => parseInt(p, 10));
240
+ const len = Math.max(partsA.length, partsB.length);
241
+ for (let i = 0; i < len; i++) {
242
+ const ai = partsA[i] ?? 0;
243
+ const bi = partsB[i] ?? 0;
244
+ if (ai !== bi) return ai - bi;
245
+ }
246
+ return 0;
247
+ }
248
+
249
+ function _extractPriorReflections(
250
+ cwd: string,
251
+ currentPhaseNumber: string | null,
252
+ limit: number
253
+ ): Array<{ phase: string; reflection: string }> {
254
+ if (limit <= 0) return [];
255
+ const phasesDir: string = getPhasesDirPath(cwd) as string;
256
+ let entries: import('fs').Dirent[];
257
+ try {
258
+ entries = fs.readdirSync(phasesDir, { withFileTypes: true });
259
+ } catch {
260
+ return [];
261
+ }
262
+
263
+ // Phase dirs look like `01-test`, `02-build`, `12-something`, or decimal-
264
+ // inserted like `01.10-foo`. Sort componentwise — parseFloat would treat
265
+ // `01.10` as 1.1 and misorder it against `01.2`/`01.9`.
266
+ const prior: Array<{ phase: string; dir: string }> = [];
267
+ for (const entry of entries) {
268
+ if (!entry.isDirectory()) continue;
269
+ const m = entry.name.match(/^(\d+(?:\.\d+)?)-/);
270
+ if (!m) continue;
271
+ const phaseNum = m[1];
272
+ if (currentPhaseNumber && _comparePhaseIds(phaseNum, currentPhaseNumber) >= 0) continue;
273
+ prior.push({ phase: phaseNum, dir: entry.name });
274
+ }
275
+ prior.sort((a, b) => _comparePhaseIds(a.phase, b.phase));
276
+
277
+ const results: Array<{ phase: string; reflection: string }> = [];
278
+ // Walk most-recent-first so we collect up to `limit` newest reflections,
279
+ // then reverse to emit in ascending phase order (matches planner reading flow).
280
+ for (let i = prior.length - 1; i >= 0 && results.length < limit; i--) {
281
+ const { phase, dir } = prior[i];
282
+ const verification = _readPhaseFile(cwd, path.relative(cwd, path.join(phasesDir, dir)), '-VERIFICATION.md');
283
+ if (!verification) continue;
284
+ const reflection = _extractReflectionSection(verification);
285
+ if (reflection) results.push({ phase, reflection });
286
+ }
287
+ results.reverse();
288
+ return results;
289
+ }
290
+
291
+ // ─── Execute-Phase Init ──────────────────────────────────────────────────────
292
+
293
+ /**
294
+ * CLI command: Initialize execute-phase context with models, config, phase info, and plan inventory.
295
+ */
296
+ function cmdInitExecutePhase(
297
+ cwd: string,
298
+ phase: string,
299
+ includes: Set<string>,
300
+ raw: boolean
301
+ ): void {
302
+ if (!phase) {
303
+ error(
304
+ 'phase required for init execute-phase. Usage: init execute-phase <phase-number>. Run `grd-tools roadmap get-phase` to list available phases, then pass the phase number, e.g.: init execute-phase 2'
305
+ );
306
+ return;
307
+ }
308
+
309
+ // Pre-flight gate checks
310
+ const gates = runPreflightGates(cwd, 'execute-phase', { phase });
311
+ if (!gates.passed) {
312
+ output({ gate_failed: true, gate_errors: gates.errors, gate_warnings: gates.warnings }, raw);
313
+ return;
314
+ }
315
+
316
+ const config = loadConfig(cwd);
317
+ const backend = detectBackend(cwd);
318
+ const backendCaps = getBackendCapabilities(backend);
319
+ const phaseInfo = findPhaseInternal(cwd, phase);
320
+ const milestone = getMilestoneInfo(cwd);
321
+ const webmcp = detectWebMcp(cwd);
322
+ const overstoryConfig = backend === 'overstory' ? loadOverstoryConfig(cwd) : null;
323
+
324
+ // Cache detectAvailableBackends result to avoid multiple calls
325
+ const availableBackends = detectAvailableBackends(cwd);
326
+
327
+ const result: Record<string, unknown> = {
328
+ // Backend
329
+ backend,
330
+ backend_capabilities: backendCaps,
331
+
332
+ // MCP elicitation and model overrides awareness (REQ-105, REQ-106)
333
+ mcp_elicitation_available: backendCaps.mcp_elicitation === true,
334
+ model_overrides_available: _detectModelOverridesActive(cwd),
335
+
336
+ // Models
337
+ executor_model: resolveModelInternal(cwd, 'grd-executor'),
338
+ verifier_model: resolveModelInternal(cwd, 'grd-verifier'),
339
+ reviewer_model: resolveModelInternal(cwd, 'grd-code-reviewer'),
340
+
341
+ // Effort levels (null if backend does not support effort)
342
+ executor_effort: resolveEffortForAgent(config, 'grd-executor', cwd),
343
+ verifier_effort: resolveEffortForAgent(config, 'grd-verifier', cwd),
344
+ reviewer_effort: resolveEffortForAgent(config, 'grd-code-reviewer', cwd),
345
+
346
+ // Config flags
347
+ commit_docs: config.commit_docs,
348
+ parallelization: config.parallelization,
349
+ branching_strategy: config.branching_strategy,
350
+ phase_branch_template: config.phase_branch_template,
351
+ milestone_branch_template: config.milestone_branch_template,
352
+ base_branch: config.branching_strategy !== 'none' ? config.base_branch : null,
353
+ verifier_enabled: config.verifier,
354
+
355
+ // Code review config
356
+ code_review_enabled: config.code_review_enabled,
357
+ code_review_timing: config.code_review_timing,
358
+ code_review_severity_gate: config.code_review_severity_gate,
359
+ code_review_auto_fix_warnings: config.code_review_auto_fix_warnings,
360
+
361
+ // Discussion & review config
362
+ discussion_before_execution: config.discussion?.before_execution ?? false,
363
+ discussion_enabled: config.discussion?.enabled ?? true,
364
+ brainstormer_backend: config.backend_roles?.brainstormer ?? null,
365
+ brainstormer_available: (() => {
366
+ const brainstormer = config.backend_roles?.brainstormer ?? null;
367
+ if (!brainstormer) return false;
368
+ return availableBackends[brainstormer]?.available === true;
369
+ })(),
370
+ reviewer_backend: config.backend_roles?.reviewer ?? null,
371
+ reviewer_available: (() => {
372
+ const reviewer = config.backend_roles?.reviewer ?? null;
373
+ if (!reviewer) return false;
374
+ return availableBackends[reviewer]?.available === true;
375
+ })(),
376
+ pr_review_enabled: config.code_review_enabled === true && !!(config.backend_roles?.reviewer),
377
+
378
+ // Execution config
379
+ use_teams: config.use_teams,
380
+ team_timeout_minutes: config.team_timeout_minutes,
381
+ max_concurrent_teammates: config.max_concurrent_teammates,
382
+
383
+ // Phase info
384
+ phase_found: !!phaseInfo,
385
+ phase_dir: phaseInfo?.directory || null,
386
+ phase_number: phaseInfo?.phase_number || null,
387
+ phase_name: phaseInfo?.phase_name || null,
388
+ phase_slug: phaseInfo?.phase_slug || null,
389
+
390
+ // Plan inventory
391
+ plans: phaseInfo?.plans || [],
392
+ summaries: phaseInfo?.summaries || [],
393
+ incomplete_plans: phaseInfo?.incomplete_plans || [],
394
+ plan_count: phaseInfo?.plans?.length || 0,
395
+ incomplete_count: phaseInfo?.incomplete_plans?.length || 0,
396
+
397
+ // Write-intent manifests (REQ-167): files each plan declares it will modify
398
+ plan_files_modified: (() => {
399
+ if (!phaseInfo?.plans || !phaseInfo?.directory) return {};
400
+ const phaseDirFull = path.join(cwd, phaseInfo.directory);
401
+ const result: Record<string, string[]> = {};
402
+ for (const planFile of phaseInfo.plans) {
403
+ // Derive plan ID from filename: "89-01-PLAN.md" -> "89-01"
404
+ const planId = planFile.replace(/-PLAN\.md$/i, '');
405
+ const planPath = path.join(phaseDirFull, planFile);
406
+ try {
407
+ const planContent = fs.readFileSync(planPath, 'utf-8') as string;
408
+ const fm = extractFrontmatter(planContent);
409
+ const filesModified = fm.files_modified;
410
+ if (Array.isArray(filesModified)) {
411
+ result[planId] = filesModified as string[];
412
+ } else {
413
+ result[planId] = [];
414
+ }
415
+ } catch {
416
+ result[planId] = [];
417
+ }
418
+ }
419
+ return result;
420
+ })(),
421
+
422
+ // Knowledge injection (NERFIFY): inject prior-phase patterns into executor context
423
+ knowhow_block: (() => {
424
+ if (!phaseInfo?.directory || !phaseInfo?.phase_number) return null;
425
+ const hints = extractModuleHints(path.join(cwd, phaseInfo.directory));
426
+ const block = buildKnowledgeInjectionBlock(cwd, phaseInfo.phase_number, hints);
427
+ return block || null;
428
+ })(),
429
+
430
+ // GoT frozen interfaces (NERFIFY): artifact contracts from plan DAG
431
+ frozen_interfaces: (() => {
432
+ if (!phaseInfo?.plans || !phaseInfo?.directory || !phaseInfo?.phase_number) return [];
433
+ const phaseDirFull = path.join(cwd, phaseInfo.directory);
434
+ const planArtifacts: import('../types').PlanArtifact[] = [];
435
+ for (let i = 0; i < phaseInfo.plans.length; i++) {
436
+ const planFile = phaseInfo.plans[i];
437
+ const planPath = path.join(phaseDirFull, planFile);
438
+ try {
439
+ const planContent = fs.readFileSync(planPath, 'utf-8') as string;
440
+ const fm = extractFrontmatter(planContent);
441
+ planArtifacts.push({
442
+ objective: (fm.objective as string) || '',
443
+ files_modified: (fm.files_modified as string[]) || [],
444
+ phase: phaseInfo.phase_number,
445
+ plan: i + 1,
446
+ type: (fm.type as string) || 'implementation',
447
+ wave: (fm.wave as number) || 1,
448
+ depends_on: (fm.depends_on as string[]) || [],
449
+ autonomous: (fm.autonomous as boolean) ?? true,
450
+ provides: (fm.provides as string[]) || [],
451
+ requires: (fm.requires as string[]) || [],
452
+ integration_points: (fm.integration_points as string[]) || [],
453
+ });
454
+ } catch {
455
+ // Plan file may not have artifact declarations
456
+ }
457
+ }
458
+ if (planArtifacts.length === 0) return [];
459
+ try {
460
+ const dag = buildArtifactDAG(planArtifacts);
461
+ return freezeInterfaces(dag);
462
+ } catch {
463
+ return [];
464
+ }
465
+ })(),
466
+
467
+ // Branch name (pre-computed)
468
+ branch_name:
469
+ config.branching_strategy === 'phase' && phaseInfo
470
+ ? (config.phase_branch_template || 'grd/{milestone}/{phase}-{slug}')
471
+ .replace('{milestone}', milestone.version)
472
+ .replace('{phase}', phaseInfo.phase_number)
473
+ .replace('{slug}', phaseInfo.phase_slug || 'phase')
474
+ : config.branching_strategy === 'milestone'
475
+ ? (config.milestone_branch_template || 'grd/{milestone}-{slug}')
476
+ .replace('{milestone}', milestone.version)
477
+ .replace('{slug}', generateSlugInternal(milestone.name) || 'milestone')
478
+ : null,
479
+
480
+ // Worktree fields (computed, not created)
481
+ worktree_path: phaseInfo ? worktreePath(cwd, milestone.version, phaseInfo.phase_number) : null,
482
+ worktree_branch:
483
+ config.branching_strategy !== 'none' && phaseInfo
484
+ ? (config.phase_branch_template || 'grd/{milestone}/{phase}-{slug}')
485
+ .replace('{milestone}', milestone.version)
486
+ .replace('{phase}', phaseInfo.phase_number)
487
+ .replace('{slug}', phaseInfo.phase_slug || 'phase')
488
+ : null,
489
+
490
+ // Milestone branch (phase branches fork from this, merge back into it)
491
+ milestone_branch:
492
+ config.branching_strategy !== 'none'
493
+ ? (config.milestone_branch_template || 'grd/{milestone}-{slug}')
494
+ .replace('{milestone}', milestone.version)
495
+ .replace('{slug}', generateSlugInternal(milestone.name) || 'milestone')
496
+ : null,
497
+
498
+ // Predecessor branch for stacked PRs
499
+ predecessor_branch: (() => {
500
+ if (config.branching_strategy !== 'phase' || !phaseInfo) return null;
501
+ const phaseNum = parseInt(phaseInfo.phase_number, 10);
502
+ if (isNaN(phaseNum) || phaseNum <= 1) return null;
503
+
504
+ const baseBranch = config.base_branch || 'main';
505
+ const template = config.phase_branch_template || 'grd/{milestone}/{phase}-{slug}';
506
+ const prefix = template
507
+ .replace('{milestone}', milestone.version)
508
+ .replace('{phase}', '')
509
+ .replace('{slug}', '');
510
+
511
+ const branchList = execGit(cwd, ['branch', '--list', '--format', '%(refname:short)']);
512
+ if (branchList.exitCode !== 0) return null;
513
+
514
+ const localBranches = branchList.stdout.trim().split('\n').filter(Boolean);
515
+ const milestonePrefix = prefix.split('/').slice(0, -1).join('/');
516
+
517
+ let bestBranch: string | null = null;
518
+ let bestPhaseNum = 0;
519
+ for (const br of localBranches) {
520
+ if (!br.startsWith(milestonePrefix + '/')) continue;
521
+ const suffix = br.slice(milestonePrefix.length + 1);
522
+ const match = suffix.match(/^(\d+)-/);
523
+ if (!match) continue;
524
+ const brPhaseNum = parseInt(match[1], 10);
525
+ if (brPhaseNum >= phaseNum || brPhaseNum <= bestPhaseNum) continue;
526
+ const merged = execGit(cwd, ['merge-base', '--is-ancestor', br, baseBranch]);
527
+ if (merged.exitCode === 0) continue;
528
+ bestBranch = br;
529
+ bestPhaseNum = brPhaseNum;
530
+ }
531
+ return bestBranch;
532
+ })(),
533
+
534
+ // Milestone info
535
+ milestone_version: milestone.version,
536
+ milestone_name: milestone.name,
537
+ milestone_slug: generateSlugInternal(milestone.name),
538
+
539
+ // File existence
540
+ state_exists: pathExistsInternal(cwd, path.join(getPlanningDir(cwd), 'STATE.md')),
541
+ roadmap_exists: pathExistsInternal(cwd, path.join(getPlanningDir(cwd), 'ROADMAP.md')),
542
+ config_exists: pathExistsInternal(cwd, path.join(getPlanningDir(cwd), 'config.json')),
543
+ principles_exists: pathExistsInternal(cwd, path.join(getPlanningDir(cwd), 'PRINCIPLES.md')),
544
+ standards_exists: fs.existsSync(path.join(getStandardsDirPath(cwd), 'index.yml')),
545
+
546
+ // Milestone-scoped paths (REQ-56)
547
+ phases_dir: path.relative(cwd, getPhasesDirPath(cwd)),
548
+ research_dir: path.relative(cwd, getResearchDirPath(cwd)),
549
+ codebase_dir: path.relative(cwd, getCodebaseDirPath(cwd)),
550
+ quick_dir: path.relative(cwd, getQuickDirPath(cwd)),
551
+ todos_dir: path.relative(cwd, getTodosDirPath(cwd)),
552
+ standards_dir: path.relative(cwd, getStandardsDirPath(cwd)),
553
+
554
+ // Ceremony level
555
+ ceremony_level: inferCeremonyLevel(config, phaseInfo, cwd),
556
+
557
+ // WebMCP availability (REQ-96)
558
+ webmcp_available: webmcp.available,
559
+ webmcp_skip_reason: webmcp.available ? null : webmcp.reason,
560
+
561
+ // Native worktree isolation capability (Phase 45)
562
+ // For overstory, this is false — Overstory manages its own worktrees, not Claude Code
563
+ native_worktree_available:
564
+ backend !== 'overstory' && backendCaps.native_worktree_isolation === true,
565
+
566
+ // Overstory backend fields (config preloaded, pass to detectOverstory to avoid re-read)
567
+ overstory_available:
568
+ backend === 'overstory' ? detectOverstory(cwd, overstoryConfig ?? undefined) !== null : false,
569
+ overstory_runtime: overstoryConfig ? overstoryConfig.runtime : null,
570
+ overstory_config: overstoryConfig,
571
+
572
+ // Isolation mode and main repo path (Phase 46)
573
+ isolation_mode:
574
+ config.branching_strategy === 'none'
575
+ ? 'none'
576
+ : backend === 'overstory'
577
+ ? 'overstory'
578
+ : backendCaps.native_worktree_isolation === true
579
+ ? 'native'
580
+ : 'manual',
581
+ main_repo_path:
582
+ config.branching_strategy !== 'none'
583
+ ? (() => {
584
+ try {
585
+ return fs.realpathSync(cwd);
586
+ } catch (err) {
587
+ process.stderr.write(
588
+ `[grd] WARNING: realpathSync failed: ${(err as Error).message}, using raw cwd\n`
589
+ );
590
+ return cwd;
591
+ }
592
+ })()
593
+ : null,
594
+
595
+ // CLAUDE_PLUGIN_DATA (v2.1.78): persistent directory for cross-project plugin state.
596
+ // When available, agents can use this for state that should survive plugin updates
597
+ // and be shared across projects (e.g., global scheduler config, evolve history).
598
+ // .planning/ remains the source of truth for project-scoped state.
599
+ plugin_data_available: !!process.env.CLAUDE_PLUGIN_DATA,
600
+ plugin_data_dir: process.env.CLAUDE_PLUGIN_DATA || null,
601
+ };
602
+
603
+ // Include gate warnings if any
604
+ if (gates.warnings.length > 0) {
605
+ result.gate_warnings = gates.warnings;
606
+ }
607
+
608
+ // Include file contents if requested via --include
609
+ if (includes.has('state')) {
610
+ result.state_content = safeReadMarkdown(path.join(cwd, '.planning', 'STATE.md'));
611
+ }
612
+ if (includes.has('config')) {
613
+ result.config_content = safeReadFile(path.join(cwd, '.planning', 'config.json'));
614
+ }
615
+ if (includes.has('roadmap')) {
616
+ result.roadmap_content = safeReadMarkdown(path.join(cwd, '.planning', 'ROADMAP.md'));
617
+ }
618
+ if (includes.has('principles')) {
619
+ result.principles_content = safeReadMarkdown(path.join(cwd, '.planning', 'PRINCIPLES.md'));
620
+ }
621
+ if (includes.has('context') && phaseInfo?.directory) {
622
+ const ctx = _readPhaseFile(cwd, phaseInfo.directory, '-CONTEXT.md');
623
+ if (ctx) result.context_content = ctx;
624
+ }
625
+
626
+ output(
627
+ result,
628
+ raw,
629
+ `Backend: ${result.backend}, phase: ${result.phase_number || 'unknown'}, milestone: ${result.milestone_version}`
630
+ );
631
+ }
632
+
633
+ // ─── Plan-Phase Init ─────────────────────────────────────────────────────────
634
+
635
+ /**
636
+ * CLI command: Initialize plan-phase context with models, workflow flags, and existing artifacts.
637
+ */
638
+ function cmdInitPlanPhase(cwd: string, phase: string, includes: Set<string>, raw: boolean): void {
639
+ if (!phase) {
640
+ error(
641
+ 'phase required for init plan-phase. Usage: init plan-phase <phase-number>. Pass the phase number as an argument, e.g.: init plan-phase 01'
642
+ );
643
+ return;
644
+ }
645
+
646
+ const gates = runPreflightGates(cwd, 'plan-phase', { phase });
647
+ if (!gates.passed) {
648
+ output({ gate_failed: true, gate_errors: gates.errors, gate_warnings: gates.warnings }, raw);
649
+ return;
650
+ }
651
+
652
+ const config = loadConfig(cwd);
653
+ const backend = detectBackend(cwd);
654
+ const backendCaps = getBackendCapabilities(backend);
655
+ const phaseInfo = findPhaseInternal(cwd, phase);
656
+ const webmcp = detectWebMcp(cwd);
657
+ const availableBackendsPlan = detectAvailableBackends(cwd);
658
+
659
+ const result: Record<string, unknown> = {
660
+ // Backend
661
+ backend,
662
+ backend_capabilities: backendCaps,
663
+
664
+ // MCP elicitation and model overrides awareness (REQ-105, REQ-106)
665
+ mcp_elicitation_available: backendCaps.mcp_elicitation === true,
666
+ model_overrides_available: _detectModelOverridesActive(cwd),
667
+
668
+ // Models
669
+ researcher_model: resolveModelInternal(cwd, 'grd-phase-researcher'),
670
+ planner_model: resolveModelInternal(cwd, 'grd-planner'),
671
+ checker_model: resolveModelInternal(cwd, 'grd-plan-checker'),
672
+
673
+ // Effort levels (null if backend does not support effort)
674
+ researcher_effort: resolveEffortForAgent(config, 'grd-phase-researcher', cwd),
675
+ planner_effort: resolveEffortForAgent(config, 'grd-planner', cwd),
676
+ checker_effort: resolveEffortForAgent(config, 'grd-plan-checker', cwd),
677
+
678
+ // Workflow flags
679
+ research_enabled: config.research,
680
+ plan_checker_enabled: config.plan_checker,
681
+ commit_docs: config.commit_docs,
682
+
683
+ // Phase info
684
+ phase_found: !!phaseInfo,
685
+ phase_dir: phaseInfo?.directory || null,
686
+ phase_number: phaseInfo?.phase_number || null,
687
+ phase_name: phaseInfo?.phase_name || null,
688
+ phase_slug: phaseInfo?.phase_slug || null,
689
+ padded_phase: phaseInfo?.phase_number?.padStart(2, '0') || null,
690
+
691
+ // Existing artifacts
692
+ has_research: phaseInfo?.has_research || false,
693
+ has_context: phaseInfo?.has_context || false,
694
+ has_plans: (phaseInfo?.plans?.length || 0) > 0,
695
+ plan_count: phaseInfo?.plans?.length || 0,
696
+
697
+ // Environment
698
+ planning_exists: pathExistsInternal(cwd, '.planning'),
699
+ roadmap_exists: pathExistsInternal(cwd, path.join(getPlanningDir(cwd), 'ROADMAP.md')),
700
+ principles_exists: pathExistsInternal(cwd, path.join(getPlanningDir(cwd), 'PRINCIPLES.md')),
701
+ standards_exists: fs.existsSync(path.join(getStandardsDirPath(cwd), 'index.yml')),
702
+
703
+ // Milestone-scoped paths (REQ-56)
704
+ phases_dir: path.relative(cwd, getPhasesDirPath(cwd)),
705
+ research_dir: path.relative(cwd, getResearchDirPath(cwd)),
706
+ codebase_dir: path.relative(cwd, getCodebaseDirPath(cwd)),
707
+ quick_dir: path.relative(cwd, getQuickDirPath(cwd)),
708
+ todos_dir: path.relative(cwd, getTodosDirPath(cwd)),
709
+ standards_dir: path.relative(cwd, getStandardsDirPath(cwd)),
710
+
711
+ // Ceremony level
712
+ ceremony_level: inferCeremonyLevel(config, phaseInfo, cwd),
713
+
714
+ // WebMCP availability (REQ-96)
715
+ webmcp_available: webmcp.available,
716
+ webmcp_skip_reason: webmcp.available ? null : webmcp.reason,
717
+
718
+ // CLAUDE_PLUGIN_DATA (v2.1.78): persistent directory for cross-project plugin state.
719
+ // When available, agents can use this for state that should survive plugin updates
720
+ // and be shared across projects (e.g., global scheduler config, evolve history).
721
+ // .planning/ remains the source of truth for project-scoped state.
722
+ plugin_data_available: !!process.env.CLAUDE_PLUGIN_DATA,
723
+ plugin_data_dir: process.env.CLAUDE_PLUGIN_DATA || null,
724
+
725
+ // Knowledge injection (NERFIFY): inject prior-phase patterns into planner/researcher context
726
+ knowhow_block: (() => {
727
+ if (!phaseInfo?.phase_number) return null;
728
+ const phaseDir = phaseInfo.directory ? path.join(cwd, phaseInfo.directory) : null;
729
+ const hints = phaseDir ? extractModuleHints(phaseDir) : [];
730
+ const block = buildKnowledgeInjectionBlock(cwd, phaseInfo.phase_number, hints);
731
+ return block || null;
732
+ })(),
733
+
734
+ // Prior reflection sections from previous phases' VERIFICATION.md files.
735
+ // Tier-1 #4 of the Ouroboros integration: the planner sees prior
736
+ // hypothesis -> predicted_outcome -> actual_outcome -> verdict history
737
+ // so it can build on confirmed claims, refine partials, and avoid
738
+ // restating falsified hypotheses. Capped at 5 to bound context size.
739
+ //
740
+ // Use phaseInfo.phase_number when the phase dir exists. When it does
741
+ // not (planning a roadmap phase before its directory is created),
742
+ // fall back to the user-supplied `phase` argument so the >= current
743
+ // filter still excludes future phases. Without this fallback, codex
744
+ // r2 P2: `null` disables the filter and future reflections leak in.
745
+ prior_reflections: _extractPriorReflections(
746
+ cwd,
747
+ phaseInfo?.phase_number || _normalizePhaseArg(phase),
748
+ 5
749
+ ),
750
+
751
+ // DEAD-ENDS.md registry (Tier-2 #6 of the Ouroboros integration).
752
+ // Project-scoped (NOT milestone-scoped) — dead ends are knowledge that
753
+ // crosses milestones. Planner consults this before proposing a new
754
+ // hypothesis so previously-falsified approaches do not re-surface
755
+ // without explicit re-test. Read path only in this PR; writes are a
756
+ // future PR. Null when the file does not exist.
757
+ dead_ends_md: safeReadMarkdown(path.join(cwd, '.planning', 'DEAD-ENDS.md')),
758
+
759
+ // GENOME.md strategy snapshot (Tier-2 #8 of the Ouroboros integration).
760
+ // Project-scoped, captures the current planning meta-strategy: which
761
+ // heuristics work, which agents are favored, what verdict-thresholds.
762
+ // Planner reads it and adapts; per-iteration rewrites are tracked in
763
+ // git (rollback policy = `git revert`). Read path only; snapshot CLI
764
+ // is a follow-up PR. Null when the file does not exist.
765
+ genome_md: safeReadMarkdown(path.join(cwd, '.planning', 'GENOME.md')),
766
+
767
+ // Citation traversal config
768
+ transitive_citation_gate_enabled: !!(config as unknown as Record<string, unknown>).transitive_citation_gate,
769
+
770
+ // Discussion & review config
771
+ discussion_before_planning: config.discussion?.before_planning ?? true,
772
+ discussion_enabled: config.discussion?.enabled ?? true,
773
+ brainstormer_backend: config.backend_roles?.brainstormer ?? null,
774
+ brainstormer_available: (() => {
775
+ const brainstormer = config.backend_roles?.brainstormer ?? null;
776
+ if (!brainstormer) return false;
777
+ return availableBackendsPlan[brainstormer]?.available === true;
778
+ })(),
779
+ reviewer_backend: config.backend_roles?.reviewer ?? null,
780
+ reviewer_available: (() => {
781
+ const reviewer = config.backend_roles?.reviewer ?? null;
782
+ if (!reviewer) return false;
783
+ return availableBackendsPlan[reviewer]?.available === true;
784
+ })(),
785
+ };
786
+
787
+ if (gates.warnings.length > 0) {
788
+ result.gate_warnings = gates.warnings;
789
+ }
790
+
791
+ // Include file contents if requested via --include
792
+ if (includes.has('state')) {
793
+ result.state_content = safeReadMarkdown(path.join(cwd, '.planning', 'STATE.md'));
794
+ }
795
+ if (includes.has('roadmap')) {
796
+ result.roadmap_content = safeReadMarkdown(path.join(cwd, '.planning', 'ROADMAP.md'));
797
+ }
798
+ if (includes.has('requirements')) {
799
+ result.requirements_content = safeReadMarkdown(path.join(cwd, '.planning', 'REQUIREMENTS.md'));
800
+ }
801
+ if (includes.has('context') && phaseInfo?.directory) {
802
+ const ctx = _readPhaseFile(cwd, phaseInfo.directory, '-CONTEXT.md');
803
+ if (ctx) result.context_content = ctx;
804
+ }
805
+ if (includes.has('research') && phaseInfo?.directory) {
806
+ const res = _readPhaseFile(cwd, phaseInfo.directory, '-RESEARCH.md');
807
+ if (res) result.research_content = res;
808
+ }
809
+ if (includes.has('verification') && phaseInfo?.directory) {
810
+ const ver = _readPhaseFile(cwd, phaseInfo.directory, '-VERIFICATION.md');
811
+ if (ver) result.verification_content = ver;
812
+ }
813
+ if (includes.has('uat') && phaseInfo?.directory) {
814
+ const uat = _readPhaseFile(cwd, phaseInfo.directory, '-UAT.md');
815
+ if (uat) result.uat_content = uat;
816
+ }
817
+ if (includes.has('principles')) {
818
+ result.principles_content = safeReadMarkdown(path.join(cwd, '.planning', 'PRINCIPLES.md'));
819
+ }
820
+
821
+ output(result, raw, `Backend: ${result.backend}, phase: ${result.phase_number || 'unknown'}`);
822
+ }
823
+
824
+ // ─── Verify-Work Init ────────────────────────────────────────────────────────
825
+
826
+ /**
827
+ * CLI command: Initialize verify-work context with phase info and verification artifact status.
828
+ */
829
+ function cmdInitVerifyWork(cwd: string, phase: string, raw: boolean): void {
830
+ if (!phase) {
831
+ error('phase required for init verify-work');
832
+ return;
833
+ }
834
+
835
+ const config = loadConfig(cwd);
836
+ const backend = detectBackend(cwd);
837
+ const phaseInfo = findPhaseInternal(cwd, phase);
838
+ const webmcp = detectWebMcp(cwd);
839
+
840
+ const result: Record<string, unknown> = {
841
+ backend,
842
+ backend_capabilities: getBackendCapabilities(backend),
843
+ planner_model: resolveModelInternal(cwd, 'grd-planner'),
844
+ planner_effort: resolveEffortForAgent(config, 'grd-planner', cwd),
845
+ checker_model: resolveModelInternal(cwd, 'grd-plan-checker'),
846
+ checker_effort: resolveEffortForAgent(config, 'grd-plan-checker', cwd),
847
+ commit_docs: config.commit_docs,
848
+ phase_found: !!phaseInfo,
849
+ phase_dir: phaseInfo?.directory || null,
850
+ phase_number: phaseInfo?.phase_number || null,
851
+ phase_name: phaseInfo?.phase_name || null,
852
+ has_verification: phaseInfo?.has_verification || false,
853
+ phases_dir: path.relative(cwd, getPhasesDirPath(cwd)),
854
+ research_dir: path.relative(cwd, getResearchDirPath(cwd)),
855
+ codebase_dir: path.relative(cwd, getCodebaseDirPath(cwd)),
856
+ quick_dir: path.relative(cwd, getQuickDirPath(cwd)),
857
+ todos_dir: path.relative(cwd, getTodosDirPath(cwd)),
858
+ standards_dir: path.relative(cwd, getStandardsDirPath(cwd)),
859
+ standards_exists: fs.existsSync(path.join(getStandardsDirPath(cwd), 'index.yml')),
860
+ webmcp_available: webmcp.available,
861
+ webmcp_skip_reason: webmcp.available ? null : webmcp.reason,
862
+ };
863
+
864
+ output(result, raw, `Backend: ${result.backend}, phase: ${result.phase_number || 'unknown'}`);
865
+ }
866
+
867
+ // ─── Code-Review Init ────────────────────────────────────────────────────────
868
+
869
+ /**
870
+ * CLI command: Initialize code-review context with phase plans, summaries, and reviewer model.
871
+ */
872
+ function cmdInitCodeReview(cwd: string, phase: string, raw: boolean): void {
873
+ if (!phase) {
874
+ error(
875
+ 'phase required for init code-review. Usage: init code-review <phase-number>. Provide a phase number, e.g.: init code-review 2'
876
+ );
877
+ return;
878
+ }
879
+
880
+ const config = loadConfig(cwd);
881
+ const backend = detectBackend(cwd);
882
+ const phaseInfo = findPhaseInternal(cwd, phase);
883
+ const planningDir = getPlanningDir(cwd);
884
+
885
+ const result: Record<string, unknown> = {
886
+ backend,
887
+ backend_capabilities: getBackendCapabilities(backend),
888
+ reviewer_model: resolveModelInternal(cwd, 'grd-code-reviewer'),
889
+ reviewer_effort: resolveEffortForAgent(config, 'grd-code-reviewer', cwd),
890
+ code_review_enabled: config.code_review_enabled,
891
+ code_review_timing: config.code_review_timing,
892
+ code_review_severity_gate: config.code_review_severity_gate,
893
+ phase_found: !!phaseInfo,
894
+ phase_dir: phaseInfo?.directory || null,
895
+ phase_number: phaseInfo?.phase_number || null,
896
+ phase_name: phaseInfo?.phase_name || null,
897
+ plans: phaseInfo?.plans || [],
898
+ summaries: phaseInfo?.summaries || [],
899
+ plan_count: phaseInfo?.plans?.length || 0,
900
+ summary_count: phaseInfo?.summaries?.length || 0,
901
+ has_research: phaseInfo?.has_research || false,
902
+ roadmap_exists: pathExistsInternal(cwd, path.join(planningDir, 'ROADMAP.md')),
903
+ requirements_exists: pathExistsInternal(cwd, path.join(planningDir, 'REQUIREMENTS.md')),
904
+ phases_dir: path.relative(cwd, getPhasesDirPath(cwd)),
905
+ };
906
+
907
+ output(
908
+ result,
909
+ raw,
910
+ `Backend: ${result.backend}, phase: ${result.phase_number || 'unknown'}, plans: ${result.plan_count}`
911
+ );
912
+ }
913
+
914
+ // ─── Phase-Research Init ─────────────────────────────────────────────────────
915
+
916
+ /**
917
+ * CLI command: Initialize phase-research context with research files and phase details.
918
+ */
919
+ function cmdInitPhaseResearch(
920
+ cwd: string,
921
+ phase: string,
922
+ includes: Set<string>,
923
+ raw: boolean
924
+ ): void {
925
+ if (!phase) {
926
+ error(
927
+ 'phase required for init phase-research. Usage: init phase-research <phase-number>. Provide a phase number, e.g.: init phase-research 2'
928
+ );
929
+ return;
930
+ }
931
+
932
+ const config = loadConfig(cwd);
933
+ const backend = detectBackend(cwd);
934
+ const phaseInfo = findPhaseInternal(cwd, phase);
935
+ const planningDir = getPlanningDir(cwd);
936
+ const researchDir = getResearchDirPath(cwd);
937
+
938
+ const result: Record<string, unknown> = {
939
+ backend,
940
+ backend_capabilities: getBackendCapabilities(backend),
941
+ researcher_model: resolveModelForAgent(config, 'grd-phase-researcher'),
942
+ researcher_effort: resolveEffortForAgent(config, 'grd-phase-researcher', cwd),
943
+ phase_found: !!phaseInfo,
944
+ phase_dir: phaseInfo?.directory || null,
945
+ phase_number: phaseInfo?.phase_number || null,
946
+ phase_name: phaseInfo?.phase_name || null,
947
+ landscape_exists: fs.existsSync(path.join(researchDir, 'LANDSCAPE.md')),
948
+ papers_exists: fs.existsSync(path.join(researchDir, 'PAPERS.md')),
949
+ knowhow_exists: fs.existsSync(path.join(researchDir, 'KNOWHOW.md')),
950
+ baseline_exists: pathExistsInternal(cwd, path.join(planningDir, 'BASELINE.md')),
951
+ roadmap_exists: pathExistsInternal(cwd, path.join(planningDir, 'ROADMAP.md')),
952
+ requirements_exists: pathExistsInternal(cwd, path.join(planningDir, 'REQUIREMENTS.md')),
953
+ phases_dir: path.relative(cwd, getPhasesDirPath(cwd)),
954
+ research_dir: path.relative(cwd, researchDir),
955
+ };
956
+
957
+ // Include file contents if requested
958
+ if (includes.has('landscape')) {
959
+ result.landscape_content = safeReadMarkdown(path.join(researchDir, 'LANDSCAPE.md'));
960
+ }
961
+ if (includes.has('roadmap')) {
962
+ result.roadmap_content = safeReadMarkdown(path.join(planningDir, 'ROADMAP.md'));
963
+ }
964
+ if (includes.has('state')) {
965
+ result.state_content = safeReadMarkdown(path.join(planningDir, 'STATE.md'));
966
+ }
967
+
968
+ output(result, raw, `Backend: ${result.backend}, phase: ${result.phase_number || 'unknown'}`);
969
+ }
970
+
971
+ module.exports = {
972
+ cmdInitExecutePhase,
973
+ cmdInitPlanPhase,
974
+ cmdInitVerifyWork,
975
+ cmdInitCodeReview,
976
+ cmdInitPhaseResearch,
977
+ };