@sienklogic/plan-build-run 2.21.0 → 2.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (983) hide show
  1. package/CHANGELOG.md +1331 -299
  2. package/CLAUDE.md +75 -40
  3. package/LICENSE +2 -1
  4. package/README.md +412 -177
  5. package/bin/install.js +2752 -0
  6. package/dashboard/bin/cli.cjs +96 -0
  7. package/dashboard/bin/stop.cjs +129 -0
  8. package/dashboard/eslint.config.js +37 -0
  9. package/dashboard/index.html +20 -0
  10. package/dashboard/package.json +27 -25
  11. package/dashboard/server/index.js +151 -0
  12. package/dashboard/server/lib/frontmatter.js +92 -0
  13. package/dashboard/server/middleware/static.js +35 -0
  14. package/dashboard/server/package.json +16 -0
  15. package/dashboard/server/routes/agents.js +234 -0
  16. package/dashboard/server/routes/config.js +64 -0
  17. package/dashboard/server/routes/health.js +98 -0
  18. package/dashboard/server/routes/incidents.js +78 -0
  19. package/dashboard/server/routes/intel.js +69 -0
  20. package/dashboard/server/routes/memory.js +107 -0
  21. package/dashboard/server/routes/planning.js +234 -0
  22. package/dashboard/server/routes/progress.js +77 -0
  23. package/dashboard/server/routes/projects.js +36 -0
  24. package/dashboard/server/routes/requirements.js +40 -0
  25. package/dashboard/server/routes/roadmap.js +69 -0
  26. package/dashboard/server/routes/sessions.js +70 -0
  27. package/dashboard/server/routes/status.js +25 -0
  28. package/dashboard/server/routes/telemetry.js +233 -0
  29. package/dashboard/server/services/file-watcher.js +105 -0
  30. package/dashboard/server/services/planning-reader.js +727 -0
  31. package/dashboard/server/test/cli.test.js +34 -0
  32. package/dashboard/server/test/frontmatter.test.js +104 -0
  33. package/dashboard/server/test/isolation.test.js +32 -0
  34. package/dashboard/server/test/planning-reader.test.js +151 -0
  35. package/dashboard/server/test/routes.test.js +91 -0
  36. package/dashboard/server/test/ws.test.js +81 -0
  37. package/dashboard/server/ws.js +96 -0
  38. package/dashboard/src/App.jsx +165 -0
  39. package/dashboard/src/components/charts/BudgetBars.jsx +42 -0
  40. package/dashboard/src/components/charts/ContextRadar.jsx +34 -0
  41. package/dashboard/src/components/charts/PhaseDonut.jsx +66 -0
  42. package/dashboard/src/components/charts/SuccessTrend.jsx +45 -0
  43. package/dashboard/src/components/charts/TokenChart.jsx +55 -0
  44. package/dashboard/src/components/charts/index.js +5 -0
  45. package/dashboard/src/components/config/CfgSection.jsx +93 -0
  46. package/dashboard/src/components/layout/Header.jsx +89 -0
  47. package/dashboard/src/components/layout/ProjectSwitcher.jsx +160 -0
  48. package/dashboard/src/components/layout/Sidebar.jsx +161 -0
  49. package/dashboard/src/components/ui/AutoModeBanner.jsx +138 -0
  50. package/dashboard/src/components/ui/BackButton.jsx +27 -0
  51. package/dashboard/src/components/ui/Badge.jsx +27 -0
  52. package/dashboard/src/components/ui/Card.jsx +23 -0
  53. package/dashboard/src/components/ui/ChartTooltip.jsx +48 -0
  54. package/dashboard/src/components/ui/CheckpointBox.jsx +110 -0
  55. package/dashboard/src/components/ui/CodeBlock.jsx +27 -0
  56. package/dashboard/src/components/ui/ConfidenceBadge.jsx +20 -0
  57. package/dashboard/src/components/ui/ConfirmModal.jsx +161 -0
  58. package/dashboard/src/components/ui/ConnectionBanner.jsx +60 -0
  59. package/dashboard/src/components/ui/ErrorBoundary.jsx +106 -0
  60. package/dashboard/src/components/ui/ErrorBox.jsx +107 -0
  61. package/dashboard/src/components/ui/KeyValue.jsx +33 -0
  62. package/dashboard/src/components/ui/LoadingSkeleton.jsx +84 -0
  63. package/dashboard/src/components/ui/MetricCard.jsx +58 -0
  64. package/dashboard/src/components/ui/NextUpBlock.jsx +92 -0
  65. package/dashboard/src/components/ui/NumberInput.jsx +44 -0
  66. package/dashboard/src/components/ui/PBRBanner.jsx +47 -0
  67. package/dashboard/src/components/ui/PipelineView.jsx +130 -0
  68. package/dashboard/src/components/ui/ProgressBar.jsx +28 -0
  69. package/dashboard/src/components/ui/ProgressDisplay.jsx +47 -0
  70. package/dashboard/src/components/ui/QualityGateBadge.jsx +15 -0
  71. package/dashboard/src/components/ui/SectionTitle.jsx +35 -0
  72. package/dashboard/src/components/ui/SelectInput.jsx +45 -0
  73. package/dashboard/src/components/ui/StatusDot.jsx +51 -0
  74. package/dashboard/src/components/ui/StatusSymbol.jsx +49 -0
  75. package/dashboard/src/components/ui/TabBar.jsx +41 -0
  76. package/dashboard/src/components/ui/TextInput.jsx +42 -0
  77. package/dashboard/src/components/ui/Toast.jsx +117 -0
  78. package/dashboard/src/components/ui/Toggle.jsx +70 -0
  79. package/dashboard/src/components/ui/index.js +29 -0
  80. package/dashboard/src/hooks/useDocumentTitle.js +16 -0
  81. package/dashboard/src/hooks/useFetch.js +50 -0
  82. package/dashboard/src/hooks/useToast.jsx +43 -0
  83. package/dashboard/src/hooks/useWebSocket.js +103 -0
  84. package/dashboard/src/lib/api.js +112 -0
  85. package/dashboard/src/lib/configSchema.js +189 -0
  86. package/dashboard/src/lib/constants.js +22 -0
  87. package/dashboard/src/main.jsx +15 -0
  88. package/dashboard/src/pages/AgentsPage.jsx +191 -0
  89. package/dashboard/src/pages/ConfigPage.jsx +298 -0
  90. package/dashboard/src/pages/HooksPage.jsx +412 -0
  91. package/dashboard/src/pages/IncidentsPage.jsx +135 -0
  92. package/dashboard/src/pages/IntelPage.jsx +193 -0
  93. package/dashboard/src/pages/LiveFeed.jsx +274 -0
  94. package/dashboard/src/pages/MemoryPage.jsx +107 -0
  95. package/dashboard/src/pages/OnboardingPage.jsx +117 -0
  96. package/dashboard/src/pages/Overview.jsx +360 -0
  97. package/dashboard/src/pages/PhaseDetailView.jsx +216 -0
  98. package/dashboard/src/pages/PlanningPage.jsx +181 -0
  99. package/dashboard/src/pages/ProgressPage.jsx +249 -0
  100. package/dashboard/src/pages/ResearchPage.jsx +129 -0
  101. package/dashboard/src/pages/RoadmapPage.jsx +251 -0
  102. package/dashboard/src/pages/SessionsPage.jsx +117 -0
  103. package/dashboard/src/pages/Telemetry.jsx +166 -0
  104. package/dashboard/src/pages/planning/DecisionsTab.jsx +153 -0
  105. package/dashboard/src/pages/planning/FilesTab.jsx +420 -0
  106. package/dashboard/src/pages/planning/MilestoneDetail.jsx +319 -0
  107. package/dashboard/src/pages/planning/MilestonesTab.jsx +151 -0
  108. package/dashboard/src/pages/planning/NotesTab.jsx +251 -0
  109. package/dashboard/src/pages/planning/PhasesTab.jsx +218 -0
  110. package/dashboard/src/pages/planning/QuickTab.jsx +50 -0
  111. package/dashboard/src/pages/planning/ResearchTab.jsx +103 -0
  112. package/dashboard/src/pages/planning/TodosTab.jsx +297 -0
  113. package/dashboard/src/theme/ThemeProvider.jsx +38 -0
  114. package/dashboard/src/theme/tokens.js +17 -0
  115. package/dashboard/tests/components/ConfirmModal.test.jsx +179 -0
  116. package/dashboard/tests/components/ConnectionBanner.test.jsx +37 -0
  117. package/dashboard/tests/components/ErrorBoundary.test.jsx +59 -0
  118. package/dashboard/tests/components/LoadingSkeleton.test.jsx +46 -0
  119. package/dashboard/tests/components/ToastContainer.test.jsx +47 -0
  120. package/dashboard/tests/components/Toggle.test.jsx +61 -0
  121. package/dashboard/tests/hooks/useFetch.test.jsx +77 -0
  122. package/dashboard/tests/hooks/useToast.test.jsx +78 -0
  123. package/dashboard/tests/hooks/useWebSocket.test.jsx +128 -0
  124. package/dashboard/tests/pages/ConfigPage.test.jsx +199 -0
  125. package/dashboard/tests/pages/PlanningPage.test.jsx +119 -0
  126. package/dashboard/tests/pages/planning/FilesTab.test.jsx +198 -0
  127. package/dashboard/tests/pages/planning/NotesTab.test.jsx +178 -0
  128. package/dashboard/tests/pages/planning/TodosTab.test.jsx +188 -0
  129. package/dashboard/tests/performance.test.jsx +46 -0
  130. package/dashboard/tests/routes/config.test.js +98 -0
  131. package/dashboard/tests/routes/health.test.js +40 -0
  132. package/dashboard/tests/routes/planning.test.js +112 -0
  133. package/dashboard/tests/routes/roadmap.test.js +91 -0
  134. package/dashboard/tests/routes/status.test.js +131 -0
  135. package/dashboard/tests/server/planning-reader.test.js +153 -0
  136. package/dashboard/tests/setup.js +7 -0
  137. package/dashboard/vite.config.js +41 -0
  138. package/package.json +56 -41
  139. package/plan-build-run/bin/config-schema.json +1298 -0
  140. package/plugins/pbr/.claude-plugin/plugin.json +1 -1
  141. package/plugins/pbr/CLAUDE.md +19 -0
  142. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +1 -1
  143. package/plugins/pbr/agents/advisor-researcher.md +101 -0
  144. package/plugins/pbr/agents/audit.md +207 -89
  145. package/plugins/pbr/agents/codebase-mapper.md +158 -23
  146. package/plugins/pbr/agents/debugger.md +212 -34
  147. package/plugins/pbr/agents/dev-sync.md +206 -0
  148. package/plugins/pbr/agents/executor.md +737 -39
  149. package/plugins/pbr/agents/general.md +71 -6
  150. package/plugins/pbr/agents/integration-checker.md +148 -30
  151. package/plugins/pbr/agents/intel-updater.md +332 -0
  152. package/plugins/pbr/agents/nyquist-auditor.md +254 -0
  153. package/plugins/pbr/agents/plan-checker.md +268 -66
  154. package/plugins/pbr/agents/planner.md +451 -42
  155. package/plugins/pbr/agents/researcher.md +219 -36
  156. package/plugins/pbr/agents/roadmapper.md +398 -0
  157. package/plugins/pbr/agents/synthesizer.md +166 -26
  158. package/plugins/pbr/agents/ui-checker.md +204 -0
  159. package/plugins/pbr/agents/ui-researcher.md +224 -0
  160. package/plugins/pbr/agents/verifier.md +571 -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 +76 -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 +213 -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 +227 -0
  226. package/plugins/pbr/dist/check-read-first.js +345 -0
  227. package/plugins/pbr/dist/check-roadmap-sync.js +507 -0
  228. package/plugins/pbr/dist/check-skill-workflow.js +354 -0
  229. package/plugins/pbr/dist/check-state-sync.js +676 -0
  230. package/plugins/pbr/dist/check-subagent-output.js +425 -0
  231. package/plugins/pbr/dist/check-summary-gate.js +188 -0
  232. package/plugins/pbr/dist/context-bridge.js +425 -0
  233. package/plugins/pbr/dist/context-budget-check.js +442 -0
  234. package/plugins/pbr/dist/context-quality.js +271 -0
  235. package/plugins/pbr/dist/enforce-context-budget.js +138 -0
  236. package/plugins/pbr/dist/enforce-pbr-workflow.js +277 -0
  237. package/plugins/pbr/dist/event-handler.js +212 -0
  238. package/plugins/pbr/dist/event-logger.js +125 -0
  239. package/plugins/pbr/dist/feedback-loop.js +155 -0
  240. package/plugins/pbr/dist/graph-update.js +422 -0
  241. package/plugins/pbr/dist/hook-logger.js +114 -0
  242. package/plugins/pbr/dist/hook-server-client.js +361 -0
  243. package/plugins/pbr/dist/hook-server.js +664 -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 +367 -0
  249. package/plugins/pbr/dist/log-tool-failure.js +140 -0
  250. package/plugins/pbr/dist/milestone-learnings.js +519 -0
  251. package/plugins/pbr/dist/pbr-tools.js +493 -0
  252. package/plugins/pbr/dist/post-bash-triage.js +96 -0
  253. package/plugins/pbr/dist/post-compact.js +135 -0
  254. package/plugins/pbr/dist/post-hoc.js +237 -0
  255. package/plugins/pbr/dist/post-write-dispatch.js +243 -0
  256. package/plugins/pbr/dist/post-write-quality.js +208 -0
  257. package/plugins/pbr/dist/pre-bash-dispatch.js +212 -0
  258. package/plugins/pbr/dist/pre-skill-dispatch.js +114 -0
  259. package/plugins/pbr/dist/pre-task-dispatch.js +269 -0
  260. package/plugins/pbr/dist/pre-write-dispatch.js +234 -0
  261. package/plugins/pbr/dist/progress-tracker.js +173 -0
  262. package/plugins/pbr/dist/prompt-guard.js +114 -0
  263. package/plugins/pbr/dist/prompt-routing.js +209 -0
  264. package/plugins/pbr/dist/quick-status.js +179 -0
  265. package/plugins/pbr/dist/record-incident.js +37 -0
  266. package/plugins/pbr/dist/run-hook.js +132 -0
  267. package/plugins/pbr/dist/session-cleanup.js +653 -0
  268. package/plugins/pbr/dist/session-tracker.js +124 -0
  269. package/plugins/pbr/dist/status-line.js +849 -0
  270. package/plugins/pbr/dist/suggest-compact.js +307 -0
  271. package/plugins/pbr/dist/sync-context-to-claude.js +100 -0
  272. package/plugins/pbr/dist/task-completed.js +206 -0
  273. package/plugins/pbr/dist/track-context-budget.js +432 -0
  274. package/plugins/pbr/dist/track-user-gates.js +88 -0
  275. package/plugins/pbr/dist/trust-tracker.js +193 -0
  276. package/plugins/pbr/dist/validate-commit.js +233 -0
  277. package/plugins/pbr/dist/validate-skill-args.js +222 -0
  278. package/plugins/pbr/dist/validate-task.js +271 -0
  279. package/plugins/pbr/dist/worktree-create.js +144 -0
  280. package/plugins/pbr/dist/worktree-remove.js +147 -0
  281. package/plugins/pbr/hooks/hooks.json +137 -65
  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/assumptions.md +42 -0
  297. package/plugins/pbr/references/checkpoints.md +723 -104
  298. package/plugins/pbr/references/config-reference.md +387 -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/few-shot-examples/audit.md +77 -0
  303. package/plugins/pbr/references/few-shot-examples/check-plan-format.md +172 -0
  304. package/plugins/pbr/references/few-shot-examples/check-subagent-output.md +118 -0
  305. package/plugins/pbr/references/few-shot-examples/integration-checker.md +70 -0
  306. package/plugins/pbr/references/few-shot-examples/nyquist-auditor.md +83 -0
  307. package/plugins/pbr/references/few-shot-examples/plan-checker.md +73 -0
  308. package/plugins/pbr/references/few-shot-examples/ui-checker.md +71 -0
  309. package/plugins/pbr/references/few-shot-examples/verifier.md +109 -0
  310. package/plugins/pbr/references/git-integration.md +110 -27
  311. package/plugins/pbr/references/git-planning-commit.md +35 -0
  312. package/plugins/pbr/references/model-profile-resolution.md +34 -0
  313. package/plugins/pbr/references/model-profiles.md +90 -7
  314. package/plugins/pbr/references/model-selection.md +1 -1
  315. package/plugins/pbr/references/node-repair.md +48 -0
  316. package/plugins/pbr/references/plan-authoring.md +65 -0
  317. package/plugins/pbr/references/plan-format.md +184 -10
  318. package/plugins/pbr/references/questioning.md +138 -49
  319. package/plugins/pbr/references/reading-verification.md +4 -4
  320. package/plugins/pbr/references/tdd.md +263 -0
  321. package/plugins/pbr/references/thinking-models-planning.md +47 -0
  322. package/plugins/pbr/references/thinking-models-verification.md +44 -0
  323. package/plugins/pbr/references/ui-brand.md +449 -0
  324. package/plugins/pbr/references/verification-overrides.md +39 -0
  325. package/plugins/pbr/references/verification-patterns.md +529 -113
  326. package/plugins/pbr/scripts/architecture-guard.js +76 -0
  327. package/plugins/pbr/scripts/audit-checks/behavioral-compliance.js +2098 -0
  328. package/plugins/pbr/scripts/audit-checks/error-analysis.js +989 -0
  329. package/plugins/pbr/scripts/audit-checks/feature-verification.js +723 -0
  330. package/plugins/pbr/scripts/audit-checks/index.js +433 -0
  331. package/plugins/pbr/scripts/audit-checks/infrastructure.js +816 -0
  332. package/plugins/pbr/scripts/audit-checks/quality-metrics.js +455 -0
  333. package/plugins/pbr/scripts/audit-checks/session-quality.js +980 -0
  334. package/plugins/pbr/scripts/audit-checks/si-agent-hook-config-checks.js +396 -0
  335. package/plugins/pbr/scripts/audit-checks/si-cross-cutting-checks.js +272 -0
  336. package/plugins/pbr/scripts/audit-checks/si-skill-checks.js +424 -0
  337. package/plugins/pbr/scripts/audit-checks/workflow-compliance.js +1175 -0
  338. package/plugins/pbr/scripts/audit-dimensions.js +556 -0
  339. package/plugins/pbr/scripts/auto-continue.js +192 -37
  340. package/plugins/pbr/scripts/block-skill-self-read.js +124 -0
  341. package/plugins/pbr/scripts/check-agent-state-write.js +63 -0
  342. package/plugins/pbr/scripts/check-config-change.js +84 -1
  343. package/plugins/pbr/scripts/check-cross-plugin-sync.js +93 -0
  344. package/plugins/pbr/scripts/check-dangerous-commands.js +18 -5
  345. package/plugins/pbr/scripts/check-direct-state-write.js +37 -0
  346. package/plugins/pbr/scripts/check-phase-boundary.js +3 -8
  347. package/plugins/pbr/scripts/check-plan-format.js +153 -278
  348. package/plugins/pbr/scripts/check-read-first.js +345 -0
  349. package/plugins/pbr/scripts/check-roadmap-sync.js +174 -19
  350. package/plugins/pbr/scripts/check-skill-workflow.js +24 -27
  351. package/plugins/pbr/scripts/check-state-sync.js +360 -218
  352. package/plugins/pbr/scripts/check-subagent-output.js +308 -273
  353. package/plugins/pbr/scripts/check-summary-gate.js +5 -15
  354. package/plugins/pbr/scripts/commands/benchmarks.js +195 -0
  355. package/plugins/pbr/scripts/commands/calibrate.js +530 -0
  356. package/plugins/pbr/scripts/commands/config.js +72 -0
  357. package/plugins/pbr/scripts/commands/misc.js +779 -0
  358. package/plugins/pbr/scripts/commands/phase.js +293 -0
  359. package/plugins/pbr/scripts/commands/roadmap.js +75 -0
  360. package/plugins/pbr/scripts/commands/state.js +84 -0
  361. package/plugins/pbr/scripts/commands/stress-test.js +349 -0
  362. package/plugins/pbr/scripts/commands/todo.js +191 -0
  363. package/plugins/pbr/scripts/commands/verify.js +169 -0
  364. package/plugins/pbr/scripts/config-schema.json +1183 -95
  365. package/plugins/pbr/scripts/context-bridge.js +425 -0
  366. package/plugins/pbr/scripts/context-budget-check.js +171 -16
  367. package/plugins/pbr/scripts/context-quality.js +271 -0
  368. package/plugins/pbr/scripts/enforce-context-budget.js +138 -0
  369. package/plugins/pbr/scripts/enforce-pbr-workflow.js +277 -0
  370. package/plugins/pbr/scripts/event-handler.js +137 -87
  371. package/plugins/pbr/scripts/event-logger.js +58 -25
  372. package/plugins/pbr/scripts/feedback-loop.js +155 -0
  373. package/plugins/pbr/scripts/graph-update.js +422 -0
  374. package/plugins/pbr/scripts/hook-logger.js +69 -35
  375. package/plugins/pbr/scripts/hook-server-client.js +361 -0
  376. package/plugins/pbr/scripts/hook-server.js +664 -0
  377. package/plugins/pbr/scripts/hooks-schema.json +12 -5
  378. package/plugins/pbr/scripts/instructions-loaded.js +173 -0
  379. package/plugins/pbr/scripts/intent-router.cjs +147 -0
  380. package/plugins/pbr/scripts/intercept-plan-mode.js +52 -18
  381. package/plugins/pbr/scripts/lib/alternatives.js +203 -0
  382. package/plugins/pbr/scripts/lib/audit.js +65 -0
  383. package/plugins/pbr/scripts/lib/auto-cleanup.js +221 -0
  384. package/plugins/pbr/scripts/lib/auto-verify.js +123 -0
  385. package/plugins/pbr/scripts/lib/benchmark.js +190 -0
  386. package/plugins/pbr/scripts/lib/build.js +719 -0
  387. package/plugins/pbr/scripts/lib/ci-fix-loop.js +228 -0
  388. package/plugins/pbr/scripts/lib/commands.js +483 -0
  389. package/plugins/pbr/scripts/lib/compound.js +222 -0
  390. package/plugins/pbr/scripts/lib/config-cache.js +83 -0
  391. package/plugins/pbr/scripts/lib/config.js +1469 -0
  392. package/plugins/pbr/scripts/lib/context.js +254 -0
  393. package/plugins/pbr/scripts/lib/contextual-help.js +183 -0
  394. package/plugins/pbr/scripts/lib/convention-detector.js +413 -0
  395. package/plugins/pbr/scripts/lib/core.js +1585 -0
  396. package/plugins/pbr/scripts/lib/dashboard-launch.js +364 -0
  397. package/plugins/pbr/scripts/lib/data-hygiene.js +179 -0
  398. package/plugins/pbr/scripts/lib/decision-extraction.js +183 -0
  399. package/plugins/pbr/scripts/lib/decisions.js +194 -0
  400. package/plugins/pbr/scripts/lib/dependency-break.js +147 -0
  401. package/plugins/pbr/scripts/lib/format-validators.js +1049 -0
  402. package/plugins/pbr/scripts/lib/frontmatter.js +302 -0
  403. package/plugins/pbr/scripts/lib/gates/advisories.js +133 -0
  404. package/plugins/pbr/scripts/lib/gates/build-dependency.js +118 -0
  405. package/plugins/pbr/scripts/lib/gates/build-executor.js +106 -0
  406. package/plugins/pbr/scripts/lib/gates/doc-existence.js +46 -0
  407. package/plugins/pbr/scripts/lib/gates/helpers.js +98 -0
  408. package/plugins/pbr/scripts/lib/gates/inline-execution.js +187 -0
  409. package/plugins/pbr/scripts/lib/gates/milestone-complete.js +139 -0
  410. package/plugins/pbr/scripts/lib/gates/milestone-summary.js +121 -0
  411. package/plugins/pbr/scripts/lib/gates/multi-phase-loader.js +149 -0
  412. package/plugins/pbr/scripts/lib/gates/plan-executor.js +36 -0
  413. package/plugins/pbr/scripts/lib/gates/plan-validation.js +115 -0
  414. package/plugins/pbr/scripts/lib/gates/quick-executor.js +78 -0
  415. package/plugins/pbr/scripts/lib/gates/review-planner.js +63 -0
  416. package/plugins/pbr/scripts/lib/gates/review-verifier.js +71 -0
  417. package/plugins/pbr/scripts/lib/gates/rich-agent-context.js +148 -0
  418. package/plugins/pbr/scripts/lib/gates/sprint-preflight.js +30 -0
  419. package/plugins/pbr/scripts/lib/gates/user-confirmation.js +95 -0
  420. package/plugins/pbr/scripts/lib/graph-cli.js +89 -0
  421. package/plugins/pbr/scripts/lib/graph.js +553 -0
  422. package/plugins/pbr/scripts/lib/handoff-validators.js +224 -0
  423. package/plugins/pbr/scripts/lib/health-checks.js +107 -0
  424. package/plugins/pbr/scripts/lib/health-phase06.js +120 -0
  425. package/plugins/pbr/scripts/lib/health.js +132 -0
  426. package/plugins/pbr/scripts/lib/help.js +100 -0
  427. package/plugins/pbr/scripts/lib/history.js +150 -0
  428. package/plugins/pbr/scripts/lib/impact-analysis.js +319 -0
  429. package/plugins/pbr/scripts/lib/incidents.js +190 -0
  430. package/plugins/pbr/scripts/lib/init.js +643 -0
  431. package/plugins/pbr/scripts/lib/insights-parser.js +320 -0
  432. package/plugins/pbr/scripts/lib/intel.js +653 -0
  433. package/plugins/pbr/scripts/lib/learnings.js +511 -0
  434. package/plugins/pbr/scripts/lib/migrate.js +309 -0
  435. package/plugins/pbr/scripts/lib/milestone.js +306 -0
  436. package/plugins/pbr/scripts/lib/msys-path.js +20 -0
  437. package/plugins/pbr/scripts/lib/negative-knowledge.js +194 -0
  438. package/plugins/pbr/scripts/lib/notification-throttle.js +141 -0
  439. package/plugins/pbr/scripts/lib/onboarding-generator.js +288 -0
  440. package/plugins/pbr/scripts/lib/parse-args.js +134 -0
  441. package/plugins/pbr/scripts/lib/pattern-routing.js +55 -0
  442. package/plugins/pbr/scripts/lib/patterns.js +272 -0
  443. package/plugins/pbr/scripts/lib/perf.js +190 -0
  444. package/plugins/pbr/scripts/lib/phase.js +1043 -0
  445. package/plugins/pbr/scripts/lib/pid-lock.js +156 -0
  446. package/plugins/pbr/scripts/lib/post-hoc.js +160 -0
  447. package/plugins/pbr/scripts/lib/pre-commit-checks.js +220 -0
  448. package/plugins/pbr/scripts/lib/pre-research.js +126 -0
  449. package/plugins/pbr/scripts/lib/premature-completion.js +312 -0
  450. package/plugins/pbr/scripts/lib/preview.js +174 -0
  451. package/plugins/pbr/scripts/lib/progress-visualization.js +296 -0
  452. package/plugins/pbr/scripts/lib/quick-init.js +131 -0
  453. package/plugins/pbr/scripts/lib/reference.js +236 -0
  454. package/plugins/pbr/scripts/lib/requirements.js +153 -0
  455. package/plugins/pbr/scripts/lib/resolve-root.js +66 -0
  456. package/plugins/pbr/scripts/lib/reverse-spec.js +259 -0
  457. package/plugins/pbr/scripts/lib/roadmap.js +1089 -0
  458. package/plugins/pbr/scripts/lib/security-scan.js +200 -0
  459. package/plugins/pbr/scripts/lib/session-briefing.js +918 -0
  460. package/plugins/pbr/scripts/lib/skill-section.js +99 -0
  461. package/plugins/pbr/scripts/lib/smart-next-task.js +198 -0
  462. package/plugins/pbr/scripts/lib/snapshot-manager.js +232 -0
  463. package/plugins/pbr/scripts/lib/spec-diff.js +209 -0
  464. package/plugins/pbr/scripts/lib/spec-engine.js +189 -0
  465. package/plugins/pbr/scripts/lib/spot-check.js +539 -0
  466. package/plugins/pbr/scripts/lib/state-queue.js +171 -0
  467. package/plugins/pbr/scripts/lib/state.js +1082 -0
  468. package/plugins/pbr/scripts/lib/status-render.js +511 -0
  469. package/plugins/pbr/scripts/lib/step-verify.js +149 -0
  470. package/plugins/pbr/scripts/lib/subagent-validators.js +1119 -0
  471. package/plugins/pbr/scripts/lib/suggest-next.js +435 -0
  472. package/plugins/pbr/scripts/lib/tech-debt-scanner.js +116 -0
  473. package/plugins/pbr/scripts/lib/templates.js +362 -0
  474. package/plugins/pbr/scripts/lib/test-selection.js +163 -0
  475. package/plugins/pbr/scripts/lib/todo.js +300 -0
  476. package/plugins/pbr/scripts/lib/verify.js +1561 -0
  477. package/plugins/pbr/scripts/log-notification.js +131 -0
  478. package/plugins/pbr/scripts/log-subagent.js +221 -18
  479. package/plugins/pbr/scripts/log-tool-failure.js +60 -8
  480. package/plugins/pbr/scripts/milestone-learnings.js +519 -0
  481. package/plugins/pbr/scripts/package.json +1 -1
  482. package/plugins/pbr/scripts/pbr-tools.js +362 -1247
  483. package/plugins/pbr/scripts/post-bash-triage.js +96 -0
  484. package/plugins/pbr/scripts/post-compact.js +135 -0
  485. package/plugins/pbr/scripts/post-hoc.js +237 -0
  486. package/plugins/pbr/scripts/post-write-dispatch.js +201 -31
  487. package/plugins/pbr/scripts/post-write-quality.js +4 -3
  488. package/plugins/pbr/scripts/pre-bash-dispatch.js +147 -51
  489. package/plugins/pbr/scripts/pre-skill-dispatch.js +114 -0
  490. package/plugins/pbr/scripts/pre-task-dispatch.js +269 -0
  491. package/plugins/pbr/scripts/pre-write-dispatch.js +170 -73
  492. package/plugins/pbr/scripts/progress-tracker.js +121 -324
  493. package/plugins/pbr/scripts/prompt-guard.js +114 -0
  494. package/plugins/pbr/scripts/prompt-routing.js +209 -0
  495. package/plugins/pbr/scripts/quick-status.js +179 -0
  496. package/plugins/pbr/scripts/record-incident.js +37 -0
  497. package/plugins/pbr/scripts/risk-classifier.cjs +123 -0
  498. package/plugins/pbr/scripts/run-hook.js +63 -23
  499. package/plugins/pbr/scripts/session-cleanup.js +428 -29
  500. package/plugins/pbr/scripts/session-tracker.js +124 -0
  501. package/plugins/pbr/scripts/status-line.js +593 -32
  502. package/plugins/pbr/scripts/suggest-compact.js +201 -13
  503. package/plugins/pbr/scripts/sync-context-to-claude.js +100 -0
  504. package/plugins/pbr/scripts/task-completed.js +165 -4
  505. package/plugins/pbr/scripts/test/config.test.js +126 -0
  506. package/plugins/pbr/scripts/test/cross-platform.test.js +120 -0
  507. package/plugins/pbr/scripts/test/fixtures/config.json +20 -0
  508. package/plugins/pbr/scripts/test/fixtures/plan.md +54 -0
  509. package/plugins/pbr/scripts/test/fixtures/project.md +30 -0
  510. package/plugins/pbr/scripts/test/fixtures/roadmap.md +55 -0
  511. package/plugins/pbr/scripts/test/fixtures/state.md +60 -0
  512. package/plugins/pbr/scripts/test/fixtures/summary.md +35 -0
  513. package/plugins/pbr/scripts/test/fixtures.test.js +184 -0
  514. package/plugins/pbr/scripts/test/phase.test.js +142 -0
  515. package/plugins/pbr/scripts/test/roadmap.test.js +96 -0
  516. package/plugins/pbr/scripts/test/state.test.js +155 -0
  517. package/plugins/pbr/scripts/track-context-budget.js +368 -104
  518. package/plugins/pbr/scripts/track-user-gates.js +88 -0
  519. package/plugins/pbr/scripts/trust-tracker.js +193 -0
  520. package/plugins/pbr/scripts/validate-commit.js +59 -26
  521. package/plugins/pbr/scripts/validate-skill-args.js +87 -15
  522. package/plugins/pbr/scripts/validate-task.js +83 -627
  523. package/plugins/pbr/scripts/worktree-create.js +144 -0
  524. package/plugins/pbr/scripts/worktree-remove.js +147 -0
  525. package/plugins/pbr/skills/audit/SKILL.md +195 -24
  526. package/plugins/pbr/skills/audit-fix/SKILL.md +326 -0
  527. package/plugins/pbr/skills/autonomous/SKILL.md +551 -0
  528. package/plugins/pbr/skills/backlog/SKILL.md +56 -0
  529. package/plugins/pbr/skills/begin/SKILL.md +508 -153
  530. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +1 -2
  531. package/plugins/pbr/skills/begin/templates/config.json.tmpl +419 -36
  532. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +28 -0
  533. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +28 -3
  534. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +33 -5
  535. package/plugins/pbr/skills/build/SKILL.md +1180 -358
  536. package/plugins/pbr/skills/build/templates/continuation-prompt.md.tmpl +26 -0
  537. package/plugins/pbr/skills/build/templates/executor-prompt.md.tmpl +77 -0
  538. package/plugins/pbr/skills/build/templates/inline-verifier-prompt.md.tmpl +33 -0
  539. package/plugins/pbr/skills/build/templates/qa-round-context.md.tmpl +16 -0
  540. package/plugins/pbr/skills/config/SKILL.md +112 -9
  541. package/plugins/pbr/skills/continue/SKILL.md +113 -33
  542. package/plugins/pbr/skills/dashboard/SKILL.md +21 -9
  543. package/plugins/pbr/skills/debug/SKILL.md +70 -12
  544. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +12 -1
  545. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +12 -5
  546. package/plugins/pbr/skills/discuss/SKILL.md +205 -24
  547. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +21 -1
  548. package/plugins/pbr/skills/do/SKILL.md +119 -24
  549. package/plugins/pbr/skills/explore/SKILL.md +95 -20
  550. package/plugins/pbr/skills/fast/SKILL.md +94 -0
  551. package/plugins/pbr/skills/forensics/SKILL.md +144 -0
  552. package/plugins/pbr/skills/health/SKILL.md +35 -117
  553. package/plugins/pbr/skills/help/SKILL.md +83 -123
  554. package/plugins/pbr/skills/import/SKILL.md +332 -13
  555. package/plugins/pbr/skills/intel/SKILL.md +131 -0
  556. package/plugins/pbr/skills/list-phase-assumptions/SKILL.md +231 -0
  557. package/plugins/pbr/skills/milestone/SKILL.md +383 -274
  558. package/plugins/pbr/skills/milestone/templates/audit-output.md.tmpl +76 -0
  559. package/plugins/pbr/skills/milestone/templates/complete-output.md.tmpl +32 -0
  560. package/plugins/pbr/skills/milestone/templates/edge-cases.md +54 -0
  561. package/plugins/pbr/skills/milestone/templates/gaps-output.md.tmpl +25 -0
  562. package/plugins/pbr/skills/milestone/templates/integration-checker-prompt.md.tmpl +25 -0
  563. package/plugins/pbr/skills/milestone/templates/new-output.md.tmpl +29 -0
  564. package/plugins/pbr/skills/milestone-summary/SKILL.md +86 -0
  565. package/plugins/pbr/skills/note/SKILL.md +20 -4
  566. package/plugins/pbr/skills/pause/SKILL.md +54 -14
  567. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +33 -52
  568. package/plugins/pbr/skills/plan/SKILL.md +526 -280
  569. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +20 -2
  570. package/plugins/pbr/skills/plan/templates/completion-output.md.tmpl +27 -0
  571. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +43 -1
  572. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +21 -5
  573. package/plugins/pbr/skills/profile/SKILL.md +185 -0
  574. package/plugins/pbr/skills/profile-user/SKILL.md +227 -0
  575. package/plugins/pbr/skills/quick/SKILL.md +435 -100
  576. package/plugins/pbr/skills/release/SKILL.md +206 -0
  577. package/plugins/pbr/skills/resume/SKILL.md +170 -46
  578. package/plugins/pbr/skills/review/SKILL.md +233 -165
  579. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +7 -0
  580. package/plugins/pbr/skills/scan/SKILL.md +152 -106
  581. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +5 -56
  582. package/plugins/pbr/skills/seed/SKILL.md +87 -0
  583. package/plugins/pbr/skills/session-report/SKILL.md +130 -0
  584. package/plugins/pbr/skills/setup/SKILL.md +150 -202
  585. package/plugins/pbr/skills/shared/agent-context-enrichment.md +21 -0
  586. package/plugins/pbr/skills/shared/agent-type-resolution.md +32 -0
  587. package/plugins/pbr/skills/shared/commit-planning-docs.md +8 -0
  588. package/plugins/pbr/skills/shared/context-budget.md +66 -1
  589. package/plugins/pbr/skills/shared/context-loader-task.md +18 -11
  590. package/plugins/pbr/skills/shared/criterion-writing.md +58 -0
  591. package/plugins/pbr/skills/shared/digest-select.md +2 -2
  592. package/plugins/pbr/skills/shared/domain-probes.md +1 -1
  593. package/plugins/pbr/skills/shared/error-reporting.md +38 -60
  594. package/plugins/pbr/skills/shared/gate-prompts.md +4 -2
  595. package/plugins/pbr/skills/shared/memory-capture.md +48 -0
  596. package/plugins/pbr/skills/shared/phase-argument-parsing.md +4 -4
  597. package/plugins/pbr/skills/shared/revision-loop.md +24 -6
  598. package/plugins/pbr/skills/shared/state-update.md +49 -56
  599. package/plugins/pbr/skills/shared/universal-anti-patterns.md +27 -4
  600. package/plugins/pbr/skills/ship/SKILL.md +155 -0
  601. package/plugins/pbr/skills/stats/SKILL.md +110 -0
  602. package/plugins/pbr/skills/status/SKILL.md +185 -119
  603. package/plugins/pbr/skills/test/SKILL.md +254 -0
  604. package/plugins/pbr/skills/thread/SKILL.md +73 -0
  605. package/plugins/pbr/skills/todo/SKILL.md +28 -72
  606. package/plugins/pbr/skills/ui-phase/SKILL.md +180 -0
  607. package/plugins/pbr/skills/ui-review/SKILL.md +206 -0
  608. package/plugins/pbr/skills/undo/SKILL.md +221 -0
  609. package/plugins/pbr/skills/validate-phase/SKILL.md +362 -0
  610. package/plugins/pbr/templates/CONTEXT.md.tmpl +45 -20
  611. package/plugins/pbr/templates/DISCOVERY.md.tmpl +29 -0
  612. package/plugins/pbr/templates/DISCUSSION-LOG.md.tmpl +49 -0
  613. package/plugins/pbr/templates/HANDOFF.json.tmpl +30 -0
  614. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +18 -2
  615. package/plugins/pbr/templates/MILESTONE-AUDIT.md.tmpl +44 -0
  616. package/plugins/pbr/templates/PROJECT.md.tmpl +126 -0
  617. package/plugins/pbr/templates/REQUIREMENTS.md.tmpl +96 -0
  618. package/plugins/pbr/templates/RETROSPECTIVE.md.tmpl +43 -0
  619. package/plugins/pbr/templates/ROADMAP.md.tmpl +108 -14
  620. package/plugins/pbr/templates/SUMMARY-complex.md.tmpl +133 -0
  621. package/plugins/pbr/templates/SUMMARY-minimal.md.tmpl +55 -0
  622. package/plugins/pbr/templates/SUMMARY.md.tmpl +21 -0
  623. package/plugins/pbr/templates/UAT.md.tmpl +94 -0
  624. package/plugins/pbr/templates/UI-SPEC.md.tmpl +144 -0
  625. package/plugins/pbr/templates/VALIDATION.md.tmpl +94 -0
  626. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +54 -13
  627. package/plugins/pbr/templates/project-CONTEXT.md.tmpl +59 -0
  628. package/plugins/pbr/templates/research-outputs/ARCHITECTURE.md.tmpl +91 -0
  629. package/plugins/pbr/templates/research-outputs/FEATURES.md.tmpl +64 -0
  630. package/plugins/pbr/templates/research-outputs/PITFALLS.md.tmpl +50 -0
  631. package/plugins/pbr/templates/research-outputs/STACK.md.tmpl +63 -0
  632. package/plugins/pbr/templates/research-outputs/SUMMARY.md.tmpl +98 -0
  633. package/scripts/build-hooks.js +61 -0
  634. package/scripts/check-ci.js +100 -0
  635. package/scripts/clean-changelog.js +364 -0
  636. package/scripts/generate-derivatives.js +581 -0
  637. package/scripts/posttest.js +93 -0
  638. package/scripts/release.js +262 -0
  639. package/scripts/run-tests.cjs +29 -0
  640. package/scripts/test-wrapper.js +43 -0
  641. package/dashboard/bin/cli.js +0 -25
  642. package/dashboard/public/css/layout.css +0 -704
  643. package/dashboard/public/css/status-colors.css +0 -98
  644. package/dashboard/public/css/tokens.css +0 -59
  645. package/dashboard/public/js/htmx-title.js +0 -5
  646. package/dashboard/public/js/sidebar-toggle.js +0 -34
  647. package/dashboard/public/js/sse-client.js +0 -100
  648. package/dashboard/public/js/theme-toggle.js +0 -46
  649. package/dashboard/src/app.js +0 -91
  650. package/dashboard/src/middleware/current-phase.js +0 -24
  651. package/dashboard/src/middleware/errorHandler.js +0 -52
  652. package/dashboard/src/middleware/notFoundHandler.js +0 -9
  653. package/dashboard/src/repositories/planning.repository.js +0 -130
  654. package/dashboard/src/routes/events.routes.js +0 -45
  655. package/dashboard/src/routes/index.routes.js +0 -35
  656. package/dashboard/src/routes/pages.routes.js +0 -426
  657. package/dashboard/src/server.js +0 -42
  658. package/dashboard/src/services/analytics.service.js +0 -141
  659. package/dashboard/src/services/dashboard.service.js +0 -309
  660. package/dashboard/src/services/milestone.service.js +0 -222
  661. package/dashboard/src/services/notes.service.js +0 -50
  662. package/dashboard/src/services/phase.service.js +0 -232
  663. package/dashboard/src/services/project.service.js +0 -57
  664. package/dashboard/src/services/roadmap.service.js +0 -258
  665. package/dashboard/src/services/sse.service.js +0 -58
  666. package/dashboard/src/services/todo.service.js +0 -272
  667. package/dashboard/src/services/watcher.service.js +0 -48
  668. package/dashboard/src/utils/cache.js +0 -55
  669. package/dashboard/src/views/analytics.ejs +0 -5
  670. package/dashboard/src/views/coming-soon.ejs +0 -11
  671. package/dashboard/src/views/dependencies.ejs +0 -5
  672. package/dashboard/src/views/error.ejs +0 -20
  673. package/dashboard/src/views/index.ejs +0 -5
  674. package/dashboard/src/views/milestone-detail.ejs +0 -5
  675. package/dashboard/src/views/milestones.ejs +0 -5
  676. package/dashboard/src/views/notes.ejs +0 -5
  677. package/dashboard/src/views/partials/analytics-content.ejs +0 -90
  678. package/dashboard/src/views/partials/breadcrumbs.ejs +0 -14
  679. package/dashboard/src/views/partials/dashboard-content.ejs +0 -84
  680. package/dashboard/src/views/partials/dependencies-content.ejs +0 -48
  681. package/dashboard/src/views/partials/empty-state.ejs +0 -7
  682. package/dashboard/src/views/partials/footer.ejs +0 -3
  683. package/dashboard/src/views/partials/head.ejs +0 -30
  684. package/dashboard/src/views/partials/header.ejs +0 -21
  685. package/dashboard/src/views/partials/layout-bottom.ejs +0 -43
  686. package/dashboard/src/views/partials/layout-top.ejs +0 -16
  687. package/dashboard/src/views/partials/milestone-detail-content.ejs +0 -20
  688. package/dashboard/src/views/partials/milestones-content.ejs +0 -88
  689. package/dashboard/src/views/partials/notes-content.ejs +0 -23
  690. package/dashboard/src/views/partials/phase-content.ejs +0 -193
  691. package/dashboard/src/views/partials/phase-doc-content.ejs +0 -38
  692. package/dashboard/src/views/partials/phases-content.ejs +0 -124
  693. package/dashboard/src/views/partials/roadmap-content.ejs +0 -180
  694. package/dashboard/src/views/partials/sidebar.ejs +0 -99
  695. package/dashboard/src/views/partials/todo-create-content.ejs +0 -54
  696. package/dashboard/src/views/partials/todo-detail-content.ejs +0 -42
  697. package/dashboard/src/views/partials/todos-content.ejs +0 -97
  698. package/dashboard/src/views/phase-detail.ejs +0 -5
  699. package/dashboard/src/views/phase-doc.ejs +0 -5
  700. package/dashboard/src/views/phases.ejs +0 -5
  701. package/dashboard/src/views/roadmap.ejs +0 -5
  702. package/dashboard/src/views/todo-create.ejs +0 -5
  703. package/dashboard/src/views/todo-detail.ejs +0 -5
  704. package/dashboard/src/views/todos.ejs +0 -5
  705. package/plugins/copilot-pbr/CHANGELOG.md +0 -19
  706. package/plugins/copilot-pbr/README.md +0 -139
  707. package/plugins/copilot-pbr/agents/audit.agent.md +0 -113
  708. package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +0 -151
  709. package/plugins/copilot-pbr/agents/debugger.agent.md +0 -182
  710. package/plugins/copilot-pbr/agents/executor.agent.md +0 -267
  711. package/plugins/copilot-pbr/agents/general.agent.md +0 -88
  712. package/plugins/copilot-pbr/agents/integration-checker.agent.md +0 -119
  713. package/plugins/copilot-pbr/agents/plan-checker.agent.md +0 -208
  714. package/plugins/copilot-pbr/agents/planner.agent.md +0 -238
  715. package/plugins/copilot-pbr/agents/researcher.agent.md +0 -186
  716. package/plugins/copilot-pbr/agents/synthesizer.agent.md +0 -126
  717. package/plugins/copilot-pbr/agents/verifier.agent.md +0 -228
  718. package/plugins/copilot-pbr/hooks/hooks.json +0 -258
  719. package/plugins/copilot-pbr/plugin.json +0 -30
  720. package/plugins/copilot-pbr/references/agent-anti-patterns.md +0 -25
  721. package/plugins/copilot-pbr/references/agent-contracts.md +0 -297
  722. package/plugins/copilot-pbr/references/agent-interactions.md +0 -135
  723. package/plugins/copilot-pbr/references/agent-teams.md +0 -55
  724. package/plugins/copilot-pbr/references/checkpoints.md +0 -158
  725. package/plugins/copilot-pbr/references/common-bug-patterns.md +0 -14
  726. package/plugins/copilot-pbr/references/config-reference.md +0 -442
  727. package/plugins/copilot-pbr/references/continuation-format.md +0 -213
  728. package/plugins/copilot-pbr/references/deviation-rules.md +0 -113
  729. package/plugins/copilot-pbr/references/git-integration.md +0 -227
  730. package/plugins/copilot-pbr/references/integration-patterns.md +0 -118
  731. package/plugins/copilot-pbr/references/model-profiles.md +0 -100
  732. package/plugins/copilot-pbr/references/model-selection.md +0 -32
  733. package/plugins/copilot-pbr/references/pbr-rules.md +0 -195
  734. package/plugins/copilot-pbr/references/pbr-tools-cli.md +0 -285
  735. package/plugins/copilot-pbr/references/plan-authoring.md +0 -182
  736. package/plugins/copilot-pbr/references/plan-format.md +0 -288
  737. package/plugins/copilot-pbr/references/planning-config.md +0 -214
  738. package/plugins/copilot-pbr/references/questioning.md +0 -215
  739. package/plugins/copilot-pbr/references/reading-verification.md +0 -128
  740. package/plugins/copilot-pbr/references/stub-patterns.md +0 -161
  741. package/plugins/copilot-pbr/references/subagent-coordination.md +0 -120
  742. package/plugins/copilot-pbr/references/ui-formatting.md +0 -444
  743. package/plugins/copilot-pbr/references/verification-patterns.md +0 -199
  744. package/plugins/copilot-pbr/references/wave-execution.md +0 -96
  745. package/plugins/copilot-pbr/rules/pbr-workflow.mdc +0 -48
  746. package/plugins/copilot-pbr/setup.ps1 +0 -93
  747. package/plugins/copilot-pbr/setup.sh +0 -93
  748. package/plugins/copilot-pbr/skills/audit/SKILL.md +0 -330
  749. package/plugins/copilot-pbr/skills/begin/SKILL.md +0 -589
  750. package/plugins/copilot-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  751. package/plugins/copilot-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  752. package/plugins/copilot-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  753. package/plugins/copilot-pbr/skills/begin/templates/config.json.tmpl +0 -64
  754. package/plugins/copilot-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  755. package/plugins/copilot-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  756. package/plugins/copilot-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  757. package/plugins/copilot-pbr/skills/build/SKILL.md +0 -960
  758. package/plugins/copilot-pbr/skills/config/SKILL.md +0 -250
  759. package/plugins/copilot-pbr/skills/continue/SKILL.md +0 -159
  760. package/plugins/copilot-pbr/skills/dashboard/SKILL.md +0 -43
  761. package/plugins/copilot-pbr/skills/debug/SKILL.md +0 -508
  762. package/plugins/copilot-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  763. package/plugins/copilot-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  764. package/plugins/copilot-pbr/skills/discuss/SKILL.md +0 -353
  765. package/plugins/copilot-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  766. package/plugins/copilot-pbr/skills/discuss/templates/decision-categories.md +0 -10
  767. package/plugins/copilot-pbr/skills/do/SKILL.md +0 -66
  768. package/plugins/copilot-pbr/skills/explore/SKILL.md +0 -373
  769. package/plugins/copilot-pbr/skills/health/SKILL.md +0 -283
  770. package/plugins/copilot-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  771. package/plugins/copilot-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  772. package/plugins/copilot-pbr/skills/help/SKILL.md +0 -193
  773. package/plugins/copilot-pbr/skills/import/SKILL.md +0 -502
  774. package/plugins/copilot-pbr/skills/milestone/SKILL.md +0 -806
  775. package/plugins/copilot-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  776. package/plugins/copilot-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  777. package/plugins/copilot-pbr/skills/note/SKILL.md +0 -213
  778. package/plugins/copilot-pbr/skills/pause/SKILL.md +0 -247
  779. package/plugins/copilot-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  780. package/plugins/copilot-pbr/skills/plan/SKILL.md +0 -662
  781. package/plugins/copilot-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  782. package/plugins/copilot-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  783. package/plugins/copilot-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  784. package/plugins/copilot-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  785. package/plugins/copilot-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  786. package/plugins/copilot-pbr/skills/quick/SKILL.md +0 -376
  787. package/plugins/copilot-pbr/skills/resume/SKILL.md +0 -399
  788. package/plugins/copilot-pbr/skills/review/SKILL.md +0 -653
  789. package/plugins/copilot-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  790. package/plugins/copilot-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  791. package/plugins/copilot-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  792. package/plugins/copilot-pbr/skills/scan/SKILL.md +0 -299
  793. package/plugins/copilot-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  794. package/plugins/copilot-pbr/skills/setup/SKILL.md +0 -296
  795. package/plugins/copilot-pbr/skills/shared/commit-planning-docs.md +0 -36
  796. package/plugins/copilot-pbr/skills/shared/config-loading.md +0 -103
  797. package/plugins/copilot-pbr/skills/shared/context-budget.md +0 -41
  798. package/plugins/copilot-pbr/skills/shared/context-loader-task.md +0 -87
  799. package/plugins/copilot-pbr/skills/shared/digest-select.md +0 -80
  800. package/plugins/copilot-pbr/skills/shared/domain-probes.md +0 -126
  801. package/plugins/copilot-pbr/skills/shared/error-recovery-strategies.md +0 -51
  802. package/plugins/copilot-pbr/skills/shared/error-reporting.md +0 -81
  803. package/plugins/copilot-pbr/skills/shared/gate-prompts.md +0 -389
  804. package/plugins/copilot-pbr/skills/shared/phase-argument-parsing.md +0 -46
  805. package/plugins/copilot-pbr/skills/shared/progress-display.md +0 -53
  806. package/plugins/copilot-pbr/skills/shared/revision-loop.md +0 -82
  807. package/plugins/copilot-pbr/skills/shared/state-loading.md +0 -63
  808. package/plugins/copilot-pbr/skills/shared/state-update.md +0 -162
  809. package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +0 -38
  810. package/plugins/copilot-pbr/skills/status/SKILL.md +0 -362
  811. package/plugins/copilot-pbr/skills/statusline/SKILL.md +0 -149
  812. package/plugins/copilot-pbr/skills/todo/SKILL.md +0 -279
  813. package/plugins/copilot-pbr/templates/CONTEXT.md.tmpl +0 -53
  814. package/plugins/copilot-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  815. package/plugins/copilot-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  816. package/plugins/copilot-pbr/templates/ROADMAP.md.tmpl +0 -41
  817. package/plugins/copilot-pbr/templates/SUMMARY.md.tmpl +0 -82
  818. package/plugins/copilot-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  819. package/plugins/copilot-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  820. package/plugins/copilot-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  821. package/plugins/copilot-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  822. package/plugins/copilot-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  823. package/plugins/copilot-pbr/templates/codebase/STACK.md.tmpl +0 -78
  824. package/plugins/copilot-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  825. package/plugins/copilot-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  826. package/plugins/copilot-pbr/templates/continue-here.md.tmpl +0 -74
  827. package/plugins/copilot-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  828. package/plugins/copilot-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  829. package/plugins/copilot-pbr/templates/research/STACK.md.tmpl +0 -71
  830. package/plugins/copilot-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  831. package/plugins/copilot-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  832. package/plugins/copilot-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  833. package/plugins/copilot-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  834. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +0 -32
  835. package/plugins/cursor-pbr/CHANGELOG.md +0 -15
  836. package/plugins/cursor-pbr/README.md +0 -123
  837. package/plugins/cursor-pbr/agents/audit.md +0 -178
  838. package/plugins/cursor-pbr/agents/codebase-mapper.md +0 -150
  839. package/plugins/cursor-pbr/agents/debugger.md +0 -181
  840. package/plugins/cursor-pbr/agents/executor.md +0 -266
  841. package/plugins/cursor-pbr/agents/general.md +0 -87
  842. package/plugins/cursor-pbr/agents/integration-checker.md +0 -118
  843. package/plugins/cursor-pbr/agents/plan-checker.md +0 -207
  844. package/plugins/cursor-pbr/agents/planner.md +0 -237
  845. package/plugins/cursor-pbr/agents/researcher.md +0 -185
  846. package/plugins/cursor-pbr/agents/synthesizer.md +0 -125
  847. package/plugins/cursor-pbr/agents/verifier.md +0 -227
  848. package/plugins/cursor-pbr/assets/.gitkeep +0 -0
  849. package/plugins/cursor-pbr/assets/logo.svg +0 -21
  850. package/plugins/cursor-pbr/hooks/hooks.json +0 -224
  851. package/plugins/cursor-pbr/references/agent-anti-patterns.md +0 -25
  852. package/plugins/cursor-pbr/references/agent-contracts.md +0 -297
  853. package/plugins/cursor-pbr/references/agent-interactions.md +0 -135
  854. package/plugins/cursor-pbr/references/agent-teams.md +0 -55
  855. package/plugins/cursor-pbr/references/checkpoints.md +0 -158
  856. package/plugins/cursor-pbr/references/common-bug-patterns.md +0 -14
  857. package/plugins/cursor-pbr/references/config-reference.md +0 -442
  858. package/plugins/cursor-pbr/references/continuation-format.md +0 -213
  859. package/plugins/cursor-pbr/references/deviation-rules.md +0 -113
  860. package/plugins/cursor-pbr/references/git-integration.md +0 -227
  861. package/plugins/cursor-pbr/references/integration-patterns.md +0 -118
  862. package/plugins/cursor-pbr/references/model-profiles.md +0 -100
  863. package/plugins/cursor-pbr/references/model-selection.md +0 -32
  864. package/plugins/cursor-pbr/references/pbr-rules.md +0 -195
  865. package/plugins/cursor-pbr/references/pbr-tools-cli.md +0 -285
  866. package/plugins/cursor-pbr/references/plan-authoring.md +0 -182
  867. package/plugins/cursor-pbr/references/plan-format.md +0 -288
  868. package/plugins/cursor-pbr/references/planning-config.md +0 -214
  869. package/plugins/cursor-pbr/references/questioning.md +0 -215
  870. package/plugins/cursor-pbr/references/reading-verification.md +0 -128
  871. package/plugins/cursor-pbr/references/stub-patterns.md +0 -161
  872. package/plugins/cursor-pbr/references/subagent-coordination.md +0 -120
  873. package/plugins/cursor-pbr/references/ui-formatting.md +0 -444
  874. package/plugins/cursor-pbr/references/verification-patterns.md +0 -199
  875. package/plugins/cursor-pbr/references/wave-execution.md +0 -96
  876. package/plugins/cursor-pbr/rules/pbr-workflow.mdc +0 -48
  877. package/plugins/cursor-pbr/setup.ps1 +0 -78
  878. package/plugins/cursor-pbr/setup.sh +0 -83
  879. package/plugins/cursor-pbr/skills/audit/SKILL.md +0 -331
  880. package/plugins/cursor-pbr/skills/begin/SKILL.md +0 -589
  881. package/plugins/cursor-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  882. package/plugins/cursor-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  883. package/plugins/cursor-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  884. package/plugins/cursor-pbr/skills/begin/templates/config.json.tmpl +0 -64
  885. package/plugins/cursor-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  886. package/plugins/cursor-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  887. package/plugins/cursor-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  888. package/plugins/cursor-pbr/skills/build/SKILL.md +0 -961
  889. package/plugins/cursor-pbr/skills/config/SKILL.md +0 -252
  890. package/plugins/cursor-pbr/skills/continue/SKILL.md +0 -159
  891. package/plugins/cursor-pbr/skills/dashboard/SKILL.md +0 -44
  892. package/plugins/cursor-pbr/skills/debug/SKILL.md +0 -512
  893. package/plugins/cursor-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  894. package/plugins/cursor-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  895. package/plugins/cursor-pbr/skills/discuss/SKILL.md +0 -354
  896. package/plugins/cursor-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  897. package/plugins/cursor-pbr/skills/discuss/templates/decision-categories.md +0 -10
  898. package/plugins/cursor-pbr/skills/do/SKILL.md +0 -67
  899. package/plugins/cursor-pbr/skills/explore/SKILL.md +0 -376
  900. package/plugins/cursor-pbr/skills/health/SKILL.md +0 -283
  901. package/plugins/cursor-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  902. package/plugins/cursor-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  903. package/plugins/cursor-pbr/skills/help/SKILL.md +0 -193
  904. package/plugins/cursor-pbr/skills/import/SKILL.md +0 -505
  905. package/plugins/cursor-pbr/skills/milestone/SKILL.md +0 -807
  906. package/plugins/cursor-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  907. package/plugins/cursor-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  908. package/plugins/cursor-pbr/skills/note/SKILL.md +0 -214
  909. package/plugins/cursor-pbr/skills/pause/SKILL.md +0 -248
  910. package/plugins/cursor-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  911. package/plugins/cursor-pbr/skills/plan/SKILL.md +0 -663
  912. package/plugins/cursor-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  913. package/plugins/cursor-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  914. package/plugins/cursor-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  915. package/plugins/cursor-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  916. package/plugins/cursor-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  917. package/plugins/cursor-pbr/skills/quick/SKILL.md +0 -376
  918. package/plugins/cursor-pbr/skills/resume/SKILL.md +0 -399
  919. package/plugins/cursor-pbr/skills/review/SKILL.md +0 -654
  920. package/plugins/cursor-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  921. package/plugins/cursor-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  922. package/plugins/cursor-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  923. package/plugins/cursor-pbr/skills/scan/SKILL.md +0 -300
  924. package/plugins/cursor-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  925. package/plugins/cursor-pbr/skills/setup/SKILL.md +0 -296
  926. package/plugins/cursor-pbr/skills/shared/commit-planning-docs.md +0 -36
  927. package/plugins/cursor-pbr/skills/shared/config-loading.md +0 -103
  928. package/plugins/cursor-pbr/skills/shared/context-budget.md +0 -41
  929. package/plugins/cursor-pbr/skills/shared/context-loader-task.md +0 -87
  930. package/plugins/cursor-pbr/skills/shared/digest-select.md +0 -80
  931. package/plugins/cursor-pbr/skills/shared/domain-probes.md +0 -126
  932. package/plugins/cursor-pbr/skills/shared/error-recovery-strategies.md +0 -51
  933. package/plugins/cursor-pbr/skills/shared/error-reporting.md +0 -81
  934. package/plugins/cursor-pbr/skills/shared/gate-prompts.md +0 -389
  935. package/plugins/cursor-pbr/skills/shared/phase-argument-parsing.md +0 -46
  936. package/plugins/cursor-pbr/skills/shared/progress-display.md +0 -53
  937. package/plugins/cursor-pbr/skills/shared/revision-loop.md +0 -82
  938. package/plugins/cursor-pbr/skills/shared/state-loading.md +0 -63
  939. package/plugins/cursor-pbr/skills/shared/state-update.md +0 -162
  940. package/plugins/cursor-pbr/skills/shared/universal-anti-patterns.md +0 -38
  941. package/plugins/cursor-pbr/skills/status/SKILL.md +0 -362
  942. package/plugins/cursor-pbr/skills/statusline/SKILL.md +0 -150
  943. package/plugins/cursor-pbr/skills/todo/SKILL.md +0 -280
  944. package/plugins/cursor-pbr/templates/CONTEXT.md.tmpl +0 -53
  945. package/plugins/cursor-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  946. package/plugins/cursor-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  947. package/plugins/cursor-pbr/templates/ROADMAP.md.tmpl +0 -41
  948. package/plugins/cursor-pbr/templates/SUMMARY.md.tmpl +0 -82
  949. package/plugins/cursor-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  950. package/plugins/cursor-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  951. package/plugins/cursor-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  952. package/plugins/cursor-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  953. package/plugins/cursor-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  954. package/plugins/cursor-pbr/templates/codebase/STACK.md.tmpl +0 -78
  955. package/plugins/cursor-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  956. package/plugins/cursor-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  957. package/plugins/cursor-pbr/templates/continue-here.md.tmpl +0 -74
  958. package/plugins/cursor-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  959. package/plugins/cursor-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  960. package/plugins/cursor-pbr/templates/research/STACK.md.tmpl +0 -71
  961. package/plugins/cursor-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  962. package/plugins/cursor-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  963. package/plugins/cursor-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  964. package/plugins/cursor-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  965. package/plugins/pbr/references/agent-interactions.md +0 -134
  966. package/plugins/pbr/references/pbr-rules.md +0 -194
  967. package/plugins/pbr/references/pbr-tools-cli.md +0 -285
  968. package/plugins/pbr/references/planning-config.md +0 -213
  969. package/plugins/pbr/references/subagent-coordination.md +0 -119
  970. package/plugins/pbr/references/ui-formatting.md +0 -444
  971. package/plugins/pbr/scripts/validate-plugin-structure.js +0 -183
  972. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +0 -48
  973. package/plugins/pbr/skills/shared/error-recovery-strategies.md +0 -51
  974. package/plugins/pbr/skills/shared/progress-display.md +0 -53
  975. package/plugins/pbr/skills/shared/state-loading.md +0 -62
  976. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -97
  977. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  978. package/plugins/pbr/templates/research/STACK.md.tmpl +0 -71
  979. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +0 -112
  980. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  981. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  982. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  983. /package/plugins/pbr/references/{agent-anti-patterns.md → archive/agent-anti-patterns.md} +0 -0
@@ -0,0 +1,918 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Session briefing module — extracted from progress-tracker.js.
5
+ * Contains all session briefing, context building, and state awareness functions.
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const os = require('os');
11
+ const { execSync } = require('child_process');
12
+ const { logHook } = require('../hook-logger');
13
+ const { configLoad } = require('../pbr-tools');
14
+ const { configResolveHarness, recommendedHarnessProfile } = require('./config');
15
+ const { intelStatus } = require('./intel');
16
+ const { loadLatestSnapshot, formatSnapshotBriefing } = require('./snapshot-manager');
17
+ const { loadConventions, formatConventionBriefing } = require('./convention-detector');
18
+
19
+ const FAILURE_DECISIONS = /^(block|error|warn|warning|block-coauthor|block-sensitive|unlink-failed)$/;
20
+ const HOOK_HEALTH_MAX_ENTRIES = 50;
21
+
22
+ function extractSection(content, heading) {
23
+ const regex = new RegExp(`##\\s+${escapeRegex(heading)}\\s*\\n([\\s\\S]*?)(?=\\n##\\s|$)`);
24
+ const match = content.match(regex);
25
+ if (!match) return null;
26
+ const section = match[1].trim();
27
+ // Return first 5 lines max
28
+ return section.split('\n').slice(0, 5).join('\n');
29
+ }
30
+
31
+ function escapeRegex(str) {
32
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
33
+ }
34
+
35
+ function findContinueFiles(dir) {
36
+ const results = [];
37
+ try {
38
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
39
+ for (const entry of entries) {
40
+ const fullPath = path.join(dir, entry.name);
41
+ if (entry.isDirectory()) {
42
+ results.push(...findContinueFiles(fullPath));
43
+ } else if (entry.name.includes('.continue-here')) {
44
+ results.push(path.relative(dir, fullPath));
45
+ }
46
+ }
47
+ } catch (_e) {
48
+ // intentionally silent: permission error is non-fatal
49
+ }
50
+ return results;
51
+ }
52
+
53
+ function countNotes(notesDir) {
54
+ try {
55
+ if (!fs.existsSync(notesDir)) return 0;
56
+ const files = fs.readdirSync(notesDir).filter(f => f.endsWith('.md'));
57
+ let count = 0;
58
+ for (const file of files) {
59
+ const content = fs.readFileSync(path.join(notesDir, file), 'utf8');
60
+ if (!content.includes('promoted: true')) count++;
61
+ }
62
+ return count;
63
+ } catch (_e) {
64
+ return 0;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Check if the active harness profile matches the model-recommended profile.
70
+ *
71
+ * @param {object} config - Parsed config object
72
+ * @returns {string|null} Warning message if mismatch, null if aligned
73
+ */
74
+ function getHarnessProfileWarning(config) {
75
+ if (!config) return null;
76
+ const { profile } = configResolveHarness(config);
77
+ const recommended = recommendedHarnessProfile(config);
78
+ if (profile !== recommended) {
79
+ return `Harness profile mismatch: active='${profile}', recommended='${recommended}' for current model config. Run /pbr:config set harness_profile ${recommended}`;
80
+ }
81
+ return null;
82
+ }
83
+
84
+ /**
85
+ * Return arch.md content as context injection when intel.inject_on_start is true.
86
+ * Truncates to ~2000 chars (~500 tokens) to keep context lean.
87
+ */
88
+ function getIntelContext(planningDir, config) {
89
+ if (!config || config.intel?.enabled === false) return '';
90
+
91
+ // Check for signal file from prior session's intel queue drain
92
+ let refreshWarning = '';
93
+ try {
94
+ const signalPath = path.join(planningDir, '.intel-refresh-needed');
95
+ if (fs.existsSync(signalPath)) {
96
+ const signal = JSON.parse(fs.readFileSync(signalPath, 'utf8'));
97
+ const fileCount = Array.isArray(signal.files) ? signal.files.length : 0;
98
+ if (fileCount > 0) {
99
+ refreshWarning = `\nIntel refresh needed: ${fileCount} code file${fileCount === 1 ? '' : 's'} changed since last refresh. Run \`/pbr:intel\` to update.`;
100
+ }
101
+ // Consume the signal file — one-time advisory
102
+ fs.unlinkSync(signalPath);
103
+ }
104
+ } catch (_e) { /* intentionally silent: best-effort */ }
105
+
106
+ if (config.intel?.inject_on_start !== true) return refreshWarning;
107
+
108
+ const archPath = path.join(planningDir, 'intel', 'arch.md');
109
+ try {
110
+ if (!fs.existsSync(archPath)) return refreshWarning;
111
+ let content = fs.readFileSync(archPath, 'utf8');
112
+ if (content.length > 2000) {
113
+ content = content.substring(0, 2000);
114
+ }
115
+ return '\n## Codebase Intelligence\n' + content + refreshWarning;
116
+ } catch (_e) {
117
+ return refreshWarning;
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Return a staleness warning when any intel file is >24h old.
123
+ */
124
+ function getIntelStalenessWarning(planningDir, config) {
125
+ if (!config || config.intel?.enabled === false) return '';
126
+
127
+ try {
128
+ const result = intelStatus(planningDir);
129
+ if (result.disabled) return '';
130
+ if (!result.overall_stale) return '';
131
+
132
+ const staleFiles = Object.entries(result.files)
133
+ .filter(([_name, info]) => info.stale)
134
+ .map(([name]) => name);
135
+
136
+ return `\nWarning: Intel data is stale (${staleFiles.join(', ')}). Run /pbr:intel update to refresh.`;
137
+ } catch (_e) {
138
+ return '';
139
+ }
140
+ }
141
+
142
+ function getHookHealthSummary(planningDir) {
143
+ const logPath = path.join(planningDir, 'logs', 'hooks.jsonl');
144
+ try {
145
+ if (!fs.existsSync(logPath)) return null;
146
+ const content = fs.readFileSync(logPath, 'utf8').trim();
147
+ if (!content) return null;
148
+
149
+ const lines = content.split('\n');
150
+ const recent = lines.slice(-HOOK_HEALTH_MAX_ENTRIES);
151
+
152
+ const failuresByHook = {};
153
+ let totalFailures = 0;
154
+
155
+ for (const line of recent) {
156
+ try {
157
+ const entry = JSON.parse(line);
158
+ if (entry.decision && FAILURE_DECISIONS.test(entry.decision)) {
159
+ const hookName = entry.hook || 'unknown';
160
+ failuresByHook[hookName] = (failuresByHook[hookName] || 0) + 1;
161
+ totalFailures++;
162
+ }
163
+ } catch (_e) {
164
+ // intentionally silent: skip malformed lines
165
+ }
166
+ }
167
+
168
+ if (totalFailures === 0) return null;
169
+
170
+ const sorted = Object.entries(failuresByHook)
171
+ .sort((a, b) => b[1] - a[1])
172
+ .map(([hook, count]) => `${hook}: ${count}`)
173
+ .join(', ');
174
+
175
+ return `Hook health: ${totalFailures} failure${totalFailures !== 1 ? 's' : ''} in last ${recent.length} entries (${sorted})`;
176
+ } catch (_e) {
177
+ return null;
178
+ }
179
+ }
180
+
181
+ /**
182
+ * Check learnings deferral thresholds and return notification strings.
183
+ */
184
+ function checkLearningsDeferrals(_planningDir) {
185
+ try {
186
+ const { checkDeferralThresholds } = require('./learnings');
187
+ const triggered = checkDeferralThresholds();
188
+ return triggered.map(t => ` - ${t.key}: ${t.trigger} met -- consider implementing deferred feature`);
189
+ } catch (_e) {
190
+ return [];
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Detect other active sessions by scanning .sessions/ directory.
196
+ */
197
+ function detectOtherSessions(planningDir, ownSessionId) {
198
+ const sessionsDir = path.join(planningDir, '.sessions');
199
+ if (!fs.existsSync(sessionsDir)) return [];
200
+
201
+ const results = [];
202
+ try {
203
+ const entries = fs.readdirSync(sessionsDir, { withFileTypes: true });
204
+ for (const entry of entries) {
205
+ if (!entry.isDirectory()) continue;
206
+ if (entry.name === ownSessionId) continue;
207
+
208
+ const dirPath = path.join(sessionsDir, entry.name);
209
+ let age = 0;
210
+ let pid = null;
211
+ let skill = null;
212
+
213
+ const metaPath = path.join(dirPath, 'meta.json');
214
+ try {
215
+ const meta = JSON.parse(fs.readFileSync(metaPath, 'utf8'));
216
+ age = Math.round((Date.now() - new Date(meta.created).getTime()) / 60000);
217
+ pid = meta.pid || null;
218
+ } catch (_e) {
219
+ try {
220
+ const stats = fs.statSync(dirPath);
221
+ age = Math.round((Date.now() - stats.mtimeMs) / 60000);
222
+ } catch (_statErr) {
223
+ continue;
224
+ }
225
+ }
226
+
227
+ const skillPath = path.join(dirPath, '.active-skill');
228
+ try {
229
+ skill = fs.readFileSync(skillPath, 'utf8').trim() || null;
230
+ } catch (_e) {
231
+ // intentionally silent: no active skill file
232
+ }
233
+
234
+ results.push({ sessionId: entry.name, skill, age, pid });
235
+ }
236
+ } catch (_e) {
237
+ // intentionally silent: best-effort
238
+ }
239
+
240
+ return results;
241
+ }
242
+
243
+ /**
244
+ * Build an enhanced structured briefing for SessionStart.
245
+ */
246
+ function buildEnhancedBriefing(planningDir, config) {
247
+ if (!config || config.features?.enhanced_session_start !== true) {
248
+ return null;
249
+ }
250
+
251
+ const lines = [];
252
+ lines.push('[PBR Session Briefing]');
253
+
254
+ const stateFile = path.join(planningDir, 'STATE.md');
255
+ let stateContent = null;
256
+ try {
257
+ if (fs.existsSync(stateFile)) {
258
+ stateContent = fs.readFileSync(stateFile, 'utf8');
259
+ }
260
+ } catch (_e) { /* intentionally silent: non-fatal */ }
261
+
262
+ if (stateContent) {
263
+ try {
264
+ const fm = {};
265
+ const fmMatch = stateContent.match(/^---\r?\n([\s\S]*?)\r?\n---/);
266
+ if (fmMatch) {
267
+ const fmBlock = fmMatch[1];
268
+ const fields = ['current_phase', 'total_phases', 'phase_name', 'status', 'progress_percent', 'plans_total', 'plans_complete'];
269
+ for (const field of fields) {
270
+ const m = fmBlock.match(new RegExp(`${field}:\\s*"?([^"\\n]+)"?`));
271
+ if (m) fm[field] = m[1].trim();
272
+ }
273
+ }
274
+ if (fm.current_phase && fm.total_phases) {
275
+ const phaseName = fm.phase_name ? `"${fm.phase_name}"` : '';
276
+ const status = fm.status || 'unknown';
277
+ const plansComplete = fm.plans_complete || '?';
278
+ const plansTotal = fm.plans_total || '?';
279
+ const progress = fm.progress_percent || '?';
280
+ lines.push(`Phase ${fm.current_phase}/${fm.total_phases}: ${phaseName} -- ${status}, plan ${plansComplete}/${plansTotal} (${progress}%)`);
281
+ }
282
+ } catch (_e) { /* intentionally silent: non-fatal */ }
283
+ }
284
+
285
+ try {
286
+ const branch = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8', timeout: 3000 }).trim();
287
+ const porcelain = execSync('git status --porcelain', { encoding: 'utf8', timeout: 3000 }).trim();
288
+ const uncommitted = porcelain ? porcelain.split('\n').length : 0;
289
+ const recentLog = execSync('git log -5 --oneline', { encoding: 'utf8', timeout: 3000 }).trim();
290
+ const commits = recentLog ? recentLog.split('\n').map(l => l.trim()).filter(Boolean) : [];
291
+ const commitSummary = commits.slice(0, 3).join(', ');
292
+ lines.push(`Git: ${branch} (${uncommitted} uncommitted) | Last: ${commitSummary}`);
293
+ } catch (_e) {
294
+ lines.push('Git: unavailable');
295
+ }
296
+
297
+ try {
298
+ const decisionsDir = path.join(planningDir, 'decisions');
299
+ if (fs.existsSync(decisionsDir)) {
300
+ const decFiles = fs.readdirSync(decisionsDir).filter(f => f.endsWith('.md'));
301
+ const pending = [];
302
+ for (const file of decFiles) {
303
+ const content = fs.readFileSync(path.join(decisionsDir, file), 'utf8');
304
+ if (!content.includes('status: resolved') && !content.includes('status: closed')) {
305
+ const titleMatch = content.match(/title:\s*(.+)/);
306
+ pending.push(titleMatch ? titleMatch[1].trim() : file);
307
+ }
308
+ }
309
+ if (pending.length > 0) {
310
+ lines.push(`Pending decisions: ${pending.join('; ')}`);
311
+ }
312
+ }
313
+ } catch (_e) { /* intentionally silent: non-fatal */ }
314
+
315
+ try {
316
+ const trackerFile = path.join(planningDir, '.context-tracker');
317
+ if (fs.existsSync(trackerFile)) {
318
+ const tracker = JSON.parse(fs.readFileSync(trackerFile, 'utf8'));
319
+ const files = Array.isArray(tracker.files) ? tracker.files.slice(0, 5) : [];
320
+ if (files.length > 0) {
321
+ lines.push(`Working set: ${files.join(', ')}`);
322
+ }
323
+ }
324
+ } catch (_e) { /* intentionally silent: non-fatal */ }
325
+
326
+ try {
327
+ const { isSkipRagEligible } = require('../context-quality');
328
+ const skipRag = isSkipRagEligible(planningDir);
329
+ if (skipRag.eligible) {
330
+ lines.push(`Skip-RAG: eligible (${skipRag.line_count} lines). Full codebase fits in context.`);
331
+ }
332
+ } catch (_e) { /* intentionally silent: non-fatal */ }
333
+
334
+ if (stateContent) {
335
+ try {
336
+ const blockersSection = extractSection(stateContent, 'Blockers/Concerns');
337
+ if (blockersSection && !blockersSection.includes('None')) {
338
+ lines.push(`Blockers: ${blockersSection.split('\n').map(l => l.trim()).filter(Boolean).join('; ')}`);
339
+ }
340
+ } catch (_e) { /* intentionally silent: non-fatal */ }
341
+ }
342
+
343
+ const harnessWarning = getHarnessProfileWarning(config);
344
+ if (harnessWarning) {
345
+ lines.push(harnessWarning);
346
+ }
347
+
348
+ let output = lines.join('\n');
349
+ if (output.length > 2500) {
350
+ output = output.substring(0, 2497) + '...';
351
+ }
352
+
353
+ logHook('progress-tracker', 'SessionStart', 'briefing-injected', {
354
+ tokens: Math.ceil(output.length / 5)
355
+ });
356
+
357
+ return output;
358
+ }
359
+
360
+ /**
361
+ * Build a concise briefing of recent active decisions for SessionStart injection.
362
+ */
363
+ function getDecisionBriefing(planningDir, config) {
364
+ if (!config) {
365
+ const configPath = path.join(planningDir, 'config.json');
366
+ try {
367
+ if (!fs.existsSync(configPath)) return '';
368
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
369
+ } catch (_e) {
370
+ return '';
371
+ }
372
+ }
373
+
374
+ if (!config || !config.features || !config.features.decision_journal) return '';
375
+
376
+ const decisionsDir = path.join(planningDir, 'decisions');
377
+ if (!fs.existsSync(decisionsDir)) return '';
378
+
379
+ let files;
380
+ try {
381
+ files = fs.readdirSync(decisionsDir).filter(f => f.endsWith('.md'));
382
+ } catch (_e) {
383
+ return '';
384
+ }
385
+
386
+ if (files.length === 0) return '';
387
+
388
+ const decisions = [];
389
+ for (const file of files) {
390
+ try {
391
+ const content = fs.readFileSync(path.join(decisionsDir, file), 'utf8');
392
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
393
+ if (!fmMatch) continue;
394
+
395
+ const fmText = fmMatch[1];
396
+ const getField = (name) => {
397
+ const m = fmText.match(new RegExp(`^${name}:\\s*(.+)$`, 'm'));
398
+ return m ? m[1].trim().replace(/^["']|["']$/g, '') : '';
399
+ };
400
+
401
+ const status = getField('status');
402
+ if (status !== 'active') continue;
403
+
404
+ decisions.push({
405
+ date: getField('date'),
406
+ decision: getField('decision'),
407
+ agent: getField('agent'),
408
+ phase: getField('phase'),
409
+ });
410
+ } catch (_e) {
411
+ // intentionally silent: skip unparseable files
412
+ }
413
+ }
414
+
415
+ if (decisions.length === 0) return '';
416
+
417
+ decisions.sort((a, b) => b.date.localeCompare(a.date));
418
+ const top = decisions.slice(0, 5);
419
+
420
+ const lines = top.map(d => {
421
+ let title = d.decision;
422
+ if (title.length > 60) title = title.slice(0, 57) + '...';
423
+ return `- ${d.date}: ${title} (agent: ${d.agent || 'unknown'}, phase: ${d.phase || '?'})`;
424
+ });
425
+
426
+ return '\nRecent decisions:\n' + lines.join('\n');
427
+ }
428
+
429
+ /**
430
+ * Build a briefing of past failures in related files (negative knowledge).
431
+ */
432
+ function getNegativeKnowledgeBriefing(planningDir, config, workingSet) {
433
+ if (!config || !config.features || !config.features.negative_knowledge) return '';
434
+
435
+ if (!workingSet) {
436
+ workingSet = [];
437
+ const wsPath = path.join(planningDir, 'sessions', 'working-set.json');
438
+ try {
439
+ if (fs.existsSync(wsPath)) {
440
+ const ws = JSON.parse(fs.readFileSync(wsPath, 'utf8'));
441
+ if (Array.isArray(ws.files)) workingSet = ws.files;
442
+ }
443
+ } catch (_e) { /* intentionally silent: non-fatal */ }
444
+
445
+ if (workingSet.length === 0) {
446
+ try {
447
+ const stateFile = path.join(planningDir, 'STATE.md');
448
+ if (fs.existsSync(stateFile)) {
449
+ const stateContent = fs.readFileSync(stateFile, 'utf8');
450
+ const phaseMatch = stateContent.match(/Phase:\s*(\d+)\s+of\s+\d+/);
451
+ if (phaseMatch) {
452
+ const phasesDir = path.join(planningDir, 'phases');
453
+ if (fs.existsSync(phasesDir)) {
454
+ const phaseDirs = fs.readdirSync(phasesDir).filter(d => d.startsWith(String(phaseMatch[1]).padStart(2, '0')));
455
+ for (const pd of phaseDirs) {
456
+ const planFiles = fs.readdirSync(path.join(phasesDir, pd)).filter(f => /^PLAN/i.test(f));
457
+ for (const pf of planFiles) {
458
+ const planContent = fs.readFileSync(path.join(phasesDir, pd, pf), 'utf8');
459
+ const fmMatch = planContent.match(/^---\r?\n([\s\S]*?)\r?\n---/);
460
+ if (fmMatch) {
461
+ const filesBlock = fmMatch[1].match(/files_modified:\s*\n((?:\s+-\s+.+\n?)*)/);
462
+ if (filesBlock) {
463
+ const filesList = filesBlock[1].match(/^\s+-\s+"?(.+?)"?\s*$/gm);
464
+ if (filesList) workingSet.push(...filesList.map(f => f.replace(/^\s+-\s+"?|"?\s*$/g, '')));
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ }
471
+ }
472
+ } catch (_e) { /* intentionally silent: non-fatal */ }
473
+ }
474
+ }
475
+
476
+ if (workingSet.length === 0) return '';
477
+
478
+ const nkDir = path.join(planningDir, 'negative-knowledge');
479
+ if (!fs.existsSync(nkDir)) return '';
480
+
481
+ let nkFiles;
482
+ try { nkFiles = fs.readdirSync(nkDir).filter(f => f.endsWith('.md')); } catch (_e) { return ''; }
483
+ if (nkFiles.length === 0) return '';
484
+
485
+ const fileSet = new Set(workingSet);
486
+ const matches = [];
487
+
488
+ for (const file of nkFiles) {
489
+ try {
490
+ const content = fs.readFileSync(path.join(nkDir, file), 'utf8');
491
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
492
+ if (!fmMatch) continue;
493
+ const fmText = fmMatch[1];
494
+ const getField = (name) => { const m = fmText.match(new RegExp(`^${name}:\\s*(.+)$`, 'm')); return m ? m[1].trim().replace(/^["']|["']$/g, '') : ''; };
495
+ const status = getField('status');
496
+ if (status !== 'active') continue;
497
+ const filesBlock = fmText.match(/files_involved:\s*\n((?:\s+-\s+.+\n?)*)/);
498
+ const filesInvolved = [];
499
+ if (filesBlock) { const fileLines = filesBlock[1].match(/^\s+-\s+(.+)$/gm); if (fileLines) filesInvolved.push(...fileLines.map(l => l.replace(/^\s+-\s+/, '').trim())); }
500
+ if (!filesInvolved.some(f => fileSet.has(f))) continue;
501
+ const date = getField('date');
502
+ const title = getField('title');
503
+ const whyMatch = content.match(/## Why It Failed\s*\n([\s\S]*?)(?=\n##|$)/);
504
+ const whyFailed = whyMatch ? whyMatch[1].trim() : '';
505
+ const whySummary = whyFailed.length > 80 ? whyFailed.slice(0, 77) + '...' : whyFailed;
506
+ matches.push({ date, title, whySummary, filesInvolved });
507
+ } catch (_e) { /* intentionally silent: skip on error */ }
508
+ }
509
+
510
+ if (matches.length === 0) return '';
511
+ matches.sort((a, b) => (b.date || '').localeCompare(a.date || ''));
512
+ const top = matches.slice(0, 3);
513
+ const lines = top.map(m => { let title = m.title; if (title.length > 60) title = title.slice(0, 57) + '...'; return `- ${m.date}: ${title} -- ${m.whySummary} (files: ${m.filesInvolved.join(', ')})`; });
514
+ return '\nPast failures in related files:\n' + lines.join('\n');
515
+ }
516
+
517
+ /**
518
+ * Build the full context string for SessionStart injection.
519
+ */
520
+ function buildContext(planningDir, stateFile) {
521
+ const parts = [];
522
+
523
+ parts.push('[Plan-Build-Run Project Detected]');
524
+
525
+ const _briefingConfig = configLoad(planningDir);
526
+ const briefing = buildEnhancedBriefing(planningDir, _briefingConfig);
527
+
528
+ if (briefing) {
529
+ parts.push('\n' + briefing);
530
+ } else {
531
+ try {
532
+ const branch = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8', timeout: 3000 }).trim();
533
+ const porcelain = execSync('git status --porcelain', { encoding: 'utf8', timeout: 3000 }).trim();
534
+ const uncommitted = porcelain ? porcelain.split('\n').length : 0;
535
+ const recentCommits = execSync('git log -5 --oneline', { encoding: 'utf8', timeout: 3000 }).trim();
536
+ parts.push(`\nGit: ${branch} (${uncommitted} uncommitted file${uncommitted !== 1 ? 's' : ''})`);
537
+ if (recentCommits) {
538
+ parts.push(`Recent commits:\n${recentCommits}`);
539
+ }
540
+ } catch (_e) {
541
+ // intentionally silent: may not be a git repo
542
+ }
543
+ }
544
+
545
+ if (fs.existsSync(stateFile)) {
546
+ const state = fs.readFileSync(stateFile, 'utf8');
547
+
548
+ if (!briefing) {
549
+ const position = extractSection(state, 'Current Position');
550
+ if (position) {
551
+ parts.push(`\nPosition:\n${position}`);
552
+ }
553
+
554
+ const blockers = extractSection(state, 'Blockers/Concerns');
555
+ if (blockers && !blockers.includes('None')) {
556
+ parts.push(`\nBlockers:\n${blockers}`);
557
+ }
558
+
559
+ const continuity = extractSection(state, 'Session Continuity');
560
+ if (continuity) {
561
+ parts.push(`\nLast Session:\n${continuity}`);
562
+ }
563
+
564
+ const fmMatch = state.match(/^---\r?\n([\s\S]*?)\r?\n---/);
565
+ if (fmMatch) {
566
+ const fm = fmMatch[1];
567
+ const sessionLast = fm.match(/^session_last:\s*["']?([^"'\r\n]+)["']?/m);
568
+ const sessionStoppedAt = fm.match(/^session_stopped_at:\s*["']?([^"'\r\n]+)["']?/m);
569
+ const sessionResume = fm.match(/^session_resume:\s*["']?([^"'\r\n]+)["']?/m);
570
+
571
+ if (sessionLast || sessionStoppedAt || sessionResume) {
572
+ const continuityParts = [];
573
+ if (sessionLast) continuityParts.push(`Last session: ${sessionLast[1].trim()}`);
574
+ if (sessionStoppedAt) continuityParts.push(`Stopped at: ${sessionStoppedAt[1].trim()}`);
575
+ if (sessionResume) continuityParts.push(`Resume: ${sessionResume[1].trim()}`);
576
+ parts.push(`\nSession continuity:\n${continuityParts.join('\n')}`);
577
+ }
578
+ }
579
+ }
580
+
581
+ const statusMatch = state.match(/\*{0,2}(?:Phase\s+)?Status\*{0,2}:\s*["']?([a-z_]+)["']?/i);
582
+ if (statusMatch && (statusMatch[1].toLowerCase() === 'building' || statusMatch[1].toLowerCase() === 'ready_to_execute')) {
583
+ try {
584
+ const stateStat = fs.statSync(stateFile);
585
+ const ageMs = Date.now() - stateStat.mtimeMs;
586
+ const ageMinutes = Math.round(ageMs / 60000);
587
+ if (ageMinutes > 30) {
588
+ const staleStatus = statusMatch[1].toLowerCase();
589
+ try {
590
+ const { stateUpdate } = require('../pbr-tools');
591
+ stateUpdate(planningDir, { status: 'planned' });
592
+ parts.push(`\nAuto-repaired: STATE.md was stuck in "${staleStatus}" for ${ageMinutes} minutes (likely crashed executor). Reset to "planned". Run /pbr:build to retry.`);
593
+ logHook('progress-tracker', 'SessionStart', 'stale-status-repaired', { ageMinutes, staleStatus });
594
+ } catch (_repairErr) {
595
+ parts.push(`\nWarning: STATE.md shows status "${staleStatus}" but was last modified ${ageMinutes} minutes ago. This may indicate a crashed executor. Run /pbr:health to diagnose.`);
596
+ logHook('progress-tracker', 'SessionStart', 'stale-status', { ageMinutes, staleStatus });
597
+ }
598
+ }
599
+ } catch (_e) { /* intentionally silent: best-effort */ }
600
+ }
601
+ } else {
602
+ parts.push('\nNo STATE.md found. Run /pbr:new-project to initialize or /pbr:progress to check.');
603
+ }
604
+
605
+ const waitingPath = path.join(planningDir, 'WAITING.json');
606
+ if (fs.existsSync(waitingPath)) {
607
+ try {
608
+ const waiting = JSON.parse(fs.readFileSync(waitingPath, 'utf8'));
609
+ parts.push(`\nProject is in WAITING state: ${waiting.reason || 'unknown reason'}`);
610
+ if (waiting.created_at) {
611
+ parts.push(`Waiting since: ${waiting.created_at}`);
612
+ }
613
+ parts.push('Run /pbr:resume to clear waiting state and continue.');
614
+ } catch (_e) {
615
+ parts.push('\nWAITING.json exists but could not be parsed.');
616
+ }
617
+ }
618
+
619
+ const handoffPath = path.join(planningDir, 'HANDOFF.json');
620
+ if (fs.existsSync(handoffPath)) {
621
+ try {
622
+ const handoff = JSON.parse(fs.readFileSync(handoffPath, 'utf8'));
623
+ const nextAction = handoff.next_action || 'unknown';
624
+ parts.push(`\nPrevious session left a handoff: ${nextAction}`);
625
+ parts.push('Run /pbr:resume to restore context.');
626
+ } catch (_e) {
627
+ parts.push('\nHANDOFF.json exists but could not be parsed.');
628
+ }
629
+ }
630
+
631
+ const phasesDir = path.join(planningDir, 'phases');
632
+ if (fs.existsSync(phasesDir)) {
633
+ const continueFiles = findContinueFiles(phasesDir);
634
+ if (continueFiles.length > 0) {
635
+ parts.push(`\nPaused work found: ${continueFiles.join(', ')}`);
636
+ parts.push('Run /pbr:resume-work to pick up where you left off.');
637
+ }
638
+ }
639
+
640
+ const config = configLoad(planningDir);
641
+ if (config) {
642
+ parts.push(`\nConfig: depth=${config.depth || 'standard'}, mode=${config.mode || 'interactive'}`);
643
+
644
+ const schemaPath = path.join(__dirname, '..', 'config-schema.json');
645
+ if (fs.existsSync(schemaPath)) {
646
+ const { configValidate } = require('../pbr-tools');
647
+ const validation = configValidate(config);
648
+ if (validation.warnings.length > 0) {
649
+ parts.push(`\nConfig warnings: ${validation.warnings.join('; ')}`);
650
+ }
651
+ if (validation.errors.length > 0) {
652
+ parts.push(`\nConfig errors: ${validation.errors.join('; ')}`);
653
+ }
654
+ }
655
+ }
656
+
657
+ const projectNotesDir = path.join(planningDir, 'notes');
658
+ const globalNotesDir = path.join(os.homedir(), '.claude', 'notes');
659
+ const projectNoteCount = countNotes(projectNotesDir);
660
+ const globalNoteCount = countNotes(globalNotesDir);
661
+ if (projectNoteCount > 0 || globalNoteCount > 0) {
662
+ const noteParts = [];
663
+ if (projectNoteCount > 0) noteParts.push(`${projectNoteCount} project`);
664
+ if (globalNoteCount > 0) noteParts.push(`${globalNoteCount} global`);
665
+ parts.push(`\nNotes: ${noteParts.join(', ')}. \`/pbr:note list\` to review.`);
666
+ }
667
+
668
+ try {
669
+ const seedsDir = path.join(planningDir, 'seeds');
670
+ if (fs.existsSync(seedsDir)) {
671
+ const seeds = fs.readdirSync(seedsDir).filter(f => f.endsWith('.md'));
672
+ if (seeds.length > 0) {
673
+ parts.push(`\nSeeds: ${seeds.length} dormant. \`/pbr:explore\` to review triggers.`);
674
+ }
675
+ }
676
+ } catch (_e) { /* intentionally silent: non-fatal */ }
677
+
678
+ try {
679
+ let deferredCount = 0;
680
+ const _phasesDir = path.join(planningDir, 'phases');
681
+ if (fs.existsSync(_phasesDir)) {
682
+ const phaseDirs = fs.readdirSync(_phasesDir, { withFileTypes: true });
683
+ for (const dir of phaseDirs) {
684
+ if (!dir.isDirectory()) continue;
685
+ try {
686
+ const phaseFiles = fs.readdirSync(path.join(_phasesDir, dir.name));
687
+ for (const file of phaseFiles) {
688
+ if (/^SUMMARY.*\.md$/i.test(file)) {
689
+ const content = fs.readFileSync(path.join(_phasesDir, dir.name, file), 'utf8');
690
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
691
+ if (fmMatch) {
692
+ const deferredItems = fmMatch[1].match(/^\s+-\s+/gm);
693
+ const hasDeferred = /^deferred:/m.test(fmMatch[1]);
694
+ if (hasDeferred && deferredItems) {
695
+ const lines = fmMatch[1].split(/\r?\n/);
696
+ let inDeferred = false;
697
+ for (const line of lines) {
698
+ if (/^deferred:/i.test(line)) { inDeferred = true; continue; }
699
+ if (inDeferred && /^\s+-\s+/.test(line)) { deferredCount++; }
700
+ if (inDeferred && /^\w/.test(line)) { inDeferred = false; }
701
+ }
702
+ }
703
+ }
704
+ }
705
+ }
706
+ } catch (_e) { /* intentionally silent: skip individual phase dirs */ }
707
+ }
708
+ }
709
+ if (deferredCount > 0) {
710
+ parts.push(`\nDeferred: ${deferredCount} items across phase summaries.`);
711
+ }
712
+ } catch (_e) { /* intentionally silent: non-fatal */ }
713
+
714
+ try {
715
+ const auditFiles = fs.readdirSync(planningDir).filter(f => f.endsWith('-MILESTONE-AUDIT.md'));
716
+ if (auditFiles.length > 0) {
717
+ const latestAudit = auditFiles.sort().pop();
718
+ const content = fs.readFileSync(path.join(planningDir, latestAudit), 'utf8');
719
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
720
+ if (fmMatch) {
721
+ let techDebtCount = 0;
722
+ const lines = fmMatch[1].split(/\r?\n/);
723
+ let inTechDebt = false;
724
+ for (const line of lines) {
725
+ if (/^tech_debt:/i.test(line)) { inTechDebt = true; continue; }
726
+ if (inTechDebt && /^\s+-\s+/.test(line)) { techDebtCount++; }
727
+ if (inTechDebt && /^\w/.test(line)) { inTechDebt = false; }
728
+ }
729
+ if (techDebtCount > 0) {
730
+ parts.push(`\nTech debt: ${techDebtCount} items from milestone audit.`);
731
+ }
732
+ }
733
+ }
734
+ } catch (_e) { /* intentionally silent: non-fatal */ }
735
+
736
+ try {
737
+ const questionsPath = path.join(planningDir, 'research', 'questions.md');
738
+ if (fs.existsSync(questionsPath)) {
739
+ const content = fs.readFileSync(questionsPath, 'utf-8');
740
+ const openQuestions = (content.match(/- \[ \]/g) || []).length;
741
+ if (openQuestions > 0) {
742
+ parts.push(`\nResearch: ${openQuestions} open question(s) in .planning/research/questions.md`);
743
+ }
744
+ }
745
+ } catch (_e) { /* intentionally silent: non-fatal */ }
746
+
747
+ try {
748
+ const knowledgePath = path.join(planningDir, 'KNOWLEDGE.md');
749
+ if (fs.existsSync(knowledgePath)) {
750
+ const content = fs.readFileSync(knowledgePath, 'utf-8');
751
+ const rules = (content.match(/^\| K\d+/gm) || []).length;
752
+ const patterns = (content.match(/^\| P\d+/gm) || []).length;
753
+ const lessons = (content.match(/^\| L\d+/gm) || []).length;
754
+ if (rules + patterns + lessons > 0) {
755
+ parts.push(`\nKnowledge: ${rules} rules, ${patterns} patterns, ${lessons} lessons.`);
756
+ }
757
+ }
758
+ } catch (_e) { /* intentionally silent: non-fatal */ }
759
+
760
+ const roadmapFile = path.join(planningDir, 'ROADMAP.md');
761
+ if (fs.existsSync(stateFile) && fs.existsSync(roadmapFile)) {
762
+ try {
763
+ const roadmap = fs.readFileSync(roadmapFile, 'utf8');
764
+ const state = fs.readFileSync(stateFile, 'utf8');
765
+
766
+ const phaseMatch = state.match(/Phase:\s*(\d+)\s+of\s+\d+/);
767
+ if (phaseMatch) {
768
+ const currentPhase = parseInt(phaseMatch[1], 10);
769
+ const strippedRoadmap = roadmap
770
+ .replace(/<\/?details>/gi, '')
771
+ .replace(/<\/?summary>/gi, '');
772
+ const progressTable = strippedRoadmap.match(/## Progress[\s\S]*?\|[\s\S]*?(?=\n##|\s*$)/);
773
+ if (progressTable) {
774
+ const rows = progressTable[0].split('\n').filter(r => r.includes('|'));
775
+ let statusColIdx = -1;
776
+ let phaseColIdx = 0;
777
+ const headerRow = rows.find(r => /Plans?\s*Complete/i.test(r) || /Status/i.test(r));
778
+ if (headerRow) {
779
+ const headers = headerRow.split('|').map(h => h.trim().toLowerCase()).filter(Boolean);
780
+ const pIdx = headers.findIndex(h => /phase/i.test(h));
781
+ if (pIdx !== -1) phaseColIdx = pIdx;
782
+ statusColIdx = headers.findIndex(h => /status/i.test(h));
783
+ }
784
+ for (const row of rows) {
785
+ const cols = row.split('|').map(c => c.trim()).filter(Boolean);
786
+ if (cols.length >= 2 && statusColIdx !== -1 && statusColIdx < cols.length) {
787
+ const phaseNum = parseInt(cols[phaseColIdx], 10);
788
+ const status = cols[statusColIdx] ? cols[statusColIdx].toLowerCase() : '';
789
+ if (phaseNum === currentPhase && (status === 'verified' || status === 'complete')) {
790
+ parts.push(`\nWarning: STATE.md may be outdated -- ROADMAP.md shows phase ${currentPhase} as ${status}.`);
791
+ }
792
+ }
793
+ }
794
+ }
795
+ }
796
+ } catch (_e) {
797
+ // intentionally silent: parse error is non-fatal
798
+ }
799
+ }
800
+
801
+ const activeSkillFile = path.join(planningDir, '.active-skill');
802
+ const { sessionLoad: _sessionLoad } = require('../pbr-tools');
803
+ const sessionData = _sessionLoad(planningDir);
804
+ const sessionActiveSkill = sessionData.activeSkill || null;
805
+
806
+ if (fs.existsSync(activeSkillFile)) {
807
+ try {
808
+ const stats = fs.statSync(activeSkillFile);
809
+ const ageMs = Date.now() - stats.mtimeMs;
810
+ const ageMinutes = Math.floor(ageMs / 60000);
811
+ if (ageMinutes > 60) {
812
+ const skill = sessionActiveSkill || fs.readFileSync(activeSkillFile, 'utf8').trim();
813
+ try {
814
+ fs.unlinkSync(activeSkillFile);
815
+ parts.push(`\nAuto-cleaned: Stale .active-skill lock removed (skill: "${skill}", age: ${ageMinutes} minutes). Was likely from a crashed or abandoned session.`);
816
+ logHook('progress-tracker', 'SessionStart', 'stale-active-skill-cleaned', { ageMinutes, skill });
817
+ } catch (_cleanupErr) {
818
+ parts.push(`\nWarning: .active-skill is ${ageMinutes} minutes old (skill: "${skill}"). Could not auto-remove -- delete .planning/.active-skill manually.`);
819
+ logHook('progress-tracker', 'SessionStart', 'stale-active-skill', { ageMinutes, skill });
820
+ }
821
+ }
822
+ } catch (_e) {
823
+ // intentionally silent: non-fatal
824
+ }
825
+ }
826
+
827
+ const autoNextFile = path.join(planningDir, '.auto-next');
828
+ if (fs.existsSync(autoNextFile)) {
829
+ try {
830
+ const stats = fs.statSync(autoNextFile);
831
+ const ageMs = Date.now() - stats.mtimeMs;
832
+ const ageMinutes = Math.floor(ageMs / 60000);
833
+ if (ageMinutes > 10) {
834
+ parts.push(`\nWarning: Stale .auto-next signal found (${ageMinutes} minutes old). This may trigger an unexpected command. Consider deleting .planning/.auto-next.`);
835
+ logHook('progress-tracker', 'SessionStart', 'stale-auto-next', { ageMinutes });
836
+ }
837
+ } catch (_e) {
838
+ // intentionally silent: non-fatal
839
+ }
840
+ }
841
+
842
+ const hookHealth = getHookHealthSummary(planningDir);
843
+ if (hookHealth) {
844
+ parts.push(`\n${hookHealth}`);
845
+ }
846
+
847
+ const learningsThresholds = checkLearningsDeferrals(planningDir);
848
+ if (learningsThresholds.length > 0) {
849
+ parts.push(`\nLearnings deferral triggers ready:\n${learningsThresholds.join('\n')}`);
850
+ }
851
+
852
+ const intelContext = getIntelContext(planningDir, config);
853
+ if (intelContext) parts.push(intelContext);
854
+
855
+ const stalenessWarning = getIntelStalenessWarning(planningDir, config);
856
+ if (stalenessWarning) parts.push(stalenessWarning);
857
+
858
+ const decisionBriefing = getDecisionBriefing(planningDir, config);
859
+ if (decisionBriefing) parts.push(decisionBriefing);
860
+
861
+ const nkBriefing = getNegativeKnowledgeBriefing(planningDir, config);
862
+ if (nkBriefing) parts.push(nkBriefing);
863
+
864
+ try {
865
+ const snapshotsEnabled = config && config.features && config.features.mental_model_snapshots !== false;
866
+ if (snapshotsEnabled) {
867
+ const snapshot = loadLatestSnapshot(planningDir, { maxAgeHours: 48 });
868
+ const snapshotBrief = formatSnapshotBriefing(snapshot);
869
+ if (snapshotBrief) {
870
+ parts.push('\n' + snapshotBrief);
871
+ }
872
+ }
873
+ } catch (_e) { /* intentionally silent: never crash SessionStart for optional features */ }
874
+
875
+ try {
876
+ const conventionsEnabled = config && config.features && config.features.convention_memory !== false;
877
+ if (conventionsEnabled) {
878
+ const conventions = loadConventions(planningDir);
879
+ if (conventions && Object.keys(conventions).length > 0) {
880
+ const convBrief = formatConventionBriefing(conventions);
881
+ if (convBrief) {
882
+ parts.push(convBrief);
883
+ }
884
+ }
885
+ }
886
+ } catch (_e) { /* intentionally silent: never crash SessionStart for optional features */ }
887
+
888
+ try {
889
+ const { checkPreResearch } = require('./pre-research');
890
+ const preResearchResult = checkPreResearch(planningDir, config);
891
+ if (preResearchResult) {
892
+ parts.push(`\n[Pre-Research] Phase ${preResearchResult.nextPhase} (${preResearchResult.name}) is next -- consider running ${preResearchResult.command} to pre-research.`);
893
+ }
894
+ } catch (_e) { /* intentionally silent: non-fatal */ }
895
+
896
+ parts.push('\n[PBR WORKFLOW REQUIRED -- Route all work through PBR commands]\n- Fix a bug or small task \u2192 /pbr:quick\n- Plan a feature \u2192 /pbr:plan-phase N\n- Build from a plan \u2192 /pbr:execute-phase N\n- Explore or research \u2192 /pbr:explore\n- Freeform request \u2192 /pbr:do\n- Do NOT write source code or spawn generic agents without an active PBR skill.\n- Use PBR agents (pbr:researcher, pbr:executor, etc.) not Explore/general-purpose.');
897
+
898
+ return parts.join('\n');
899
+ }
900
+
901
+ module.exports = {
902
+ buildEnhancedBriefing,
903
+ buildContext,
904
+ getHookHealthSummary,
905
+ getDecisionBriefing,
906
+ getNegativeKnowledgeBriefing,
907
+ getHarnessProfileWarning,
908
+ getIntelContext,
909
+ getIntelStalenessWarning,
910
+ checkLearningsDeferrals,
911
+ detectOtherSessions,
912
+ extractSection,
913
+ escapeRegex,
914
+ findContinueFiles,
915
+ countNotes,
916
+ FAILURE_DECISIONS,
917
+ HOOK_HEALTH_MAX_ENTRIES,
918
+ };