@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,405 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * GRD Evolve -- Product ideation discoverer
5
+ *
6
+ * Claude-powered product-level feature discovery. Unlike the code-quality
7
+ * discoverers in _dimensions.ts, this module thinks like a product manager:
8
+ * it reads PROJECT.md, LONG-TERM-ROADMAP.md, existing commands/agents,
9
+ * and generates creative feature ideas with business value.
10
+ *
11
+ * Private helper module -- imported only by ./discovery.ts.
12
+ *
13
+ * @dependencies ./types, ./state, ../utils, ../autopilot
14
+ */
15
+
16
+ import type { WorkItem, WorkItemEffort, ProductIdeationContext, DiscoveryOptions } from './types';
17
+
18
+ const path = require('path') as typeof import('path');
19
+ const fs = require('fs') as typeof import('fs');
20
+ const {
21
+ safeReadFile,
22
+ }: {
23
+ safeReadFile: (filePath: string) => string | null;
24
+ } = require('../utils');
25
+ const {
26
+ spawnClaudeAsync,
27
+ }: {
28
+ spawnClaudeAsync: (
29
+ cwd: string,
30
+ prompt: string,
31
+ opts?: {
32
+ captureOutput?: boolean;
33
+ model?: string;
34
+ maxTurns?: number;
35
+ timeout?: number;
36
+ outputFormat?: string;
37
+ captureStderr?: boolean;
38
+ }
39
+ ) => Promise<{
40
+ exitCode: number;
41
+ stdout?: string;
42
+ stderr?: string;
43
+ timedOut: boolean;
44
+ }>;
45
+ } = require('../autopilot');
46
+ const {
47
+ createWorkItem,
48
+ SONNET_MODEL,
49
+ }: {
50
+ createWorkItem: (
51
+ dimension: string,
52
+ slug: string,
53
+ title: string,
54
+ description: string,
55
+ opts?: { effort?: string }
56
+ ) => WorkItem;
57
+ SONNET_MODEL: string;
58
+ } = require('./state');
59
+
60
+ // ── Context Gathering ────────────────────────────────────────────────────────
61
+
62
+ /**
63
+ * Gather product context from planning files and codebase structure.
64
+ * Each file read is wrapped in try/catch; missing files produce null/empty fallbacks.
65
+ */
66
+ function gatherProductContext(cwd: string): ProductIdeationContext {
67
+ const planningDir: string = path.join(cwd, '.planning');
68
+
69
+ // PROJECT.md -- extract first 3000 chars (vision section)
70
+ let projectVision: string | null = null;
71
+ try {
72
+ const raw: string | null = safeReadFile(path.join(planningDir, 'PROJECT.md'));
73
+ if (raw) {
74
+ projectVision = raw.substring(0, 3000);
75
+ }
76
+ } catch (err) {
77
+ process.stderr.write(
78
+ `[evolve] Product ideation: failed to read PROJECT.md: ${(err as Error).message}\n`
79
+ );
80
+ }
81
+
82
+ // LONG-TERM-ROADMAP.md -- extract first 2000 chars
83
+ let longTermGoals: string | null = null;
84
+ try {
85
+ const raw: string | null = safeReadFile(path.join(planningDir, 'LONG-TERM-ROADMAP.md'));
86
+ if (raw) {
87
+ longTermGoals = raw.substring(0, 2000);
88
+ }
89
+ } catch (err) {
90
+ process.stderr.write(
91
+ `[evolve] Product ideation: failed to read LONG-TERM-ROADMAP.md: ${(err as Error).message}\n`
92
+ );
93
+ }
94
+
95
+ // PRODUCT-QUALITY.md -- extract first 1500 chars if exists
96
+ let productQuality: string | null = null;
97
+ try {
98
+ const raw: string | null = safeReadFile(path.join(planningDir, 'PRODUCT-QUALITY.md'));
99
+ if (raw) {
100
+ productQuality = raw.substring(0, 1500);
101
+ }
102
+ } catch (err) {
103
+ process.stderr.write(
104
+ `[evolve] Product ideation: failed to read PRODUCT-QUALITY.md: ${(err as Error).message}\n`
105
+ );
106
+ }
107
+
108
+ // commands/ directory -- list .md files, extract command names
109
+ let existingCommands: string[] = [];
110
+ try {
111
+ const cmdDir: string = path.join(cwd, 'commands');
112
+ const entries = fs.readdirSync(cmdDir, { withFileTypes: true });
113
+ existingCommands = entries
114
+ .filter((e: { isFile: () => boolean; name: string }) => e.isFile() && e.name.endsWith('.md'))
115
+ .map((e: { name: string }) => e.name.replace(/\.md$/, ''));
116
+ } catch {
117
+ // commands/ directory missing -- not critical
118
+ }
119
+
120
+ // agents/ directory -- list .md files, extract agent names
121
+ let existingAgents: string[] = [];
122
+ try {
123
+ const agentDir: string = path.join(cwd, 'agents');
124
+ const entries = fs.readdirSync(agentDir, { withFileTypes: true });
125
+ existingAgents = entries
126
+ .filter((e: { isFile: () => boolean; name: string }) => e.isFile() && e.name.endsWith('.md'))
127
+ .map((e: { name: string }) => e.name.replace(/\.md$/, ''));
128
+ } catch {
129
+ // agents/ directory missing -- not critical
130
+ }
131
+
132
+ // ROADMAP.md -- extract last ~2000 chars (recent phases)
133
+ let recentPhases: string | null = null;
134
+ try {
135
+ const raw: string | null = safeReadFile(path.join(planningDir, 'ROADMAP.md'));
136
+ if (raw) {
137
+ recentPhases = raw.length > 2000 ? raw.substring(raw.length - 2000) : raw;
138
+ }
139
+ } catch (err) {
140
+ process.stderr.write(
141
+ `[evolve] Product ideation: failed to read ROADMAP.md: ${(err as Error).message}\n`
142
+ );
143
+ }
144
+
145
+ return {
146
+ projectVision,
147
+ longTermGoals,
148
+ existingCommands,
149
+ existingAgents,
150
+ recentPhases,
151
+ productQuality,
152
+ };
153
+ }
154
+
155
+ // ── Prompt Construction ──────────────────────────────────────────────────────
156
+
157
+ /**
158
+ * Build a product-manager-focused prompt for Claude.
159
+ * This is fundamentally different from buildDiscoveryPrompt in discovery.ts --
160
+ * it asks for creative feature ideas, not code-quality improvements.
161
+ */
162
+ function buildProductIdeationPrompt(context: ProductIdeationContext): string {
163
+ const sections: string[] = [];
164
+
165
+ sections.push(
166
+ 'You are a product manager for a developer tools company. Your job is to generate creative, high-value feature ideas for this product.'
167
+ );
168
+
169
+ sections.push('');
170
+ sections.push('## Product Vision');
171
+ if (context.projectVision) {
172
+ sections.push(context.projectVision);
173
+ } else {
174
+ sections.push('(No PROJECT.md found -- infer from existing commands and agents.)');
175
+ }
176
+
177
+ if (context.longTermGoals) {
178
+ sections.push('');
179
+ sections.push('## Long-Term Roadmap Goals');
180
+ sections.push(context.longTermGoals);
181
+ }
182
+
183
+ if (context.productQuality) {
184
+ sections.push('');
185
+ sections.push('## Known Product Quality Gaps');
186
+ sections.push(context.productQuality);
187
+ }
188
+
189
+ sections.push('');
190
+ sections.push('## What Already Exists');
191
+
192
+ if (context.existingCommands.length > 0) {
193
+ sections.push('');
194
+ sections.push('### Commands');
195
+ sections.push(context.existingCommands.map((c) => `- /${c}`).join('\n'));
196
+ }
197
+
198
+ if (context.existingAgents.length > 0) {
199
+ sections.push('');
200
+ sections.push('### Agents');
201
+ sections.push(context.existingAgents.map((a) => `- ${a}`).join('\n'));
202
+ }
203
+
204
+ if (context.recentPhases) {
205
+ sections.push('');
206
+ sections.push('## Recently Built (for context on momentum)');
207
+ sections.push(context.recentPhases);
208
+ }
209
+
210
+ sections.push('');
211
+ sections.push('## Your Task');
212
+ sections.push('');
213
+ sections.push('Generate creative feature ideas across these categories:');
214
+ sections.push('- New user-facing commands or workflows');
215
+ sections.push('- New integrations with external tools/services');
216
+ sections.push('- UX improvements to existing workflows');
217
+ sections.push('- Developer experience enhancements');
218
+ sections.push('- New analysis or insight capabilities');
219
+ sections.push('- Automation or productivity features');
220
+
221
+ sections.push('');
222
+ sections.push('## Output Format');
223
+ sections.push('');
224
+ sections.push('Output ONLY a JSON array. Each item:');
225
+ sections.push(
226
+ '{"dimension":"product-ideation","slug":"<kebab-id>","title":"<short title>","description":"<what it does + why users need it + what pain point it solves>","effort":"small|medium|large"}'
227
+ );
228
+
229
+ sections.push('');
230
+ sections.push('## Rules');
231
+ sections.push('- Think about USER VALUE, not code hygiene');
232
+ sections.push('- Each idea should solve a real user problem or unlock a new capability');
233
+ sections.push('- Be creative but realistic -- ideas must be directly implementable as code');
234
+ sections.push('- Include the "why" -- what user pain point does this address?');
235
+ sections.push(
236
+ '- Each description MUST specify: which files to create/modify, what the implementation looks like, entry point'
237
+ );
238
+ sections.push('- Bad: "Add a dashboard for metrics" (too vague)');
239
+ sections.push(
240
+ '- Good: "Add `gd metrics` CLI command in bin/grd-tools.ts that reads .planning/EVOLVE-STATE.json and outputs iteration success rate, avg items/iteration, and top themes — helps users understand evolve effectiveness"'
241
+ );
242
+ sections.push('- 3-5 items only — each must be specific enough to implement in one session');
243
+ sections.push('- ONLY the JSON array, no other text');
244
+ sections.push('- Every item MUST have dimension "product-ideation"');
245
+ sections.push(
246
+ '- Slugs should be descriptive kebab-case (e.g. "auto-changelog-generation", "dependency-impact-analysis")'
247
+ );
248
+
249
+ return sections.join('\n');
250
+ }
251
+
252
+ // ── Output Parsing ───────────────────────────────────────────────────────────
253
+
254
+ /**
255
+ * Parse Claude's product ideation output into validated WorkItem objects.
256
+ * Only accepts items where dimension === 'product-ideation'.
257
+ * Returns empty array if parsing fails (no crash).
258
+ */
259
+ function parseProductIdeationOutput(raw: string): WorkItem[] {
260
+ let jsonStr: string = raw.trim();
261
+
262
+ // Strip markdown fences if present
263
+ const fenceMatch: RegExpMatchArray | null = jsonStr.match(
264
+ /```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/
265
+ );
266
+ if (fenceMatch) {
267
+ jsonStr = fenceMatch[1].trim();
268
+ }
269
+
270
+ let parsed: unknown;
271
+ try {
272
+ parsed = JSON.parse(jsonStr);
273
+ } catch {
274
+ return [];
275
+ }
276
+
277
+ if (!Array.isArray(parsed)) {
278
+ return [];
279
+ }
280
+
281
+ const validEfforts: string[] = ['small', 'medium', 'large'];
282
+ const items: WorkItem[] = [];
283
+
284
+ for (const entry of parsed as Array<Record<string, unknown>>) {
285
+ if (
286
+ !entry ||
287
+ typeof entry.dimension !== 'string' ||
288
+ typeof entry.slug !== 'string' ||
289
+ typeof entry.title !== 'string' ||
290
+ typeof entry.description !== 'string'
291
+ ) {
292
+ continue;
293
+ }
294
+
295
+ // Only accept product-ideation dimension
296
+ if (entry.dimension !== 'product-ideation') {
297
+ continue;
298
+ }
299
+
300
+ const effort: WorkItemEffort = validEfforts.includes(entry.effort as string)
301
+ ? (entry.effort as WorkItemEffort)
302
+ : 'medium';
303
+
304
+ try {
305
+ items.push(
306
+ createWorkItem(entry.dimension, entry.slug, entry.title, entry.description, { effort })
307
+ );
308
+ } catch {
309
+ // Skip invalid items (e.g., if createWorkItem rejects the dimension)
310
+ }
311
+ }
312
+
313
+ return items;
314
+ }
315
+
316
+ // ── Main Discovery Function ──────────────────────────────────────────────────
317
+
318
+ /**
319
+ * Discover product-level feature ideas by spawning Claude with a product-manager prompt.
320
+ * Returns empty array on failure (graceful fallback, no crash).
321
+ */
322
+ async function discoverProductIdeationItems(
323
+ cwd: string,
324
+ opts?: DiscoveryOptions
325
+ ): Promise<WorkItem[]> {
326
+ const context: ProductIdeationContext = gatherProductContext(cwd);
327
+
328
+ // If no PROJECT.md found, skip product ideation entirely
329
+ if (context.projectVision === null) {
330
+ process.stderr.write('[evolve] Product ideation skipped: no PROJECT.md found\n');
331
+ return [];
332
+ }
333
+
334
+ const DEFAULT_IDEATION_TIMEOUT: number = 10_800_000; // 3 hours
335
+ const effectiveTimeout: number = opts?.timeoutMs || DEFAULT_IDEATION_TIMEOUT;
336
+ const scheduler = opts?.scheduler;
337
+ const prompt: string = buildProductIdeationPrompt(context);
338
+
339
+ try {
340
+ const result = scheduler
341
+ ? await scheduler.spawn(prompt, {
342
+ model: SONNET_MODEL,
343
+ maxTurns: 15,
344
+ timeout: effectiveTimeout,
345
+ captureOutput: true,
346
+ cwd,
347
+ workItemId: `evolve-discovery-product-ideation-${Date.now()}`,
348
+ agentType: 'grd-planner',
349
+ })
350
+ : await spawnClaudeAsync(cwd, prompt, {
351
+ captureOutput: true,
352
+ model: SONNET_MODEL,
353
+ maxTurns: 15,
354
+ timeout: effectiveTimeout,
355
+ outputFormat: 'text',
356
+ });
357
+
358
+ if (result.timedOut) {
359
+ process.stderr.write(
360
+ `[evolve] Product ideation timed out after ${Math.round(effectiveTimeout / 1000)}s, returning empty\n`
361
+ );
362
+ return [];
363
+ }
364
+
365
+ if (result.exitCode !== 0 || !result.stdout) {
366
+ process.stderr.write(
367
+ `[evolve] Product ideation failed (exit=${result.exitCode}), returning empty\n`
368
+ );
369
+ return [];
370
+ }
371
+
372
+ // Check for error message in stdout (e.g., max-turns exceeded)
373
+ if (result.stdout.startsWith('Error:')) {
374
+ process.stderr.write(
375
+ `[evolve] Product ideation error: ${result.stdout.trim()}, returning empty\n`
376
+ );
377
+ return [];
378
+ }
379
+
380
+ const items: WorkItem[] = parseProductIdeationOutput(result.stdout);
381
+
382
+ if (items.length === 0) {
383
+ process.stderr.write(
384
+ `[evolve] Product ideation returned unparseable output (${result.stdout.length} chars), returning empty\n`
385
+ );
386
+ return [];
387
+ }
388
+
389
+ return items;
390
+ } catch (err) {
391
+ process.stderr.write(
392
+ `[evolve] Product ideation threw: ${(err as Error).message}, returning empty\n`
393
+ );
394
+ return [];
395
+ }
396
+ }
397
+
398
+ // ── Exports ──────────────────────────────────────────────────────────────────
399
+
400
+ module.exports = {
401
+ gatherProductContext,
402
+ buildProductIdeationPrompt,
403
+ parseProductIdeationOutput,
404
+ discoverProductIdeationItems,
405
+ };
@@ -0,0 +1,178 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * GRD Evolve -- Prompt templates
5
+ *
6
+ * Pure string template functions for building prompts used in the
7
+ * evolve iteration loop (plan, execute, review, batch variants).
8
+ *
9
+ * Private helper module -- imported only by ./orchestrator.ts.
10
+ *
11
+ * @dependencies ./types
12
+ */
13
+
14
+ import type { WorkItem, WorkGroup } from './types';
15
+
16
+ // ─── Prompt Builders ────────────────────────────────────────────────────────
17
+
18
+ /**
19
+ * Build a prompt for planning a work item improvement.
20
+ */
21
+ function buildPlanPrompt(item: WorkItem): string {
22
+ return [
23
+ 'Read CLAUDE.md for project conventions.',
24
+ `Analyze the codebase for the following improvement opportunity:`,
25
+ `Title: ${item.title}`,
26
+ `Description: ${item.description}`,
27
+ `Dimension: ${item.dimension}`,
28
+ `Effort: ${item.effort}`,
29
+ 'Create a brief implementation plan: what files to change and what changes to make.',
30
+ 'Do NOT implement anything — only plan.',
31
+ ].join('\n');
32
+ }
33
+
34
+ /**
35
+ * Build a prompt for executing a work item improvement.
36
+ */
37
+ function buildExecutePrompt(item: WorkItem): string {
38
+ return [
39
+ 'Read CLAUDE.md for project conventions.',
40
+ `Implement the following improvement:`,
41
+ `Title: ${item.title}`,
42
+ `Description: ${item.description}`,
43
+ `Dimension: ${item.dimension}`,
44
+ `Effort: ${item.effort}`,
45
+ 'Run `npm test` to verify changes do not break tests.',
46
+ 'Fix any test failures before completing.',
47
+ 'Keep changes focused and minimal.',
48
+ ].join('\n');
49
+ }
50
+
51
+ /**
52
+ * Build a prompt for reviewing an executed improvement.
53
+ */
54
+ function buildReviewPrompt(item: WorkItem): string {
55
+ return [
56
+ `Review the improvement that was just made:`,
57
+ `Title: ${item.title}`,
58
+ `Description: ${item.description}`,
59
+ 'Run `npm test` and `npm run lint` to check for regressions.',
60
+ 'Verify the improvement was actually made.',
61
+ 'Fix any issues found.',
62
+ ].join('\n');
63
+ }
64
+
65
+ /**
66
+ * Build execution prompt for an entire group of work items.
67
+ */
68
+ function buildGroupExecutePrompt(group: WorkGroup): string {
69
+ const itemList: string = group.items
70
+ .map((item, i) => `${i + 1}. ${item.title}: ${item.description}`)
71
+ .join('\n');
72
+
73
+ return [
74
+ 'Read CLAUDE.md for project conventions.',
75
+ `Implement the following improvements (theme: ${group.theme}, dimension: ${group.dimension}):`,
76
+ '',
77
+ itemList,
78
+ '',
79
+ 'Run `npm test` to verify changes do not break tests.',
80
+ 'Fix any test failures before completing.',
81
+ 'Keep changes focused and minimal.',
82
+ ].join('\n');
83
+ }
84
+
85
+ /**
86
+ * Build review prompt for an entire group after execution.
87
+ */
88
+ function buildGroupReviewPrompt(group: WorkGroup): string {
89
+ return [
90
+ `Review the improvements that were just made for group: ${group.title}`,
91
+ `Theme: ${group.theme}, Dimension: ${group.dimension}`,
92
+ `${group.items.length} items were addressed.`,
93
+ 'Run `npm test` and `npm run lint` to check for regressions.',
94
+ 'Verify the improvements were actually made.',
95
+ 'Fix any issues found.',
96
+ ].join('\n');
97
+ }
98
+
99
+ /**
100
+ * Build a single execution prompt for ALL groups in an iteration.
101
+ */
102
+ function buildBatchExecutePrompt(groups: WorkGroup[], iterationNum?: number): string {
103
+ const sections: string[] = groups.map((group) => {
104
+ const itemList: string = group.items
105
+ .map((item, i) => `${i + 1}. ${item.title}: ${item.description}`)
106
+ .join('\n');
107
+ return `### ${group.title} (${group.dimension}/${group.theme})\n${itemList}`;
108
+ });
109
+
110
+ const feedbackFile: string = `.planning/evolve-iteration-${iterationNum || 0}.json`;
111
+
112
+ return [
113
+ 'Read CLAUDE.md for project conventions.',
114
+ `Implement the following improvements across ${groups.length} groups:`,
115
+ '',
116
+ ...sections,
117
+ '',
118
+ '## CRITICAL RULES — READ CAREFULLY',
119
+ '',
120
+ '1. You MUST modify actual source code files (.ts, .js, .tsx, .jsx, .py, etc.)',
121
+ '2. Do NOT create markdown files, todo files, or documentation stubs',
122
+ '3. Do NOT create files in .planning/, docs/, or any markdown directory',
123
+ '4. Do NOT just add JSDoc comments or rename variables — make real functional changes',
124
+ '5. If an item requires creating a new feature, write the actual implementation code',
125
+ '6. If an item is too vague to implement as code, SKIP it entirely',
126
+ '7. Every change must be a real code improvement: new functions, bug fixes, refactors, tests, or feature code',
127
+ '',
128
+ 'Do NOT run tests between groups — implement everything first.',
129
+ 'After ALL changes are done, run `npm test` once to verify nothing is broken.',
130
+ 'Fix any test failures before completing.',
131
+ '',
132
+ `After completing all changes, write a JSON feedback file to \`${feedbackFile}\` with this exact structure:`,
133
+ '```json',
134
+ '{',
135
+ ' "decisions": ["Brief description of each design decision you made and why"],',
136
+ ' "patterns": ["Any code patterns you noticed — good or bad — worth documenting"],',
137
+ ' "takeaways": ["Observations about the codebase that could inform future improvements"],',
138
+ ' "files_changed": ["list/of/files/you/modified.ts"],',
139
+ ' "items_skipped": ["Items you skipped because they were too vague or not implementable as code"]',
140
+ '}',
141
+ '```',
142
+ 'Include at least 1 entry per array. Be specific and concise.',
143
+ ].join('\n');
144
+ }
145
+
146
+ /**
147
+ * Build a single review prompt for ALL groups after batch execution.
148
+ */
149
+ function buildBatchReviewPrompt(groups: WorkGroup[]): string {
150
+ const groupList: string = groups.map((g) => `- ${g.title} (${g.items.length} items)`).join('\n');
151
+
152
+ return [
153
+ `Review ALL improvements that were just made across ${groups.length} groups:`,
154
+ '',
155
+ groupList,
156
+ '',
157
+ 'Run `npm test` and `npm run lint` to check for regressions.',
158
+ 'Verify the improvements were actually made in source code files (.ts, .js, etc.).',
159
+ '',
160
+ 'IMPORTANT: If you find any changes that are ONLY markdown files, todo files, or documentation stubs',
161
+ 'without corresponding source code changes, revert those files with `git checkout -- <file>`.',
162
+ 'Only real code changes should remain.',
163
+ '',
164
+ 'Fix any issues found.',
165
+ ].join('\n');
166
+ }
167
+
168
+ // ─── Exports ────────────────────────────────────────────────────────────────
169
+
170
+ module.exports = {
171
+ buildPlanPrompt,
172
+ buildExecutePrompt,
173
+ buildReviewPrompt,
174
+ buildGroupExecutePrompt,
175
+ buildGroupReviewPrompt,
176
+ buildBatchExecutePrompt,
177
+ buildBatchReviewPrompt,
178
+ };