pan-wizard 3.35.0 → 3.37.0

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 (339) hide show
  1. package/CHANGELOG.md +3645 -0
  2. package/README.md +46 -52
  3. package/agents/pan-conductor.md +2 -3
  4. package/agents/pan-counterfactual.md +1 -2
  5. package/agents/pan-debugger.md +14 -3
  6. package/agents/pan-design-checker.md +1 -2
  7. package/agents/pan-designer.md +2 -3
  8. package/agents/pan-document_code.md +1 -2
  9. package/agents/pan-executor.md +25 -0
  10. package/agents/pan-hardener.md +4 -3
  11. package/agents/pan-integration-checker.md +1 -2
  12. package/agents/pan-knowledge.md +1 -2
  13. package/agents/pan-meta-reviewer.md +3 -3
  14. package/agents/pan-optimizer.md +4 -4
  15. package/agents/pan-phase-researcher.md +80 -475
  16. package/agents/pan-plan-checker.md +40 -3
  17. package/agents/pan-planner.md +21 -7
  18. package/agents/pan-previewer.md +3 -2
  19. package/agents/pan-project-researcher.md +72 -493
  20. package/agents/pan-release.md +1 -1
  21. package/agents/pan-reviewer.md +14 -3
  22. package/agents/pan-roadmapper.md +12 -7
  23. package/agents/pan-verifier.md +9 -4
  24. package/bin/install-lib.cjs +134 -14
  25. package/bin/install.js +59 -12
  26. package/commands/pan/army.md +1 -1
  27. package/commands/pan/autodev.md +76 -0
  28. package/commands/pan/cost.md +21 -1
  29. package/commands/pan/exec-phase.md +3 -4
  30. package/commands/pan/focus-auto.md +14 -7
  31. package/commands/pan/focus-design.md +4 -5
  32. package/commands/pan/focus-docs.md +24 -0
  33. package/commands/pan/learn.md +13 -6
  34. package/commands/pan/milestone-audit.md +8 -1
  35. package/commands/pan/milestone-done.md +10 -5
  36. package/commands/pan/milestone-new.md +2 -2
  37. package/commands/pan/new-project.md +15 -12
  38. package/commands/pan/plan-phase.md +15 -9
  39. package/commands/pan/preview.md +1 -1
  40. package/commands/pan/quick.md +1 -1
  41. package/commands/pan/review-deep.md +11 -5
  42. package/commands/pan/settings.md +6 -0
  43. package/commands/pan/verify-phase.md +6 -2
  44. package/docs/AGENTS.md +917 -0
  45. package/docs/ARCHITECTURE.md +1054 -0
  46. package/docs/CLI-REFERENCE.md +4582 -0
  47. package/docs/COMPARISON.md +116 -0
  48. package/docs/DEVELOPMENT.md +490 -0
  49. package/docs/ECOSYSTEM-REVIEW-2026-06.md +107 -0
  50. package/docs/ECOSYSTEM-REVIEW-2026-08.md +349 -0
  51. package/docs/EXAMPLES.md +584 -0
  52. package/docs/FAQ.md +254 -0
  53. package/docs/FIELD-HARVEST-2026-07.md +88 -0
  54. package/docs/FIELD-REPORT-army-2026-06.md +121 -0
  55. package/docs/HOOKS.md +638 -0
  56. package/docs/IMPROVEMENT-TODO.md +246 -0
  57. package/docs/INTERNALS.md +485 -0
  58. package/docs/MIGRATION-v2-to-v3.md +258 -0
  59. package/docs/SECURITY-HARDENING.md +230 -0
  60. package/docs/SKILLS-ENHANCEMENT-PLAN-V2.md +122 -0
  61. package/docs/SKILLS-FULL-TEXT.md +9685 -0
  62. package/docs/SKILLS-REFERENCE.md +1037 -0
  63. package/docs/TROUBLESHOOTING.md +1084 -0
  64. package/docs/USER-GUIDE.md +1437 -0
  65. package/docs/archive/SKILLS-ENHANCEMENT-PLAN.md +230 -0
  66. package/docs/audits/AUDIT-2026-08-e2e-ROADMAP.md +117 -0
  67. package/docs/audits/AUDIT-2026-08-e2e-VERIFICATION.md +693 -0
  68. package/docs/audits/AUDIT-2026-08-e2e.md +1546 -0
  69. package/docs/audits/OUTSTANDING-2026-08.md +275 -0
  70. package/docs/audits/STABILITY-TEST-2026-08.md +640 -0
  71. package/docs/branding/README-brand-draft.md +119 -0
  72. package/docs/branding/handoff/IMPLEMENTATION.md +205 -0
  73. package/docs/branding/handoff/README-brand-draft.md +119 -0
  74. package/docs/branding/handoff/image-prompts.md +46 -0
  75. package/docs/branding/image-prompts.md +46 -0
  76. package/docs/branding/nano-banana-prompts.txt +60 -0
  77. package/docs/context-monitor.md +13 -0
  78. package/docs/decisions/ADR-0001-strategic-feature-prioritization.md +83 -0
  79. package/docs/decisions/ADR-0002-copilot-cli-runtime.md +71 -0
  80. package/docs/decisions/ADR-0003-smart-execution.md +84 -0
  81. package/docs/decisions/ADR-0004-copilot-cli-interaction.md +89 -0
  82. package/docs/decisions/ADR-0005-command-naming.md +80 -0
  83. package/docs/decisions/ADR-0006-focus-commands.md +101 -0
  84. package/docs/decisions/ADR-0007-ship-v1.md +73 -0
  85. package/docs/decisions/ADR-0008-map-codebase-mermaid-togaf.md +80 -0
  86. package/docs/decisions/ADR-0009-production-deployment-checklist.md +68 -0
  87. package/docs/decisions/ADR-0010-standards-integration.md +79 -0
  88. package/docs/decisions/ADR-0011-help-commands-rewrite.md +64 -0
  89. package/docs/decisions/ADR-0012-contributors-attribution-index.md +42 -0
  90. package/docs/decisions/ADR-0013-strategic-feature-additions.md +53 -0
  91. package/docs/decisions/ADR-0014-internal-cleanup-code-quality.md +53 -0
  92. package/docs/decisions/ADR-0015-focus-auto-runner.md +296 -0
  93. package/docs/decisions/ADR-0016-enhanced-doc-sync.md +54 -0
  94. package/docs/decisions/ADR-0017-enhanced-focus-design.md +69 -0
  95. package/docs/decisions/ADR-0018-user-reality-testing.md +84 -0
  96. package/docs/decisions/ADR-0019-end-to-end-user-acceptance-testing.md +113 -0
  97. package/docs/decisions/ADR-0020-ai-drift-prevention.md +55 -0
  98. package/docs/decisions/ADR-0021-codebase-mapper-v2.md +76 -0
  99. package/docs/decisions/ADR-0022-lifecycle-completeness.md +63 -0
  100. package/docs/decisions/ADR-0023-opus-4-7-adoption.md +89 -0
  101. package/docs/decisions/ADR-0024-spec-b-v2-completion.md +137 -0
  102. package/docs/decisions/ADR-0025-behavioral-guardrails-layer.md +129 -0
  103. package/docs/decisions/ADR-0026-self-improvement-loop.md +171 -0
  104. package/docs/decisions/ADR-0027-doc-code-link-graph.md +164 -0
  105. package/docs/decisions/ADR-0028-unified-agents-skills-target.md +46 -0
  106. package/docs/decisions/ADR-0029-experiment-evaluator.md +76 -0
  107. package/docs/decisions/ADR-0030-planning-concurrency.md +37 -0
  108. package/docs/decisions/ADR-0031-focus-auto-backlog-source.md +47 -0
  109. package/docs/decisions/ADR-0032-squad-model.md +64 -0
  110. package/docs/decisions/ADR-0033-army-campaign.md +40 -0
  111. package/docs/decisions/ADR-0034-scheduled-campaigns.md +57 -0
  112. package/docs/decisions/ADR-0035-army-hud-dashboard.md +40 -0
  113. package/docs/decisions/ADR-0036-agentic-memory-architecture.md +106 -0
  114. package/docs/decisions/ADR-0037-pin-security-agents-to-opus.md +51 -0
  115. package/docs/decisions/ADR-0038-skill-aligned-decomposition.md +41 -0
  116. package/docs/decisions/ADR-0039-worktree-as-project-variant.md +37 -0
  117. package/docs/decisions/ADR-0040-memory-injection-defense.md +55 -0
  118. package/docs/decisions/ADR-0041-mcp-dual-era-bridge.md +47 -0
  119. package/docs/decisions/ADR-0042-design-parity-both-flows.md +45 -0
  120. package/docs/decisions/ADR-0043-addressable-planning-roots.md +56 -0
  121. package/docs/decisions/ADR-0044-bound-the-cached-context.md +104 -0
  122. package/docs/decisions/ADR-0045-agent-plugins-bundle.md +76 -0
  123. package/docs/decisions/ADR-0046-subagent-frontmatter-decisions.md +39 -0
  124. package/docs/decisions/ADR-0047-pan-harness.md +76 -0
  125. package/docs/decisions/ADR-0048-one-core-per-project.md +43 -0
  126. package/docs/decisions/ADR-0049-machine-verdicts-and-findings-ledger.md +116 -0
  127. package/docs/specs/ai_drift_prevention_featureai.md +286 -0
  128. package/docs/specs/codebase_mapper_v2_featureai.md +930 -0
  129. package/docs/specs/command_naming_optimization_featureai.md +930 -0
  130. package/docs/specs/comp_analysis_markdown_v1.md +149 -0
  131. package/docs/specs/continuous_autonomous_execution_featureai.md +304 -0
  132. package/docs/specs/contributors_attribution_index_featureai.md +476 -0
  133. package/docs/specs/copilot_cli_interaction_featureai.md +868 -0
  134. package/docs/specs/copilot_cli_runtime_featureai.md +647 -0
  135. package/docs/specs/custom-skills-assessment.md +461 -0
  136. package/docs/specs/deployment_audit_findings_featureai.md +243 -0
  137. package/docs/specs/doc_code_link_graph_featureai.md +253 -0
  138. package/docs/specs/documentation_alignment_cleanup_featureai.md +69 -0
  139. package/docs/specs/e2e_visual_testing_featureai.md +615 -0
  140. package/docs/specs/end_to_end_user_acceptance_testing_featureai.md +810 -0
  141. package/docs/specs/evidence-loop-plan.md +76 -0
  142. package/docs/specs/evidence_loop_featureai.md +497 -0
  143. package/docs/specs/focus-auto-optimize-category.md +449 -0
  144. package/docs/specs/focus-auto-optimize-superplan.md +188 -0
  145. package/docs/specs/focus_auto_runner_featureai.md +1102 -0
  146. package/docs/specs/focus_design_v2_featureai.md +197 -0
  147. package/docs/specs/focus_sync_v2_featureai.md +202 -0
  148. package/docs/specs/git_integration_overhaul_featureai.md +326 -0
  149. package/docs/specs/glm_zai_provider_featureai.md +200 -0
  150. package/docs/specs/googlecli_adoption_featureai.md +661 -0
  151. package/docs/specs/help_commands_rewrite_featureai.md +860 -0
  152. package/docs/specs/industry_analysis_strategic_additions_featureai.md +231 -0
  153. package/docs/specs/industry_comparison_and_feature_gaps_featureai.md +674 -0
  154. package/docs/specs/internal_cleanup_code_quality_featureai.md +486 -0
  155. package/docs/specs/investigations/README.md +31 -0
  156. package/docs/specs/investigations/digests/2026-09-28.md +47 -0
  157. package/docs/specs/investigations/digests/2026-10-08.md +62 -0
  158. package/docs/specs/investigations/digests/2026-10-10.md +61 -0
  159. package/docs/specs/investigations/features/debugger-red-loop-first.md +55 -0
  160. package/docs/specs/investigations/features/harness-cross-host-behaviour.md +93 -0
  161. package/docs/specs/investigations/features/optimize-apply-regression-gate.md +66 -0
  162. package/docs/specs/investigations/features/reviewer-smell-baseline.md +57 -0
  163. package/docs/specs/investigations/features/trace-failure-capture.md +69 -0
  164. package/docs/specs/lifecycle_completeness_featureai.md +754 -0
  165. package/docs/specs/local-first-ci.md +42 -0
  166. package/docs/specs/map_codebase_mermaid_togaf_featureai.md +805 -0
  167. package/docs/specs/market-delta-2026-09-superplan.md +310 -0
  168. package/docs/specs/market-ideas-2026-09.md +131 -0
  169. package/docs/specs/market-ideas-2026-10.md +428 -0
  170. package/docs/specs/market-ideas-ledger.md +177 -0
  171. package/docs/specs/memory-optimization-2026-10.md +285 -0
  172. package/docs/specs/multi-track-planning-roots.md +143 -0
  173. package/docs/specs/multi_model_routing_featureai.md +687 -0
  174. package/docs/specs/multi_model_routing_superplan.md +197 -0
  175. package/docs/specs/opus_47_existing_enhancements_featureai.md +247 -0
  176. package/docs/specs/opus_47_extended_features_featureai.md +363 -0
  177. package/docs/specs/opus_47_extended_features_v2_featureai.md +397 -0
  178. package/docs/specs/pan_focus_commands_featureai.md +2336 -0
  179. package/docs/specs/pan_zcode_mcp_bridge_featureai.md +120 -0
  180. package/docs/specs/product-excellence-superplan.md +315 -0
  181. package/docs/specs/product_excellence_program_2026_q4_featureai.md +365 -0
  182. package/docs/specs/production_deployment_readiness_featureai.md +433 -0
  183. package/docs/specs/production_readiness_ship_v1_featureai.md +698 -0
  184. package/docs/specs/real_test_enforcement_featureai.md +213 -0
  185. package/docs/specs/reality-check-2026-09-superplan.md +362 -0
  186. package/docs/specs/right-sized-ceremony.md +74 -0
  187. package/docs/specs/roadmap_and_competition_2026_q4_featureai.md +390 -0
  188. package/docs/specs/self_improvement_loop_featureai.md +875 -0
  189. package/docs/specs/skill-aligned-decomposition.md +155 -0
  190. package/docs/specs/standards_integration_featureai.md +833 -0
  191. package/docs/specs/testing-system-redesign-2026-09.md +267 -0
  192. package/docs/specs/user_reality_testing_system_featureai.md +788 -0
  193. package/docs/specs/watch-triggers.json +22 -0
  194. package/docs/specs/workflow-integration-redesign.md +742 -0
  195. package/docs/specs/workflow_state_consistency_featureai.md +183 -0
  196. package/hooks/dist/pan-context-monitor.js +9 -2
  197. package/hooks/dist/pan-cost-logger.js +5 -0
  198. package/hooks/dist/pan-guard.js +28 -5
  199. package/hooks/dist/pan-stop-guard.js +9 -9
  200. package/hooks/dist/pan-trace-logger.js +5 -0
  201. package/package.json +10 -2
  202. package/pan-wizard-core/bin/lib/agents-md.cjs +57 -8
  203. package/pan-wizard-core/bin/lib/autodev-report.cjs +180 -0
  204. package/pan-wizard-core/bin/lib/autodev.cjs +642 -0
  205. package/pan-wizard-core/bin/lib/ci.cjs +143 -0
  206. package/pan-wizard-core/bin/lib/commands.cjs +1 -1
  207. package/pan-wizard-core/bin/lib/config.cjs +41 -5
  208. package/pan-wizard-core/bin/lib/constants.cjs +27 -1
  209. package/pan-wizard-core/bin/lib/core.cjs +31 -14
  210. package/pan-wizard-core/bin/lib/cost.cjs +160 -4
  211. package/pan-wizard-core/bin/lib/cross-family.cjs +164 -0
  212. package/pan-wizard-core/bin/lib/debug-cases.cjs +104 -0
  213. package/pan-wizard-core/bin/lib/doc-lint.cjs +5 -3
  214. package/pan-wizard-core/bin/lib/failure-class.cjs +81 -0
  215. package/pan-wizard-core/bin/lib/findings.cjs +148 -9
  216. package/pan-wizard-core/bin/lib/focus.cjs +1 -1
  217. package/pan-wizard-core/bin/lib/git.cjs +1 -1
  218. package/pan-wizard-core/bin/lib/hosts.cjs +88 -0
  219. package/pan-wizard-core/bin/lib/init.cjs +7 -2
  220. package/pan-wizard-core/bin/lib/knowledge.cjs +2 -0
  221. package/pan-wizard-core/bin/lib/merge.cjs +50 -0
  222. package/pan-wizard-core/bin/lib/mutate.cjs +268 -0
  223. package/pan-wizard-core/bin/lib/next-action.cjs +112 -0
  224. package/pan-wizard-core/bin/lib/optimize.cjs +2 -2
  225. package/pan-wizard-core/bin/lib/phase-gate.cjs +15 -9
  226. package/pan-wizard-core/bin/lib/phase-remove.cjs +91 -11
  227. package/pan-wizard-core/bin/lib/phase.cjs +85 -13
  228. package/pan-wizard-core/bin/lib/plan-lint.cjs +310 -0
  229. package/pan-wizard-core/bin/lib/preview.cjs +26 -4
  230. package/pan-wizard-core/bin/lib/requirements-lint.cjs +130 -0
  231. package/pan-wizard-core/bin/lib/research-lint.cjs +268 -0
  232. package/pan-wizard-core/bin/lib/review-deep.cjs +14 -22
  233. package/pan-wizard-core/bin/lib/review-vote.cjs +105 -0
  234. package/pan-wizard-core/bin/lib/roadmap.cjs +1 -0
  235. package/pan-wizard-core/bin/lib/runner.cjs +2 -16
  236. package/pan-wizard-core/bin/lib/sizing.cjs +356 -0
  237. package/pan-wizard-core/bin/lib/squads.cjs +1 -1
  238. package/pan-wizard-core/bin/lib/state-write.cjs +247 -0
  239. package/pan-wizard-core/bin/lib/test-gate.cjs +433 -0
  240. package/pan-wizard-core/bin/lib/uat.cjs +149 -0
  241. package/pan-wizard-core/bin/lib/usage.cjs +104 -0
  242. package/pan-wizard-core/bin/lib/verdict.cjs +26 -3
  243. package/pan-wizard-core/bin/lib/verify-plan-set.cjs +30 -1
  244. package/pan-wizard-core/bin/lib/verify-preflight.cjs +2 -2
  245. package/pan-wizard-core/bin/lib/verify-red.cjs +174 -0
  246. package/pan-wizard-core/bin/lib/verify-retro.cjs +3 -2
  247. package/pan-wizard-core/bin/lib/verify-scope.cjs +143 -2
  248. package/pan-wizard-core/bin/lib/verify.cjs +86 -31
  249. package/pan-wizard-core/bin/lib/worktree.cjs +70 -0
  250. package/pan-wizard-core/bin/pan-tools.cjs +257 -28
  251. package/pan-wizard-core/learnings/universal/autonomous-loop.md +2 -2
  252. package/pan-wizard-core/mcp/orchestrator.cjs +4 -1
  253. package/pan-wizard-core/references/continuation-format.md +3 -3
  254. package/pan-wizard-core/references/design-methodology.md +1 -1
  255. package/pan-wizard-core/references/guardrails.md +1 -1
  256. package/pan-wizard-core/references/handoff-decisions.md +1 -1
  257. package/pan-wizard-core/references/model-profiles.md +2 -3
  258. package/pan-wizard-core/references/questioning.md +24 -0
  259. package/pan-wizard-core/references/ui-brand.md +4 -6
  260. package/pan-wizard-core/references/verdict-contract.md +2 -1
  261. package/pan-wizard-core/templates/config.json +10 -2
  262. package/pan-wizard-core/templates/debug.md +1 -0
  263. package/pan-wizard-core/templates/design.md +5 -4
  264. package/pan-wizard-core/templates/discovery.md +2 -2
  265. package/pan-wizard-core/templates/phase-prompt.md +7 -0
  266. package/pan-wizard-core/templates/requirements.md +9 -0
  267. package/pan-wizard-core/templates/research.md +10 -0
  268. package/pan-wizard-core/templates/summary-complex.md +5 -1
  269. package/pan-wizard-core/templates/summary-minimal.md +4 -0
  270. package/pan-wizard-core/templates/summary-standard.md +5 -1
  271. package/pan-wizard-core/templates/summary.md +8 -1
  272. package/pan-wizard-core/workflows/add-phase.md +4 -6
  273. package/pan-wizard-core/workflows/assumptions.md +19 -1
  274. package/pan-wizard-core/workflows/diagnose-issues.md +2 -0
  275. package/pan-wizard-core/workflows/discuss-phase.md +4 -2
  276. package/pan-wizard-core/workflows/exec-lean.md +69 -0
  277. package/pan-wizard-core/workflows/exec-phase.md +79 -15
  278. package/pan-wizard-core/workflows/execute-plan.md +3 -1
  279. package/{commands/pan → pan-wizard-core/workflows}/focus-doc-audit.md +13 -29
  280. package/{commands/pan → pan-wizard-core/workflows}/focus-drift-walking.md +3 -18
  281. package/{commands/pan → pan-wizard-core/workflows}/focus-exec.md +8 -23
  282. package/{commands/pan → pan-wizard-core/workflows}/focus-plan.md +6 -20
  283. package/{commands/pan → pan-wizard-core/workflows}/focus-scan.md +3 -16
  284. package/{commands/pan → pan-wizard-core/workflows}/focus-sync.md +7 -21
  285. package/pan-wizard-core/workflows/health.md +6 -0
  286. package/pan-wizard-core/workflows/help.md +114 -77
  287. package/pan-wizard-core/workflows/insert-phase.md +4 -6
  288. package/pan-wizard-core/workflows/learn.md +3 -3
  289. package/pan-wizard-core/workflows/milestone-audit.md +2 -2
  290. package/pan-wizard-core/workflows/milestone-new.md +38 -95
  291. package/pan-wizard-core/workflows/new-project.md +96 -258
  292. package/pan-wizard-core/workflows/optimize.md +107 -5
  293. package/pan-wizard-core/workflows/phase-tests.md +10 -0
  294. package/pan-wizard-core/workflows/plan-phase.md +106 -45
  295. package/pan-wizard-core/workflows/profile.md +50 -0
  296. package/pan-wizard-core/workflows/progress.md +10 -0
  297. package/pan-wizard-core/workflows/quick.md +34 -43
  298. package/pan-wizard-core/workflows/remove-phase.md +11 -1
  299. package/pan-wizard-core/workflows/research-phase.md +118 -40
  300. package/pan-wizard-core/workflows/resume-project.md +18 -2
  301. package/pan-wizard-core/workflows/settings.md +33 -19
  302. package/pan-wizard-core/workflows/todo-check.md +6 -2
  303. package/pan-wizard-core/workflows/transition.md +22 -4
  304. package/pan-wizard-core/workflows/uat-walkthrough.md +90 -0
  305. package/pan-wizard-core/workflows/update.md +1 -1
  306. package/pan-wizard-core/workflows/verify-phase.md +39 -46
  307. package/scripts/build-agent-plugin.js +35 -15
  308. package/scripts/build-help.cjs +106 -0
  309. package/scripts/build-plugin.js +10 -1
  310. package/scripts/deprecate-old-versions.js +70 -3
  311. package/scripts/generate-skills-docs.py +1 -1
  312. package/scripts/git-hooks/pre-push +27 -0
  313. package/scripts/install-git-hooks.js +7 -5
  314. package/scripts/install-pre-push.cjs +38 -0
  315. package/scripts/land.cjs +151 -0
  316. package/scripts/local-ci.cjs +501 -0
  317. package/scripts/local-schedule.cjs +277 -0
  318. package/scripts/mutation-probe.cjs +7 -80
  319. package/scripts/prompt-lint.cjs +32 -0
  320. package/scripts/prompt-rules.cjs +156 -0
  321. package/scripts/run-tests.cjs +7 -1
  322. package/scripts/test-quality-lint.cjs +3 -3
  323. package/scripts/test-surface.cjs +175 -6
  324. package/agents/pan-research-synthesizer.md +0 -246
  325. package/commands/pan/audit-deployment.md +0 -386
  326. package/commands/pan/dashboard.md +0 -22
  327. package/commands/pan/discord.md +0 -19
  328. package/commands/pan/mcp-bridge.md +0 -143
  329. package/commands/pan/milestone-cleanup.md +0 -19
  330. package/commands/pan/milestone-gaps.md +0 -35
  331. package/commands/pan/optimize.md +0 -115
  332. package/commands/pan/profile.md +0 -76
  333. package/commands/pan/research-phase.md +0 -189
  334. package/pan-wizard-core/bin/lib/bridge.cjs +0 -269
  335. package/pan-wizard-core/templates/research-project/architecture.md +0 -204
  336. package/pan-wizard-core/templates/research-project/features.md +0 -147
  337. package/pan-wizard-core/templates/research-project/pitfalls.md +0 -200
  338. package/pan-wizard-core/templates/research-project/stack.md +0 -120
  339. package/pan-wizard-core/templates/research-project/summary.md +0 -170
@@ -1,115 +0,0 @@
1
- ---
2
- name: pan:optimize
3
- group: Self-Improvement
4
- description: Manage the circular optimization loop — record a report's suggestions, undo them, view stats, list reports, manage trace sessions
5
- argument-hint: "apply [--report <file>] | revert <apply_id> | revert --last | list | stats | trace init|end|current|list"
6
- allowed-tools:
7
- - Read
8
- - Write
9
- - Edit
10
- - Bash
11
- - Glob
12
- - Grep
13
- ---
14
-
15
- # /pan:optimize
16
-
17
- Manage the circular optimization loop: record a report's suggestions, view stats, list reports.
18
-
19
- **Usage:**
20
- ```
21
- /pan:optimize apply
22
- /pan:optimize apply --report <filename>
23
- /pan:optimize revert <apply_id>
24
- /pan:optimize revert --last
25
- /pan:optimize list
26
- /pan:optimize stats
27
- /pan:optimize trace init [--description "what you're building"]
28
- /pan:optimize trace end
29
- /pan:optimize trace current
30
- /pan:optimize trace list
31
- ```
32
-
33
- **Subcommands:**
34
-
35
- ### apply
36
- Record the suggestions from the most recent (or specified) optimization report.
37
-
38
- Recorded automatically:
39
- - Suggestions appended to `.planning/optimization/suggestions.md`: lessons, prompt changes and workflow changes, each naming where it belongs
40
- - Config notes appended to `.planning/optimization/config-suggestions.md`
41
- - An older report's memory actions (`memory_entry`, `memory`, `memory_append`) still write to `.planning/memory/`, a `memory_entry` only if it passes the checks of the `memory record` command. The result warns that PAN's workflows do not load that folder into agents
42
-
43
- A person makes every change the suggestions describe (never auto-applied):
44
- - Lessons, written into the project's instructions (CLAUDE.md or AGENTS.md, outside PAN's section), a test, or a comment at the cited code
45
- - Agent prompt changes
46
- - Workflow step additions
47
- - Structural changes to commands
48
-
49
- After applying, the report lists what was applied and what still needs review, plus the `apply_id` that undoes it. Every apply is recorded action by action in `.planning/optimization/applied.jsonl`: the path, whether the file was created or appended to, the exact text, and a hash of the file after the write. Applying the same report a second time writes nothing: each action names the apply that already wrote it.
50
-
51
- ### revert
52
- Undo one apply exactly: delete the files it created and cut the text it appended (`revert --last` for the newest).
53
-
54
- Revert never destroys work someone did since:
55
- - It refuses a file whose content changed after the apply. The comparison ignores line endings, so a CRLF checkout still matches.
56
- - It refuses a file that a later apply also wrote. Revert that later apply first.
57
- - It says which files it refused, and why.
58
-
59
- A CRLF file comes back CRLF. Applies logged before apply records existed cannot be reverted. After a revert, the same report can be applied again.
60
-
61
- ### list
62
- List all optimization reports in `.planning/optimization/reports/`, most recent first.
63
-
64
- ### stats
65
- Show cumulative optimization statistics:
66
- - Total trace sessions run
67
- - Total events traced
68
- - Total errors seen (`total_errors_traced`; gaps and redundancies are not totalled)
69
- - Total optimizations applied across all runs, the apply runs, the reverted runs, and the last `apply_id`
70
- - Current active trace session (if any)
71
-
72
- ### trace init
73
- Start a trace session before running a build — or join the active one: `trace init` reuses an unended session started within the last hour (`reused: true`, keeping that session's description) instead of opening a new one. The hook fires automatically on SubagentStop, but calling `trace init` first lets you attach a description to a new session.
74
-
75
- ```
76
- /pan:optimize trace init --description "building express web server"
77
- /pan:exec-phase 1
78
- /pan:learn
79
- ```
80
-
81
- ### trace end
82
- Finalize the current trace session (writes summary stats to session.json).
83
-
84
- ### trace current
85
- Show the active trace session ID (`optimize trace current` returns only `session_id` and `active`; `trace list` carries each session's event count).
86
-
87
- ### trace list
88
- List all trace sessions, most recent first.
89
-
90
- ---
91
-
92
- **The circular loop:**
93
-
94
- ```
95
- ┌─────────────────────────────────────────────────────┐
96
- │ │
97
- │ /pan:optimize trace init │
98
- │ ↓ │
99
- │ /pan:exec-phase N ← agents run, hook traces │
100
- │ ↓ │
101
- │ /pan:learn ← analyze + report │
102
- │ ↓ │
103
- │ /pan:optimize apply ← record suggestions │
104
- │ ↓ │
105
- │ You make the changes ← instructions, tests, code │
106
- │ ↑ │
107
- │ └──────────────────────────────────────────┘
108
- └─────────────────────────────────────────────────────┘
109
- ```
110
-
111
- Each iteration puts what the last run lacked where the next run's agents read it: fewer repeated errors and gaps.
112
-
113
- **See also:** `/pan:learn`, `/pan:exec-phase`
114
-
115
- Follow the workflow at `~/.claude/pan-wizard-core/workflows/optimize.md`. Each subcommand runs `node ~/.claude/pan-wizard-core/bin/pan-tools.cjs optimize <subcommand> [flags]` — e.g. `optimize apply --report <path>`, `optimize revert --last`, `optimize trace init --description "..."`.
@@ -1,76 +0,0 @@
1
- ---
2
- name: pan:profile
3
- group: Session & Progress
4
- description: Switch model profile for PAN agents (quality/balanced/budget)
5
- argument-hint: <profile>
6
- allowed-tools:
7
- - Read
8
- - Write
9
- - Bash
10
- ---
11
-
12
- <objective>
13
- Switch the model profile used by PAN agents. Sets the model tier PAN's workflows pass when they spawn an agent (mapped to the detected provider's models), balancing quality vs token spend. `/pan:army` and `pan-conductor` spawn with no model, so the agents they run use their own `model:` pin, else the session model, under every profile.
14
-
15
- Routes to the profile workflow which handles:
16
- - Argument validation (quality/balanced/budget)
17
- - Downgrade confirmation (quality → balanced → budget requires 'yes')
18
- - Config file creation if missing
19
- - Profile update in config.json
20
- - Confirmation with model table display
21
- </objective>
22
-
23
- <execution_context>
24
- @~/.claude/pan-wizard-core/workflows/profile.md
25
- </execution_context>
26
-
27
- <process>
28
- **Follow the profile workflow** from `@~/.claude/pan-wizard-core/workflows/profile.md`.
29
-
30
- The workflow handles all logic including:
31
- 1. Profile argument validation
32
- 2. Config file ensuring
33
- 3. Config reading and updating
34
- 4. Model table generation from MODEL_PROFILES
35
- 5. Cost estimation display (relative cost multiplier per profile)
36
- 6. Confirmation display
37
- </process>
38
-
39
- <tier_decision_tree>
40
- **Capability-aware routing** (shipped v2.10.0 — E-7). `resolveModel` can adjust the profile's tier per call from three hints — context estimate, whether the task needs extended thinking, and whether prompt cache is warm — but only when the caller passes them (`resolve-model <agent> --metadata '{…}'`). No shipped workflow, command or agent passes them, so the tree and the quick guide below describe what a caller's hints would do.
41
-
42
- The decision order `resolveModel` applies after the baseline profile pick:
43
-
44
- ```
45
- Baseline tier (from MODEL_PROFILES[agent][profile])
46
- │
47
- ▼
48
- ┌─────────────────────────────────────────────┐
49
- │ context_estimate > 700K tokens? │── yes ──▶ force reasoning (widest ctx tier)
50
- └─────────────────────────────────────────────┘
51
- │ no
52
- ▼
53
- ┌─────────────────────────────────────────────┐
54
- │ needs_thinking AND tier == fast? │── yes ──▶ upgrade fast → mid
55
- └─────────────────────────────────────────────┘
56
- │ no
57
- ▼
58
- ┌─────────────────────────────────────────────┐
59
- │ cache_warm AND !needs_thinking │── yes ──▶ downgrade mid → fast
60
- │ AND context_estimate < 50K AND tier == mid │
61
- └─────────────────────────────────────────────┘
62
- │ no
63
- ▼
64
- Final tier → provider-native model name
65
- ```
66
-
67
- **Quick guide:**
68
- - Heavy verification (plan-checker, verifier, integration-checker, reviewer, debugger): `needs_thinking: true` — baseline upgrades fast→mid.
69
- - Whole-repo context estimates above the large-context threshold (`context_estimate > 700K` tokens — `LARGE_CONTEXT_TOKEN_THRESHOLD`): forced to reasoning, which inherits the model you launched with. Note the direction: `/pan:map-codebase` picks `single-shot` **at or below** 700K and `sharded` above it, so the repos that trip this rule are the ones the mapper is already sharding.
70
- - Routine exec tasks with project.md cached: `cache_warm + small ctx` — mid gets downgraded to fast for a cost win.
71
- - All rules are additive to the `quality` / `balanced` / `budget` profile you pick here — profile sets the floor, capability hints adjust upward or downward within that floor's band.
72
-
73
- **Inspecting routing:** use `pan-tools resolve-model <agent> --metadata '{"context_estimate":900000,"needs_thinking":true}'` to see what tier a given hint set resolves to.
74
-
75
- **Effort dimension (2026-06):** `resolve-model` also returns an `effort` level (`low`/`medium`/`high`/`xhigh`) per agent — the within-model reasoning-depth dial on current models. Profiles modulate it: `budget` steps each agent's base effort down one level (floor `low`); `quality`/`balanced` keep the base. Per-agent override: `.planning/config.json` → `"effort_overrides": { "pan-verifier": "xhigh" }`.
76
- </tier_decision_tree>
@@ -1,189 +0,0 @@
1
- ---
2
- name: pan:research-phase
3
- group: Phase Lifecycle
4
- description: Research how to implement a phase (standalone - usually use /pan:plan-phase instead)
5
- argument-hint: "<phase>"
6
- allowed-tools:
7
- - Read
8
- - Bash
9
- - Task
10
- ---
11
-
12
- <objective>
13
- Research how to implement a phase. Spawns pan-phase-researcher agent with phase context.
14
-
15
- **Note:** This is a standalone research command. For most workflows, use `/pan:plan-phase` which integrates research automatically.
16
-
17
- **Use this command when:**
18
- - You want to research without planning yet
19
- - You want to re-research after planning is complete
20
- - You need to investigate before deciding if a phase is feasible
21
-
22
- **Orchestrator role:** Parse phase, validate against roadmap, check existing research, gather context, spawn researcher agent, present results.
23
-
24
- **Why subagent:** Research burns context fast (WebSearch, Context7 queries, source verification). A fresh context window for investigation. Main context stays lean for user interaction.
25
- </objective>
26
-
27
- <context>
28
- Phase number: $ARGUMENTS (required)
29
-
30
- Normalize phase input in step 1 before any directory lookups.
31
- </context>
32
-
33
- <process>
34
-
35
- ## 0. Initialize Context
36
-
37
- ```bash
38
- INIT=$(node ~/.claude/pan-wizard-core/bin/pan-tools.cjs init phase-op "$ARGUMENTS")
39
- ```
40
-
41
- Extract from init JSON: `phase_dir`, `padded_phase`, `phase_slug`, `phase_number`, `phase_name`, `phase_found`, `commit_docs`, `has_research`, `state_path`, `requirements_path`, `context_path`, `research_path`. `phase_dir` is null when the phase is in the roadmap but has no directory yet: create it (`mkdir -p ".planning/phases/${padded_phase}-${phase_slug}"`) and use that path as `phase_dir`, as discuss-phase does.
42
-
43
- Resolve researcher model:
44
- ```bash
45
- RESEARCHER_MODEL=$(node ~/.claude/pan-wizard-core/bin/pan-tools.cjs resolve-model pan-phase-researcher --raw)
46
- ```
47
-
48
- ## 1. Validate Phase
49
-
50
- ```bash
51
- PHASE_INFO=$(node ~/.claude/pan-wizard-core/bin/pan-tools.cjs roadmap get-phase "${phase_number}")
52
- ```
53
-
54
- **If `found` is false:** Error and exit. **If `found` is true:** Extract `phase_number`, `phase_name`, `goal` from JSON.
55
-
56
- ## 2. Check Existing Research
57
-
58
- Use `has_research` and `research_path` from INIT.
59
-
60
- **If exists:** Offer: 1) Update research, 2) View existing (`research_path`), 3) Skip. Wait for response.
61
-
62
- **If doesn't exist:** Continue.
63
-
64
- ## 3. Gather Phase Context
65
-
66
- Write this phase's roadmap slice (its section, its dependencies' goals and its requirement lines), then use paths from INIT (do not inline file contents in orchestrator context):
67
- ```bash
68
- SLICE_PATH=$(node ~/.claude/pan-wizard-core/bin/pan-tools.cjs roadmap slice "${phase_number}" --write --raw)
69
- ```
70
- - `slice_path` (from the command above; `requirements_path` if it is empty)
71
- - `context_path`
72
- - `state_path`
73
-
74
- Present summary with phase description and what files the researcher will load.
75
-
76
- ## 4. Spawn pan-phase-researcher Agent
77
-
78
- Research mode: the prompt below names `ecosystem`; pan-phase-researcher defines no modes, so treat it as context, not a switch.
79
-
80
- ```markdown
81
- <research_type>
82
- Phase Research — investigating HOW to implement a specific phase well.
83
- </research_type>
84
-
85
- <key_insight>
86
- The question is NOT "which library should I use?"
87
-
88
- The question is: "What do I not know that I don't know?"
89
-
90
- For this phase, discover:
91
- - What's the established architecture pattern?
92
- - What libraries form the standard stack?
93
- - What problems do people commonly hit?
94
- - What's SOTA vs what Claude's training thinks is SOTA?
95
- - What should NOT be hand-rolled?
96
- </key_insight>
97
-
98
- <objective>
99
- Research implementation approach for Phase {phase_number}: {phase_name}
100
- Mode: ecosystem
101
- </objective>
102
-
103
- <files_to_read>
104
- - {slice_path} (This phase's roadmap and requirements)
105
- - {context_path} (Phase context from discuss-phase, if exists)
106
- - {state_path} (Prior project decisions and blockers)
107
- </files_to_read>
108
-
109
- <additional_context>
110
- **Phase description:** {phase_description}
111
- </additional_context>
112
-
113
- <downstream_consumer>
114
- Your research.md will be loaded by `/pan:plan-phase` which uses specific sections:
115
- - `## Standard Stack` → Plans use these libraries
116
- - `## Architecture Patterns` → Task structure follows these
117
- - `## Don't Hand-Roll` → Tasks NEVER build custom solutions for listed problems
118
- - `## Common Pitfalls` → Verification steps check for these
119
- - `## Code Examples` → Task actions reference these patterns
120
-
121
- Be prescriptive, not exploratory. "Use X" not "Consider X or Y."
122
- </downstream_consumer>
123
-
124
- <quality_gate>
125
- Before declaring complete, verify:
126
- - [ ] All domains investigated (not just some)
127
- - [ ] Negative claims verified with official docs
128
- - [ ] Multiple sources for critical claims
129
- - [ ] Confidence levels assigned honestly
130
- - [ ] Section names match what plan-phase expects
131
- </quality_gate>
132
-
133
- <output>
134
- Write to: {phase_dir}/{padded_phase}-research.md
135
- </output>
136
- ```
137
-
138
- ```
139
- Task(
140
- prompt=filled_prompt,
141
- subagent_type="pan-phase-researcher",
142
- model="{researcher_model}",
143
- description="Research Phase {phase}"
144
- )
145
- ```
146
-
147
- ## 5. Handle Agent Return
148
-
149
- **`## RESEARCH COMPLETE`:** Display summary, offer: Plan phase, Dig deeper, Review full, Done.
150
-
151
- **`## RESEARCH BLOCKED`:** Show the blocker and what was attempted, offer: Provide context (then spawn a continuation, step 6), Skip research, Abort.
152
-
153
- ## 6. Spawn Continuation Agent
154
-
155
- ```markdown
156
- <objective>
157
- Continue research for Phase {phase_number}: {phase_name}
158
- </objective>
159
-
160
- <prior_state>
161
- <files_to_read>
162
- - {phase_dir}/{padded_phase}-research.md (Existing research)
163
- </files_to_read>
164
- </prior_state>
165
-
166
- <checkpoint_response>
167
- **Type:** {checkpoint_type}
168
- **Response:** {user_response}
169
- </checkpoint_response>
170
- ```
171
-
172
- ```
173
- Task(
174
- prompt=continuation_prompt,
175
- subagent_type="pan-phase-researcher",
176
- model="{researcher_model}",
177
- description="Continue research Phase {phase}"
178
- )
179
- ```
180
-
181
- </process>
182
-
183
- <success_criteria>
184
- - [ ] Phase validated against roadmap
185
- - [ ] Existing research checked
186
- - [ ] pan-phase-researcher spawned with context
187
- - [ ] Checkpoints handled correctly
188
- - [ ] User knows next steps
189
- </success_criteria>
@@ -1,269 +0,0 @@
1
- /**
2
- * Bridge — MCP tool discovery + per-phase recommendation (Spec B v2 Y-5, v3.3).
3
- *
4
- * Discovery-only scope. We discover what MCP tools are reachable from the
5
- * host runtime and what their shapes look like, then recommend which tools
6
- * a given phase plan might use. We do NOT auto-inject tools into plans or
7
- * auto-invoke them — those belong to a future wave once MCP schemas stabilize.
8
- *
9
- * Data lives at `.planning/bridge/available-tools.json`:
10
- * {
11
- * cached_at: "2026-04-18T...",
12
- * runtime: "claude",
13
- * servers: [
14
- * {
15
- * name: "linear",
16
- * version: "1.2.3",
17
- * tools: [
18
- * { name: "linear.updateTicket", description: "...", schema: {...} },
19
- * ...
20
- * ]
21
- * },
22
- * ...
23
- * ]
24
- * }
25
- *
26
- * Nothing populates this file on its own: no hook or host writes it.
27
- * `bridge cache --servers <json>` (or an external script) seeds it; this module
28
- * reads the cache and reasons over it.
29
- */
30
-
31
- const fs = require('fs');
32
- const path = require('path');
33
- const { output, error, safeReadFile, toPosix, findPhaseInternal } = require('./core.cjs');
34
- const { planningPath } = require('./utils.cjs');
35
-
36
- const BRIDGE_DIR = 'bridge';
37
- const TOOLS_FILE = 'available-tools.json';
38
-
39
- function bridgeDir(cwd) {
40
- return path.join(planningPath(cwd), BRIDGE_DIR);
41
- }
42
-
43
- function toolsCacheFile(cwd) {
44
- return path.join(bridgeDir(cwd), TOOLS_FILE);
45
- }
46
-
47
- /**
48
- * Load the cached tool list. Returns an empty catalog if the cache is
49
- * missing or malformed.
50
- *
51
- * @param {string} cwd - Project root
52
- * @returns {{cached_at: string|null, runtime: string|null, servers: Array, source: 'cache'|'empty'}}
53
- */
54
- function loadToolCache(cwd) {
55
- const raw = safeReadFile(toolsCacheFile(cwd));
56
- if (!raw) return { cached_at: null, runtime: null, servers: [], source: 'empty' };
57
- try {
58
- const parsed = JSON.parse(raw);
59
- return {
60
- cached_at: parsed.cached_at || null,
61
- runtime: parsed.runtime || null,
62
- servers: Array.isArray(parsed.servers) ? parsed.servers : [],
63
- source: 'cache',
64
- };
65
- } catch {
66
- return { cached_at: null, runtime: null, servers: [], source: 'empty' };
67
- }
68
- }
69
-
70
- /**
71
- * Write the tool cache. Used by the command when the host runtime provides
72
- * a fresh tool list (or by tests for fixture setup).
73
- *
74
- * @param {string} cwd - Project root
75
- * @param {{runtime, servers}} data
76
- * @returns {{written: true, file: string}|{error: string}}
77
- */
78
- function writeToolCache(cwd, data) {
79
- if (!data || typeof data !== 'object') return { error: 'data required' };
80
- try {
81
- fs.mkdirSync(bridgeDir(cwd), { recursive: true });
82
- } catch (e) {
83
- return { error: `Failed to create bridge dir: ${e.message}` };
84
- }
85
- const payload = {
86
- cached_at: new Date().toISOString(),
87
- runtime: data.runtime || null,
88
- servers: Array.isArray(data.servers) ? data.servers : [],
89
- };
90
- const file = toolsCacheFile(cwd);
91
- try {
92
- fs.writeFileSync(file, JSON.stringify(payload, null, 2), 'utf-8');
93
- } catch (e) {
94
- return { error: `Failed to write ${file}: ${e.message}` };
95
- }
96
- return { written: true, file: toPosix(path.relative(cwd, file)) };
97
- }
98
-
99
- /**
100
- * Flatten server → tool hierarchy into a single list for easier reasoning.
101
- *
102
- * @param {Array} servers - From loadToolCache().servers
103
- * @returns {Array<{server, name, description, schema}>}
104
- */
105
- function flattenTools(servers) {
106
- const tools = [];
107
- for (const server of servers || []) {
108
- if (!server || !Array.isArray(server.tools)) continue;
109
- for (const tool of server.tools) {
110
- if (!tool || !tool.name) continue;
111
- tools.push({
112
- server: server.name,
113
- name: tool.name,
114
- description: tool.description || '',
115
- schema: tool.schema || null,
116
- });
117
- }
118
- }
119
- return tools;
120
- }
121
-
122
- /**
123
- * List all available MCP tools, flattened.
124
- *
125
- * @param {string} cwd - Project root
126
- * @returns {Object}
127
- */
128
- function listTools(cwd) {
129
- const cache = loadToolCache(cwd);
130
- const tools = flattenTools(cache.servers);
131
- return {
132
- cached_at: cache.cached_at,
133
- runtime: cache.runtime,
134
- server_count: cache.servers.length,
135
- tool_count: tools.length,
136
- tools,
137
- source: cache.source,
138
- };
139
- }
140
-
141
- // ─── Recommendation scoring ────────────────────────────────────────────────
142
-
143
- /**
144
- * Score a tool's relevance to a phase by matching plan keywords against
145
- * tool name + description. Naive frequency-based scoring (no embeddings).
146
- *
147
- * @param {string} phaseText - Combined plan text
148
- * @param {{server, name, description}} tool
149
- * @returns {{score: number, hits: Array<string>}}
150
- */
151
- function scoreToolForPhase(phaseText, tool) {
152
- if (!phaseText || !tool) return { score: 0, hits: [] };
153
- const body = phaseText.toLowerCase();
154
- const haystack = `${tool.server || ''} ${tool.name || ''} ${tool.description || ''}`.toLowerCase();
155
-
156
- // Extract keywords from the tool's identity: split on non-word chars, dedupe, keep ≥3 chars.
157
- const keywords = [...new Set(haystack.split(/\W+/).filter(w => w.length >= 3))];
158
-
159
- let score = 0;
160
- const hits = [];
161
- for (const kw of keywords) {
162
- const re = new RegExp(`\\b${kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`, 'g');
163
- const count = (body.match(re) || []).length;
164
- if (count > 0) {
165
- score += count;
166
- hits.push(kw);
167
- }
168
- }
169
- return { score, hits };
170
- }
171
-
172
- /**
173
- * Recommend MCP tools for a specific phase based on plan text keyword match.
174
- *
175
- * @param {string} cwd - Project root
176
- * @param {string|number} phaseNum - Phase identifier
177
- * @param {Object} [opts] - {max_recommendations, min_score}
178
- * @returns {Object}
179
- */
180
- function recommendForPhase(cwd, phaseNum, opts) {
181
- const cache = loadToolCache(cwd);
182
- const tools = flattenTools(cache.servers);
183
- if (tools.length === 0) {
184
- return {
185
- phase: String(phaseNum),
186
- runtime: cache.runtime,
187
- recommendations: [],
188
- reason: 'no MCP tools cached — seed .planning/bridge/available-tools.json with `pan-tools bridge cache --servers <json>`; no hook or host writes it',
189
- };
190
- }
191
-
192
- const phaseInfo = findPhaseInternal(cwd, phaseNum);
193
- if (!phaseInfo || !phaseInfo.found) {
194
- return {
195
- phase: String(phaseNum),
196
- error: `Phase ${phaseNum} not found in .planning/phases/`,
197
- };
198
- }
199
-
200
- const phaseDir = path.join(cwd, phaseInfo.directory);
201
- const planTexts = (phaseInfo.plans || [])
202
- .map(f => safeReadFile(path.join(phaseDir, f)) || '')
203
- .join('\n');
204
-
205
- const max = Math.max(1, Math.min(50, Number(opts?.max_recommendations) || 10));
206
- const minScore = Math.max(0, Number(opts?.min_score) || 1);
207
-
208
- const scored = tools
209
- .map(tool => ({
210
- ...tool,
211
- ...scoreToolForPhase(planTexts, tool),
212
- }))
213
- .filter(t => t.score >= minScore)
214
- .sort((a, b) => b.score - a.score || a.name.localeCompare(b.name))
215
- .slice(0, max);
216
-
217
- return {
218
- phase: String(phaseNum),
219
- phase_name: phaseInfo.phase_name || null,
220
- runtime: cache.runtime,
221
- total_candidates: tools.length,
222
- recommendations: scored.map(t => ({
223
- server: t.server,
224
- name: t.name,
225
- description: t.description,
226
- score: t.score,
227
- hits: t.hits,
228
- })),
229
- };
230
- }
231
-
232
- // ─── CLI wrappers ───────────────────────────────────────────────────────────
233
-
234
- function cmdBridgeList(cwd, raw) {
235
- output(listTools(cwd), raw);
236
- }
237
-
238
- function cmdBridgeRecommend(cwd, phaseNum, opts, raw) {
239
- if (!phaseNum) error('Usage: bridge recommend <phase> [--max N] [--min-score N]');
240
- output(recommendForPhase(cwd, phaseNum, opts), raw);
241
- }
242
-
243
- function cmdBridgeCache(cwd, serversJson, runtime, raw) {
244
- // The cache's only writer: no hook or host runtime populates the file, so this
245
- // CLI path (or an external script) is how users seed it.
246
- if (!serversJson) {
247
- // No payload — just echo the current cache path/state.
248
- output(listTools(cwd), raw);
249
- return;
250
- }
251
- let servers;
252
- try { servers = JSON.parse(serversJson); }
253
- catch (e) { error(`Invalid --servers JSON: ${e.message}`); }
254
- output(writeToolCache(cwd, { runtime, servers }), raw);
255
- }
256
-
257
- module.exports = {
258
- loadToolCache,
259
- writeToolCache,
260
- flattenTools,
261
- listTools,
262
- scoreToolForPhase,
263
- recommendForPhase,
264
- cmdBridgeList,
265
- cmdBridgeRecommend,
266
- cmdBridgeCache,
267
- BRIDGE_DIR,
268
- TOOLS_FILE,
269
- };