@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,616 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * GRD Wireup -- Scenario and test data generation
5
+ *
6
+ * Generates WireupScenario[] from UnwiredFeature[] discovered by the discovery engine,
7
+ * and writes JSON test data fixture files for each scenario.
8
+ *
9
+ * IMPORTANT: No child process spawn or exec calls. Uses only fs.readFileSync /
10
+ * fs.mkdirSync / fs.writeFileSync for all file operations.
11
+ *
12
+ * @dependencies ./types, ../utils, ../paths
13
+ */
14
+
15
+ import type { UnwiredFeature, WireupScenario, ScenarioStep } from './types';
16
+
17
+ const fs = require('fs');
18
+ const path = require('path');
19
+ const {
20
+ safeReadFile,
21
+ }: {
22
+ safeReadFile: (filePath: string) => string | null;
23
+ } = require('../utils');
24
+ const {
25
+ currentMilestone,
26
+ }: {
27
+ currentMilestone: (cwd: string) => string;
28
+ } = require('../paths');
29
+
30
+ // ─── Type Defaults ────────────────────────────────────────────────────────────
31
+
32
+ /**
33
+ * Map from TypeScript type name to a sensible default value for fixture generation.
34
+ */
35
+ const TYPE_DEFAULTS: Record<string, unknown> = {
36
+ string: 'test-value',
37
+ number: 42,
38
+ boolean: true,
39
+ 'string[]': ['item-1', 'item-2'],
40
+ 'Record<string, unknown>': { key: 'value' },
41
+ object: { key: 'value' },
42
+ };
43
+
44
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
45
+
46
+ /**
47
+ * Derive a default value for a given TypeScript type annotation string.
48
+ * Falls back to null for unknown types.
49
+ */
50
+ function _defaultForType(typeName: string): unknown {
51
+ const normalized: string = typeName.trim();
52
+ if (TYPE_DEFAULTS[normalized] !== undefined) return TYPE_DEFAULTS[normalized];
53
+ if (normalized.endsWith('[]')) return ['item-1', 'item-2'];
54
+ if (normalized.startsWith('Record<') || normalized === 'object') return { key: 'value' };
55
+ return null;
56
+ }
57
+
58
+ /**
59
+ * Extract function parameter names and types from a TypeScript/JavaScript source file.
60
+ *
61
+ * Handles patterns like:
62
+ * function name(param1: Type1, param2: Type2)
63
+ * const name = (param1: Type1, param2: Type2) =>
64
+ *
65
+ * Returns an array of { name, type } pairs.
66
+ */
67
+ function _extractParams(
68
+ content: string,
69
+ functionName: string
70
+ ): Array<{ name: string; type: string }> {
71
+ const params: Array<{ name: string; type: string }> = [];
72
+
73
+ // Match: function <name>(...) or const <name> = (...) =>
74
+ const patterns: RegExp[] = [
75
+ new RegExp(`function\\s+${functionName}\\s*\\(([^)]+)\\)`),
76
+ new RegExp(`const\\s+${functionName}\\s*=\\s*(?:async\\s*)?\\(([^)]+)\\)`),
77
+ new RegExp(`${functionName}\\s*(?:=\\s*)?(?:async\\s*)?\\(([^)]+)\\)`),
78
+ ];
79
+
80
+ let paramStr: string | null = null;
81
+ for (const re of patterns) {
82
+ const m: RegExpMatchArray | null = content.match(re);
83
+ if (m) {
84
+ paramStr = m[1];
85
+ break;
86
+ }
87
+ }
88
+
89
+ if (!paramStr) return params;
90
+
91
+ // Split on comma but not inside angle brackets
92
+ const parts: string[] = paramStr.split(',');
93
+ for (const part of parts) {
94
+ const trimmed: string = part.trim();
95
+ if (!trimmed) continue;
96
+ // Match "name: Type" or "name" (no annotation)
97
+ const colonIdx: number = trimmed.indexOf(':');
98
+ if (colonIdx >= 0) {
99
+ const name: string = trimmed.slice(0, colonIdx).replace(/^[_?]/, '').trim();
100
+ const type: string = trimmed.slice(colonIdx + 1).trim();
101
+ if (name) params.push({ name, type });
102
+ } else {
103
+ const name: string = trimmed.replace(/^[_?]/, '').trim();
104
+ if (name) params.push({ name, type: 'string' });
105
+ }
106
+ }
107
+
108
+ return params;
109
+ }
110
+
111
+ // ─── Scenario Generation ─────────────────────────────────────────────────────
112
+
113
+ /**
114
+ * Generate a WireupScenario for an 'exported-but-uncalled' feature.
115
+ *
116
+ * Produces two steps:
117
+ * 1. static step: check export exists in source file
118
+ * 2. static step: check import graph is connected
119
+ */
120
+ function _scenarioForExportedButUncalled(
121
+ feature: UnwiredFeature,
122
+ fixturePath: string
123
+ ): WireupScenario {
124
+ const steps: ScenarioStep[] = [
125
+ {
126
+ step_type: 'static',
127
+ parameters: {
128
+ check: 'export_exists',
129
+ filePath: feature.filePath,
130
+ exportName: feature.functionName,
131
+ },
132
+ expected_outcome: 'Export exists in source file',
133
+ },
134
+ {
135
+ step_type: 'static',
136
+ parameters: {
137
+ check: 'import_graph_connected',
138
+ filePath: feature.filePath,
139
+ exportName: feature.functionName,
140
+ },
141
+ expected_outcome: 'Export is imported or referenced somewhere',
142
+ },
143
+ ];
144
+ return { feature, steps, test_data_fixture: fixturePath };
145
+ }
146
+
147
+ /**
148
+ * Generate a WireupScenario for a 'config-without-surface' feature.
149
+ *
150
+ * Produces two steps:
151
+ * 1. cli step: run gd settings and check output
152
+ * 2. assert step: verify config key is accessible
153
+ */
154
+ function _scenarioForConfigWithoutSurface(
155
+ feature: UnwiredFeature,
156
+ fixturePath: string
157
+ ): WireupScenario {
158
+ const steps: ScenarioStep[] = [
159
+ {
160
+ step_type: 'cli',
161
+ parameters: {
162
+ command: 'gd',
163
+ args: ['settings'],
164
+ },
165
+ expected_outcome: 'Config key appears in settings output',
166
+ },
167
+ {
168
+ step_type: 'assert',
169
+ parameters: { check: 'config_key_visible', key: feature.functionName },
170
+ expected_outcome: 'Config option is accessible via CLI',
171
+ },
172
+ ];
173
+ return { feature, steps, test_data_fixture: fixturePath };
174
+ }
175
+
176
+ /**
177
+ * Generate a WireupScenario for an 'endpoint-without-integration-test' feature.
178
+ *
179
+ * Produces two steps:
180
+ * 1. http step: POST to the endpoint
181
+ * 2. assert step: validate response schema
182
+ */
183
+ function _scenarioForEndpointWithoutTest(
184
+ feature: UnwiredFeature,
185
+ fixturePath: string
186
+ ): WireupScenario {
187
+ const steps: ScenarioStep[] = [
188
+ {
189
+ step_type: 'http',
190
+ parameters: {
191
+ method: 'POST',
192
+ endpoint: feature.functionName,
193
+ },
194
+ expected_outcome: 'Endpoint responds with valid JSON',
195
+ },
196
+ {
197
+ step_type: 'assert',
198
+ parameters: { check: 'response_schema_valid' },
199
+ expected_outcome: 'Response matches expected schema',
200
+ },
201
+ ];
202
+ return { feature, steps, test_data_fixture: fixturePath };
203
+ }
204
+
205
+ /**
206
+ * Generate a WireupScenario for an 'app-route-without-test' feature.
207
+ *
208
+ * Produces two steps:
209
+ * 1. http step: request the route with the detected method
210
+ * 2. assert step: check response status and schema
211
+ */
212
+ function _scenarioForAppRoute(
213
+ feature: UnwiredFeature,
214
+ fixturePath: string
215
+ ): WireupScenario {
216
+ // functionName is "METHOD /path" (e.g. "GET /api/users")
217
+ const parts: string[] = feature.functionName.split(' ');
218
+ const method: string = parts[0] || 'GET';
219
+ const route: string = parts.slice(1).join(' ') || '/';
220
+
221
+ const steps: ScenarioStep[] = [
222
+ {
223
+ step_type: 'http',
224
+ parameters: {
225
+ method,
226
+ endpoint: route,
227
+ },
228
+ expected_outcome: `${method} ${route} responds successfully`,
229
+ },
230
+ {
231
+ step_type: 'assert',
232
+ parameters: { check: 'status_ok', method, route },
233
+ expected_outcome: 'Response status is 2xx or 3xx',
234
+ },
235
+ ];
236
+ return { feature, steps, test_data_fixture: fixturePath };
237
+ }
238
+
239
+ /**
240
+ * Generate a WireupScenario for an 'app-exported-but-uncalled' feature.
241
+ * Same pattern as exported-but-uncalled but resolves from app source dirs.
242
+ */
243
+ function _scenarioForAppExportedButUncalled(
244
+ feature: UnwiredFeature,
245
+ fixturePath: string
246
+ ): WireupScenario {
247
+ const steps: ScenarioStep[] = [
248
+ {
249
+ step_type: 'static',
250
+ parameters: {
251
+ check: 'export_exists',
252
+ filePath: feature.filePath,
253
+ exportName: feature.functionName,
254
+ },
255
+ expected_outcome: 'Export exists and is accessible',
256
+ },
257
+ {
258
+ step_type: 'static',
259
+ parameters: {
260
+ check: 'import_graph_connected',
261
+ filePath: feature.filePath,
262
+ exportName: feature.functionName,
263
+ },
264
+ expected_outcome: 'Exported symbol is referenced in the project',
265
+ },
266
+ ];
267
+ return { feature, steps, test_data_fixture: fixturePath };
268
+ }
269
+
270
+ /**
271
+ * Generate a WireupScenario for an 'app-model-without-handler' feature.
272
+ */
273
+ function _scenarioForAppModel(
274
+ feature: UnwiredFeature,
275
+ fixturePath: string
276
+ ): WireupScenario {
277
+ const modelLower: string = feature.functionName.toLowerCase();
278
+ const steps: ScenarioStep[] = [
279
+ {
280
+ step_type: 'http',
281
+ parameters: {
282
+ method: 'GET',
283
+ endpoint: `/api/${modelLower}s`,
284
+ },
285
+ expected_outcome: `GET /api/${modelLower}s responds (model "${feature.functionName}" has a handler)`,
286
+ },
287
+ {
288
+ step_type: 'assert',
289
+ parameters: { check: 'model_has_handler', model: feature.functionName },
290
+ expected_outcome: 'Model has at least one CRUD endpoint',
291
+ },
292
+ ];
293
+ return { feature, steps, test_data_fixture: fixturePath };
294
+ }
295
+
296
+ /**
297
+ * Generate a WireupScenario for an 'app-component-without-import' feature.
298
+ */
299
+ function _scenarioForAppComponent(
300
+ feature: UnwiredFeature,
301
+ fixturePath: string
302
+ ): WireupScenario {
303
+ const steps: ScenarioStep[] = [
304
+ {
305
+ step_type: 'static',
306
+ parameters: {
307
+ check: 'export_exists',
308
+ filePath: feature.filePath,
309
+ exportName: feature.functionName,
310
+ },
311
+ expected_outcome: 'Component is exported',
312
+ },
313
+ {
314
+ step_type: 'static',
315
+ parameters: {
316
+ check: 'import_graph_connected',
317
+ filePath: feature.filePath,
318
+ exportName: feature.functionName,
319
+ },
320
+ expected_outcome: 'Component is imported or used somewhere',
321
+ },
322
+ ];
323
+ return { feature, steps, test_data_fixture: fixturePath };
324
+ }
325
+
326
+ /**
327
+ * Generate a WireupScenario for a 'command-without-registration' feature.
328
+ *
329
+ * Checks that the command .md file exists and that it is registered in the CLI.
330
+ */
331
+ function _scenarioForCommandWithoutRegistration(
332
+ feature: UnwiredFeature,
333
+ fixturePath: string
334
+ ): WireupScenario {
335
+ const steps: ScenarioStep[] = [
336
+ {
337
+ step_type: 'static',
338
+ parameters: {
339
+ check: 'export_exists',
340
+ filePath: feature.filePath,
341
+ exportName: feature.functionName,
342
+ },
343
+ expected_outcome: 'Command file exists',
344
+ },
345
+ {
346
+ step_type: 'static',
347
+ parameters: {
348
+ check: 'import_graph_connected',
349
+ filePath: feature.filePath,
350
+ exportName: feature.functionName,
351
+ },
352
+ expected_outcome: 'Command is registered in CLI command registry',
353
+ },
354
+ ];
355
+ return { feature, steps, test_data_fixture: fixturePath };
356
+ }
357
+
358
+ /**
359
+ * Generate a WireupScenario for an 'agent-without-command' feature.
360
+ *
361
+ * Checks that the agent .md file exists and is referenced by at least one command.
362
+ */
363
+ function _scenarioForAgentWithoutCommand(
364
+ feature: UnwiredFeature,
365
+ fixturePath: string
366
+ ): WireupScenario {
367
+ const steps: ScenarioStep[] = [
368
+ {
369
+ step_type: 'static',
370
+ parameters: {
371
+ check: 'export_exists',
372
+ filePath: feature.filePath,
373
+ exportName: feature.functionName,
374
+ },
375
+ expected_outcome: 'Agent file exists',
376
+ },
377
+ {
378
+ step_type: 'static',
379
+ parameters: {
380
+ check: 'import_graph_connected',
381
+ filePath: feature.filePath,
382
+ exportName: feature.functionName,
383
+ },
384
+ expected_outcome: 'Agent is referenced by a command or orchestrator',
385
+ },
386
+ ];
387
+ return { feature, steps, test_data_fixture: fixturePath };
388
+ }
389
+
390
+ /**
391
+ * Generate a WireupScenario for a 'command-without-agent-file' feature.
392
+ *
393
+ * Checks that the referenced agent file actually exists.
394
+ */
395
+ function _scenarioForCommandWithoutAgentFile(
396
+ feature: UnwiredFeature,
397
+ fixturePath: string
398
+ ): WireupScenario {
399
+ const steps: ScenarioStep[] = [
400
+ {
401
+ step_type: 'static',
402
+ parameters: {
403
+ check: 'export_exists',
404
+ filePath: `agents/${feature.functionName}.md`,
405
+ exportName: feature.functionName,
406
+ },
407
+ expected_outcome: 'Referenced agent file exists',
408
+ },
409
+ ];
410
+ return { feature, steps, test_data_fixture: fixturePath };
411
+ }
412
+
413
+ /**
414
+ * Generate a WireupScenario for a 'lib-exported-without-test' feature.
415
+ *
416
+ * Produces two steps:
417
+ * 1. static step: check export exists in source file
418
+ * 2. cli step: run the test suite and check if the function is referenced
419
+ */
420
+ function _scenarioForLibExportedWithoutTest(
421
+ feature: UnwiredFeature,
422
+ fixturePath: string
423
+ ): WireupScenario {
424
+ const steps: ScenarioStep[] = [
425
+ {
426
+ step_type: 'static',
427
+ parameters: {
428
+ check: 'export_exists',
429
+ filePath: feature.filePath,
430
+ exportName: feature.functionName,
431
+ },
432
+ expected_outcome: 'Export exists in source file',
433
+ },
434
+ {
435
+ step_type: 'static',
436
+ parameters: {
437
+ check: 'import_graph_connected',
438
+ filePath: feature.filePath,
439
+ exportName: feature.functionName,
440
+ },
441
+ expected_outcome: 'Export is referenced in tests or other modules',
442
+ },
443
+ ];
444
+ return { feature, steps, test_data_fixture: fixturePath };
445
+ }
446
+
447
+ /**
448
+ * Generate a WireupScenario for a 'bin-entry-without-test' feature.
449
+ *
450
+ * Produces two steps:
451
+ * 1. cli step: run the bin entry with --help or no args to verify it executes
452
+ * 2. static step: check if the bin entry is referenced in test files
453
+ */
454
+ function _scenarioForBinEntryWithoutTest(
455
+ feature: UnwiredFeature,
456
+ fixturePath: string
457
+ ): WireupScenario {
458
+ const steps: ScenarioStep[] = [
459
+ {
460
+ step_type: 'cli',
461
+ parameters: {
462
+ command: 'node',
463
+ args: [feature.filePath, '--help'],
464
+ },
465
+ expected_outcome: 'Bin entry executes without crashing',
466
+ },
467
+ {
468
+ step_type: 'static',
469
+ parameters: {
470
+ check: 'import_graph_connected',
471
+ filePath: feature.filePath,
472
+ exportName: feature.functionName,
473
+ },
474
+ expected_outcome: 'Bin entry is referenced in tests',
475
+ },
476
+ ];
477
+ return { feature, steps, test_data_fixture: fixturePath };
478
+ }
479
+
480
+ // ─── Public API ───────────────────────────────────────────────────────────────
481
+
482
+ /**
483
+ * Generate wireup scenarios for a list of unwired features.
484
+ *
485
+ * Each scenario includes ordered steps to exercise the feature end-to-end,
486
+ * along with a reference to the test data fixture file.
487
+ *
488
+ * Step types produced per category:
489
+ * - 'exported-but-uncalled': cli, assert
490
+ * - 'config-without-surface': cli, assert
491
+ * - 'endpoint-without-integration-test': http, assert
492
+ *
493
+ * @param features - Array of unwired features from discoverUnwiredFeatures()
494
+ * @param cwd - Absolute path to the project root
495
+ * @returns Array of WireupScenario objects ready for execution
496
+ */
497
+ function generateScenarios(features: UnwiredFeature[], cwd: string): WireupScenario[] {
498
+ const milestone: string = currentMilestone(cwd);
499
+ const scenarios: WireupScenario[] = [];
500
+
501
+ for (const feature of features) {
502
+ const fixturePath: string = path.join(
503
+ cwd,
504
+ '.planning',
505
+ 'milestones',
506
+ milestone,
507
+ 'wireup',
508
+ 'test-data',
509
+ `${feature.functionName}.json`
510
+ );
511
+
512
+ let scenario: WireupScenario;
513
+ switch (feature.category) {
514
+ case 'exported-but-uncalled':
515
+ scenario = _scenarioForExportedButUncalled(feature, fixturePath);
516
+ break;
517
+ case 'config-without-surface':
518
+ scenario = _scenarioForConfigWithoutSurface(feature, fixturePath);
519
+ break;
520
+ case 'endpoint-without-integration-test':
521
+ scenario = _scenarioForEndpointWithoutTest(feature, fixturePath);
522
+ break;
523
+ case 'app-route-without-test':
524
+ scenario = _scenarioForAppRoute(feature, fixturePath);
525
+ break;
526
+ case 'app-exported-but-uncalled':
527
+ scenario = _scenarioForAppExportedButUncalled(feature, fixturePath);
528
+ break;
529
+ case 'app-model-without-handler':
530
+ scenario = _scenarioForAppModel(feature, fixturePath);
531
+ break;
532
+ case 'app-component-without-import':
533
+ scenario = _scenarioForAppComponent(feature, fixturePath);
534
+ break;
535
+ case 'lib-exported-without-test':
536
+ scenario = _scenarioForLibExportedWithoutTest(feature, fixturePath);
537
+ break;
538
+ case 'bin-entry-without-test':
539
+ scenario = _scenarioForBinEntryWithoutTest(feature, fixturePath);
540
+ break;
541
+ case 'command-without-registration':
542
+ scenario = _scenarioForCommandWithoutRegistration(feature, fixturePath);
543
+ break;
544
+ case 'agent-without-command':
545
+ scenario = _scenarioForAgentWithoutCommand(feature, fixturePath);
546
+ break;
547
+ case 'command-without-agent-file':
548
+ scenario = _scenarioForCommandWithoutAgentFile(feature, fixturePath);
549
+ break;
550
+ default:
551
+ scenario = _scenarioForExportedButUncalled(feature, fixturePath);
552
+ break;
553
+ }
554
+
555
+ scenarios.push(scenario);
556
+ }
557
+
558
+ return scenarios;
559
+ }
560
+
561
+ /**
562
+ * Generate and write JSON test data fixture files for a list of wireup scenarios.
563
+ *
564
+ * For each scenario, reads the source file at `scenario.feature.filePath` and
565
+ * extracts the function signature to derive realistic parameter defaults:
566
+ * - string -> "test-value"
567
+ * - number -> 42
568
+ * - boolean -> true
569
+ * - string[] -> ["item-1", "item-2"]
570
+ * - object/Record -> { "key": "value" }
571
+ * - unknown -> null
572
+ *
573
+ * Writes each fixture as JSON to `scenario.test_data_fixture`.
574
+ * Parent directories are created with { recursive: true }.
575
+ *
576
+ * @param scenarios - Array of WireupScenario objects from generateScenarios()
577
+ * @param cwd - Absolute path to the project root
578
+ */
579
+ function generateTestData(scenarios: WireupScenario[], cwd: string): void {
580
+ for (const scenario of scenarios) {
581
+ const { feature, test_data_fixture: fixturePath } = scenario;
582
+
583
+ // Resolve the source file path (may be relative or absolute)
584
+ const sourceAbsPath: string = path.isAbsolute(feature.filePath)
585
+ ? feature.filePath
586
+ : path.join(cwd, feature.filePath);
587
+
588
+ const sourceContent: string | null = safeReadFile(sourceAbsPath);
589
+
590
+ const paramDefs: Array<{ name: string; type: string }> = sourceContent
591
+ ? _extractParams(sourceContent, feature.functionName)
592
+ : [];
593
+
594
+ const parameters: Record<string, unknown> = {};
595
+ for (const { name, type } of paramDefs) {
596
+ parameters[name] = _defaultForType(type);
597
+ }
598
+
599
+ const fixture: Record<string, unknown> = {
600
+ feature: feature.functionName,
601
+ parameters,
602
+ generated_at: new Date().toISOString(),
603
+ };
604
+
605
+ // Ensure parent directory exists
606
+ const parentDir: string = path.dirname(fixturePath);
607
+ fs.mkdirSync(parentDir, { recursive: true });
608
+
609
+ // Write the fixture as formatted JSON
610
+ fs.writeFileSync(fixturePath, JSON.stringify(fixture, null, 2), 'utf-8');
611
+ }
612
+ }
613
+
614
+ // ─── Exports ─────────────────────────────────────────────────────────────────
615
+
616
+ module.exports = { generateScenarios, generateTestData };