@sienklogic/plan-build-run 2.19.0 → 2.19.2

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 (951) hide show
  1. package/CHANGELOG.md +1287 -303
  2. package/CLAUDE.md +74 -39
  3. package/LICENSE +2 -1
  4. package/README.md +412 -177
  5. package/bin/install.js +2752 -0
  6. package/dashboard/bin/cli.cjs +96 -0
  7. package/dashboard/bin/stop.cjs +129 -0
  8. package/dashboard/eslint.config.js +37 -0
  9. package/dashboard/index.html +20 -0
  10. package/dashboard/package.json +27 -25
  11. package/dashboard/server/index.js +151 -0
  12. package/dashboard/server/lib/frontmatter.js +92 -0
  13. package/dashboard/server/middleware/static.js +35 -0
  14. package/dashboard/server/package.json +16 -0
  15. package/dashboard/server/routes/agents.js +234 -0
  16. package/dashboard/server/routes/config.js +64 -0
  17. package/dashboard/server/routes/health.js +98 -0
  18. package/dashboard/server/routes/incidents.js +78 -0
  19. package/dashboard/server/routes/intel.js +69 -0
  20. package/dashboard/server/routes/memory.js +107 -0
  21. package/dashboard/server/routes/planning.js +234 -0
  22. package/dashboard/server/routes/progress.js +77 -0
  23. package/dashboard/server/routes/projects.js +36 -0
  24. package/dashboard/server/routes/requirements.js +40 -0
  25. package/dashboard/server/routes/roadmap.js +69 -0
  26. package/dashboard/server/routes/sessions.js +70 -0
  27. package/dashboard/server/routes/status.js +25 -0
  28. package/dashboard/server/routes/telemetry.js +233 -0
  29. package/dashboard/server/services/file-watcher.js +105 -0
  30. package/dashboard/server/services/planning-reader.js +727 -0
  31. package/dashboard/server/test/cli.test.js +34 -0
  32. package/dashboard/server/test/frontmatter.test.js +104 -0
  33. package/dashboard/server/test/isolation.test.js +32 -0
  34. package/dashboard/server/test/planning-reader.test.js +151 -0
  35. package/dashboard/server/test/routes.test.js +91 -0
  36. package/dashboard/server/test/ws.test.js +81 -0
  37. package/dashboard/server/ws.js +96 -0
  38. package/dashboard/src/App.jsx +165 -0
  39. package/dashboard/src/components/charts/BudgetBars.jsx +42 -0
  40. package/dashboard/src/components/charts/ContextRadar.jsx +34 -0
  41. package/dashboard/src/components/charts/PhaseDonut.jsx +66 -0
  42. package/dashboard/src/components/charts/SuccessTrend.jsx +45 -0
  43. package/dashboard/src/components/charts/TokenChart.jsx +55 -0
  44. package/dashboard/src/components/charts/index.js +5 -0
  45. package/dashboard/src/components/config/CfgSection.jsx +93 -0
  46. package/dashboard/src/components/layout/Header.jsx +89 -0
  47. package/dashboard/src/components/layout/ProjectSwitcher.jsx +160 -0
  48. package/dashboard/src/components/layout/Sidebar.jsx +161 -0
  49. package/dashboard/src/components/ui/AutoModeBanner.jsx +138 -0
  50. package/dashboard/src/components/ui/BackButton.jsx +27 -0
  51. package/dashboard/src/components/ui/Badge.jsx +27 -0
  52. package/dashboard/src/components/ui/Card.jsx +23 -0
  53. package/dashboard/src/components/ui/ChartTooltip.jsx +48 -0
  54. package/dashboard/src/components/ui/CheckpointBox.jsx +110 -0
  55. package/dashboard/src/components/ui/CodeBlock.jsx +27 -0
  56. package/dashboard/src/components/ui/ConfidenceBadge.jsx +20 -0
  57. package/dashboard/src/components/ui/ConfirmModal.jsx +161 -0
  58. package/dashboard/src/components/ui/ConnectionBanner.jsx +60 -0
  59. package/dashboard/src/components/ui/ErrorBoundary.jsx +106 -0
  60. package/dashboard/src/components/ui/ErrorBox.jsx +107 -0
  61. package/dashboard/src/components/ui/KeyValue.jsx +33 -0
  62. package/dashboard/src/components/ui/LoadingSkeleton.jsx +84 -0
  63. package/dashboard/src/components/ui/MetricCard.jsx +58 -0
  64. package/dashboard/src/components/ui/NextUpBlock.jsx +92 -0
  65. package/dashboard/src/components/ui/NumberInput.jsx +44 -0
  66. package/dashboard/src/components/ui/PBRBanner.jsx +47 -0
  67. package/dashboard/src/components/ui/PipelineView.jsx +130 -0
  68. package/dashboard/src/components/ui/ProgressBar.jsx +28 -0
  69. package/dashboard/src/components/ui/ProgressDisplay.jsx +47 -0
  70. package/dashboard/src/components/ui/QualityGateBadge.jsx +15 -0
  71. package/dashboard/src/components/ui/SectionTitle.jsx +35 -0
  72. package/dashboard/src/components/ui/SelectInput.jsx +45 -0
  73. package/dashboard/src/components/ui/StatusDot.jsx +51 -0
  74. package/dashboard/src/components/ui/StatusSymbol.jsx +49 -0
  75. package/dashboard/src/components/ui/TabBar.jsx +41 -0
  76. package/dashboard/src/components/ui/TextInput.jsx +42 -0
  77. package/dashboard/src/components/ui/Toast.jsx +117 -0
  78. package/dashboard/src/components/ui/Toggle.jsx +70 -0
  79. package/dashboard/src/components/ui/index.js +29 -0
  80. package/dashboard/src/hooks/useDocumentTitle.js +16 -0
  81. package/dashboard/src/hooks/useFetch.js +50 -0
  82. package/dashboard/src/hooks/useToast.jsx +43 -0
  83. package/dashboard/src/hooks/useWebSocket.js +103 -0
  84. package/dashboard/src/lib/api.js +112 -0
  85. package/dashboard/src/lib/configSchema.js +189 -0
  86. package/dashboard/src/lib/constants.js +22 -0
  87. package/dashboard/src/main.jsx +15 -0
  88. package/dashboard/src/pages/AgentsPage.jsx +191 -0
  89. package/dashboard/src/pages/ConfigPage.jsx +298 -0
  90. package/dashboard/src/pages/HooksPage.jsx +412 -0
  91. package/dashboard/src/pages/IncidentsPage.jsx +135 -0
  92. package/dashboard/src/pages/IntelPage.jsx +193 -0
  93. package/dashboard/src/pages/LiveFeed.jsx +274 -0
  94. package/dashboard/src/pages/MemoryPage.jsx +107 -0
  95. package/dashboard/src/pages/OnboardingPage.jsx +117 -0
  96. package/dashboard/src/pages/Overview.jsx +360 -0
  97. package/dashboard/src/pages/PhaseDetailView.jsx +216 -0
  98. package/dashboard/src/pages/PlanningPage.jsx +181 -0
  99. package/dashboard/src/pages/ProgressPage.jsx +249 -0
  100. package/dashboard/src/pages/ResearchPage.jsx +129 -0
  101. package/dashboard/src/pages/RoadmapPage.jsx +251 -0
  102. package/dashboard/src/pages/SessionsPage.jsx +117 -0
  103. package/dashboard/src/pages/Telemetry.jsx +166 -0
  104. package/dashboard/src/pages/planning/DecisionsTab.jsx +153 -0
  105. package/dashboard/src/pages/planning/FilesTab.jsx +420 -0
  106. package/dashboard/src/pages/planning/MilestoneDetail.jsx +319 -0
  107. package/dashboard/src/pages/planning/MilestonesTab.jsx +151 -0
  108. package/dashboard/src/pages/planning/NotesTab.jsx +251 -0
  109. package/dashboard/src/pages/planning/PhasesTab.jsx +218 -0
  110. package/dashboard/src/pages/planning/QuickTab.jsx +50 -0
  111. package/dashboard/src/pages/planning/ResearchTab.jsx +103 -0
  112. package/dashboard/src/pages/planning/TodosTab.jsx +297 -0
  113. package/dashboard/src/theme/ThemeProvider.jsx +38 -0
  114. package/dashboard/src/theme/tokens.js +17 -0
  115. package/dashboard/tests/components/ConfirmModal.test.jsx +179 -0
  116. package/dashboard/tests/components/ConnectionBanner.test.jsx +37 -0
  117. package/dashboard/tests/components/ErrorBoundary.test.jsx +59 -0
  118. package/dashboard/tests/components/LoadingSkeleton.test.jsx +46 -0
  119. package/dashboard/tests/components/ToastContainer.test.jsx +47 -0
  120. package/dashboard/tests/components/Toggle.test.jsx +61 -0
  121. package/dashboard/tests/hooks/useFetch.test.jsx +77 -0
  122. package/dashboard/tests/hooks/useToast.test.jsx +78 -0
  123. package/dashboard/tests/hooks/useWebSocket.test.jsx +128 -0
  124. package/dashboard/tests/pages/ConfigPage.test.jsx +199 -0
  125. package/dashboard/tests/pages/PlanningPage.test.jsx +119 -0
  126. package/dashboard/tests/pages/planning/FilesTab.test.jsx +198 -0
  127. package/dashboard/tests/pages/planning/NotesTab.test.jsx +178 -0
  128. package/dashboard/tests/pages/planning/TodosTab.test.jsx +188 -0
  129. package/dashboard/tests/performance.test.jsx +46 -0
  130. package/dashboard/tests/routes/config.test.js +98 -0
  131. package/dashboard/tests/routes/health.test.js +40 -0
  132. package/dashboard/tests/routes/planning.test.js +112 -0
  133. package/dashboard/tests/routes/roadmap.test.js +91 -0
  134. package/dashboard/tests/routes/status.test.js +131 -0
  135. package/dashboard/tests/server/planning-reader.test.js +153 -0
  136. package/dashboard/tests/setup.js +7 -0
  137. package/dashboard/vite.config.js +41 -0
  138. package/package.json +55 -40
  139. package/plan-build-run/bin/config-schema.json +1298 -0
  140. package/plugins/pbr/.claude-plugin/plugin.json +1 -1
  141. package/plugins/pbr/CLAUDE.md +19 -0
  142. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +1 -1
  143. package/plugins/pbr/agents/advisor-researcher.md +101 -0
  144. package/plugins/pbr/agents/audit.md +205 -89
  145. package/plugins/pbr/agents/codebase-mapper.md +158 -23
  146. package/plugins/pbr/agents/debugger.md +212 -34
  147. package/plugins/pbr/agents/dev-sync.md +206 -0
  148. package/plugins/pbr/agents/executor.md +717 -39
  149. package/plugins/pbr/agents/general.md +71 -6
  150. package/plugins/pbr/agents/integration-checker.md +146 -30
  151. package/plugins/pbr/agents/intel-updater.md +332 -0
  152. package/plugins/pbr/agents/nyquist-auditor.md +253 -0
  153. package/plugins/pbr/agents/plan-checker.md +265 -65
  154. package/plugins/pbr/agents/planner.md +440 -42
  155. package/plugins/pbr/agents/researcher.md +219 -36
  156. package/plugins/pbr/agents/roadmapper.md +397 -0
  157. package/plugins/pbr/agents/synthesizer.md +166 -26
  158. package/plugins/pbr/agents/ui-checker.md +203 -0
  159. package/plugins/pbr/agents/ui-researcher.md +224 -0
  160. package/plugins/pbr/agents/verifier.md +495 -47
  161. package/plugins/pbr/commands/add-phase.md +75 -0
  162. package/plugins/pbr/commands/add-todo.md +8 -0
  163. package/plugins/pbr/commands/audit-fix.md +5 -0
  164. package/plugins/pbr/commands/audit-milestone.md +8 -0
  165. package/plugins/pbr/commands/autonomous.md +5 -0
  166. package/plugins/pbr/commands/backlog.md +6 -0
  167. package/plugins/pbr/commands/check-todos.md +8 -0
  168. package/plugins/pbr/commands/complete-milestone.md +8 -0
  169. package/plugins/pbr/commands/config.md +1 -1
  170. package/plugins/pbr/commands/discuss-phase.md +6 -0
  171. package/plugins/pbr/commands/do.md +5 -0
  172. package/plugins/pbr/commands/execute-phase.md +6 -0
  173. package/plugins/pbr/commands/fast.md +6 -0
  174. package/plugins/pbr/commands/forensics.md +6 -0
  175. package/plugins/pbr/commands/import.md +1 -1
  176. package/plugins/pbr/commands/insert-phase.md +65 -0
  177. package/plugins/pbr/commands/intel.md +5 -0
  178. package/plugins/pbr/commands/join-discord.md +11 -0
  179. package/plugins/pbr/commands/list-phase-assumptions.md +5 -0
  180. package/plugins/pbr/commands/map-codebase.md +6 -0
  181. package/plugins/pbr/commands/milestone-summary.md +6 -0
  182. package/plugins/pbr/commands/new-milestone.md +8 -0
  183. package/plugins/pbr/commands/new-project.md +6 -0
  184. package/plugins/pbr/commands/pause-work.md +5 -0
  185. package/plugins/pbr/commands/plan-milestone-gaps.md +7 -0
  186. package/plugins/pbr/commands/plan-phase.md +6 -0
  187. package/plugins/pbr/commands/plant-seed.md +6 -0
  188. package/plugins/pbr/commands/profile-user.md +5 -0
  189. package/plugins/pbr/commands/profile.md +5 -0
  190. package/plugins/pbr/commands/progress.md +6 -0
  191. package/plugins/pbr/commands/quick.md +1 -1
  192. package/plugins/pbr/commands/reapply-patches.md +47 -0
  193. package/plugins/pbr/commands/release.md +6 -0
  194. package/plugins/pbr/commands/remove-phase.md +66 -0
  195. package/plugins/pbr/commands/research-phase.md +59 -0
  196. package/plugins/pbr/commands/resume-work.md +5 -0
  197. package/plugins/pbr/commands/seed.md +6 -0
  198. package/plugins/pbr/commands/session-report.md +5 -0
  199. package/plugins/pbr/commands/set-profile.md +6 -0
  200. package/plugins/pbr/commands/settings.md +5 -0
  201. package/plugins/pbr/commands/setup.md +1 -1
  202. package/plugins/pbr/commands/ship.md +5 -0
  203. package/plugins/pbr/commands/stats.md +6 -0
  204. package/plugins/pbr/commands/test.md +5 -0
  205. package/plugins/pbr/commands/thread.md +6 -0
  206. package/plugins/pbr/commands/todo.md +1 -1
  207. package/plugins/pbr/commands/ui-phase.md +5 -0
  208. package/plugins/pbr/commands/ui-review.md +5 -0
  209. package/plugins/pbr/commands/undo.md +5 -0
  210. package/plugins/pbr/commands/update.md +37 -0
  211. package/plugins/pbr/commands/validate-phase.md +5 -0
  212. package/plugins/pbr/commands/verify-work.md +6 -0
  213. package/plugins/pbr/dashboard/package-lock.json +6 -0
  214. package/plugins/pbr/dist/architecture-guard.js +59 -0
  215. package/plugins/pbr/dist/audit-dimensions.js +556 -0
  216. package/plugins/pbr/dist/auto-continue.js +277 -0
  217. package/plugins/pbr/dist/block-skill-self-read.js +124 -0
  218. package/plugins/pbr/dist/check-agent-state-write.js +63 -0
  219. package/plugins/pbr/dist/check-config-change.js +155 -0
  220. package/plugins/pbr/dist/check-cross-plugin-sync.js +93 -0
  221. package/plugins/pbr/dist/check-dangerous-commands.js +193 -0
  222. package/plugins/pbr/dist/check-direct-state-write.js +37 -0
  223. package/plugins/pbr/dist/check-doc-sprawl.js +102 -0
  224. package/plugins/pbr/dist/check-phase-boundary.js +191 -0
  225. package/plugins/pbr/dist/check-plan-format.js +209 -0
  226. package/plugins/pbr/dist/check-read-first.js +345 -0
  227. package/plugins/pbr/dist/check-roadmap-sync.js +507 -0
  228. package/plugins/pbr/dist/check-skill-workflow.js +354 -0
  229. package/plugins/pbr/dist/check-state-sync.js +658 -0
  230. package/plugins/pbr/dist/check-subagent-output.js +396 -0
  231. package/plugins/pbr/dist/check-summary-gate.js +188 -0
  232. package/plugins/pbr/dist/context-bridge.js +425 -0
  233. package/plugins/pbr/dist/context-budget-check.js +442 -0
  234. package/plugins/pbr/dist/context-quality.js +271 -0
  235. package/plugins/pbr/dist/enforce-context-budget.js +138 -0
  236. package/plugins/pbr/dist/enforce-pbr-workflow.js +277 -0
  237. package/plugins/pbr/dist/event-handler.js +202 -0
  238. package/plugins/pbr/dist/event-logger.js +125 -0
  239. package/plugins/pbr/dist/feedback-loop.js +155 -0
  240. package/plugins/pbr/dist/graph-update.js +422 -0
  241. package/plugins/pbr/dist/hook-logger.js +114 -0
  242. package/plugins/pbr/dist/hook-server-client.js +361 -0
  243. package/plugins/pbr/dist/hook-server.js +658 -0
  244. package/plugins/pbr/dist/hooks-schema.json +87 -0
  245. package/plugins/pbr/dist/instructions-loaded.js +173 -0
  246. package/plugins/pbr/dist/intercept-plan-mode.js +81 -0
  247. package/plugins/pbr/dist/log-notification.js +131 -0
  248. package/plugins/pbr/dist/log-subagent.js +349 -0
  249. package/plugins/pbr/dist/log-tool-failure.js +140 -0
  250. package/plugins/pbr/dist/milestone-learnings.js +519 -0
  251. package/plugins/pbr/dist/pbr-tools.js +1961 -0
  252. package/plugins/pbr/dist/post-bash-triage.js +96 -0
  253. package/plugins/pbr/dist/post-compact.js +135 -0
  254. package/plugins/pbr/dist/post-hoc.js +237 -0
  255. package/plugins/pbr/dist/post-write-dispatch.js +243 -0
  256. package/plugins/pbr/dist/post-write-quality.js +208 -0
  257. package/plugins/pbr/dist/pre-bash-dispatch.js +212 -0
  258. package/plugins/pbr/dist/pre-skill-dispatch.js +114 -0
  259. package/plugins/pbr/dist/pre-task-dispatch.js +269 -0
  260. package/plugins/pbr/dist/pre-write-dispatch.js +234 -0
  261. package/plugins/pbr/dist/progress-tracker.js +173 -0
  262. package/plugins/pbr/dist/prompt-guard.js +114 -0
  263. package/plugins/pbr/dist/prompt-routing.js +209 -0
  264. package/plugins/pbr/dist/quick-status.js +179 -0
  265. package/plugins/pbr/dist/record-incident.js +37 -0
  266. package/plugins/pbr/dist/run-hook.js +144 -0
  267. package/plugins/pbr/dist/session-cleanup.js +653 -0
  268. package/plugins/pbr/dist/session-tracker.js +124 -0
  269. package/plugins/pbr/dist/status-line.js +849 -0
  270. package/plugins/pbr/dist/suggest-compact.js +307 -0
  271. package/plugins/pbr/dist/sync-context-to-claude.js +100 -0
  272. package/plugins/pbr/dist/task-completed.js +206 -0
  273. package/plugins/pbr/dist/track-context-budget.js +432 -0
  274. package/plugins/pbr/dist/track-user-gates.js +88 -0
  275. package/plugins/pbr/dist/trust-tracker.js +193 -0
  276. package/plugins/pbr/dist/validate-commit.js +215 -0
  277. package/plugins/pbr/dist/validate-skill-args.js +222 -0
  278. package/plugins/pbr/dist/validate-task.js +271 -0
  279. package/plugins/pbr/dist/worktree-create.js +144 -0
  280. package/plugins/pbr/dist/worktree-remove.js +147 -0
  281. package/plugins/pbr/hooks/hooks.json +143 -60
  282. package/plugins/pbr/references/agent-contracts.md +39 -8
  283. package/plugins/pbr/references/agent-teams.md +3 -3
  284. package/plugins/pbr/references/archive/checkpoints.md +189 -0
  285. package/plugins/pbr/references/archive/context-quality-tiers.md +45 -0
  286. package/plugins/pbr/references/archive/hook-ordering.md +89 -0
  287. package/plugins/pbr/references/archive/limitations.md +106 -0
  288. package/plugins/pbr/references/archive/pbr-rules.md +194 -0
  289. package/plugins/pbr/references/archive/pbr-tools-cli.md +415 -0
  290. package/plugins/pbr/references/archive/pretooluse-jsonl-behavior.md +58 -0
  291. package/plugins/pbr/references/archive/signal-files.md +41 -0
  292. package/plugins/pbr/references/archive/tmux-setup.md +288 -0
  293. package/plugins/pbr/references/archive/verification-matrix.md +34 -0
  294. package/plugins/pbr/references/archive/verification-patterns.md +277 -0
  295. package/plugins/pbr/references/archive/worktree-sparse-checkout.md +86 -0
  296. package/plugins/pbr/references/checkpoints.md +723 -104
  297. package/plugins/pbr/references/config-reference.md +376 -10
  298. package/plugins/pbr/references/continuation-format.md +1 -0
  299. package/plugins/pbr/references/decimal-phase-calculation.md +65 -0
  300. package/plugins/pbr/references/deviation-rules.md +12 -0
  301. package/plugins/pbr/references/git-integration.md +110 -27
  302. package/plugins/pbr/references/git-planning-commit.md +35 -0
  303. package/plugins/pbr/references/model-profile-resolution.md +34 -0
  304. package/plugins/pbr/references/model-profiles.md +90 -7
  305. package/plugins/pbr/references/model-selection.md +1 -1
  306. package/plugins/pbr/references/node-repair.md +48 -0
  307. package/plugins/pbr/references/plan-authoring.md +65 -0
  308. package/plugins/pbr/references/plan-format.md +161 -10
  309. package/plugins/pbr/references/questioning.md +138 -49
  310. package/plugins/pbr/references/reading-verification.md +4 -4
  311. package/plugins/pbr/references/tdd.md +263 -0
  312. package/plugins/pbr/references/ui-brand.md +449 -0
  313. package/plugins/pbr/references/verification-overrides.md +39 -0
  314. package/plugins/pbr/references/verification-patterns.md +529 -113
  315. package/plugins/pbr/scripts/architecture-guard.js +59 -0
  316. package/plugins/pbr/scripts/audit-checks/behavioral-compliance.js +2098 -0
  317. package/plugins/pbr/scripts/audit-checks/error-analysis.js +989 -0
  318. package/plugins/pbr/scripts/audit-checks/feature-verification.js +723 -0
  319. package/plugins/pbr/scripts/audit-checks/index.js +433 -0
  320. package/plugins/pbr/scripts/audit-checks/infrastructure.js +816 -0
  321. package/plugins/pbr/scripts/audit-checks/quality-metrics.js +452 -0
  322. package/plugins/pbr/scripts/audit-checks/session-quality.js +980 -0
  323. package/plugins/pbr/scripts/audit-checks/si-agent-hook-config-checks.js +396 -0
  324. package/plugins/pbr/scripts/audit-checks/si-cross-cutting-checks.js +272 -0
  325. package/plugins/pbr/scripts/audit-checks/si-skill-checks.js +424 -0
  326. package/plugins/pbr/scripts/audit-checks/workflow-compliance.js +1175 -0
  327. package/plugins/pbr/scripts/audit-dimensions.js +556 -0
  328. package/plugins/pbr/scripts/auto-continue.js +192 -31
  329. package/plugins/pbr/scripts/block-skill-self-read.js +124 -0
  330. package/plugins/pbr/scripts/check-agent-state-write.js +63 -0
  331. package/plugins/pbr/scripts/check-config-change.js +155 -0
  332. package/plugins/pbr/scripts/check-cross-plugin-sync.js +93 -0
  333. package/plugins/pbr/scripts/check-dangerous-commands.js +18 -5
  334. package/plugins/pbr/scripts/check-direct-state-write.js +37 -0
  335. package/plugins/pbr/scripts/check-phase-boundary.js +3 -8
  336. package/plugins/pbr/scripts/check-plan-format.js +135 -278
  337. package/plugins/pbr/scripts/check-read-first.js +345 -0
  338. package/plugins/pbr/scripts/check-roadmap-sync.js +182 -21
  339. package/plugins/pbr/scripts/check-skill-workflow.js +24 -27
  340. package/plugins/pbr/scripts/check-state-sync.js +339 -215
  341. package/plugins/pbr/scripts/check-subagent-output.js +281 -275
  342. package/plugins/pbr/scripts/check-summary-gate.js +5 -15
  343. package/plugins/pbr/scripts/config-schema.json +1134 -95
  344. package/plugins/pbr/scripts/context-bridge.js +425 -0
  345. package/plugins/pbr/scripts/context-budget-check.js +169 -14
  346. package/plugins/pbr/scripts/context-quality.js +271 -0
  347. package/plugins/pbr/scripts/enforce-context-budget.js +138 -0
  348. package/plugins/pbr/scripts/enforce-pbr-workflow.js +277 -0
  349. package/plugins/pbr/scripts/event-handler.js +127 -87
  350. package/plugins/pbr/scripts/event-logger.js +58 -25
  351. package/plugins/pbr/scripts/feedback-loop.js +155 -0
  352. package/plugins/pbr/scripts/graph-update.js +422 -0
  353. package/plugins/pbr/scripts/hook-logger.js +69 -35
  354. package/plugins/pbr/scripts/hook-server-client.js +361 -0
  355. package/plugins/pbr/scripts/hook-server.js +658 -0
  356. package/plugins/pbr/scripts/hooks-schema.json +13 -5
  357. package/plugins/pbr/scripts/instructions-loaded.js +173 -0
  358. package/plugins/pbr/scripts/intent-router.cjs +147 -0
  359. package/plugins/pbr/scripts/intercept-plan-mode.js +52 -18
  360. package/plugins/pbr/scripts/lib/alternatives.js +203 -0
  361. package/plugins/pbr/scripts/lib/audit.js +65 -0
  362. package/plugins/pbr/scripts/lib/auto-cleanup.js +221 -0
  363. package/plugins/pbr/scripts/lib/auto-verify.js +103 -0
  364. package/plugins/pbr/scripts/lib/build.js +719 -0
  365. package/plugins/pbr/scripts/lib/ci-fix-loop.js +228 -0
  366. package/plugins/pbr/scripts/lib/commands.js +483 -0
  367. package/plugins/pbr/scripts/lib/compound.js +216 -0
  368. package/plugins/pbr/scripts/lib/config.js +1308 -0
  369. package/plugins/pbr/scripts/lib/context.js +254 -0
  370. package/plugins/pbr/scripts/lib/contextual-help.js +183 -0
  371. package/plugins/pbr/scripts/lib/convention-detector.js +413 -0
  372. package/plugins/pbr/scripts/lib/core.js +1569 -0
  373. package/plugins/pbr/scripts/lib/dashboard-launch.js +364 -0
  374. package/plugins/pbr/scripts/lib/data-hygiene.js +179 -0
  375. package/plugins/pbr/scripts/lib/decision-extraction.js +183 -0
  376. package/plugins/pbr/scripts/lib/decisions.js +194 -0
  377. package/plugins/pbr/scripts/lib/dependency-break.js +147 -0
  378. package/plugins/pbr/scripts/lib/format-validators.js +1025 -0
  379. package/plugins/pbr/scripts/lib/frontmatter.js +302 -0
  380. package/plugins/pbr/scripts/lib/gates/advisories.js +129 -0
  381. package/plugins/pbr/scripts/lib/gates/build-dependency.js +115 -0
  382. package/plugins/pbr/scripts/lib/gates/build-executor.js +104 -0
  383. package/plugins/pbr/scripts/lib/gates/doc-existence.js +46 -0
  384. package/plugins/pbr/scripts/lib/gates/helpers.js +93 -0
  385. package/plugins/pbr/scripts/lib/gates/inline-execution.js +185 -0
  386. package/plugins/pbr/scripts/lib/gates/milestone-complete.js +136 -0
  387. package/plugins/pbr/scripts/lib/gates/milestone-summary.js +119 -0
  388. package/plugins/pbr/scripts/lib/gates/multi-phase-loader.js +147 -0
  389. package/plugins/pbr/scripts/lib/gates/plan-executor.js +36 -0
  390. package/plugins/pbr/scripts/lib/gates/plan-validation.js +114 -0
  391. package/plugins/pbr/scripts/lib/gates/quick-executor.js +76 -0
  392. package/plugins/pbr/scripts/lib/gates/review-planner.js +61 -0
  393. package/plugins/pbr/scripts/lib/gates/review-verifier.js +69 -0
  394. package/plugins/pbr/scripts/lib/gates/rich-agent-context.js +137 -0
  395. package/plugins/pbr/scripts/lib/gates/user-confirmation.js +93 -0
  396. package/plugins/pbr/scripts/lib/graph-cli.js +89 -0
  397. package/plugins/pbr/scripts/lib/graph.js +553 -0
  398. package/plugins/pbr/scripts/lib/health-checks.js +107 -0
  399. package/plugins/pbr/scripts/lib/health-phase06.js +120 -0
  400. package/plugins/pbr/scripts/lib/health.js +132 -0
  401. package/plugins/pbr/scripts/lib/help.js +100 -0
  402. package/plugins/pbr/scripts/lib/history.js +150 -0
  403. package/plugins/pbr/scripts/lib/impact-analysis.js +319 -0
  404. package/plugins/pbr/scripts/lib/incidents.js +190 -0
  405. package/plugins/pbr/scripts/lib/init.js +643 -0
  406. package/plugins/pbr/scripts/lib/insights-parser.js +320 -0
  407. package/plugins/pbr/scripts/lib/intel.js +653 -0
  408. package/plugins/pbr/scripts/lib/learnings.js +511 -0
  409. package/plugins/pbr/scripts/lib/migrate.js +298 -0
  410. package/plugins/pbr/scripts/lib/milestone.js +306 -0
  411. package/plugins/pbr/scripts/lib/negative-knowledge.js +194 -0
  412. package/plugins/pbr/scripts/lib/notification-throttle.js +141 -0
  413. package/plugins/pbr/scripts/lib/onboarding-generator.js +288 -0
  414. package/plugins/pbr/scripts/lib/parse-args.js +134 -0
  415. package/plugins/pbr/scripts/lib/pattern-routing.js +55 -0
  416. package/plugins/pbr/scripts/lib/patterns.js +272 -0
  417. package/plugins/pbr/scripts/lib/perf.js +190 -0
  418. package/plugins/pbr/scripts/lib/phase.js +1025 -0
  419. package/plugins/pbr/scripts/lib/pid-lock.js +154 -0
  420. package/plugins/pbr/scripts/lib/post-hoc.js +160 -0
  421. package/plugins/pbr/scripts/lib/pre-commit-checks.js +220 -0
  422. package/plugins/pbr/scripts/lib/pre-research.js +126 -0
  423. package/plugins/pbr/scripts/lib/preview.js +174 -0
  424. package/plugins/pbr/scripts/lib/progress-visualization.js +296 -0
  425. package/plugins/pbr/scripts/lib/quick-init.js +131 -0
  426. package/plugins/pbr/scripts/lib/reference.js +236 -0
  427. package/plugins/pbr/scripts/lib/requirements.js +153 -0
  428. package/plugins/pbr/scripts/lib/resolve-root.js +66 -0
  429. package/plugins/pbr/scripts/lib/reverse-spec.js +259 -0
  430. package/plugins/pbr/scripts/lib/roadmap.js +1089 -0
  431. package/plugins/pbr/scripts/lib/security-scan.js +200 -0
  432. package/plugins/pbr/scripts/lib/session-briefing.js +895 -0
  433. package/plugins/pbr/scripts/lib/skill-section.js +99 -0
  434. package/plugins/pbr/scripts/lib/smart-next-task.js +198 -0
  435. package/plugins/pbr/scripts/lib/snapshot-manager.js +232 -0
  436. package/plugins/pbr/scripts/lib/spec-diff.js +209 -0
  437. package/plugins/pbr/scripts/lib/spec-engine.js +189 -0
  438. package/plugins/pbr/scripts/lib/spot-check.js +539 -0
  439. package/plugins/pbr/scripts/lib/state-queue.js +171 -0
  440. package/plugins/pbr/scripts/lib/state.js +1082 -0
  441. package/plugins/pbr/scripts/lib/status-render.js +511 -0
  442. package/plugins/pbr/scripts/lib/step-verify.js +149 -0
  443. package/plugins/pbr/scripts/lib/subagent-validators.js +1059 -0
  444. package/plugins/pbr/scripts/lib/suggest-next.js +435 -0
  445. package/plugins/pbr/scripts/lib/tech-debt-scanner.js +116 -0
  446. package/plugins/pbr/scripts/lib/templates.js +362 -0
  447. package/plugins/pbr/scripts/lib/test-selection.js +163 -0
  448. package/plugins/pbr/scripts/lib/todo.js +300 -0
  449. package/plugins/pbr/scripts/lib/verify.js +1483 -0
  450. package/plugins/pbr/scripts/log-notification.js +131 -0
  451. package/plugins/pbr/scripts/log-subagent.js +203 -18
  452. package/plugins/pbr/scripts/log-tool-failure.js +60 -8
  453. package/plugins/pbr/scripts/milestone-learnings.js +519 -0
  454. package/plugins/pbr/scripts/package.json +1 -1
  455. package/plugins/pbr/scripts/pbr-tools.js +1754 -1171
  456. package/plugins/pbr/scripts/post-bash-triage.js +96 -0
  457. package/plugins/pbr/scripts/post-compact.js +135 -0
  458. package/plugins/pbr/scripts/post-hoc.js +237 -0
  459. package/plugins/pbr/scripts/post-write-dispatch.js +201 -31
  460. package/plugins/pbr/scripts/post-write-quality.js +4 -3
  461. package/plugins/pbr/scripts/pre-bash-dispatch.js +147 -51
  462. package/plugins/pbr/scripts/pre-skill-dispatch.js +114 -0
  463. package/plugins/pbr/scripts/pre-task-dispatch.js +269 -0
  464. package/plugins/pbr/scripts/pre-write-dispatch.js +170 -73
  465. package/plugins/pbr/scripts/progress-tracker.js +122 -310
  466. package/plugins/pbr/scripts/prompt-guard.js +114 -0
  467. package/plugins/pbr/scripts/prompt-routing.js +209 -0
  468. package/plugins/pbr/scripts/quick-status.js +179 -0
  469. package/plugins/pbr/scripts/record-incident.js +37 -0
  470. package/plugins/pbr/scripts/risk-classifier.cjs +123 -0
  471. package/plugins/pbr/scripts/run-hook.js +62 -10
  472. package/plugins/pbr/scripts/session-cleanup.js +428 -29
  473. package/plugins/pbr/scripts/session-tracker.js +124 -0
  474. package/plugins/pbr/scripts/status-line.js +593 -32
  475. package/plugins/pbr/scripts/suggest-compact.js +201 -13
  476. package/plugins/pbr/scripts/sync-context-to-claude.js +100 -0
  477. package/plugins/pbr/scripts/task-completed.js +165 -4
  478. package/plugins/pbr/scripts/test/config.test.js +126 -0
  479. package/plugins/pbr/scripts/test/cross-platform.test.js +131 -0
  480. package/plugins/pbr/scripts/test/fixtures/config.json +20 -0
  481. package/plugins/pbr/scripts/test/fixtures/plan.md +54 -0
  482. package/plugins/pbr/scripts/test/fixtures/project.md +30 -0
  483. package/plugins/pbr/scripts/test/fixtures/roadmap.md +55 -0
  484. package/plugins/pbr/scripts/test/fixtures/state.md +60 -0
  485. package/plugins/pbr/scripts/test/fixtures/summary.md +35 -0
  486. package/plugins/pbr/scripts/test/fixtures.test.js +184 -0
  487. package/plugins/pbr/scripts/test/phase.test.js +142 -0
  488. package/plugins/pbr/scripts/test/roadmap.test.js +96 -0
  489. package/plugins/pbr/scripts/test/state.test.js +155 -0
  490. package/plugins/pbr/scripts/track-context-budget.js +368 -99
  491. package/plugins/pbr/scripts/track-user-gates.js +88 -0
  492. package/plugins/pbr/scripts/trust-tracker.js +193 -0
  493. package/plugins/pbr/scripts/validate-commit.js +41 -26
  494. package/plugins/pbr/scripts/validate-skill-args.js +87 -15
  495. package/plugins/pbr/scripts/validate-task.js +83 -627
  496. package/plugins/pbr/scripts/worktree-create.js +144 -0
  497. package/plugins/pbr/scripts/worktree-remove.js +147 -0
  498. package/plugins/pbr/skills/audit/SKILL.md +195 -24
  499. package/plugins/pbr/skills/audit-fix/SKILL.md +326 -0
  500. package/plugins/pbr/skills/autonomous/SKILL.md +545 -0
  501. package/plugins/pbr/skills/backlog/SKILL.md +56 -0
  502. package/plugins/pbr/skills/begin/SKILL.md +508 -153
  503. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +1 -2
  504. package/plugins/pbr/skills/begin/templates/config.json.tmpl +411 -36
  505. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +28 -0
  506. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +28 -3
  507. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +33 -5
  508. package/plugins/pbr/skills/build/SKILL.md +1040 -354
  509. package/plugins/pbr/skills/build/templates/continuation-prompt.md.tmpl +26 -0
  510. package/plugins/pbr/skills/build/templates/executor-prompt.md.tmpl +77 -0
  511. package/plugins/pbr/skills/build/templates/inline-verifier-prompt.md.tmpl +33 -0
  512. package/plugins/pbr/skills/config/SKILL.md +112 -9
  513. package/plugins/pbr/skills/continue/SKILL.md +113 -33
  514. package/plugins/pbr/skills/dashboard/SKILL.md +21 -9
  515. package/plugins/pbr/skills/debug/SKILL.md +70 -12
  516. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +12 -1
  517. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +12 -5
  518. package/plugins/pbr/skills/discuss/SKILL.md +206 -25
  519. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +21 -1
  520. package/plugins/pbr/skills/do/SKILL.md +119 -24
  521. package/plugins/pbr/skills/explore/SKILL.md +95 -20
  522. package/plugins/pbr/skills/fast/SKILL.md +94 -0
  523. package/plugins/pbr/skills/forensics/SKILL.md +144 -0
  524. package/plugins/pbr/skills/health/SKILL.md +35 -117
  525. package/plugins/pbr/skills/help/SKILL.md +84 -101
  526. package/plugins/pbr/skills/import/SKILL.md +332 -13
  527. package/plugins/pbr/skills/intel/SKILL.md +131 -0
  528. package/plugins/pbr/skills/list-phase-assumptions/SKILL.md +231 -0
  529. package/plugins/pbr/skills/milestone/SKILL.md +421 -263
  530. package/plugins/pbr/skills/milestone/templates/audit-output.md.tmpl +76 -0
  531. package/plugins/pbr/skills/milestone/templates/complete-output.md.tmpl +32 -0
  532. package/plugins/pbr/skills/milestone/templates/edge-cases.md +54 -0
  533. package/plugins/pbr/skills/milestone/templates/gaps-output.md.tmpl +25 -0
  534. package/plugins/pbr/skills/milestone/templates/integration-checker-prompt.md.tmpl +25 -0
  535. package/plugins/pbr/skills/milestone/templates/new-output.md.tmpl +29 -0
  536. package/plugins/pbr/skills/milestone-summary/SKILL.md +86 -0
  537. package/plugins/pbr/skills/note/SKILL.md +20 -4
  538. package/plugins/pbr/skills/pause/SKILL.md +54 -14
  539. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +33 -52
  540. package/plugins/pbr/skills/plan/SKILL.md +526 -280
  541. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +5 -2
  542. package/plugins/pbr/skills/plan/templates/completion-output.md.tmpl +27 -0
  543. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +27 -1
  544. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +21 -5
  545. package/plugins/pbr/skills/profile/SKILL.md +185 -0
  546. package/plugins/pbr/skills/profile-user/SKILL.md +227 -0
  547. package/plugins/pbr/skills/quick/SKILL.md +435 -100
  548. package/plugins/pbr/skills/release/SKILL.md +206 -0
  549. package/plugins/pbr/skills/resume/SKILL.md +170 -46
  550. package/plugins/pbr/skills/review/SKILL.md +217 -164
  551. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +7 -0
  552. package/plugins/pbr/skills/scan/SKILL.md +152 -106
  553. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +5 -56
  554. package/plugins/pbr/skills/seed/SKILL.md +87 -0
  555. package/plugins/pbr/skills/session-report/SKILL.md +130 -0
  556. package/plugins/pbr/skills/setup/SKILL.md +150 -202
  557. package/plugins/pbr/skills/shared/agent-context-enrichment.md +21 -0
  558. package/plugins/pbr/skills/shared/agent-type-resolution.md +32 -0
  559. package/plugins/pbr/skills/shared/commit-planning-docs.md +8 -0
  560. package/plugins/pbr/skills/shared/context-budget.md +66 -1
  561. package/plugins/pbr/skills/shared/context-loader-task.md +18 -11
  562. package/plugins/pbr/skills/shared/digest-select.md +2 -2
  563. package/plugins/pbr/skills/shared/domain-probes.md +1 -1
  564. package/plugins/pbr/skills/shared/error-reporting.md +38 -60
  565. package/plugins/pbr/skills/shared/gate-prompts.md +4 -2
  566. package/plugins/pbr/skills/shared/memory-capture.md +48 -0
  567. package/plugins/pbr/skills/shared/phase-argument-parsing.md +4 -4
  568. package/plugins/pbr/skills/shared/revision-loop.md +24 -6
  569. package/plugins/pbr/skills/shared/state-update.md +49 -56
  570. package/plugins/pbr/skills/shared/universal-anti-patterns.md +27 -4
  571. package/plugins/pbr/skills/ship/SKILL.md +155 -0
  572. package/plugins/pbr/skills/stats/SKILL.md +80 -0
  573. package/plugins/pbr/skills/status/SKILL.md +185 -119
  574. package/plugins/pbr/skills/test/SKILL.md +254 -0
  575. package/plugins/pbr/skills/thread/SKILL.md +73 -0
  576. package/plugins/pbr/skills/todo/SKILL.md +28 -72
  577. package/plugins/pbr/skills/ui-phase/SKILL.md +180 -0
  578. package/plugins/pbr/skills/ui-review/SKILL.md +206 -0
  579. package/plugins/pbr/skills/undo/SKILL.md +221 -0
  580. package/plugins/pbr/skills/validate-phase/SKILL.md +362 -0
  581. package/plugins/pbr/templates/CONTEXT.md.tmpl +45 -20
  582. package/plugins/pbr/templates/DISCOVERY.md.tmpl +29 -0
  583. package/plugins/pbr/templates/DISCUSSION-LOG.md.tmpl +49 -0
  584. package/plugins/pbr/templates/HANDOFF.json.tmpl +30 -0
  585. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +18 -2
  586. package/plugins/pbr/templates/MILESTONE-AUDIT.md.tmpl +44 -0
  587. package/plugins/pbr/templates/PROJECT.md.tmpl +126 -0
  588. package/plugins/pbr/templates/REQUIREMENTS.md.tmpl +96 -0
  589. package/plugins/pbr/templates/RETROSPECTIVE.md.tmpl +43 -0
  590. package/plugins/pbr/templates/ROADMAP.md.tmpl +108 -14
  591. package/plugins/pbr/templates/SUMMARY-complex.md.tmpl +133 -0
  592. package/plugins/pbr/templates/SUMMARY-minimal.md.tmpl +55 -0
  593. package/plugins/pbr/templates/SUMMARY.md.tmpl +21 -0
  594. package/plugins/pbr/templates/UAT.md.tmpl +94 -0
  595. package/plugins/pbr/templates/UI-SPEC.md.tmpl +144 -0
  596. package/plugins/pbr/templates/VALIDATION.md.tmpl +94 -0
  597. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +49 -13
  598. package/plugins/pbr/templates/project-CONTEXT.md.tmpl +59 -0
  599. package/plugins/pbr/templates/research-outputs/ARCHITECTURE.md.tmpl +91 -0
  600. package/plugins/pbr/templates/research-outputs/FEATURES.md.tmpl +64 -0
  601. package/plugins/pbr/templates/research-outputs/PITFALLS.md.tmpl +50 -0
  602. package/plugins/pbr/templates/research-outputs/STACK.md.tmpl +63 -0
  603. package/plugins/pbr/templates/research-outputs/SUMMARY.md.tmpl +98 -0
  604. package/scripts/build-hooks.js +61 -0
  605. package/scripts/check-ci.js +100 -0
  606. package/scripts/clean-changelog.js +364 -0
  607. package/scripts/generate-derivatives.js +581 -0
  608. package/scripts/posttest.js +93 -0
  609. package/scripts/release.js +262 -0
  610. package/scripts/run-tests.cjs +29 -0
  611. package/scripts/test-wrapper.js +43 -0
  612. package/dashboard/bin/cli.js +0 -25
  613. package/dashboard/public/css/layout.css +0 -704
  614. package/dashboard/public/css/status-colors.css +0 -98
  615. package/dashboard/public/css/tokens.css +0 -59
  616. package/dashboard/public/js/htmx-title.js +0 -5
  617. package/dashboard/public/js/sidebar-toggle.js +0 -34
  618. package/dashboard/public/js/sse-client.js +0 -100
  619. package/dashboard/public/js/theme-toggle.js +0 -46
  620. package/dashboard/src/app.js +0 -91
  621. package/dashboard/src/middleware/current-phase.js +0 -24
  622. package/dashboard/src/middleware/errorHandler.js +0 -52
  623. package/dashboard/src/middleware/notFoundHandler.js +0 -9
  624. package/dashboard/src/repositories/planning.repository.js +0 -130
  625. package/dashboard/src/routes/events.routes.js +0 -45
  626. package/dashboard/src/routes/index.routes.js +0 -35
  627. package/dashboard/src/routes/pages.routes.js +0 -426
  628. package/dashboard/src/server.js +0 -42
  629. package/dashboard/src/services/analytics.service.js +0 -141
  630. package/dashboard/src/services/dashboard.service.js +0 -309
  631. package/dashboard/src/services/milestone.service.js +0 -222
  632. package/dashboard/src/services/notes.service.js +0 -50
  633. package/dashboard/src/services/phase.service.js +0 -232
  634. package/dashboard/src/services/project.service.js +0 -57
  635. package/dashboard/src/services/roadmap.service.js +0 -258
  636. package/dashboard/src/services/sse.service.js +0 -58
  637. package/dashboard/src/services/todo.service.js +0 -272
  638. package/dashboard/src/services/watcher.service.js +0 -48
  639. package/dashboard/src/utils/cache.js +0 -55
  640. package/dashboard/src/views/analytics.ejs +0 -5
  641. package/dashboard/src/views/coming-soon.ejs +0 -11
  642. package/dashboard/src/views/dependencies.ejs +0 -5
  643. package/dashboard/src/views/error.ejs +0 -20
  644. package/dashboard/src/views/index.ejs +0 -5
  645. package/dashboard/src/views/milestone-detail.ejs +0 -5
  646. package/dashboard/src/views/milestones.ejs +0 -5
  647. package/dashboard/src/views/notes.ejs +0 -5
  648. package/dashboard/src/views/partials/analytics-content.ejs +0 -90
  649. package/dashboard/src/views/partials/breadcrumbs.ejs +0 -14
  650. package/dashboard/src/views/partials/dashboard-content.ejs +0 -84
  651. package/dashboard/src/views/partials/dependencies-content.ejs +0 -48
  652. package/dashboard/src/views/partials/empty-state.ejs +0 -7
  653. package/dashboard/src/views/partials/footer.ejs +0 -3
  654. package/dashboard/src/views/partials/head.ejs +0 -30
  655. package/dashboard/src/views/partials/header.ejs +0 -21
  656. package/dashboard/src/views/partials/layout-bottom.ejs +0 -43
  657. package/dashboard/src/views/partials/layout-top.ejs +0 -16
  658. package/dashboard/src/views/partials/milestone-detail-content.ejs +0 -20
  659. package/dashboard/src/views/partials/milestones-content.ejs +0 -88
  660. package/dashboard/src/views/partials/notes-content.ejs +0 -23
  661. package/dashboard/src/views/partials/phase-content.ejs +0 -193
  662. package/dashboard/src/views/partials/phase-doc-content.ejs +0 -38
  663. package/dashboard/src/views/partials/phases-content.ejs +0 -124
  664. package/dashboard/src/views/partials/roadmap-content.ejs +0 -180
  665. package/dashboard/src/views/partials/sidebar.ejs +0 -99
  666. package/dashboard/src/views/partials/todo-create-content.ejs +0 -54
  667. package/dashboard/src/views/partials/todo-detail-content.ejs +0 -42
  668. package/dashboard/src/views/partials/todos-content.ejs +0 -97
  669. package/dashboard/src/views/phase-detail.ejs +0 -5
  670. package/dashboard/src/views/phase-doc.ejs +0 -5
  671. package/dashboard/src/views/phases.ejs +0 -5
  672. package/dashboard/src/views/roadmap.ejs +0 -5
  673. package/dashboard/src/views/todo-create.ejs +0 -5
  674. package/dashboard/src/views/todo-detail.ejs +0 -5
  675. package/dashboard/src/views/todos.ejs +0 -5
  676. package/plugins/copilot-pbr/CHANGELOG.md +0 -19
  677. package/plugins/copilot-pbr/README.md +0 -139
  678. package/plugins/copilot-pbr/agents/audit.agent.md +0 -113
  679. package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +0 -151
  680. package/plugins/copilot-pbr/agents/debugger.agent.md +0 -182
  681. package/plugins/copilot-pbr/agents/executor.agent.md +0 -267
  682. package/plugins/copilot-pbr/agents/general.agent.md +0 -88
  683. package/plugins/copilot-pbr/agents/integration-checker.agent.md +0 -119
  684. package/plugins/copilot-pbr/agents/plan-checker.agent.md +0 -208
  685. package/plugins/copilot-pbr/agents/planner.agent.md +0 -238
  686. package/plugins/copilot-pbr/agents/researcher.agent.md +0 -186
  687. package/plugins/copilot-pbr/agents/synthesizer.agent.md +0 -126
  688. package/plugins/copilot-pbr/agents/verifier.agent.md +0 -228
  689. package/plugins/copilot-pbr/hooks/hooks.json +0 -156
  690. package/plugins/copilot-pbr/plugin.json +0 -30
  691. package/plugins/copilot-pbr/references/agent-anti-patterns.md +0 -25
  692. package/plugins/copilot-pbr/references/agent-contracts.md +0 -297
  693. package/plugins/copilot-pbr/references/agent-interactions.md +0 -135
  694. package/plugins/copilot-pbr/references/agent-teams.md +0 -55
  695. package/plugins/copilot-pbr/references/checkpoints.md +0 -158
  696. package/plugins/copilot-pbr/references/common-bug-patterns.md +0 -14
  697. package/plugins/copilot-pbr/references/config-reference.md +0 -442
  698. package/plugins/copilot-pbr/references/continuation-format.md +0 -213
  699. package/plugins/copilot-pbr/references/deviation-rules.md +0 -113
  700. package/plugins/copilot-pbr/references/git-integration.md +0 -227
  701. package/plugins/copilot-pbr/references/integration-patterns.md +0 -118
  702. package/plugins/copilot-pbr/references/model-profiles.md +0 -100
  703. package/plugins/copilot-pbr/references/model-selection.md +0 -32
  704. package/plugins/copilot-pbr/references/pbr-rules.md +0 -195
  705. package/plugins/copilot-pbr/references/pbr-tools-cli.md +0 -285
  706. package/plugins/copilot-pbr/references/plan-authoring.md +0 -182
  707. package/plugins/copilot-pbr/references/plan-format.md +0 -288
  708. package/plugins/copilot-pbr/references/planning-config.md +0 -214
  709. package/plugins/copilot-pbr/references/questioning.md +0 -215
  710. package/plugins/copilot-pbr/references/reading-verification.md +0 -128
  711. package/plugins/copilot-pbr/references/stub-patterns.md +0 -161
  712. package/plugins/copilot-pbr/references/subagent-coordination.md +0 -120
  713. package/plugins/copilot-pbr/references/ui-formatting.md +0 -444
  714. package/plugins/copilot-pbr/references/verification-patterns.md +0 -199
  715. package/plugins/copilot-pbr/references/wave-execution.md +0 -96
  716. package/plugins/copilot-pbr/rules/pbr-workflow.mdc +0 -48
  717. package/plugins/copilot-pbr/setup.ps1 +0 -93
  718. package/plugins/copilot-pbr/setup.sh +0 -93
  719. package/plugins/copilot-pbr/skills/audit/SKILL.md +0 -330
  720. package/plugins/copilot-pbr/skills/begin/SKILL.md +0 -589
  721. package/plugins/copilot-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  722. package/plugins/copilot-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  723. package/plugins/copilot-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  724. package/plugins/copilot-pbr/skills/begin/templates/config.json.tmpl +0 -64
  725. package/plugins/copilot-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  726. package/plugins/copilot-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  727. package/plugins/copilot-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  728. package/plugins/copilot-pbr/skills/build/SKILL.md +0 -960
  729. package/plugins/copilot-pbr/skills/config/SKILL.md +0 -250
  730. package/plugins/copilot-pbr/skills/continue/SKILL.md +0 -159
  731. package/plugins/copilot-pbr/skills/dashboard/SKILL.md +0 -43
  732. package/plugins/copilot-pbr/skills/debug/SKILL.md +0 -508
  733. package/plugins/copilot-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  734. package/plugins/copilot-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  735. package/plugins/copilot-pbr/skills/discuss/SKILL.md +0 -353
  736. package/plugins/copilot-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  737. package/plugins/copilot-pbr/skills/discuss/templates/decision-categories.md +0 -10
  738. package/plugins/copilot-pbr/skills/do/SKILL.md +0 -66
  739. package/plugins/copilot-pbr/skills/explore/SKILL.md +0 -373
  740. package/plugins/copilot-pbr/skills/health/SKILL.md +0 -283
  741. package/plugins/copilot-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  742. package/plugins/copilot-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  743. package/plugins/copilot-pbr/skills/help/SKILL.md +0 -170
  744. package/plugins/copilot-pbr/skills/import/SKILL.md +0 -502
  745. package/plugins/copilot-pbr/skills/milestone/SKILL.md +0 -745
  746. package/plugins/copilot-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  747. package/plugins/copilot-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  748. package/plugins/copilot-pbr/skills/note/SKILL.md +0 -213
  749. package/plugins/copilot-pbr/skills/pause/SKILL.md +0 -247
  750. package/plugins/copilot-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  751. package/plugins/copilot-pbr/skills/plan/SKILL.md +0 -662
  752. package/plugins/copilot-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  753. package/plugins/copilot-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  754. package/plugins/copilot-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  755. package/plugins/copilot-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  756. package/plugins/copilot-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  757. package/plugins/copilot-pbr/skills/quick/SKILL.md +0 -376
  758. package/plugins/copilot-pbr/skills/resume/SKILL.md +0 -399
  759. package/plugins/copilot-pbr/skills/review/SKILL.md +0 -653
  760. package/plugins/copilot-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  761. package/plugins/copilot-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  762. package/plugins/copilot-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  763. package/plugins/copilot-pbr/skills/scan/SKILL.md +0 -299
  764. package/plugins/copilot-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  765. package/plugins/copilot-pbr/skills/setup/SKILL.md +0 -296
  766. package/plugins/copilot-pbr/skills/shared/commit-planning-docs.md +0 -36
  767. package/plugins/copilot-pbr/skills/shared/config-loading.md +0 -103
  768. package/plugins/copilot-pbr/skills/shared/context-budget.md +0 -41
  769. package/plugins/copilot-pbr/skills/shared/context-loader-task.md +0 -87
  770. package/plugins/copilot-pbr/skills/shared/digest-select.md +0 -80
  771. package/plugins/copilot-pbr/skills/shared/domain-probes.md +0 -126
  772. package/plugins/copilot-pbr/skills/shared/error-reporting.md +0 -81
  773. package/plugins/copilot-pbr/skills/shared/gate-prompts.md +0 -389
  774. package/plugins/copilot-pbr/skills/shared/phase-argument-parsing.md +0 -46
  775. package/plugins/copilot-pbr/skills/shared/progress-display.md +0 -53
  776. package/plugins/copilot-pbr/skills/shared/revision-loop.md +0 -82
  777. package/plugins/copilot-pbr/skills/shared/state-loading.md +0 -63
  778. package/plugins/copilot-pbr/skills/shared/state-update.md +0 -162
  779. package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +0 -38
  780. package/plugins/copilot-pbr/skills/status/SKILL.md +0 -362
  781. package/plugins/copilot-pbr/skills/statusline/SKILL.md +0 -149
  782. package/plugins/copilot-pbr/skills/todo/SKILL.md +0 -279
  783. package/plugins/copilot-pbr/templates/CONTEXT.md.tmpl +0 -53
  784. package/plugins/copilot-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  785. package/plugins/copilot-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  786. package/plugins/copilot-pbr/templates/ROADMAP.md.tmpl +0 -41
  787. package/plugins/copilot-pbr/templates/SUMMARY.md.tmpl +0 -82
  788. package/plugins/copilot-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  789. package/plugins/copilot-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  790. package/plugins/copilot-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  791. package/plugins/copilot-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  792. package/plugins/copilot-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  793. package/plugins/copilot-pbr/templates/codebase/STACK.md.tmpl +0 -78
  794. package/plugins/copilot-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  795. package/plugins/copilot-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  796. package/plugins/copilot-pbr/templates/continue-here.md.tmpl +0 -74
  797. package/plugins/copilot-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  798. package/plugins/copilot-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  799. package/plugins/copilot-pbr/templates/research/STACK.md.tmpl +0 -71
  800. package/plugins/copilot-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  801. package/plugins/copilot-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  802. package/plugins/copilot-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  803. package/plugins/copilot-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  804. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +0 -32
  805. package/plugins/cursor-pbr/CHANGELOG.md +0 -15
  806. package/plugins/cursor-pbr/README.md +0 -123
  807. package/plugins/cursor-pbr/agents/audit.md +0 -178
  808. package/plugins/cursor-pbr/agents/codebase-mapper.md +0 -150
  809. package/plugins/cursor-pbr/agents/debugger.md +0 -181
  810. package/plugins/cursor-pbr/agents/executor.md +0 -266
  811. package/plugins/cursor-pbr/agents/general.md +0 -87
  812. package/plugins/cursor-pbr/agents/integration-checker.md +0 -118
  813. package/plugins/cursor-pbr/agents/plan-checker.md +0 -207
  814. package/plugins/cursor-pbr/agents/planner.md +0 -237
  815. package/plugins/cursor-pbr/agents/researcher.md +0 -185
  816. package/plugins/cursor-pbr/agents/synthesizer.md +0 -125
  817. package/plugins/cursor-pbr/agents/verifier.md +0 -227
  818. package/plugins/cursor-pbr/assets/.gitkeep +0 -0
  819. package/plugins/cursor-pbr/assets/logo.svg +0 -21
  820. package/plugins/cursor-pbr/hooks/hooks.json +0 -213
  821. package/plugins/cursor-pbr/references/agent-anti-patterns.md +0 -25
  822. package/plugins/cursor-pbr/references/agent-contracts.md +0 -297
  823. package/plugins/cursor-pbr/references/agent-interactions.md +0 -135
  824. package/plugins/cursor-pbr/references/agent-teams.md +0 -55
  825. package/plugins/cursor-pbr/references/checkpoints.md +0 -158
  826. package/plugins/cursor-pbr/references/common-bug-patterns.md +0 -14
  827. package/plugins/cursor-pbr/references/config-reference.md +0 -442
  828. package/plugins/cursor-pbr/references/continuation-format.md +0 -213
  829. package/plugins/cursor-pbr/references/deviation-rules.md +0 -113
  830. package/plugins/cursor-pbr/references/git-integration.md +0 -227
  831. package/plugins/cursor-pbr/references/integration-patterns.md +0 -118
  832. package/plugins/cursor-pbr/references/model-profiles.md +0 -100
  833. package/plugins/cursor-pbr/references/model-selection.md +0 -32
  834. package/plugins/cursor-pbr/references/pbr-rules.md +0 -195
  835. package/plugins/cursor-pbr/references/pbr-tools-cli.md +0 -285
  836. package/plugins/cursor-pbr/references/plan-authoring.md +0 -182
  837. package/plugins/cursor-pbr/references/plan-format.md +0 -288
  838. package/plugins/cursor-pbr/references/planning-config.md +0 -214
  839. package/plugins/cursor-pbr/references/questioning.md +0 -215
  840. package/plugins/cursor-pbr/references/reading-verification.md +0 -128
  841. package/plugins/cursor-pbr/references/stub-patterns.md +0 -161
  842. package/plugins/cursor-pbr/references/subagent-coordination.md +0 -120
  843. package/plugins/cursor-pbr/references/ui-formatting.md +0 -444
  844. package/plugins/cursor-pbr/references/verification-patterns.md +0 -199
  845. package/plugins/cursor-pbr/references/wave-execution.md +0 -96
  846. package/plugins/cursor-pbr/rules/pbr-workflow.mdc +0 -48
  847. package/plugins/cursor-pbr/setup.ps1 +0 -78
  848. package/plugins/cursor-pbr/setup.sh +0 -83
  849. package/plugins/cursor-pbr/skills/audit/SKILL.md +0 -331
  850. package/plugins/cursor-pbr/skills/begin/SKILL.md +0 -589
  851. package/plugins/cursor-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  852. package/plugins/cursor-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  853. package/plugins/cursor-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  854. package/plugins/cursor-pbr/skills/begin/templates/config.json.tmpl +0 -64
  855. package/plugins/cursor-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  856. package/plugins/cursor-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  857. package/plugins/cursor-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  858. package/plugins/cursor-pbr/skills/build/SKILL.md +0 -961
  859. package/plugins/cursor-pbr/skills/config/SKILL.md +0 -252
  860. package/plugins/cursor-pbr/skills/continue/SKILL.md +0 -159
  861. package/plugins/cursor-pbr/skills/dashboard/SKILL.md +0 -44
  862. package/plugins/cursor-pbr/skills/debug/SKILL.md +0 -512
  863. package/plugins/cursor-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  864. package/plugins/cursor-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  865. package/plugins/cursor-pbr/skills/discuss/SKILL.md +0 -354
  866. package/plugins/cursor-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  867. package/plugins/cursor-pbr/skills/discuss/templates/decision-categories.md +0 -10
  868. package/plugins/cursor-pbr/skills/do/SKILL.md +0 -67
  869. package/plugins/cursor-pbr/skills/explore/SKILL.md +0 -376
  870. package/plugins/cursor-pbr/skills/health/SKILL.md +0 -283
  871. package/plugins/cursor-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  872. package/plugins/cursor-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  873. package/plugins/cursor-pbr/skills/help/SKILL.md +0 -170
  874. package/plugins/cursor-pbr/skills/import/SKILL.md +0 -505
  875. package/plugins/cursor-pbr/skills/milestone/SKILL.md +0 -746
  876. package/plugins/cursor-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  877. package/plugins/cursor-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  878. package/plugins/cursor-pbr/skills/note/SKILL.md +0 -214
  879. package/plugins/cursor-pbr/skills/pause/SKILL.md +0 -248
  880. package/plugins/cursor-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  881. package/plugins/cursor-pbr/skills/plan/SKILL.md +0 -663
  882. package/plugins/cursor-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  883. package/plugins/cursor-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  884. package/plugins/cursor-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  885. package/plugins/cursor-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  886. package/plugins/cursor-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  887. package/plugins/cursor-pbr/skills/quick/SKILL.md +0 -376
  888. package/plugins/cursor-pbr/skills/resume/SKILL.md +0 -399
  889. package/plugins/cursor-pbr/skills/review/SKILL.md +0 -654
  890. package/plugins/cursor-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  891. package/plugins/cursor-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  892. package/plugins/cursor-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  893. package/plugins/cursor-pbr/skills/scan/SKILL.md +0 -300
  894. package/plugins/cursor-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  895. package/plugins/cursor-pbr/skills/setup/SKILL.md +0 -296
  896. package/plugins/cursor-pbr/skills/shared/commit-planning-docs.md +0 -36
  897. package/plugins/cursor-pbr/skills/shared/config-loading.md +0 -103
  898. package/plugins/cursor-pbr/skills/shared/context-budget.md +0 -41
  899. package/plugins/cursor-pbr/skills/shared/context-loader-task.md +0 -87
  900. package/plugins/cursor-pbr/skills/shared/digest-select.md +0 -80
  901. package/plugins/cursor-pbr/skills/shared/domain-probes.md +0 -126
  902. package/plugins/cursor-pbr/skills/shared/error-reporting.md +0 -81
  903. package/plugins/cursor-pbr/skills/shared/gate-prompts.md +0 -389
  904. package/plugins/cursor-pbr/skills/shared/phase-argument-parsing.md +0 -46
  905. package/plugins/cursor-pbr/skills/shared/progress-display.md +0 -53
  906. package/plugins/cursor-pbr/skills/shared/revision-loop.md +0 -82
  907. package/plugins/cursor-pbr/skills/shared/state-loading.md +0 -63
  908. package/plugins/cursor-pbr/skills/shared/state-update.md +0 -162
  909. package/plugins/cursor-pbr/skills/shared/universal-anti-patterns.md +0 -38
  910. package/plugins/cursor-pbr/skills/status/SKILL.md +0 -362
  911. package/plugins/cursor-pbr/skills/statusline/SKILL.md +0 -150
  912. package/plugins/cursor-pbr/skills/todo/SKILL.md +0 -280
  913. package/plugins/cursor-pbr/templates/CONTEXT.md.tmpl +0 -53
  914. package/plugins/cursor-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  915. package/plugins/cursor-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  916. package/plugins/cursor-pbr/templates/ROADMAP.md.tmpl +0 -41
  917. package/plugins/cursor-pbr/templates/SUMMARY.md.tmpl +0 -82
  918. package/plugins/cursor-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  919. package/plugins/cursor-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  920. package/plugins/cursor-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  921. package/plugins/cursor-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  922. package/plugins/cursor-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  923. package/plugins/cursor-pbr/templates/codebase/STACK.md.tmpl +0 -78
  924. package/plugins/cursor-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  925. package/plugins/cursor-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  926. package/plugins/cursor-pbr/templates/continue-here.md.tmpl +0 -74
  927. package/plugins/cursor-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  928. package/plugins/cursor-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  929. package/plugins/cursor-pbr/templates/research/STACK.md.tmpl +0 -71
  930. package/plugins/cursor-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  931. package/plugins/cursor-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  932. package/plugins/cursor-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  933. package/plugins/cursor-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  934. package/plugins/pbr/references/agent-interactions.md +0 -134
  935. package/plugins/pbr/references/pbr-rules.md +0 -194
  936. package/plugins/pbr/references/pbr-tools-cli.md +0 -285
  937. package/plugins/pbr/references/planning-config.md +0 -213
  938. package/plugins/pbr/references/subagent-coordination.md +0 -119
  939. package/plugins/pbr/references/ui-formatting.md +0 -444
  940. package/plugins/pbr/scripts/validate-plugin-structure.js +0 -183
  941. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +0 -48
  942. package/plugins/pbr/skills/shared/progress-display.md +0 -53
  943. package/plugins/pbr/skills/shared/state-loading.md +0 -62
  944. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -97
  945. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  946. package/plugins/pbr/templates/research/STACK.md.tmpl +0 -71
  947. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +0 -112
  948. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  949. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  950. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  951. /package/plugins/pbr/references/{agent-anti-patterns.md → archive/agent-anti-patterns.md} +0 -0
@@ -0,0 +1,1308 @@
1
+ /**
2
+ * lib/config.cjs — Config operations for Plan-Build-Run tools.
3
+ *
4
+ * Handles loading, caching, validating, and resolving depth profiles
5
+ * for .planning/config.json. Provides user-level defaults support
6
+ * via ~/.pbr/defaults.json.
7
+ */
8
+
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+ const { safeReadFile, atomicWrite, ensureDir, validateObject, lockedFileUpdate } = require('./core');
12
+
13
+ // ─── Cached config loader ─────────────────────────────────────────────────────
14
+
15
+ let _configCache = null;
16
+ let _configMtime = 0;
17
+ let _configPath = null;
18
+
19
+ /**
20
+ * Load config.json with in-process mtime-based caching.
21
+ * Returns the parsed config object, or null if not found / parse error.
22
+ * Cache invalidates when file mtime changes or path differs.
23
+ *
24
+ * @param {string} [planningDir] - Path to .planning directory
25
+ * @returns {object|null} Parsed config or null
26
+ */
27
+ function configLoad(planningDir) {
28
+ const dir = planningDir || path.join(process.env.PBR_PROJECT_ROOT || process.cwd(), '.planning');
29
+ const configPath = path.join(dir, 'config.json');
30
+ try {
31
+ if (!fs.existsSync(configPath)) return null;
32
+ const stat = fs.statSync(configPath);
33
+ const mtime = stat.mtimeMs;
34
+ if (_configCache && mtime === _configMtime && configPath === _configPath) {
35
+ return _configCache;
36
+ }
37
+ _configCache = JSON.parse(fs.readFileSync(configPath, 'utf8'));
38
+ _configMtime = mtime;
39
+ _configPath = configPath;
40
+ return _configCache;
41
+ } catch (_e) {
42
+ return null;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Clear the configLoad() in-process cache.
48
+ * Useful in tests where multiple temp directories are used.
49
+ */
50
+ function configClearCache() {
51
+ _configCache = null;
52
+ _configMtime = 0;
53
+ _configPath = null;
54
+ }
55
+
56
+ // ─── Config validation ────────────────────────────────────────────────────────
57
+
58
+ /**
59
+ * Validate config.json against schema. Accepts a preloaded config object
60
+ * or reads from the default planningDir.
61
+ *
62
+ * @param {object|string} configOrDir - Pre-parsed config object or planningDir path
63
+ * @param {string} [planningDir] - Path to .planning directory (used when first arg is config)
64
+ * @returns {{ valid: boolean, errors: string[], warnings: string[] }}
65
+ */
66
+ function configValidate(configOrDir, planningDir) {
67
+ let config;
68
+
69
+ if (typeof configOrDir === 'string') {
70
+ // Called as configValidate(planningDir)
71
+ const dir = configOrDir;
72
+ const configPath = path.join(dir, 'config.json');
73
+ if (!fs.existsSync(configPath)) {
74
+ return { valid: false, errors: ['config.json not found'], warnings: [] };
75
+ }
76
+ try {
77
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
78
+ } catch (e) {
79
+ return { valid: false, errors: [`config.json is not valid JSON: ${e.message}`], warnings: [] };
80
+ }
81
+ } else if (configOrDir && typeof configOrDir === 'object') {
82
+ // Called as configValidate(configObject, planningDir?)
83
+ config = configOrDir;
84
+ } else {
85
+ // Called with no args — use default location
86
+ const dir = planningDir || path.join(process.env.PBR_PROJECT_ROOT || process.cwd(), '.planning');
87
+ const configPath = path.join(dir, 'config.json');
88
+ if (!fs.existsSync(configPath)) {
89
+ return { valid: false, errors: ['config.json not found'], warnings: [] };
90
+ }
91
+ try {
92
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
93
+ } catch (e) {
94
+ return { valid: false, errors: [`config.json is not valid JSON: ${e.message}`], warnings: [] };
95
+ }
96
+ }
97
+
98
+ // Try loading the config schema from the bin directory
99
+ const warnings = [];
100
+ const errors = [];
101
+
102
+ const schemaPath = path.join(__dirname, '..', 'config-schema.json');
103
+ if (fs.existsSync(schemaPath)) {
104
+ try {
105
+ const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf8'));
106
+ validateObject(config, schema, '', errors, warnings);
107
+ } catch (_e) {
108
+ // Schema file exists but couldn't be loaded — skip schema validation
109
+ warnings.push('Could not load config-schema.json for validation');
110
+ }
111
+ }
112
+
113
+ // Check schema_version for migration needs (lazy require to avoid circular deps)
114
+ const { CURRENT_SCHEMA_VERSION } = require('./migrate');
115
+ if (config.schema_version !== undefined && config.schema_version < CURRENT_SCHEMA_VERSION) {
116
+ warnings.push(`config.json schema_version (${config.schema_version}) is behind current (${CURRENT_SCHEMA_VERSION}) — run "pbr-tools migrate" to update`);
117
+ }
118
+
119
+ // Semantic conflict detection
120
+ if (config.mode === 'autonomous' && config.gates) {
121
+ const activeGates = Object.entries(config.gates || {}).filter(([, v]) => v === true).map(([k]) => k);
122
+ if (activeGates.length > 0) {
123
+ errors.push(`mode=autonomous with active gates (${activeGates.join(', ')}): gates are unreachable in autonomous mode`);
124
+ }
125
+ }
126
+ if (config.features && config.features.auto_continue && config.mode === 'interactive') {
127
+ warnings.push('features.auto_continue=true with mode=interactive: auto_continue only fires in autonomous mode');
128
+ }
129
+ if (config.parallelization) {
130
+ if (config.parallelization.enabled === false && config.parallelization.plan_level === true) {
131
+ warnings.push('parallelization.enabled=false with plan_level=true: plan_level is ignored when parallelization is disabled');
132
+ }
133
+ if (config.parallelization.max_concurrent_agents === 1 && config.teams && config.teams.coordination) {
134
+ errors.push('parallelization.max_concurrent_agents=1 with teams.coordination set: teams require concurrent agents to be useful');
135
+ }
136
+ }
137
+
138
+ return {
139
+ valid: errors.length === 0,
140
+ errors,
141
+ warnings
142
+ };
143
+ }
144
+
145
+ // ─── Depth profiles ───────────────────────────────────────────────────────────
146
+
147
+ /**
148
+ * Built-in depth profile defaults. These define the effective settings
149
+ * for each depth level. User config.depth_profiles overrides these.
150
+ */
151
+ const DEPTH_PROFILE_DEFAULTS = {
152
+ quick: {
153
+ 'features.research_phase': false,
154
+ 'features.plan_checking': true,
155
+ 'features.goal_verification': 'advisory',
156
+ 'features.inline_verify': false,
157
+ 'features.decision_journal': false,
158
+ 'features.negative_knowledge': false,
159
+ 'features.living_requirements': false,
160
+ 'features.agent_teams': false,
161
+ 'features.competing_hypotheses': false,
162
+ 'features.dynamic_teams': false,
163
+ 'features.progress_visualization': false,
164
+ 'features.contextual_help': false,
165
+ 'features.team_onboarding': false,
166
+ 'features.cross_project_patterns': false,
167
+ 'features.spec_templates': false,
168
+ 'features.global_learnings': false,
169
+ 'features.architecture_graph': false,
170
+ 'features.architecture_guard': false,
171
+ 'scan.mapper_count': 2,
172
+ 'scan.mapper_areas': ['tech', 'arch'],
173
+ 'debug.max_hypothesis_rounds': 3
174
+ },
175
+ standard: {
176
+ 'features.research_phase': true,
177
+ 'features.plan_checking': true,
178
+ 'features.goal_verification': true,
179
+ 'features.inline_verify': false,
180
+ 'features.decision_journal': true,
181
+ 'features.negative_knowledge': true,
182
+ 'features.living_requirements': true,
183
+ 'features.agent_teams': false,
184
+ 'features.competing_hypotheses': false,
185
+ 'features.dynamic_teams': false,
186
+ 'features.progress_visualization': true,
187
+ 'features.contextual_help': true,
188
+ 'features.team_onboarding': true,
189
+ 'features.cross_project_patterns': true,
190
+ 'features.spec_templates': true,
191
+ 'features.global_learnings': true,
192
+ 'features.architecture_graph': true,
193
+ 'features.architecture_guard': true,
194
+ 'scan.mapper_count': 4,
195
+ 'scan.mapper_areas': ['tech', 'arch', 'quality', 'concerns'],
196
+ 'debug.max_hypothesis_rounds': 5
197
+ },
198
+ comprehensive: {
199
+ 'features.research_phase': true,
200
+ 'features.plan_checking': true,
201
+ 'features.goal_verification': true,
202
+ 'features.inline_verify': true,
203
+ 'features.decision_journal': true,
204
+ 'features.negative_knowledge': true,
205
+ 'features.living_requirements': true,
206
+ 'features.agent_teams': false,
207
+ 'features.competing_hypotheses': false,
208
+ 'features.dynamic_teams': false,
209
+ 'features.progress_visualization': true,
210
+ 'features.contextual_help': true,
211
+ 'features.team_onboarding': true,
212
+ 'features.cross_project_patterns': true,
213
+ 'features.spec_templates': true,
214
+ 'features.global_learnings': true,
215
+ 'features.architecture_graph': true,
216
+ 'features.architecture_guard': true,
217
+ 'scan.mapper_count': 4,
218
+ 'scan.mapper_areas': ['tech', 'arch', 'quality', 'concerns'],
219
+ 'debug.max_hypothesis_rounds': 10
220
+ },
221
+ 'research-heavy': {
222
+ 'features.research_phase': true,
223
+ 'features.plan_checking': true,
224
+ 'features.goal_verification': true,
225
+ 'features.inline_verify': true,
226
+ 'features.decision_journal': true,
227
+ 'features.negative_knowledge': true,
228
+ 'features.living_requirements': true,
229
+ 'features.agent_teams': false,
230
+ 'features.competing_hypotheses': false,
231
+ 'features.dynamic_teams': false,
232
+ 'features.progress_visualization': true,
233
+ 'features.contextual_help': true,
234
+ 'features.team_onboarding': true,
235
+ 'scan.mapper_count': 6,
236
+ 'scan.mapper_areas': ['tech', 'arch', 'quality', 'concerns', 'risks', 'opportunities'],
237
+ 'debug.max_hypothesis_rounds': 15
238
+ }
239
+ };
240
+
241
+ /**
242
+ * Resolve the effective depth profile for the current config.
243
+ * Merges built-in defaults with any user overrides from config.depth_profiles.
244
+ *
245
+ * @param {string|object} dirOrConfig - planningDir path or parsed config object
246
+ * @returns {{ depth: string, profile: object }}
247
+ */
248
+ function configResolveDepth(dirOrConfig) {
249
+ let config;
250
+ if (typeof dirOrConfig === 'string') {
251
+ config = configLoad(dirOrConfig);
252
+ } else {
253
+ config = dirOrConfig;
254
+ }
255
+
256
+ const depth = (config && config.depth) || 'standard';
257
+ const defaults = DEPTH_PROFILE_DEFAULTS[depth] || DEPTH_PROFILE_DEFAULTS.standard;
258
+
259
+ // Merge user overrides if present
260
+ const userOverrides = (config && config.depth_profiles && config.depth_profiles[depth]) || {};
261
+ const profile = { ...defaults, ...userOverrides };
262
+
263
+ return { depth, profile };
264
+ }
265
+
266
+ // ─── Config load with defaults ────────────────────────────────────────────────
267
+
268
+ /**
269
+ * Load config.json with defaults applied. Creates default config if none exists.
270
+ *
271
+ * @param {string} planningDir - Path to .planning directory
272
+ * @returns {object} Merged config with defaults
273
+ */
274
+ function configLoadDefaults(planningDir) {
275
+ const config = configLoad(planningDir);
276
+ if (config) {
277
+ // Merge with user defaults
278
+ const userDefaults = loadUserDefaults();
279
+ if (userDefaults) {
280
+ return mergeUserDefaults(config, userDefaults);
281
+ }
282
+ return config;
283
+ }
284
+
285
+ // No config found — return hardcoded defaults
286
+ return {
287
+ version: 2,
288
+ schema_version: 3,
289
+ mode: 'interactive',
290
+ depth: 'standard',
291
+ features: {
292
+ structured_planning: true,
293
+ goal_verification: true,
294
+ research_phase: true,
295
+ plan_checking: true,
296
+ },
297
+ planning: {
298
+ commit_docs: false,
299
+ search_gitignored: false,
300
+ },
301
+ git: {
302
+ branching: 'none',
303
+ },
304
+ parallelization: {
305
+ enabled: false,
306
+ },
307
+ };
308
+ }
309
+
310
+ /**
311
+ * Save config to .planning/config.json using atomic write.
312
+ *
313
+ * @param {string} planningDir - Path to .planning directory
314
+ * @param {object} config - Config object to save
315
+ * @returns {{ success: boolean, error?: string }}
316
+ */
317
+ function configSaveDefaults(planningDir, config) {
318
+ const configPath = path.join(planningDir, 'config.json');
319
+ ensureDir(planningDir);
320
+ return atomicWrite(configPath, JSON.stringify(config, null, 2));
321
+ }
322
+
323
+ // ─── Config get/set ───────────────────────────────────────────────────────────
324
+
325
+ /**
326
+ * Get a specific config value by dot-notation key path.
327
+ *
328
+ * @param {string} planningDir - Path to .planning directory
329
+ * @param {string} keyPath - Dot-notation key path (e.g., 'workflow.research')
330
+ * @returns {*} Config value or undefined
331
+ */
332
+ function configGet(planningDir, keyPath) {
333
+ const config = configLoad(planningDir);
334
+ if (!config || !keyPath) return undefined;
335
+
336
+ const keys = keyPath.split('.');
337
+ let current = config;
338
+ for (const key of keys) {
339
+ if (current === undefined || current === null || typeof current !== 'object') {
340
+ return undefined;
341
+ }
342
+ current = current[key];
343
+ }
344
+ return current;
345
+ }
346
+
347
+ /**
348
+ * Set a config value by dot-notation key path.
349
+ *
350
+ * @param {string} planningDir - Path to .planning directory
351
+ * @param {string} keyPath - Dot-notation key path
352
+ * @param {*} value - Value to set
353
+ * @returns {{ success: boolean, error?: string }}
354
+ */
355
+ function configSet(planningDir, keyPath, value) {
356
+ const configPath = path.join(planningDir, 'config.json');
357
+
358
+ let config = {};
359
+ try {
360
+ if (fs.existsSync(configPath)) {
361
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
362
+ }
363
+ } catch (e) {
364
+ return { success: false, error: `Failed to read config.json: ${e.message}` };
365
+ }
366
+
367
+ // Parse value (handle booleans and numbers)
368
+ let parsedValue = value;
369
+ if (typeof value === 'string') {
370
+ if (value === 'true') parsedValue = true;
371
+ else if (value === 'false') parsedValue = false;
372
+ else if (!isNaN(value) && value !== '') parsedValue = Number(value);
373
+ }
374
+
375
+ // Set nested value using dot notation
376
+ const keys = keyPath.split('.');
377
+ let current = config;
378
+ for (let i = 0; i < keys.length - 1; i++) {
379
+ const key = keys[i];
380
+ if (current[key] === undefined || typeof current[key] !== 'object') {
381
+ current[key] = {};
382
+ }
383
+ current = current[key];
384
+ }
385
+ current[keys[keys.length - 1]] = parsedValue;
386
+
387
+ return atomicWrite(configPath, JSON.stringify(config, null, 2));
388
+ }
389
+
390
+ /**
391
+ * Ensure a config section exists with defaults.
392
+ * If the section already exists, missing keys from defaults are added.
393
+ * If the section does not exist, it is created with all defaults.
394
+ *
395
+ * @param {string} planningDir - Path to .planning directory
396
+ * @param {string} section - Section name (e.g., 'workflow', 'git')
397
+ * @param {object} defaults - Default values for the section
398
+ * @returns {{ success: boolean, created: boolean, error?: string }}
399
+ */
400
+ function configEnsureSection(planningDir, section, defaults) {
401
+ const configPath = path.join(planningDir, 'config.json');
402
+ ensureDir(planningDir);
403
+
404
+ let config = {};
405
+ let created = false;
406
+
407
+ try {
408
+ if (fs.existsSync(configPath)) {
409
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
410
+ } else {
411
+ created = true;
412
+ }
413
+ } catch (_e) {
414
+ created = true;
415
+ }
416
+
417
+ if (!config[section]) {
418
+ config[section] = { ...defaults };
419
+ created = true;
420
+ } else {
421
+ // Merge missing keys from defaults
422
+ for (const [key, val] of Object.entries(defaults)) {
423
+ if (config[section][key] === undefined) {
424
+ config[section][key] = val;
425
+ created = true;
426
+ }
427
+ }
428
+ }
429
+
430
+ if (created) {
431
+ const result = atomicWrite(configPath, JSON.stringify(config, null, 2));
432
+ return { success: result.success, created: true, error: result.error };
433
+ }
434
+
435
+ return { success: true, created: false };
436
+ }
437
+
438
+ // ─── Global defaults (cross-project) ─────────────────────────────────────────
439
+
440
+ const os = require('os');
441
+
442
+ /**
443
+ * Load global defaults from ~/.pbr/defaults.json.
444
+ * Returns empty object if file doesn't exist or is invalid.
445
+ * This is the plan-specified API; loadUserDefaults() returns null on missing.
446
+ *
447
+ * @returns {object} Global defaults (never null)
448
+ */
449
+ function loadGlobalDefaults() {
450
+ const defaultsPath = path.join(os.homedir(), '.pbr', 'defaults.json');
451
+ if (!fs.existsSync(defaultsPath)) return {};
452
+ try {
453
+ return JSON.parse(fs.readFileSync(defaultsPath, 'utf-8'));
454
+ } catch (_e) { return {}; }
455
+ }
456
+
457
+ /**
458
+ * Save arbitrary data as global defaults to ~/.pbr/defaults.json.
459
+ * Unlike saveUserDefaults(), this saves the full data object without filtering.
460
+ *
461
+ * @param {object} data - Data to save as global defaults
462
+ * @returns {{ saved: boolean, path: string }}
463
+ */
464
+ function saveGlobalDefaults(data) {
465
+ const dir = path.join(os.homedir(), '.pbr');
466
+ fs.mkdirSync(dir, { recursive: true });
467
+ const defaultsPath = path.join(dir, 'defaults.json');
468
+ fs.writeFileSync(defaultsPath, JSON.stringify(data, null, 2), 'utf-8');
469
+ return { saved: true, path: defaultsPath };
470
+ }
471
+
472
+ // ─── User-level defaults ──────────────────────────────────────────────────────
473
+
474
+ const USER_DEFAULTS_DIR = path.join(
475
+ process.env.HOME || process.env.USERPROFILE || '',
476
+ '.pbr'
477
+ );
478
+
479
+ const USER_DEFAULTS_PATH = path.join(USER_DEFAULTS_DIR, 'defaults.json');
480
+
481
+ /**
482
+ * Load user-level defaults from ~/.pbr/defaults.json.
483
+ * Returns null if file doesn't exist or is invalid.
484
+ *
485
+ * @returns {object|null} User defaults or null
486
+ */
487
+ function loadUserDefaults() {
488
+ try {
489
+ if (!fs.existsSync(USER_DEFAULTS_PATH)) return null;
490
+ return JSON.parse(fs.readFileSync(USER_DEFAULTS_PATH, 'utf8'));
491
+ } catch (_e) {
492
+ return null;
493
+ }
494
+ }
495
+
496
+ /**
497
+ * Save current project config as user-level defaults.
498
+ * Only saves portable keys (excludes project-specific state).
499
+ *
500
+ * @param {object} config - Current project config.json contents
501
+ * @returns {{ saved: boolean, path: string, keys: string[] }}
502
+ */
503
+ function saveUserDefaults(config) {
504
+ const portableKeys = [
505
+ 'mode', 'depth', 'context_strategy', 'context_window_tokens',
506
+ 'features', 'models', 'parallelization',
507
+ 'planning', 'git', 'gates', 'safety',
508
+ 'hooks', 'dashboard', 'status_line'
509
+ ];
510
+
511
+ const defaults = {};
512
+ for (const key of portableKeys) {
513
+ if (config[key] !== undefined) {
514
+ defaults[key] = config[key];
515
+ }
516
+ }
517
+
518
+ ensureDir(USER_DEFAULTS_DIR);
519
+ fs.writeFileSync(USER_DEFAULTS_PATH, JSON.stringify(defaults, null, 2), 'utf8');
520
+
521
+ return {
522
+ saved: true,
523
+ path: USER_DEFAULTS_PATH,
524
+ keys: Object.keys(defaults)
525
+ };
526
+ }
527
+
528
+ /**
529
+ * Deep-merge user defaults into a base config.
530
+ * User defaults provide values only where the base config doesn't already set them.
531
+ *
532
+ * @param {object} base - The base config
533
+ * @param {object} userDefaults - User-level defaults
534
+ * @returns {object} Merged config
535
+ */
536
+ function mergeUserDefaults(base, userDefaults) {
537
+ if (!userDefaults) return base;
538
+
539
+ const result = { ...base };
540
+ for (const [key, value] of Object.entries(userDefaults)) {
541
+ if (result[key] === undefined) {
542
+ result[key] = value;
543
+ } else if (
544
+ typeof value === 'object' && value !== null && !Array.isArray(value) &&
545
+ typeof result[key] === 'object' && result[key] !== null && !Array.isArray(result[key])
546
+ ) {
547
+ result[key] = mergeUserDefaults(result[key], value);
548
+ }
549
+ }
550
+ return result;
551
+ }
552
+
553
+ // ─── GSD-compatible command wrappers ──────────────────────────────────────────
554
+
555
+ /**
556
+ * Command handler: ensure config section exists (creates default config if needed).
557
+ * Compatible with GSD pbr-tools command dispatch.
558
+ *
559
+ * @param {string} cwdArg - Working directory
560
+ * @param {boolean} raw - Whether to output raw value
561
+ */
562
+ function cmdConfigEnsureSection(cwdArg, raw) {
563
+ const { output, error: errorFn } = require('./core');
564
+ const configPath = path.join(cwdArg, '.planning', 'config.json');
565
+ const pDir = path.join(cwdArg, '.planning');
566
+
567
+ try {
568
+ if (!fs.existsSync(pDir)) {
569
+ fs.mkdirSync(pDir, { recursive: true });
570
+ }
571
+ } catch (err) {
572
+ errorFn('Failed to create .planning directory: ' + err.message);
573
+ }
574
+
575
+ if (fs.existsSync(configPath)) {
576
+ const result = { created: false, reason: 'already_exists' };
577
+ output(result, raw, 'exists');
578
+ return;
579
+ }
580
+
581
+ // Detect Brave Search API key availability
582
+ const homedir = require('os').homedir();
583
+ const braveKeyFile = path.join(homedir, '.pbr', 'brave_api_key');
584
+ const hasBraveSearch = !!(process.env.BRAVE_API_KEY || fs.existsSync(braveKeyFile));
585
+
586
+ // Load user-level defaults
587
+ const userDefaults = loadUserDefaults() || {};
588
+
589
+ const hardcoded = {
590
+ version: 2,
591
+ schema_version: 1,
592
+ mode: 'interactive',
593
+ depth: 'standard',
594
+ features: {
595
+ structured_planning: true,
596
+ goal_verification: true,
597
+ research_phase: true,
598
+ plan_checking: true,
599
+ },
600
+ planning: {
601
+ commit_docs: true,
602
+ search_gitignored: false,
603
+ },
604
+ git: {
605
+ branching: 'none',
606
+ },
607
+ parallelization: {
608
+ enabled: true,
609
+ },
610
+ };
611
+ const defaults = {
612
+ ...hardcoded,
613
+ ...userDefaults,
614
+ features: { ...hardcoded.features, ...(userDefaults.features || {}) },
615
+ planning: { ...hardcoded.planning, ...(userDefaults.planning || {}) },
616
+ git: { ...hardcoded.git, ...(userDefaults.git || {}) },
617
+ parallelization: { ...hardcoded.parallelization, ...(userDefaults.parallelization || {}) },
618
+ };
619
+
620
+ try {
621
+ fs.writeFileSync(configPath, JSON.stringify(defaults, null, 2), 'utf8');
622
+ const result = { created: true, path: '.planning/config.json' };
623
+ output(result, raw, 'created');
624
+ } catch (err) {
625
+ errorFn('Failed to create config.json: ' + err.message);
626
+ }
627
+ }
628
+
629
+ /**
630
+ * Command handler: set a config value.
631
+ *
632
+ * @param {string} cwdArg - Working directory
633
+ * @param {string} keyPath - Dot-notation key
634
+ * @param {*} value - Value to set
635
+ * @param {boolean} raw - Whether to output raw value
636
+ */
637
+ function cmdConfigSet(cwdArg, keyPath, value, raw) {
638
+ const { output, error: errorFn } = require('./core');
639
+ const configPath = path.join(cwdArg, '.planning', 'config.json');
640
+
641
+ if (!keyPath) {
642
+ errorFn('Usage: config-set <key.path> <value>');
643
+ }
644
+
645
+ let parsedValue = value;
646
+ if (value === 'true') parsedValue = true;
647
+ else if (value === 'false') parsedValue = false;
648
+ else if (!isNaN(value) && value !== '') parsedValue = Number(value);
649
+
650
+ let config = {};
651
+ try {
652
+ if (fs.existsSync(configPath)) {
653
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
654
+ }
655
+ } catch (err) {
656
+ errorFn('Failed to read config.json: ' + err.message);
657
+ }
658
+
659
+ const keys = keyPath.split('.');
660
+ let current = config;
661
+ for (let i = 0; i < keys.length - 1; i++) {
662
+ const key = keys[i];
663
+ if (current[key] === undefined || typeof current[key] !== 'object') {
664
+ current[key] = {};
665
+ }
666
+ current = current[key];
667
+ }
668
+ current[keys[keys.length - 1]] = parsedValue;
669
+
670
+ try {
671
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8');
672
+ const result = { updated: true, key: keyPath, value: parsedValue };
673
+ output(result, raw, `${keyPath}=${parsedValue}`);
674
+ } catch (err) {
675
+ errorFn('Failed to write config.json: ' + err.message);
676
+ }
677
+ }
678
+
679
+ /**
680
+ * Command handler: get a config value.
681
+ *
682
+ * @param {string} cwdArg - Working directory
683
+ * @param {string} keyPath - Dot-notation key
684
+ * @param {boolean} raw - Whether to output raw value
685
+ */
686
+ function cmdConfigGet(cwdArg, keyPath, raw) {
687
+ const { output, error: errorFn } = require('./core');
688
+ const configPath = path.join(cwdArg, '.planning', 'config.json');
689
+
690
+ if (!keyPath) {
691
+ errorFn('Usage: config-get <key.path>');
692
+ }
693
+
694
+ let config = {};
695
+ try {
696
+ if (fs.existsSync(configPath)) {
697
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
698
+ } else {
699
+ errorFn('No config.json found at ' + configPath);
700
+ }
701
+ } catch (err) {
702
+ if (err.message.startsWith('No config.json')) throw err;
703
+ errorFn('Failed to read config.json: ' + err.message);
704
+ }
705
+
706
+ const keys = keyPath.split('.');
707
+ let current = config;
708
+ for (const key of keys) {
709
+ if (current === undefined || current === null || typeof current !== 'object') {
710
+ errorFn(`Key not found: ${keyPath}`);
711
+ }
712
+ current = current[key];
713
+ }
714
+
715
+ if (current === undefined) {
716
+ errorFn(`Key not found: ${keyPath}`);
717
+ }
718
+
719
+ output(current, raw, String(current));
720
+ }
721
+
722
+ // ─── Exports ──────────────────────────────────────────────────────────────────
723
+
724
+
725
+ // ─── hooks/lib additions (superset merge) ──────────────────────────────────
726
+
727
+ const CONFIG_DEFAULTS = {
728
+ version: 2,
729
+ schema_version: 3,
730
+ context_strategy: 'aggressive',
731
+ mode: 'interactive',
732
+ depth: 'standard',
733
+ session_phase_limit: 3,
734
+ session_cycling: 'compact',
735
+ context_window_tokens: 200000,
736
+ agent_checkpoint_pct: 50,
737
+ ceremony_level: 'auto',
738
+ orchestrator_budget_pct: 25,
739
+ skip_rag_max_lines: 50000,
740
+ features: {
741
+ structured_planning: true,
742
+ goal_verification: true,
743
+ integration_verification: true,
744
+ context_isolation: true,
745
+ atomic_commits: true,
746
+ session_persistence: true,
747
+ research_phase: true,
748
+ plan_checking: true,
749
+ tdd_mode: false,
750
+ status_line: true,
751
+ auto_continue: false,
752
+ auto_advance: false,
753
+ team_discussions: false,
754
+ inline_verify: false,
755
+ enhanced_session_start: true,
756
+ extended_context: false,
757
+ context_quality_scoring: true,
758
+ skip_rag: false,
759
+ zero_friction_quick: true,
760
+ post_hoc_artifacts: true,
761
+ inline_simple_tasks: true,
762
+ rich_agent_prompts: true,
763
+ multi_phase_awareness: true,
764
+ decision_journal: true,
765
+ negative_knowledge: true,
766
+ living_requirements: true,
767
+ trust_tracking: true,
768
+ confidence_calibration: true,
769
+ natural_language_routing: true,
770
+ adaptive_ceremony: true,
771
+ graduated_verification: true,
772
+ self_verification: true,
773
+ agent_feedback_loop: true,
774
+ session_metrics: true,
775
+ convention_memory: true,
776
+ mental_model_snapshots: true,
777
+ smart_next_task: true,
778
+ dependency_break_detection: true,
779
+ pre_research: true,
780
+ pattern_routing: true,
781
+ tech_debt_surfacing: true,
782
+ agent_teams: false,
783
+ competing_hypotheses: false,
784
+ dynamic_teams: false,
785
+ machine_executable_plans: false,
786
+ spec_diffing: true,
787
+ reverse_spec: false,
788
+ predictive_impact: true,
789
+ progress_visualization: true,
790
+ contextual_help: true,
791
+ team_onboarding: false,
792
+ regression_prevention: true,
793
+ security_scanning: true,
794
+ architecture_graph: true,
795
+ architecture_guard: true,
796
+ incident_journal: true
797
+ },
798
+ autonomy: { level: 'supervised', max_retries: 2, error_strategy: 'retry' },
799
+ models: {
800
+ researcher: 'sonnet',
801
+ planner: 'sonnet',
802
+ executor: 'sonnet',
803
+ verifier: 'sonnet',
804
+ integration_checker: 'sonnet',
805
+ debugger: 'inherit',
806
+ mapper: 'sonnet',
807
+ synthesizer: 'haiku',
808
+ complexity_map: { simple: 'haiku', medium: 'sonnet', complex: 'inherit' }
809
+ },
810
+ model_profiles: {},
811
+ parallelization: {
812
+ enabled: false,
813
+ plan_level: false,
814
+ task_level: false,
815
+ max_concurrent_agents: 3,
816
+ min_plans_for_parallel: 2,
817
+ use_teams: false
818
+ },
819
+ teams: {
820
+ planning_roles: ['architect', 'security-reviewer', 'test-designer'],
821
+ review_roles: ['functional-reviewer', 'security-auditor', 'performance-analyst'],
822
+ synthesis_model: 'sonnet',
823
+ coordination: 'file-based'
824
+ },
825
+ planning: {
826
+ commit_docs: false,
827
+ max_tasks_per_plan: 3,
828
+ search_gitignored: false,
829
+ multi_phase: false
830
+ },
831
+ git: {
832
+ branching: 'none',
833
+ commit_format: '{type}({phase}-{plan}): {description}',
834
+ phase_branch_template: 'pbr/phase-{phase}-{slug}',
835
+ milestone_branch_template: 'pbr/{milestone}-{slug}',
836
+ mode: 'enabled',
837
+ auto_pr: false
838
+ },
839
+ ci: { gate_enabled: false, wait_timeout_seconds: 120 },
840
+ gates: {
841
+ confirm_project: true,
842
+ confirm_roadmap: true,
843
+ confirm_plan: true,
844
+ confirm_execute: false,
845
+ confirm_transition: true,
846
+ issues_review: false,
847
+ confirm_research: false,
848
+ confirm_seeds: false,
849
+ confirm_deferred: false,
850
+ confirm_commit_docs: false,
851
+ auto_checkpoints: false,
852
+ checkpoint_auto_resolve: 'none'
853
+ },
854
+ safety: {
855
+ always_confirm_destructive: true,
856
+ always_confirm_external_services: true,
857
+ enforce_phase_boundaries: true
858
+ },
859
+ timeouts: {
860
+ task_default_ms: 300000,
861
+ build_max_ms: 600000,
862
+ verify_max_ms: 300000
863
+ },
864
+ hooks: {
865
+ autoFormat: false,
866
+ typeCheck: false,
867
+ detectConsoleLogs: true,
868
+ blockDocSprawl: true,
869
+ compactThreshold: 50
870
+ },
871
+ prd: { auto_extract: false },
872
+ depth_profiles: {},
873
+ debug: { max_hypothesis_rounds: 5 },
874
+ developer_profile: { enabled: false, inject_prompts: false },
875
+ spinner_tips: { tips: [], exclude_defaults: false },
876
+ dashboard: { auto_launch: false, port: 3141 },
877
+ status_line: {
878
+ sections: ['phase', 'plan', 'status', 'context'],
879
+ brand_text: 'PBR',
880
+ max_status_length: 80,
881
+ context_bar: {
882
+ width: 20,
883
+ thresholds: { green: 50, yellow: 75 },
884
+ chars: { filled: '\u2588', empty: '\u2591' }
885
+ }
886
+ },
887
+ workflow: {
888
+ enforce_pbr_skills: 'advisory',
889
+ inline_execution: false,
890
+ inline_max_tasks: 2,
891
+ inline_context_cap_pct: 40,
892
+ phase_boundary_clear: 'off',
893
+ autonomous: false,
894
+ speculative_planning: false,
895
+ phase_replay: false,
896
+ inline_max_files: 5,
897
+ inline_max_lines: 50,
898
+ max_phases_in_context: 3
899
+ },
900
+ hook_server: { enabled: false, port: 19836, event_log: true },
901
+ intel: { enabled: false, auto_update: false, inject_on_start: false },
902
+ context_ledger: { enabled: false, stale_after_minutes: 60 },
903
+ learnings: { enabled: false, read_depth: 3, cross_project_knowledge: false },
904
+ verification: { confidence_gate: false, confidence_threshold: 1 },
905
+ context_budget: { threshold_curve: 'linear' },
906
+ ui: { enabled: false },
907
+ worktree: { sparse_paths: [] }
908
+ };
909
+
910
+ const CONFIG_SECTIONS = [
911
+ {
912
+ guide: '_guide_meta',
913
+ lines: [
914
+ 'schema_version: config schema version for migration detection',
915
+ 'version: planning format version (v2 is current)'
916
+ ],
917
+ keys: ['schema_version', 'version']
918
+ },
919
+ {
920
+ guide: '_guide_core',
921
+ lines: [
922
+ 'ceremony_level: auto|low|medium|high — override risk-based ceremony (auto = classifier decides)',
923
+ 'context_strategy: aggressive|balanced|conservative — how aggressively PBR manages context budget',
924
+ 'depth: quick|standard|comprehensive — thoroughness of research, planning, and verification',
925
+ 'mode: interactive|autonomous — interactive pauses at gates, autonomous runs hands-free'
926
+ ],
927
+ keys: ['ceremony_level', 'context_strategy', 'depth', 'mode']
928
+ },
929
+ {
930
+ guide: '_guide_context_window',
931
+ lines: [
932
+ 'agent_checkpoint_pct: 40-80 — context % where agents checkpoint and return',
933
+ 'context_window_tokens: 100k-2M — your model\'s context size, scales all thresholds',
934
+ 'orchestrator_budget_pct: 15-50 — % of context reserved for orchestrator (higher = more inline work)',
935
+ 'session_cycling: tmux|compact-first|compact|manual — what happens when phase limit is reached',
936
+ 'session_phase_limit: 0-20 — max phases per session before auto-pause (0 = disabled)',
937
+ 'skip_rag_max_lines: projects under this LOC can load entire codebase into context',
938
+ '',
939
+ '--- 1M CONTEXT (Opus 4.6) RECOMMENDED VALUES ---',
940
+ 'context_window_tokens: 1000000',
941
+ 'agent_checkpoint_pct: 70 (default 50 for 200k models)',
942
+ 'orchestrator_budget_pct: 35 (default 25 for 200k models)',
943
+ 'session_phase_limit: 10 (default 3 for 200k, scales: 3@200k, 6@500k, 10@1M)',
944
+ 'session_cycling: compact-first (try /compact before cycling sessions)',
945
+ 'context_budget.threshold_curve: adaptive (shifts warnings up: 60/75/85 vs 50/70/85)',
946
+ 'workflow.inline_context_cap_pct: 50 (500k tokens before forcing subagent delegation)',
947
+ 'workflow.inline_max_files: 10, inline_max_lines: 100, inline_max_tasks: 3',
948
+ 'workflow.max_phases_in_context: 6 (hold 6 phase plans simultaneously)',
949
+ 'debug.max_hypothesis_rounds: 8 (longer investigation chains)'
950
+ ],
951
+ keys: ['agent_checkpoint_pct', 'context_window_tokens', 'orchestrator_budget_pct', 'session_cycling', 'session_phase_limit', 'skip_rag_max_lines']
952
+ },
953
+ {
954
+ guide: '_guide_autonomy',
955
+ lines: [
956
+ 'autonomy.level: supervised|guided|collaborative|adaptive — progressive autonomy control',
957
+ 'gates.confirm_*: pause for user confirmation (all false in autonomous mode)',
958
+ 'gates.auto_checkpoints: auto-resolve checkpoint:human-verify tasks during build',
959
+ 'gates.checkpoint_auto_resolve: none|verify-only|verify-and-decision|all',
960
+ 'safety.always_confirm_destructive: always ask before destructive git ops',
961
+ 'safety.always_confirm_external_services: always ask before calling external APIs',
962
+ 'safety.enforce_phase_boundaries: prevent agents from working outside assigned phase'
963
+ ],
964
+ keys: ['autonomy', 'gates', 'safety']
965
+ },
966
+ {
967
+ guide: '_guide_features',
968
+ lines: [
969
+ '--- CORE WORKFLOW ---',
970
+ 'atomic_commits: one commit per task (not batched)',
971
+ 'context_isolation: heavy work delegated to subagents to protect main context',
972
+ 'session_persistence: persist state across sessions via STATE.md',
973
+ 'structured_planning: use phased planning with ROADMAP + plan files',
974
+ '',
975
+ '--- RESEARCH & PLANNING ---',
976
+ 'machine_executable_plans: programmatic task execution from parsed plans',
977
+ 'plan_checking: validate plans via plan-checker agent before execution',
978
+ 'pre_research: speculatively research upcoming phases at 70%+ completion',
979
+ 'research_phase: run researcher agent before planning',
980
+ 'reverse_spec: generate specs from existing code',
981
+ 'spec_diffing: semantic diff when plans change',
982
+ '',
983
+ '--- EXECUTION ---',
984
+ 'inline_simple_tasks: simple tasks (<N files, <N lines) run inline without subagent',
985
+ 'post_hoc_artifacts: auto-generate SUMMARY.md from git history after execution',
986
+ 'tdd_mode: red-green-refactor (3 commits per task instead of 1)',
987
+ 'zero_friction_quick: skip pre-execution ceremony for quick tasks',
988
+ '',
989
+ '--- VERIFICATION ---',
990
+ 'agent_feedback_loop: verification results feed back into executor prompts',
991
+ 'confidence_calibration: confidence scores based on historical agent accuracy',
992
+ 'goal_verification: run verifier agent after builds to check goals met',
993
+ 'graduated_verification: trust-based verification depth (light/standard/thorough)',
994
+ 'inline_verify: per-task verification after each commit (+10-20s per plan)',
995
+ 'integration_verification: cross-phase integration checks',
996
+ 'self_verification: executor self-checks before presenting output',
997
+ 'trust_tracking: trust scores per agent type and task category',
998
+ '',
999
+ '--- AUTOMATION ---',
1000
+ 'auto_advance: chain build, review, plan automatically (requires autonomous mode)',
1001
+ 'auto_continue: write .auto-next signal on phase completion for chaining',
1002
+ '',
1003
+ '--- CONTEXT & SESSION ---',
1004
+ 'context_quality_scoring: track signal-to-noise ratio in context',
1005
+ 'enhanced_session_start: structured context injection at session start (~500 tokens)',
1006
+ 'mental_model_snapshots: capture working context at session end for instant resume',
1007
+ 'multi_phase_awareness: hold multiple phase plans simultaneously in context',
1008
+ 'rich_agent_prompts: enrich agent prompts with full project context',
1009
+ 'session_metrics: show metrics dashboard at session end',
1010
+ 'skip_rag: load entire codebase for small projects (under skip_rag_max_lines)',
1011
+ 'status_line: show PBR status bar in session UI',
1012
+ '',
1013
+ '--- KNOWLEDGE & INTELLIGENCE ---',
1014
+ 'adaptive_ceremony: risk-based ceremony adjustment per task',
1015
+ 'convention_memory: auto-detect and store project conventions',
1016
+ 'decision_journal: record WHY decisions were made in .planning/decisions/',
1017
+ 'dependency_break_detection: warn when upstream changes invalidate downstream plans',
1018
+ 'living_requirements: auto-update requirement status as phases complete',
1019
+ 'natural_language_routing: intent detection in /pbr:do',
1020
+ 'negative_knowledge: track what failed and why in .planning/negative-knowledge/',
1021
+ 'pattern_routing: file modification patterns trigger specialized agents',
1022
+ 'smart_next_task: dependency graph analysis for auto-continue suggestions',
1023
+ 'tech_debt_surfacing: surface tech debt in status dashboard',
1024
+ '',
1025
+ '--- QUALITY & SECURITY ---',
1026
+ 'architecture_graph: live module dependency tracking',
1027
+ 'architecture_guard: warn on dependency violations',
1028
+ 'predictive_impact: impact analysis using architecture graph',
1029
+ 'regression_prevention: smart test selection from changed files',
1030
+ 'security_scanning: OWASP-style scanning of changed files during build',
1031
+ '',
1032
+ '--- UI & VISUALIZATION ---',
1033
+ 'contextual_help: activity-specific suggestions based on current state',
1034
+ 'progress_visualization: phase dependency graph and timeline in dashboard',
1035
+ '',
1036
+ '--- TEAMS (disabled by default) ---',
1037
+ 'agent_teams: parallel worktree-based agent teams',
1038
+ 'competing_hypotheses: multiple approaches for complex problems',
1039
+ 'dynamic_teams: dynamic team composition per task',
1040
+ 'team_discussions: multi-perspective planning discussions',
1041
+ 'team_onboarding: generate onboarding guide from project docs'
1042
+ ],
1043
+ keys: ['features']
1044
+ },
1045
+ {
1046
+ guide: '_guide_models',
1047
+ lines: [
1048
+ 'Per-agent model: sonnet|opus|haiku|inherit',
1049
+ 'complexity_map: auto-select model by task difficulty',
1050
+ 'model_profiles: custom named presets (e.g. \'budget\' using haiku everywhere)'
1051
+ ],
1052
+ keys: ['models', 'model_profiles']
1053
+ },
1054
+ {
1055
+ guide: '_guide_parallelization',
1056
+ lines: [
1057
+ 'enabled: allow parallel plan execution within a wave',
1058
+ 'max_concurrent_agents: 1-10 — max simultaneous executor subagents',
1059
+ 'min_plans_for_parallel: minimum plans in a wave to trigger parallel execution',
1060
+ 'plan_level: parallelize at plan level (multiple plans in same wave)',
1061
+ 'task_level: parallelize at task level within a plan (not currently used)',
1062
+ 'use_teams: use Agent Teams for coordination (discussion only, never execution)',
1063
+ 'teams.*: roles and coordination strategy for team discussions'
1064
+ ],
1065
+ keys: ['parallelization', 'teams']
1066
+ },
1067
+ {
1068
+ guide: '_guide_workflow',
1069
+ lines: [
1070
+ 'autonomous: enable /pbr:autonomous for hands-free multi-phase execution',
1071
+ 'enforce_pbr_skills: advisory|block|off — PBR workflow compliance enforcement',
1072
+ 'inline_context_cap_pct: context % above which always spawn subagent',
1073
+ 'inline_execution: trivial plans execute inline without subagent',
1074
+ 'inline_max_files: max files for inline execution eligibility',
1075
+ 'inline_max_lines: max estimated lines of change for inline execution',
1076
+ 'inline_max_tasks: max tasks for inline execution eligibility',
1077
+ 'max_phases_in_context: max phase plans held simultaneously by orchestrator',
1078
+ 'phase_boundary_clear: recommend|enforce|off — /clear at phase boundaries',
1079
+ 'phase_replay: failed verification triggers replay with enriched context',
1080
+ 'speculative_planning: plan phase N+1 while executor runs phase N'
1081
+ ],
1082
+ keys: ['workflow']
1083
+ },
1084
+ {
1085
+ guide: '_guide_git',
1086
+ lines: [
1087
+ 'git.auto_pr: create GitHub PR after successful phase verification',
1088
+ 'git.branching: none|phase|milestone|disabled — branching strategy',
1089
+ 'git.commit_format: commit message template with {type}, {phase}, {plan}, {description}',
1090
+ 'git.mode: enabled|disabled — disabled skips all git operations',
1091
+ 'ci.gate_enabled: block wave advancement until CI passes',
1092
+ 'ci.wait_timeout_seconds: max seconds to wait for CI completion',
1093
+ 'planning.commit_docs: commit SUMMARY/VERIFICATION after builds',
1094
+ 'planning.max_tasks_per_plan: 1-10 — keeps plans focused and atomic',
1095
+ 'planning.multi_phase: enable --through flag for multi-phase planning',
1096
+ 'planning.search_gitignored: include gitignored files in codebase scanning'
1097
+ ],
1098
+ keys: ['ci', 'git', 'planning']
1099
+ },
1100
+ {
1101
+ guide: '_guide_verification',
1102
+ lines: [
1103
+ 'verification.confidence_gate: skip verification if executor reports 100% completion + tests pass',
1104
+ 'verification.confidence_threshold: 0.5-1.0 — minimum confidence to skip verification'
1105
+ ],
1106
+ keys: ['verification']
1107
+ },
1108
+ {
1109
+ guide: '_guide_context_budget',
1110
+ lines: [
1111
+ 'context_budget.threshold_curve: linear|adaptive — warning threshold scaling',
1112
+ ' linear = fixed 50/70/85%, adaptive = shifts up for 1M context (60/75/85%)',
1113
+ 'context_ledger.enabled: track what files are in context and when they go stale',
1114
+ 'context_ledger.stale_after_minutes: 5-1440 — minutes before a read is considered stale'
1115
+ ],
1116
+ keys: ['context_budget', 'context_ledger']
1117
+ },
1118
+ {
1119
+ guide: '_guide_hooks',
1120
+ lines: [
1121
+ 'hook_server.enabled: route hooks through persistent HTTP server (faster than per-hook processes)',
1122
+ 'hook_server.port: TCP port for hook server (localhost only)',
1123
+ 'hooks.autoFormat: run auto-formatting after file writes',
1124
+ 'hooks.blockDocSprawl: block creation of excessive documentation files',
1125
+ 'hooks.compactThreshold: 10-200 — context % at which to suggest compaction',
1126
+ 'hooks.detectConsoleLogs: warn when console.log statements are added',
1127
+ 'hooks.typeCheck: run type checking after file writes'
1128
+ ],
1129
+ keys: ['hook_server', 'hooks']
1130
+ },
1131
+ {
1132
+ guide: '_guide_intelligence',
1133
+ lines: [
1134
+ 'intel.enabled: persistent codebase intelligence (architecture maps, file graph)',
1135
+ 'intel.auto_update: PostToolUse hooks queue intel updates on code changes',
1136
+ 'intel.inject_on_start: inject architecture summary into session context at start',
1137
+ 'learnings.enabled: cross-phase knowledge transfer via LEARNINGS.md',
1138
+ 'learnings.read_depth: 1-20 — how many prior phases\' learnings the planner reads',
1139
+ 'learnings.cross_project_knowledge: copy learnings to ~/.claude/pbr-knowledge/ for reuse'
1140
+ ],
1141
+ keys: ['intel', 'learnings']
1142
+ },
1143
+ {
1144
+ guide: '_guide_tools',
1145
+ lines: [
1146
+ 'dashboard: web UI for browsing .planning/ state (default port 3141)',
1147
+ 'debug.max_hypothesis_rounds: 1-20 — max hypothesis cycles for /pbr:debug',
1148
+ 'depth_profiles: override built-in quick/standard/comprehensive defaults',
1149
+ 'developer_profile: behavioral profiling from session history + prompt injection',
1150
+ 'prd.auto_extract: skip confirmation gate during PRD import',
1151
+ 'spinner_tips: custom messages shown during agent execution',
1152
+ 'status_line: status bar appearance (sections, branding, context bar)',
1153
+ 'timeouts: task/build/verify timeout limits in milliseconds',
1154
+ 'ui.enabled: enable UI design pipeline (/pbr:ui-phase, /pbr:ui-review)',
1155
+ 'worktree.sparse_paths: glob patterns for sparse checkout in agent worktrees'
1156
+ ],
1157
+ keys: ['dashboard', 'debug', 'depth_profiles', 'developer_profile', 'prd', 'spinner_tips', 'status_line', 'timeouts', 'ui', 'worktree']
1158
+ }
1159
+ ];
1160
+
1161
+ function sortKeys(obj) {
1162
+ if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) return obj;
1163
+ const sorted = {};
1164
+ for (const key of Object.keys(obj).sort()) {
1165
+ sorted[key] = sortKeys(obj[key]);
1166
+ }
1167
+ return sorted;
1168
+ }
1169
+
1170
+ function configEnsureComplete(config, defaults) {
1171
+ if (!defaults) defaults = CONFIG_DEFAULTS;
1172
+ const result = { ...config };
1173
+ for (const [key, defaultValue] of Object.entries(defaults)) {
1174
+ if (result[key] === undefined) {
1175
+ // Key not in config — use default (deep clone objects/arrays)
1176
+ result[key] = (typeof defaultValue === 'object' && defaultValue !== null)
1177
+ ? JSON.parse(JSON.stringify(defaultValue))
1178
+ : defaultValue;
1179
+ } else if (
1180
+ typeof defaultValue === 'object' && defaultValue !== null && !Array.isArray(defaultValue) &&
1181
+ typeof result[key] === 'object' && result[key] !== null && !Array.isArray(result[key])
1182
+ ) {
1183
+ // Both are objects — merge recursively (config values take precedence)
1184
+ result[key] = configEnsureComplete(result[key], defaultValue);
1185
+ }
1186
+ // Scalar or array in config already set — config wins
1187
+ }
1188
+ return result;
1189
+ }
1190
+
1191
+ function resolveConfig(dir) {
1192
+ const config = configLoad(dir) || {};
1193
+
1194
+ // Apply feature defaults
1195
+ if (!config.features) config.features = {};
1196
+ if (config.features.graduated_verification === undefined) config.features.graduated_verification = true;
1197
+ if (config.features.self_verification === undefined) config.features.self_verification = true;
1198
+
1199
+ // Apply autonomy defaults
1200
+ if (!config.autonomy) config.autonomy = {};
1201
+ if (config.autonomy.level === undefined) config.autonomy.level = 'supervised';
1202
+
1203
+ return config;
1204
+ }
1205
+
1206
+ function resolveDepthProfile(config) {
1207
+ const depth = (config && config.depth) || 'standard';
1208
+ const defaults = DEPTH_PROFILE_DEFAULTS[depth] || DEPTH_PROFILE_DEFAULTS.standard;
1209
+
1210
+ // Merge user overrides if present
1211
+ const userOverrides = (config && config.depth_profiles && config.depth_profiles[depth]) || {};
1212
+ const profile = { ...defaults, ...userOverrides };
1213
+
1214
+ return { depth, profile };
1215
+ }
1216
+
1217
+ function configFormat(config) {
1218
+ // 1. Strip guide/comment keys and ensure all defaults present
1219
+ const clean = {};
1220
+ for (const [k, v] of Object.entries(config)) {
1221
+ if (!k.startsWith('_guide') && !k.startsWith('_comment')) {
1222
+ clean[k] = v;
1223
+ }
1224
+ }
1225
+ // Also strip _comment keys from features if present
1226
+ if (clean.features) {
1227
+ const cleanFeatures = {};
1228
+ for (const [k, v] of Object.entries(clean.features)) {
1229
+ if (!k.startsWith('_comment')) cleanFeatures[k] = v;
1230
+ }
1231
+ clean.features = cleanFeatures;
1232
+ }
1233
+ const full = configEnsureComplete(clean);
1234
+
1235
+ // 2. Build ordered output object
1236
+ const output = {};
1237
+ const placed = new Set();
1238
+
1239
+ for (const section of CONFIG_SECTIONS) {
1240
+ // Add guide comment
1241
+ output[section.guide] = section.lines;
1242
+
1243
+ // Add config keys in alphabetical order
1244
+ for (const key of section.keys) {
1245
+ if (full[key] !== undefined) {
1246
+ output[key] = sortKeys(full[key]);
1247
+ placed.add(key);
1248
+ }
1249
+ }
1250
+ }
1251
+
1252
+ // 3. Add any remaining keys not covered by sections (future-proofing)
1253
+ const remaining = Object.keys(full).filter(k => !placed.has(k) && !k.startsWith('_'));
1254
+ if (remaining.length > 0) {
1255
+ for (const key of remaining.sort()) {
1256
+ output[key] = sortKeys(full[key]);
1257
+ }
1258
+ }
1259
+
1260
+ return JSON.stringify(output, null, 2) + '\n';
1261
+ }
1262
+
1263
+ function configWrite(planningDir, config) {
1264
+ const configPath = path.join(planningDir, 'config.json');
1265
+ const formatted = configFormat(config);
1266
+ const result = lockedFileUpdate(configPath, () => formatted);
1267
+ if (!result.success) {
1268
+ // Fallback: write without lock (availability over consistency)
1269
+ fs.writeFileSync(configPath, formatted, 'utf8');
1270
+ }
1271
+ // Invalidate cache so next configLoad() picks up changes
1272
+ configClearCache();
1273
+ }
1274
+
1275
+ module.exports = {
1276
+ // Core config operations (from .cjs)
1277
+ configLoad,
1278
+ configClearCache,
1279
+ configValidate,
1280
+ configLoadDefaults,
1281
+ configSaveDefaults,
1282
+ configResolveDepth,
1283
+ configGet,
1284
+ configSet,
1285
+ configEnsureSection,
1286
+ // Hooks additions
1287
+ configEnsureComplete,
1288
+ configFormat,
1289
+ configWrite,
1290
+ resolveConfig,
1291
+ resolveDepthProfile,
1292
+ CONFIG_DEFAULTS,
1293
+ CONFIG_SECTIONS,
1294
+ // Depth profiles
1295
+ DEPTH_PROFILE_DEFAULTS,
1296
+ // Global defaults
1297
+ loadGlobalDefaults,
1298
+ saveGlobalDefaults,
1299
+ // User defaults
1300
+ loadUserDefaults,
1301
+ saveUserDefaults,
1302
+ mergeUserDefaults,
1303
+ USER_DEFAULTS_PATH,
1304
+ // CLI command handlers
1305
+ cmdConfigEnsureSection,
1306
+ cmdConfigSet,
1307
+ cmdConfigGet,
1308
+ };