@sienklogic/plan-build-run 2.21.1 → 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 (982) hide show
  1. package/CHANGELOG.md +1331 -323
  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 +210 -34
  147. package/plugins/pbr/agents/dev-sync.md +206 -0
  148. package/plugins/pbr/agents/executor.md +734 -38
  149. package/plugins/pbr/agents/general.md +69 -5
  150. package/plugins/pbr/agents/integration-checker.md +147 -31
  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 -65
  154. package/plugins/pbr/agents/planner.md +449 -41
  155. package/plugins/pbr/agents/researcher.md +218 -37
  156. package/plugins/pbr/agents/roadmapper.md +398 -0
  157. package/plugins/pbr/agents/synthesizer.md +166 -25
  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 +570 -46
  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/execute-phase.md +6 -0
  172. package/plugins/pbr/commands/fast.md +6 -0
  173. package/plugins/pbr/commands/forensics.md +6 -0
  174. package/plugins/pbr/commands/import.md +1 -1
  175. package/plugins/pbr/commands/insert-phase.md +65 -0
  176. package/plugins/pbr/commands/intel.md +5 -0
  177. package/plugins/pbr/commands/join-discord.md +11 -0
  178. package/plugins/pbr/commands/list-phase-assumptions.md +5 -0
  179. package/plugins/pbr/commands/map-codebase.md +6 -0
  180. package/plugins/pbr/commands/milestone-summary.md +6 -0
  181. package/plugins/pbr/commands/new-milestone.md +8 -0
  182. package/plugins/pbr/commands/new-project.md +6 -0
  183. package/plugins/pbr/commands/pause-work.md +5 -0
  184. package/plugins/pbr/commands/plan-milestone-gaps.md +7 -0
  185. package/plugins/pbr/commands/plan-phase.md +6 -0
  186. package/plugins/pbr/commands/plant-seed.md +6 -0
  187. package/plugins/pbr/commands/profile-user.md +5 -0
  188. package/plugins/pbr/commands/profile.md +5 -0
  189. package/plugins/pbr/commands/progress.md +6 -0
  190. package/plugins/pbr/commands/quick.md +1 -1
  191. package/plugins/pbr/commands/reapply-patches.md +47 -0
  192. package/plugins/pbr/commands/release.md +6 -0
  193. package/plugins/pbr/commands/remove-phase.md +66 -0
  194. package/plugins/pbr/commands/research-phase.md +59 -0
  195. package/plugins/pbr/commands/resume-work.md +5 -0
  196. package/plugins/pbr/commands/seed.md +6 -0
  197. package/plugins/pbr/commands/session-report.md +5 -0
  198. package/plugins/pbr/commands/set-profile.md +6 -0
  199. package/plugins/pbr/commands/settings.md +5 -0
  200. package/plugins/pbr/commands/setup.md +1 -1
  201. package/plugins/pbr/commands/ship.md +5 -0
  202. package/plugins/pbr/commands/stats.md +6 -0
  203. package/plugins/pbr/commands/test.md +5 -0
  204. package/plugins/pbr/commands/thread.md +6 -0
  205. package/plugins/pbr/commands/todo.md +1 -1
  206. package/plugins/pbr/commands/ui-phase.md +5 -0
  207. package/plugins/pbr/commands/ui-review.md +5 -0
  208. package/plugins/pbr/commands/undo.md +5 -0
  209. package/plugins/pbr/commands/update.md +37 -0
  210. package/plugins/pbr/commands/validate-phase.md +5 -0
  211. package/plugins/pbr/commands/verify-work.md +6 -0
  212. package/plugins/pbr/dashboard/package-lock.json +6 -0
  213. package/plugins/pbr/dist/architecture-guard.js +76 -0
  214. package/plugins/pbr/dist/audit-dimensions.js +556 -0
  215. package/plugins/pbr/dist/auto-continue.js +277 -0
  216. package/plugins/pbr/dist/block-skill-self-read.js +124 -0
  217. package/plugins/pbr/dist/check-agent-state-write.js +63 -0
  218. package/plugins/pbr/dist/check-config-change.js +213 -0
  219. package/plugins/pbr/dist/check-cross-plugin-sync.js +93 -0
  220. package/plugins/pbr/dist/check-dangerous-commands.js +193 -0
  221. package/plugins/pbr/dist/check-direct-state-write.js +37 -0
  222. package/plugins/pbr/dist/check-doc-sprawl.js +102 -0
  223. package/plugins/pbr/dist/check-phase-boundary.js +191 -0
  224. package/plugins/pbr/dist/check-plan-format.js +227 -0
  225. package/plugins/pbr/dist/check-read-first.js +345 -0
  226. package/plugins/pbr/dist/check-roadmap-sync.js +507 -0
  227. package/plugins/pbr/dist/check-skill-workflow.js +354 -0
  228. package/plugins/pbr/dist/check-state-sync.js +676 -0
  229. package/plugins/pbr/dist/check-subagent-output.js +425 -0
  230. package/plugins/pbr/dist/check-summary-gate.js +188 -0
  231. package/plugins/pbr/dist/context-bridge.js +425 -0
  232. package/plugins/pbr/dist/context-budget-check.js +442 -0
  233. package/plugins/pbr/dist/context-quality.js +271 -0
  234. package/plugins/pbr/dist/enforce-context-budget.js +138 -0
  235. package/plugins/pbr/dist/enforce-pbr-workflow.js +277 -0
  236. package/plugins/pbr/dist/event-handler.js +212 -0
  237. package/plugins/pbr/dist/event-logger.js +125 -0
  238. package/plugins/pbr/dist/feedback-loop.js +155 -0
  239. package/plugins/pbr/dist/graph-update.js +422 -0
  240. package/plugins/pbr/dist/hook-logger.js +114 -0
  241. package/plugins/pbr/dist/hook-server-client.js +361 -0
  242. package/plugins/pbr/dist/hook-server.js +664 -0
  243. package/plugins/pbr/dist/hooks-schema.json +87 -0
  244. package/plugins/pbr/dist/instructions-loaded.js +173 -0
  245. package/plugins/pbr/dist/intercept-plan-mode.js +81 -0
  246. package/plugins/pbr/dist/log-notification.js +131 -0
  247. package/plugins/pbr/dist/log-subagent.js +367 -0
  248. package/plugins/pbr/dist/log-tool-failure.js +140 -0
  249. package/plugins/pbr/dist/milestone-learnings.js +519 -0
  250. package/plugins/pbr/dist/pbr-tools.js +493 -0
  251. package/plugins/pbr/dist/post-bash-triage.js +96 -0
  252. package/plugins/pbr/dist/post-compact.js +135 -0
  253. package/plugins/pbr/dist/post-hoc.js +237 -0
  254. package/plugins/pbr/dist/post-write-dispatch.js +243 -0
  255. package/plugins/pbr/dist/post-write-quality.js +208 -0
  256. package/plugins/pbr/dist/pre-bash-dispatch.js +212 -0
  257. package/plugins/pbr/dist/pre-skill-dispatch.js +114 -0
  258. package/plugins/pbr/dist/pre-task-dispatch.js +269 -0
  259. package/plugins/pbr/dist/pre-write-dispatch.js +234 -0
  260. package/plugins/pbr/dist/progress-tracker.js +173 -0
  261. package/plugins/pbr/dist/prompt-guard.js +114 -0
  262. package/plugins/pbr/dist/prompt-routing.js +209 -0
  263. package/plugins/pbr/dist/quick-status.js +179 -0
  264. package/plugins/pbr/dist/record-incident.js +37 -0
  265. package/plugins/pbr/dist/run-hook.js +132 -0
  266. package/plugins/pbr/dist/session-cleanup.js +653 -0
  267. package/plugins/pbr/dist/session-tracker.js +124 -0
  268. package/plugins/pbr/dist/status-line.js +849 -0
  269. package/plugins/pbr/dist/suggest-compact.js +307 -0
  270. package/plugins/pbr/dist/sync-context-to-claude.js +100 -0
  271. package/plugins/pbr/dist/task-completed.js +206 -0
  272. package/plugins/pbr/dist/track-context-budget.js +432 -0
  273. package/plugins/pbr/dist/track-user-gates.js +88 -0
  274. package/plugins/pbr/dist/trust-tracker.js +193 -0
  275. package/plugins/pbr/dist/validate-commit.js +233 -0
  276. package/plugins/pbr/dist/validate-skill-args.js +222 -0
  277. package/plugins/pbr/dist/validate-task.js +271 -0
  278. package/plugins/pbr/dist/worktree-create.js +144 -0
  279. package/plugins/pbr/dist/worktree-remove.js +147 -0
  280. package/plugins/pbr/hooks/hooks.json +137 -65
  281. package/plugins/pbr/references/agent-contracts.md +39 -8
  282. package/plugins/pbr/references/agent-teams.md +3 -3
  283. package/plugins/pbr/references/archive/checkpoints.md +189 -0
  284. package/plugins/pbr/references/archive/context-quality-tiers.md +45 -0
  285. package/plugins/pbr/references/archive/hook-ordering.md +89 -0
  286. package/plugins/pbr/references/archive/limitations.md +106 -0
  287. package/plugins/pbr/references/archive/pbr-rules.md +194 -0
  288. package/plugins/pbr/references/archive/pbr-tools-cli.md +415 -0
  289. package/plugins/pbr/references/archive/pretooluse-jsonl-behavior.md +58 -0
  290. package/plugins/pbr/references/archive/signal-files.md +41 -0
  291. package/plugins/pbr/references/archive/tmux-setup.md +288 -0
  292. package/plugins/pbr/references/archive/verification-matrix.md +34 -0
  293. package/plugins/pbr/references/archive/verification-patterns.md +277 -0
  294. package/plugins/pbr/references/archive/worktree-sparse-checkout.md +86 -0
  295. package/plugins/pbr/references/assumptions.md +42 -0
  296. package/plugins/pbr/references/checkpoints.md +723 -104
  297. package/plugins/pbr/references/config-reference.md +387 -10
  298. package/plugins/pbr/references/continuation-format.md +1 -0
  299. package/plugins/pbr/references/decimal-phase-calculation.md +65 -0
  300. package/plugins/pbr/references/deviation-rules.md +12 -0
  301. package/plugins/pbr/references/few-shot-examples/audit.md +77 -0
  302. package/plugins/pbr/references/few-shot-examples/check-plan-format.md +172 -0
  303. package/plugins/pbr/references/few-shot-examples/check-subagent-output.md +118 -0
  304. package/plugins/pbr/references/few-shot-examples/integration-checker.md +70 -0
  305. package/plugins/pbr/references/few-shot-examples/nyquist-auditor.md +83 -0
  306. package/plugins/pbr/references/few-shot-examples/plan-checker.md +73 -0
  307. package/plugins/pbr/references/few-shot-examples/ui-checker.md +71 -0
  308. package/plugins/pbr/references/few-shot-examples/verifier.md +109 -0
  309. package/plugins/pbr/references/git-integration.md +110 -27
  310. package/plugins/pbr/references/git-planning-commit.md +35 -0
  311. package/plugins/pbr/references/model-profile-resolution.md +34 -0
  312. package/plugins/pbr/references/model-profiles.md +90 -7
  313. package/plugins/pbr/references/model-selection.md +1 -1
  314. package/plugins/pbr/references/node-repair.md +48 -0
  315. package/plugins/pbr/references/plan-authoring.md +65 -0
  316. package/plugins/pbr/references/plan-format.md +184 -10
  317. package/plugins/pbr/references/questioning.md +138 -49
  318. package/plugins/pbr/references/reading-verification.md +4 -4
  319. package/plugins/pbr/references/tdd.md +263 -0
  320. package/plugins/pbr/references/thinking-models-planning.md +47 -0
  321. package/plugins/pbr/references/thinking-models-verification.md +44 -0
  322. package/plugins/pbr/references/ui-brand.md +449 -0
  323. package/plugins/pbr/references/verification-overrides.md +39 -0
  324. package/plugins/pbr/references/verification-patterns.md +529 -113
  325. package/plugins/pbr/scripts/architecture-guard.js +76 -0
  326. package/plugins/pbr/scripts/audit-checks/behavioral-compliance.js +2098 -0
  327. package/plugins/pbr/scripts/audit-checks/error-analysis.js +989 -0
  328. package/plugins/pbr/scripts/audit-checks/feature-verification.js +723 -0
  329. package/plugins/pbr/scripts/audit-checks/index.js +433 -0
  330. package/plugins/pbr/scripts/audit-checks/infrastructure.js +816 -0
  331. package/plugins/pbr/scripts/audit-checks/quality-metrics.js +455 -0
  332. package/plugins/pbr/scripts/audit-checks/session-quality.js +980 -0
  333. package/plugins/pbr/scripts/audit-checks/si-agent-hook-config-checks.js +396 -0
  334. package/plugins/pbr/scripts/audit-checks/si-cross-cutting-checks.js +272 -0
  335. package/plugins/pbr/scripts/audit-checks/si-skill-checks.js +424 -0
  336. package/plugins/pbr/scripts/audit-checks/workflow-compliance.js +1175 -0
  337. package/plugins/pbr/scripts/audit-dimensions.js +556 -0
  338. package/plugins/pbr/scripts/auto-continue.js +192 -37
  339. package/plugins/pbr/scripts/block-skill-self-read.js +124 -0
  340. package/plugins/pbr/scripts/check-agent-state-write.js +63 -0
  341. package/plugins/pbr/scripts/check-config-change.js +84 -1
  342. package/plugins/pbr/scripts/check-cross-plugin-sync.js +93 -0
  343. package/plugins/pbr/scripts/check-dangerous-commands.js +18 -5
  344. package/plugins/pbr/scripts/check-direct-state-write.js +37 -0
  345. package/plugins/pbr/scripts/check-phase-boundary.js +3 -2
  346. package/plugins/pbr/scripts/check-plan-format.js +153 -354
  347. package/plugins/pbr/scripts/check-read-first.js +345 -0
  348. package/plugins/pbr/scripts/check-roadmap-sync.js +174 -19
  349. package/plugins/pbr/scripts/check-skill-workflow.js +21 -16
  350. package/plugins/pbr/scripts/check-state-sync.js +352 -220
  351. package/plugins/pbr/scripts/check-subagent-output.js +296 -333
  352. package/plugins/pbr/scripts/check-summary-gate.js +5 -15
  353. package/plugins/pbr/scripts/commands/benchmarks.js +195 -0
  354. package/plugins/pbr/scripts/commands/calibrate.js +530 -0
  355. package/plugins/pbr/scripts/commands/config.js +72 -0
  356. package/plugins/pbr/scripts/commands/misc.js +779 -0
  357. package/plugins/pbr/scripts/commands/phase.js +293 -0
  358. package/plugins/pbr/scripts/commands/roadmap.js +75 -0
  359. package/plugins/pbr/scripts/commands/state.js +84 -0
  360. package/plugins/pbr/scripts/commands/stress-test.js +349 -0
  361. package/plugins/pbr/scripts/commands/todo.js +191 -0
  362. package/plugins/pbr/scripts/commands/verify.js +169 -0
  363. package/plugins/pbr/scripts/config-schema.json +1183 -95
  364. package/plugins/pbr/scripts/context-bridge.js +425 -0
  365. package/plugins/pbr/scripts/context-budget-check.js +171 -16
  366. package/plugins/pbr/scripts/context-quality.js +271 -0
  367. package/plugins/pbr/scripts/enforce-context-budget.js +138 -0
  368. package/plugins/pbr/scripts/enforce-pbr-workflow.js +277 -0
  369. package/plugins/pbr/scripts/event-handler.js +137 -87
  370. package/plugins/pbr/scripts/event-logger.js +58 -25
  371. package/plugins/pbr/scripts/feedback-loop.js +155 -0
  372. package/plugins/pbr/scripts/graph-update.js +422 -0
  373. package/plugins/pbr/scripts/hook-logger.js +69 -35
  374. package/plugins/pbr/scripts/hook-server-client.js +361 -0
  375. package/plugins/pbr/scripts/hook-server.js +664 -0
  376. package/plugins/pbr/scripts/hooks-schema.json +12 -5
  377. package/plugins/pbr/scripts/instructions-loaded.js +173 -0
  378. package/plugins/pbr/scripts/intent-router.cjs +147 -0
  379. package/plugins/pbr/scripts/intercept-plan-mode.js +52 -18
  380. package/plugins/pbr/scripts/lib/alternatives.js +203 -0
  381. package/plugins/pbr/scripts/lib/audit.js +65 -0
  382. package/plugins/pbr/scripts/lib/auto-cleanup.js +221 -0
  383. package/plugins/pbr/scripts/lib/auto-verify.js +123 -0
  384. package/plugins/pbr/scripts/lib/benchmark.js +190 -0
  385. package/plugins/pbr/scripts/lib/build.js +719 -0
  386. package/plugins/pbr/scripts/lib/ci-fix-loop.js +228 -0
  387. package/plugins/pbr/scripts/lib/commands.js +483 -0
  388. package/plugins/pbr/scripts/lib/compound.js +222 -0
  389. package/plugins/pbr/scripts/lib/config-cache.js +83 -0
  390. package/plugins/pbr/scripts/lib/config.js +1469 -0
  391. package/plugins/pbr/scripts/lib/context.js +254 -0
  392. package/plugins/pbr/scripts/lib/contextual-help.js +183 -0
  393. package/plugins/pbr/scripts/lib/convention-detector.js +413 -0
  394. package/plugins/pbr/scripts/lib/core.js +1585 -0
  395. package/plugins/pbr/scripts/lib/dashboard-launch.js +364 -0
  396. package/plugins/pbr/scripts/lib/data-hygiene.js +179 -0
  397. package/plugins/pbr/scripts/lib/decision-extraction.js +183 -0
  398. package/plugins/pbr/scripts/lib/decisions.js +194 -0
  399. package/plugins/pbr/scripts/lib/dependency-break.js +147 -0
  400. package/plugins/pbr/scripts/lib/format-validators.js +1049 -0
  401. package/plugins/pbr/scripts/lib/frontmatter.js +302 -0
  402. package/plugins/pbr/scripts/lib/gates/advisories.js +133 -0
  403. package/plugins/pbr/scripts/lib/gates/build-dependency.js +118 -0
  404. package/plugins/pbr/scripts/lib/gates/build-executor.js +106 -0
  405. package/plugins/pbr/scripts/lib/gates/doc-existence.js +46 -0
  406. package/plugins/pbr/scripts/lib/gates/helpers.js +98 -0
  407. package/plugins/pbr/scripts/lib/gates/inline-execution.js +187 -0
  408. package/plugins/pbr/scripts/lib/gates/milestone-complete.js +139 -0
  409. package/plugins/pbr/scripts/lib/gates/milestone-summary.js +121 -0
  410. package/plugins/pbr/scripts/lib/gates/multi-phase-loader.js +149 -0
  411. package/plugins/pbr/scripts/lib/gates/plan-executor.js +36 -0
  412. package/plugins/pbr/scripts/lib/gates/plan-validation.js +115 -0
  413. package/plugins/pbr/scripts/lib/gates/quick-executor.js +78 -0
  414. package/plugins/pbr/scripts/lib/gates/review-planner.js +63 -0
  415. package/plugins/pbr/scripts/lib/gates/review-verifier.js +71 -0
  416. package/plugins/pbr/scripts/lib/gates/rich-agent-context.js +148 -0
  417. package/plugins/pbr/scripts/lib/gates/sprint-preflight.js +30 -0
  418. package/plugins/pbr/scripts/lib/gates/user-confirmation.js +95 -0
  419. package/plugins/pbr/scripts/lib/graph-cli.js +89 -0
  420. package/plugins/pbr/scripts/lib/graph.js +553 -0
  421. package/plugins/pbr/scripts/lib/handoff-validators.js +224 -0
  422. package/plugins/pbr/scripts/lib/health-checks.js +107 -0
  423. package/plugins/pbr/scripts/lib/health-phase06.js +120 -0
  424. package/plugins/pbr/scripts/lib/health.js +132 -0
  425. package/plugins/pbr/scripts/lib/help.js +100 -0
  426. package/plugins/pbr/scripts/lib/history.js +150 -0
  427. package/plugins/pbr/scripts/lib/impact-analysis.js +319 -0
  428. package/plugins/pbr/scripts/lib/incidents.js +190 -0
  429. package/plugins/pbr/scripts/lib/init.js +643 -0
  430. package/plugins/pbr/scripts/lib/insights-parser.js +320 -0
  431. package/plugins/pbr/scripts/lib/intel.js +653 -0
  432. package/plugins/pbr/scripts/lib/learnings.js +511 -0
  433. package/plugins/pbr/scripts/lib/migrate.js +309 -0
  434. package/plugins/pbr/scripts/lib/milestone.js +306 -0
  435. package/plugins/pbr/scripts/lib/msys-path.js +20 -0
  436. package/plugins/pbr/scripts/lib/negative-knowledge.js +194 -0
  437. package/plugins/pbr/scripts/lib/notification-throttle.js +141 -0
  438. package/plugins/pbr/scripts/lib/onboarding-generator.js +288 -0
  439. package/plugins/pbr/scripts/lib/parse-args.js +134 -0
  440. package/plugins/pbr/scripts/lib/pattern-routing.js +55 -0
  441. package/plugins/pbr/scripts/lib/patterns.js +272 -0
  442. package/plugins/pbr/scripts/lib/perf.js +190 -0
  443. package/plugins/pbr/scripts/lib/phase.js +1043 -0
  444. package/plugins/pbr/scripts/lib/pid-lock.js +156 -0
  445. package/plugins/pbr/scripts/lib/post-hoc.js +160 -0
  446. package/plugins/pbr/scripts/lib/pre-commit-checks.js +220 -0
  447. package/plugins/pbr/scripts/lib/pre-research.js +126 -0
  448. package/plugins/pbr/scripts/lib/premature-completion.js +312 -0
  449. package/plugins/pbr/scripts/lib/preview.js +174 -0
  450. package/plugins/pbr/scripts/lib/progress-visualization.js +296 -0
  451. package/plugins/pbr/scripts/lib/quick-init.js +131 -0
  452. package/plugins/pbr/scripts/lib/reference.js +236 -0
  453. package/plugins/pbr/scripts/lib/requirements.js +153 -0
  454. package/plugins/pbr/scripts/lib/resolve-root.js +66 -0
  455. package/plugins/pbr/scripts/lib/reverse-spec.js +259 -0
  456. package/plugins/pbr/scripts/lib/roadmap.js +1089 -0
  457. package/plugins/pbr/scripts/lib/security-scan.js +200 -0
  458. package/plugins/pbr/scripts/lib/session-briefing.js +918 -0
  459. package/plugins/pbr/scripts/lib/skill-section.js +99 -0
  460. package/plugins/pbr/scripts/lib/smart-next-task.js +198 -0
  461. package/plugins/pbr/scripts/lib/snapshot-manager.js +232 -0
  462. package/plugins/pbr/scripts/lib/spec-diff.js +209 -0
  463. package/plugins/pbr/scripts/lib/spec-engine.js +189 -0
  464. package/plugins/pbr/scripts/lib/spot-check.js +539 -0
  465. package/plugins/pbr/scripts/lib/state-queue.js +171 -0
  466. package/plugins/pbr/scripts/lib/state.js +1082 -0
  467. package/plugins/pbr/scripts/lib/status-render.js +511 -0
  468. package/plugins/pbr/scripts/lib/step-verify.js +149 -0
  469. package/plugins/pbr/scripts/lib/subagent-validators.js +1119 -0
  470. package/plugins/pbr/scripts/lib/suggest-next.js +435 -0
  471. package/plugins/pbr/scripts/lib/tech-debt-scanner.js +116 -0
  472. package/plugins/pbr/scripts/lib/templates.js +362 -0
  473. package/plugins/pbr/scripts/lib/test-selection.js +163 -0
  474. package/plugins/pbr/scripts/lib/todo.js +300 -0
  475. package/plugins/pbr/scripts/lib/verify.js +1561 -0
  476. package/plugins/pbr/scripts/log-notification.js +131 -0
  477. package/plugins/pbr/scripts/log-subagent.js +221 -18
  478. package/plugins/pbr/scripts/log-tool-failure.js +60 -5
  479. package/plugins/pbr/scripts/milestone-learnings.js +519 -0
  480. package/plugins/pbr/scripts/package.json +1 -1
  481. package/plugins/pbr/scripts/pbr-tools.js +362 -1247
  482. package/plugins/pbr/scripts/post-bash-triage.js +96 -0
  483. package/plugins/pbr/scripts/post-compact.js +135 -0
  484. package/plugins/pbr/scripts/post-hoc.js +237 -0
  485. package/plugins/pbr/scripts/post-write-dispatch.js +201 -31
  486. package/plugins/pbr/scripts/post-write-quality.js +4 -3
  487. package/plugins/pbr/scripts/pre-bash-dispatch.js +147 -51
  488. package/plugins/pbr/scripts/pre-skill-dispatch.js +114 -0
  489. package/plugins/pbr/scripts/pre-task-dispatch.js +269 -0
  490. package/plugins/pbr/scripts/pre-write-dispatch.js +170 -72
  491. package/plugins/pbr/scripts/progress-tracker.js +121 -324
  492. package/plugins/pbr/scripts/prompt-guard.js +114 -0
  493. package/plugins/pbr/scripts/prompt-routing.js +209 -0
  494. package/plugins/pbr/scripts/quick-status.js +179 -0
  495. package/plugins/pbr/scripts/record-incident.js +37 -0
  496. package/plugins/pbr/scripts/risk-classifier.cjs +123 -0
  497. package/plugins/pbr/scripts/run-hook.js +63 -23
  498. package/plugins/pbr/scripts/session-cleanup.js +428 -29
  499. package/plugins/pbr/scripts/session-tracker.js +124 -0
  500. package/plugins/pbr/scripts/status-line.js +571 -43
  501. package/plugins/pbr/scripts/suggest-compact.js +201 -13
  502. package/plugins/pbr/scripts/sync-context-to-claude.js +100 -0
  503. package/plugins/pbr/scripts/task-completed.js +165 -4
  504. package/plugins/pbr/scripts/test/config.test.js +126 -0
  505. package/plugins/pbr/scripts/test/cross-platform.test.js +120 -0
  506. package/plugins/pbr/scripts/test/fixtures/config.json +20 -0
  507. package/plugins/pbr/scripts/test/fixtures/plan.md +54 -0
  508. package/plugins/pbr/scripts/test/fixtures/project.md +30 -0
  509. package/plugins/pbr/scripts/test/fixtures/roadmap.md +55 -0
  510. package/plugins/pbr/scripts/test/fixtures/state.md +60 -0
  511. package/plugins/pbr/scripts/test/fixtures/summary.md +35 -0
  512. package/plugins/pbr/scripts/test/fixtures.test.js +184 -0
  513. package/plugins/pbr/scripts/test/phase.test.js +142 -0
  514. package/plugins/pbr/scripts/test/roadmap.test.js +96 -0
  515. package/plugins/pbr/scripts/test/state.test.js +155 -0
  516. package/plugins/pbr/scripts/track-context-budget.js +368 -104
  517. package/plugins/pbr/scripts/track-user-gates.js +88 -0
  518. package/plugins/pbr/scripts/trust-tracker.js +193 -0
  519. package/plugins/pbr/scripts/validate-commit.js +51 -19
  520. package/plugins/pbr/scripts/validate-skill-args.js +85 -14
  521. package/plugins/pbr/scripts/validate-task.js +83 -622
  522. package/plugins/pbr/scripts/worktree-create.js +144 -0
  523. package/plugins/pbr/scripts/worktree-remove.js +147 -0
  524. package/plugins/pbr/skills/audit/SKILL.md +195 -24
  525. package/plugins/pbr/skills/audit-fix/SKILL.md +326 -0
  526. package/plugins/pbr/skills/autonomous/SKILL.md +551 -0
  527. package/plugins/pbr/skills/backlog/SKILL.md +56 -0
  528. package/plugins/pbr/skills/begin/SKILL.md +508 -153
  529. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +1 -2
  530. package/plugins/pbr/skills/begin/templates/config.json.tmpl +419 -36
  531. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +28 -0
  532. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +28 -3
  533. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +33 -5
  534. package/plugins/pbr/skills/build/SKILL.md +1180 -357
  535. package/plugins/pbr/skills/build/templates/continuation-prompt.md.tmpl +26 -0
  536. package/plugins/pbr/skills/build/templates/executor-prompt.md.tmpl +77 -0
  537. package/plugins/pbr/skills/build/templates/inline-verifier-prompt.md.tmpl +33 -0
  538. package/plugins/pbr/skills/build/templates/qa-round-context.md.tmpl +16 -0
  539. package/plugins/pbr/skills/config/SKILL.md +112 -9
  540. package/plugins/pbr/skills/continue/SKILL.md +113 -33
  541. package/plugins/pbr/skills/dashboard/SKILL.md +21 -9
  542. package/plugins/pbr/skills/debug/SKILL.md +70 -12
  543. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +12 -1
  544. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +12 -5
  545. package/plugins/pbr/skills/discuss/SKILL.md +205 -24
  546. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +21 -1
  547. package/plugins/pbr/skills/do/SKILL.md +119 -24
  548. package/plugins/pbr/skills/explore/SKILL.md +95 -20
  549. package/plugins/pbr/skills/fast/SKILL.md +94 -0
  550. package/plugins/pbr/skills/forensics/SKILL.md +144 -0
  551. package/plugins/pbr/skills/health/SKILL.md +35 -115
  552. package/plugins/pbr/skills/help/SKILL.md +83 -123
  553. package/plugins/pbr/skills/import/SKILL.md +332 -13
  554. package/plugins/pbr/skills/intel/SKILL.md +131 -0
  555. package/plugins/pbr/skills/list-phase-assumptions/SKILL.md +231 -0
  556. package/plugins/pbr/skills/milestone/SKILL.md +383 -274
  557. package/plugins/pbr/skills/milestone/templates/audit-output.md.tmpl +76 -0
  558. package/plugins/pbr/skills/milestone/templates/complete-output.md.tmpl +32 -0
  559. package/plugins/pbr/skills/milestone/templates/edge-cases.md +54 -0
  560. package/plugins/pbr/skills/milestone/templates/gaps-output.md.tmpl +25 -0
  561. package/plugins/pbr/skills/milestone/templates/integration-checker-prompt.md.tmpl +25 -0
  562. package/plugins/pbr/skills/milestone/templates/new-output.md.tmpl +29 -0
  563. package/plugins/pbr/skills/milestone-summary/SKILL.md +86 -0
  564. package/plugins/pbr/skills/note/SKILL.md +20 -4
  565. package/plugins/pbr/skills/pause/SKILL.md +54 -14
  566. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +33 -52
  567. package/plugins/pbr/skills/plan/SKILL.md +526 -280
  568. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +20 -2
  569. package/plugins/pbr/skills/plan/templates/completion-output.md.tmpl +27 -0
  570. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +43 -1
  571. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +21 -5
  572. package/plugins/pbr/skills/profile/SKILL.md +185 -0
  573. package/plugins/pbr/skills/profile-user/SKILL.md +227 -0
  574. package/plugins/pbr/skills/quick/SKILL.md +435 -100
  575. package/plugins/pbr/skills/release/SKILL.md +206 -0
  576. package/plugins/pbr/skills/resume/SKILL.md +170 -46
  577. package/plugins/pbr/skills/review/SKILL.md +233 -165
  578. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +7 -0
  579. package/plugins/pbr/skills/scan/SKILL.md +152 -106
  580. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +5 -56
  581. package/plugins/pbr/skills/seed/SKILL.md +87 -0
  582. package/plugins/pbr/skills/session-report/SKILL.md +130 -0
  583. package/plugins/pbr/skills/setup/SKILL.md +150 -202
  584. package/plugins/pbr/skills/shared/agent-context-enrichment.md +21 -0
  585. package/plugins/pbr/skills/shared/agent-type-resolution.md +32 -0
  586. package/plugins/pbr/skills/shared/commit-planning-docs.md +8 -0
  587. package/plugins/pbr/skills/shared/context-budget.md +66 -1
  588. package/plugins/pbr/skills/shared/context-loader-task.md +18 -11
  589. package/plugins/pbr/skills/shared/criterion-writing.md +58 -0
  590. package/plugins/pbr/skills/shared/digest-select.md +2 -2
  591. package/plugins/pbr/skills/shared/domain-probes.md +1 -1
  592. package/plugins/pbr/skills/shared/error-reporting.md +38 -60
  593. package/plugins/pbr/skills/shared/gate-prompts.md +4 -2
  594. package/plugins/pbr/skills/shared/memory-capture.md +48 -0
  595. package/plugins/pbr/skills/shared/phase-argument-parsing.md +4 -4
  596. package/plugins/pbr/skills/shared/revision-loop.md +24 -6
  597. package/plugins/pbr/skills/shared/state-update.md +46 -61
  598. package/plugins/pbr/skills/shared/universal-anti-patterns.md +27 -4
  599. package/plugins/pbr/skills/ship/SKILL.md +155 -0
  600. package/plugins/pbr/skills/stats/SKILL.md +110 -0
  601. package/plugins/pbr/skills/status/SKILL.md +185 -119
  602. package/plugins/pbr/skills/test/SKILL.md +254 -0
  603. package/plugins/pbr/skills/thread/SKILL.md +73 -0
  604. package/plugins/pbr/skills/todo/SKILL.md +28 -72
  605. package/plugins/pbr/skills/ui-phase/SKILL.md +180 -0
  606. package/plugins/pbr/skills/ui-review/SKILL.md +206 -0
  607. package/plugins/pbr/skills/undo/SKILL.md +221 -0
  608. package/plugins/pbr/skills/validate-phase/SKILL.md +362 -0
  609. package/plugins/pbr/templates/CONTEXT.md.tmpl +45 -20
  610. package/plugins/pbr/templates/DISCOVERY.md.tmpl +29 -0
  611. package/plugins/pbr/templates/DISCUSSION-LOG.md.tmpl +49 -0
  612. package/plugins/pbr/templates/HANDOFF.json.tmpl +30 -0
  613. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +18 -2
  614. package/plugins/pbr/templates/MILESTONE-AUDIT.md.tmpl +44 -0
  615. package/plugins/pbr/templates/PROJECT.md.tmpl +126 -0
  616. package/plugins/pbr/templates/REQUIREMENTS.md.tmpl +96 -0
  617. package/plugins/pbr/templates/RETROSPECTIVE.md.tmpl +43 -0
  618. package/plugins/pbr/templates/ROADMAP.md.tmpl +106 -14
  619. package/plugins/pbr/templates/SUMMARY-complex.md.tmpl +133 -0
  620. package/plugins/pbr/templates/SUMMARY-minimal.md.tmpl +55 -0
  621. package/plugins/pbr/templates/SUMMARY.md.tmpl +21 -0
  622. package/plugins/pbr/templates/UAT.md.tmpl +94 -0
  623. package/plugins/pbr/templates/UI-SPEC.md.tmpl +144 -0
  624. package/plugins/pbr/templates/VALIDATION.md.tmpl +94 -0
  625. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +54 -13
  626. package/plugins/pbr/templates/project-CONTEXT.md.tmpl +59 -0
  627. package/plugins/pbr/templates/research-outputs/ARCHITECTURE.md.tmpl +91 -0
  628. package/plugins/pbr/templates/research-outputs/FEATURES.md.tmpl +64 -0
  629. package/plugins/pbr/templates/research-outputs/PITFALLS.md.tmpl +50 -0
  630. package/plugins/pbr/templates/research-outputs/STACK.md.tmpl +63 -0
  631. package/plugins/pbr/templates/research-outputs/SUMMARY.md.tmpl +98 -0
  632. package/scripts/build-hooks.js +61 -0
  633. package/scripts/check-ci.js +100 -0
  634. package/scripts/clean-changelog.js +364 -0
  635. package/scripts/generate-derivatives.js +581 -0
  636. package/scripts/posttest.js +93 -0
  637. package/scripts/release.js +262 -0
  638. package/scripts/run-tests.cjs +29 -0
  639. package/scripts/test-wrapper.js +43 -0
  640. package/dashboard/bin/cli.js +0 -25
  641. package/dashboard/public/css/layout.css +0 -704
  642. package/dashboard/public/css/status-colors.css +0 -98
  643. package/dashboard/public/css/tokens.css +0 -59
  644. package/dashboard/public/js/htmx-title.js +0 -5
  645. package/dashboard/public/js/sidebar-toggle.js +0 -34
  646. package/dashboard/public/js/sse-client.js +0 -100
  647. package/dashboard/public/js/theme-toggle.js +0 -46
  648. package/dashboard/src/app.js +0 -91
  649. package/dashboard/src/middleware/current-phase.js +0 -24
  650. package/dashboard/src/middleware/errorHandler.js +0 -52
  651. package/dashboard/src/middleware/notFoundHandler.js +0 -9
  652. package/dashboard/src/repositories/planning.repository.js +0 -130
  653. package/dashboard/src/routes/events.routes.js +0 -45
  654. package/dashboard/src/routes/index.routes.js +0 -35
  655. package/dashboard/src/routes/pages.routes.js +0 -426
  656. package/dashboard/src/server.js +0 -42
  657. package/dashboard/src/services/analytics.service.js +0 -141
  658. package/dashboard/src/services/dashboard.service.js +0 -309
  659. package/dashboard/src/services/milestone.service.js +0 -222
  660. package/dashboard/src/services/notes.service.js +0 -50
  661. package/dashboard/src/services/phase.service.js +0 -232
  662. package/dashboard/src/services/project.service.js +0 -57
  663. package/dashboard/src/services/roadmap.service.js +0 -258
  664. package/dashboard/src/services/sse.service.js +0 -58
  665. package/dashboard/src/services/todo.service.js +0 -272
  666. package/dashboard/src/services/watcher.service.js +0 -48
  667. package/dashboard/src/utils/cache.js +0 -55
  668. package/dashboard/src/views/analytics.ejs +0 -5
  669. package/dashboard/src/views/coming-soon.ejs +0 -11
  670. package/dashboard/src/views/dependencies.ejs +0 -5
  671. package/dashboard/src/views/error.ejs +0 -20
  672. package/dashboard/src/views/index.ejs +0 -5
  673. package/dashboard/src/views/milestone-detail.ejs +0 -5
  674. package/dashboard/src/views/milestones.ejs +0 -5
  675. package/dashboard/src/views/notes.ejs +0 -5
  676. package/dashboard/src/views/partials/analytics-content.ejs +0 -90
  677. package/dashboard/src/views/partials/breadcrumbs.ejs +0 -14
  678. package/dashboard/src/views/partials/dashboard-content.ejs +0 -84
  679. package/dashboard/src/views/partials/dependencies-content.ejs +0 -48
  680. package/dashboard/src/views/partials/empty-state.ejs +0 -7
  681. package/dashboard/src/views/partials/footer.ejs +0 -3
  682. package/dashboard/src/views/partials/head.ejs +0 -30
  683. package/dashboard/src/views/partials/header.ejs +0 -21
  684. package/dashboard/src/views/partials/layout-bottom.ejs +0 -43
  685. package/dashboard/src/views/partials/layout-top.ejs +0 -16
  686. package/dashboard/src/views/partials/milestone-detail-content.ejs +0 -20
  687. package/dashboard/src/views/partials/milestones-content.ejs +0 -88
  688. package/dashboard/src/views/partials/notes-content.ejs +0 -23
  689. package/dashboard/src/views/partials/phase-content.ejs +0 -193
  690. package/dashboard/src/views/partials/phase-doc-content.ejs +0 -38
  691. package/dashboard/src/views/partials/phases-content.ejs +0 -124
  692. package/dashboard/src/views/partials/roadmap-content.ejs +0 -180
  693. package/dashboard/src/views/partials/sidebar.ejs +0 -99
  694. package/dashboard/src/views/partials/todo-create-content.ejs +0 -54
  695. package/dashboard/src/views/partials/todo-detail-content.ejs +0 -42
  696. package/dashboard/src/views/partials/todos-content.ejs +0 -97
  697. package/dashboard/src/views/phase-detail.ejs +0 -5
  698. package/dashboard/src/views/phase-doc.ejs +0 -5
  699. package/dashboard/src/views/phases.ejs +0 -5
  700. package/dashboard/src/views/roadmap.ejs +0 -5
  701. package/dashboard/src/views/todo-create.ejs +0 -5
  702. package/dashboard/src/views/todo-detail.ejs +0 -5
  703. package/dashboard/src/views/todos.ejs +0 -5
  704. package/plugins/copilot-pbr/CHANGELOG.md +0 -19
  705. package/plugins/copilot-pbr/README.md +0 -139
  706. package/plugins/copilot-pbr/agents/audit.agent.md +0 -113
  707. package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +0 -151
  708. package/plugins/copilot-pbr/agents/debugger.agent.md +0 -184
  709. package/plugins/copilot-pbr/agents/executor.agent.md +0 -269
  710. package/plugins/copilot-pbr/agents/general.agent.md +0 -89
  711. package/plugins/copilot-pbr/agents/integration-checker.agent.md +0 -121
  712. package/plugins/copilot-pbr/agents/plan-checker.agent.md +0 -208
  713. package/plugins/copilot-pbr/agents/planner.agent.md +0 -240
  714. package/plugins/copilot-pbr/agents/researcher.agent.md +0 -188
  715. package/plugins/copilot-pbr/agents/synthesizer.agent.md +0 -126
  716. package/plugins/copilot-pbr/agents/verifier.agent.md +0 -228
  717. package/plugins/copilot-pbr/hooks/hooks.json +0 -258
  718. package/plugins/copilot-pbr/plugin.json +0 -30
  719. package/plugins/copilot-pbr/references/agent-anti-patterns.md +0 -25
  720. package/plugins/copilot-pbr/references/agent-contracts.md +0 -297
  721. package/plugins/copilot-pbr/references/agent-interactions.md +0 -135
  722. package/plugins/copilot-pbr/references/agent-teams.md +0 -55
  723. package/plugins/copilot-pbr/references/checkpoints.md +0 -158
  724. package/plugins/copilot-pbr/references/common-bug-patterns.md +0 -14
  725. package/plugins/copilot-pbr/references/config-reference.md +0 -442
  726. package/plugins/copilot-pbr/references/continuation-format.md +0 -213
  727. package/plugins/copilot-pbr/references/deviation-rules.md +0 -113
  728. package/plugins/copilot-pbr/references/git-integration.md +0 -227
  729. package/plugins/copilot-pbr/references/integration-patterns.md +0 -118
  730. package/plugins/copilot-pbr/references/model-profiles.md +0 -100
  731. package/plugins/copilot-pbr/references/model-selection.md +0 -32
  732. package/plugins/copilot-pbr/references/pbr-rules.md +0 -195
  733. package/plugins/copilot-pbr/references/pbr-tools-cli.md +0 -285
  734. package/plugins/copilot-pbr/references/plan-authoring.md +0 -182
  735. package/plugins/copilot-pbr/references/plan-format.md +0 -288
  736. package/plugins/copilot-pbr/references/planning-config.md +0 -214
  737. package/plugins/copilot-pbr/references/questioning.md +0 -215
  738. package/plugins/copilot-pbr/references/reading-verification.md +0 -128
  739. package/plugins/copilot-pbr/references/stub-patterns.md +0 -161
  740. package/plugins/copilot-pbr/references/subagent-coordination.md +0 -120
  741. package/plugins/copilot-pbr/references/ui-formatting.md +0 -444
  742. package/plugins/copilot-pbr/references/verification-patterns.md +0 -199
  743. package/plugins/copilot-pbr/references/wave-execution.md +0 -96
  744. package/plugins/copilot-pbr/rules/pbr-workflow.mdc +0 -48
  745. package/plugins/copilot-pbr/setup.ps1 +0 -93
  746. package/plugins/copilot-pbr/setup.sh +0 -93
  747. package/plugins/copilot-pbr/skills/audit/SKILL.md +0 -330
  748. package/plugins/copilot-pbr/skills/begin/SKILL.md +0 -589
  749. package/plugins/copilot-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  750. package/plugins/copilot-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  751. package/plugins/copilot-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  752. package/plugins/copilot-pbr/skills/begin/templates/config.json.tmpl +0 -64
  753. package/plugins/copilot-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  754. package/plugins/copilot-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  755. package/plugins/copilot-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  756. package/plugins/copilot-pbr/skills/build/SKILL.md +0 -959
  757. package/plugins/copilot-pbr/skills/config/SKILL.md +0 -250
  758. package/plugins/copilot-pbr/skills/continue/SKILL.md +0 -159
  759. package/plugins/copilot-pbr/skills/dashboard/SKILL.md +0 -43
  760. package/plugins/copilot-pbr/skills/debug/SKILL.md +0 -508
  761. package/plugins/copilot-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  762. package/plugins/copilot-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  763. package/plugins/copilot-pbr/skills/discuss/SKILL.md +0 -353
  764. package/plugins/copilot-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  765. package/plugins/copilot-pbr/skills/discuss/templates/decision-categories.md +0 -10
  766. package/plugins/copilot-pbr/skills/do/SKILL.md +0 -66
  767. package/plugins/copilot-pbr/skills/explore/SKILL.md +0 -373
  768. package/plugins/copilot-pbr/skills/health/SKILL.md +0 -283
  769. package/plugins/copilot-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  770. package/plugins/copilot-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  771. package/plugins/copilot-pbr/skills/help/SKILL.md +0 -193
  772. package/plugins/copilot-pbr/skills/import/SKILL.md +0 -502
  773. package/plugins/copilot-pbr/skills/milestone/SKILL.md +0 -806
  774. package/plugins/copilot-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  775. package/plugins/copilot-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  776. package/plugins/copilot-pbr/skills/note/SKILL.md +0 -213
  777. package/plugins/copilot-pbr/skills/pause/SKILL.md +0 -247
  778. package/plugins/copilot-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  779. package/plugins/copilot-pbr/skills/plan/SKILL.md +0 -662
  780. package/plugins/copilot-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  781. package/plugins/copilot-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  782. package/plugins/copilot-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  783. package/plugins/copilot-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  784. package/plugins/copilot-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  785. package/plugins/copilot-pbr/skills/quick/SKILL.md +0 -376
  786. package/plugins/copilot-pbr/skills/resume/SKILL.md +0 -399
  787. package/plugins/copilot-pbr/skills/review/SKILL.md +0 -653
  788. package/plugins/copilot-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  789. package/plugins/copilot-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  790. package/plugins/copilot-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  791. package/plugins/copilot-pbr/skills/scan/SKILL.md +0 -299
  792. package/plugins/copilot-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  793. package/plugins/copilot-pbr/skills/setup/SKILL.md +0 -296
  794. package/plugins/copilot-pbr/skills/shared/commit-planning-docs.md +0 -36
  795. package/plugins/copilot-pbr/skills/shared/config-loading.md +0 -103
  796. package/plugins/copilot-pbr/skills/shared/context-budget.md +0 -41
  797. package/plugins/copilot-pbr/skills/shared/context-loader-task.md +0 -87
  798. package/plugins/copilot-pbr/skills/shared/digest-select.md +0 -80
  799. package/plugins/copilot-pbr/skills/shared/domain-probes.md +0 -126
  800. package/plugins/copilot-pbr/skills/shared/error-recovery-strategies.md +0 -51
  801. package/plugins/copilot-pbr/skills/shared/error-reporting.md +0 -81
  802. package/plugins/copilot-pbr/skills/shared/gate-prompts.md +0 -389
  803. package/plugins/copilot-pbr/skills/shared/phase-argument-parsing.md +0 -46
  804. package/plugins/copilot-pbr/skills/shared/progress-display.md +0 -53
  805. package/plugins/copilot-pbr/skills/shared/revision-loop.md +0 -82
  806. package/plugins/copilot-pbr/skills/shared/state-loading.md +0 -63
  807. package/plugins/copilot-pbr/skills/shared/state-update.md +0 -170
  808. package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +0 -38
  809. package/plugins/copilot-pbr/skills/status/SKILL.md +0 -362
  810. package/plugins/copilot-pbr/skills/statusline/SKILL.md +0 -149
  811. package/plugins/copilot-pbr/skills/todo/SKILL.md +0 -279
  812. package/plugins/copilot-pbr/templates/CONTEXT.md.tmpl +0 -53
  813. package/plugins/copilot-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  814. package/plugins/copilot-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  815. package/plugins/copilot-pbr/templates/ROADMAP.md.tmpl +0 -48
  816. package/plugins/copilot-pbr/templates/SUMMARY.md.tmpl +0 -82
  817. package/plugins/copilot-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  818. package/plugins/copilot-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  819. package/plugins/copilot-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  820. package/plugins/copilot-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  821. package/plugins/copilot-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  822. package/plugins/copilot-pbr/templates/codebase/STACK.md.tmpl +0 -78
  823. package/plugins/copilot-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  824. package/plugins/copilot-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  825. package/plugins/copilot-pbr/templates/continue-here.md.tmpl +0 -74
  826. package/plugins/copilot-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  827. package/plugins/copilot-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  828. package/plugins/copilot-pbr/templates/research/STACK.md.tmpl +0 -71
  829. package/plugins/copilot-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  830. package/plugins/copilot-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  831. package/plugins/copilot-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  832. package/plugins/copilot-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  833. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +0 -32
  834. package/plugins/cursor-pbr/CHANGELOG.md +0 -15
  835. package/plugins/cursor-pbr/README.md +0 -123
  836. package/plugins/cursor-pbr/agents/audit.md +0 -178
  837. package/plugins/cursor-pbr/agents/codebase-mapper.md +0 -150
  838. package/plugins/cursor-pbr/agents/debugger.md +0 -183
  839. package/plugins/cursor-pbr/agents/executor.md +0 -268
  840. package/plugins/cursor-pbr/agents/general.md +0 -88
  841. package/plugins/cursor-pbr/agents/integration-checker.md +0 -120
  842. package/plugins/cursor-pbr/agents/plan-checker.md +0 -207
  843. package/plugins/cursor-pbr/agents/planner.md +0 -239
  844. package/plugins/cursor-pbr/agents/researcher.md +0 -187
  845. package/plugins/cursor-pbr/agents/synthesizer.md +0 -125
  846. package/plugins/cursor-pbr/agents/verifier.md +0 -227
  847. package/plugins/cursor-pbr/assets/.gitkeep +0 -0
  848. package/plugins/cursor-pbr/assets/logo.svg +0 -21
  849. package/plugins/cursor-pbr/hooks/hooks.json +0 -224
  850. package/plugins/cursor-pbr/references/agent-anti-patterns.md +0 -25
  851. package/plugins/cursor-pbr/references/agent-contracts.md +0 -297
  852. package/plugins/cursor-pbr/references/agent-interactions.md +0 -135
  853. package/plugins/cursor-pbr/references/agent-teams.md +0 -55
  854. package/plugins/cursor-pbr/references/checkpoints.md +0 -158
  855. package/plugins/cursor-pbr/references/common-bug-patterns.md +0 -14
  856. package/plugins/cursor-pbr/references/config-reference.md +0 -442
  857. package/plugins/cursor-pbr/references/continuation-format.md +0 -213
  858. package/plugins/cursor-pbr/references/deviation-rules.md +0 -113
  859. package/plugins/cursor-pbr/references/git-integration.md +0 -227
  860. package/plugins/cursor-pbr/references/integration-patterns.md +0 -118
  861. package/plugins/cursor-pbr/references/model-profiles.md +0 -100
  862. package/plugins/cursor-pbr/references/model-selection.md +0 -32
  863. package/plugins/cursor-pbr/references/pbr-rules.md +0 -195
  864. package/plugins/cursor-pbr/references/pbr-tools-cli.md +0 -285
  865. package/plugins/cursor-pbr/references/plan-authoring.md +0 -182
  866. package/plugins/cursor-pbr/references/plan-format.md +0 -288
  867. package/plugins/cursor-pbr/references/planning-config.md +0 -214
  868. package/plugins/cursor-pbr/references/questioning.md +0 -215
  869. package/plugins/cursor-pbr/references/reading-verification.md +0 -128
  870. package/plugins/cursor-pbr/references/stub-patterns.md +0 -161
  871. package/plugins/cursor-pbr/references/subagent-coordination.md +0 -120
  872. package/plugins/cursor-pbr/references/ui-formatting.md +0 -444
  873. package/plugins/cursor-pbr/references/verification-patterns.md +0 -199
  874. package/plugins/cursor-pbr/references/wave-execution.md +0 -96
  875. package/plugins/cursor-pbr/rules/pbr-workflow.mdc +0 -48
  876. package/plugins/cursor-pbr/setup.ps1 +0 -78
  877. package/plugins/cursor-pbr/setup.sh +0 -83
  878. package/plugins/cursor-pbr/skills/audit/SKILL.md +0 -331
  879. package/plugins/cursor-pbr/skills/begin/SKILL.md +0 -589
  880. package/plugins/cursor-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  881. package/plugins/cursor-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  882. package/plugins/cursor-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  883. package/plugins/cursor-pbr/skills/begin/templates/config.json.tmpl +0 -64
  884. package/plugins/cursor-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  885. package/plugins/cursor-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  886. package/plugins/cursor-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  887. package/plugins/cursor-pbr/skills/build/SKILL.md +0 -960
  888. package/plugins/cursor-pbr/skills/config/SKILL.md +0 -252
  889. package/plugins/cursor-pbr/skills/continue/SKILL.md +0 -159
  890. package/plugins/cursor-pbr/skills/dashboard/SKILL.md +0 -44
  891. package/plugins/cursor-pbr/skills/debug/SKILL.md +0 -512
  892. package/plugins/cursor-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  893. package/plugins/cursor-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  894. package/plugins/cursor-pbr/skills/discuss/SKILL.md +0 -354
  895. package/plugins/cursor-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  896. package/plugins/cursor-pbr/skills/discuss/templates/decision-categories.md +0 -10
  897. package/plugins/cursor-pbr/skills/do/SKILL.md +0 -67
  898. package/plugins/cursor-pbr/skills/explore/SKILL.md +0 -376
  899. package/plugins/cursor-pbr/skills/health/SKILL.md +0 -283
  900. package/plugins/cursor-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  901. package/plugins/cursor-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  902. package/plugins/cursor-pbr/skills/help/SKILL.md +0 -193
  903. package/plugins/cursor-pbr/skills/import/SKILL.md +0 -505
  904. package/plugins/cursor-pbr/skills/milestone/SKILL.md +0 -807
  905. package/plugins/cursor-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  906. package/plugins/cursor-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  907. package/plugins/cursor-pbr/skills/note/SKILL.md +0 -214
  908. package/plugins/cursor-pbr/skills/pause/SKILL.md +0 -248
  909. package/plugins/cursor-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  910. package/plugins/cursor-pbr/skills/plan/SKILL.md +0 -663
  911. package/plugins/cursor-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  912. package/plugins/cursor-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  913. package/plugins/cursor-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  914. package/plugins/cursor-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  915. package/plugins/cursor-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  916. package/plugins/cursor-pbr/skills/quick/SKILL.md +0 -376
  917. package/plugins/cursor-pbr/skills/resume/SKILL.md +0 -399
  918. package/plugins/cursor-pbr/skills/review/SKILL.md +0 -654
  919. package/plugins/cursor-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  920. package/plugins/cursor-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  921. package/plugins/cursor-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  922. package/plugins/cursor-pbr/skills/scan/SKILL.md +0 -300
  923. package/plugins/cursor-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  924. package/plugins/cursor-pbr/skills/setup/SKILL.md +0 -296
  925. package/plugins/cursor-pbr/skills/shared/commit-planning-docs.md +0 -36
  926. package/plugins/cursor-pbr/skills/shared/config-loading.md +0 -103
  927. package/plugins/cursor-pbr/skills/shared/context-budget.md +0 -41
  928. package/plugins/cursor-pbr/skills/shared/context-loader-task.md +0 -87
  929. package/plugins/cursor-pbr/skills/shared/digest-select.md +0 -80
  930. package/plugins/cursor-pbr/skills/shared/domain-probes.md +0 -126
  931. package/plugins/cursor-pbr/skills/shared/error-recovery-strategies.md +0 -51
  932. package/plugins/cursor-pbr/skills/shared/error-reporting.md +0 -81
  933. package/plugins/cursor-pbr/skills/shared/gate-prompts.md +0 -389
  934. package/plugins/cursor-pbr/skills/shared/phase-argument-parsing.md +0 -46
  935. package/plugins/cursor-pbr/skills/shared/progress-display.md +0 -53
  936. package/plugins/cursor-pbr/skills/shared/revision-loop.md +0 -82
  937. package/plugins/cursor-pbr/skills/shared/state-loading.md +0 -63
  938. package/plugins/cursor-pbr/skills/shared/state-update.md +0 -170
  939. package/plugins/cursor-pbr/skills/shared/universal-anti-patterns.md +0 -38
  940. package/plugins/cursor-pbr/skills/status/SKILL.md +0 -362
  941. package/plugins/cursor-pbr/skills/statusline/SKILL.md +0 -150
  942. package/plugins/cursor-pbr/skills/todo/SKILL.md +0 -280
  943. package/plugins/cursor-pbr/templates/CONTEXT.md.tmpl +0 -53
  944. package/plugins/cursor-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  945. package/plugins/cursor-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  946. package/plugins/cursor-pbr/templates/ROADMAP.md.tmpl +0 -48
  947. package/plugins/cursor-pbr/templates/SUMMARY.md.tmpl +0 -82
  948. package/plugins/cursor-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  949. package/plugins/cursor-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  950. package/plugins/cursor-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  951. package/plugins/cursor-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  952. package/plugins/cursor-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  953. package/plugins/cursor-pbr/templates/codebase/STACK.md.tmpl +0 -78
  954. package/plugins/cursor-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  955. package/plugins/cursor-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  956. package/plugins/cursor-pbr/templates/continue-here.md.tmpl +0 -74
  957. package/plugins/cursor-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  958. package/plugins/cursor-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  959. package/plugins/cursor-pbr/templates/research/STACK.md.tmpl +0 -71
  960. package/plugins/cursor-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  961. package/plugins/cursor-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  962. package/plugins/cursor-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  963. package/plugins/cursor-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  964. package/plugins/pbr/references/agent-interactions.md +0 -134
  965. package/plugins/pbr/references/pbr-rules.md +0 -194
  966. package/plugins/pbr/references/pbr-tools-cli.md +0 -285
  967. package/plugins/pbr/references/planning-config.md +0 -213
  968. package/plugins/pbr/references/subagent-coordination.md +0 -119
  969. package/plugins/pbr/references/ui-formatting.md +0 -444
  970. package/plugins/pbr/scripts/validate-plugin-structure.js +0 -183
  971. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +0 -48
  972. package/plugins/pbr/skills/shared/error-recovery-strategies.md +0 -51
  973. package/plugins/pbr/skills/shared/progress-display.md +0 -53
  974. package/plugins/pbr/skills/shared/state-loading.md +0 -62
  975. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -97
  976. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  977. package/plugins/pbr/templates/research/STACK.md.tmpl +0 -71
  978. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +0 -112
  979. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  980. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  981. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  982. /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
+ };