@sienklogic/plan-build-run 2.19.0 → 2.19.1

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