peaks-loop 4.1.0 → 4.1.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 (811) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README-en.md +4 -4
  3. package/README.md +25 -4
  4. package/bin/node-floor.mjs +59 -0
  5. package/bin/peaks.js +13 -0
  6. package/config/eslint/tsconfig.lint.json +2 -1
  7. package/dist/cli/cli-helpers.d.ts +0 -1
  8. package/dist/cli/cli-helpers.js +0 -1
  9. package/dist/cli/commands/_cli-error-envelope.js +0 -3
  10. package/dist/cli/commands/_register.js +2 -2
  11. package/dist/cli/commands/adapter-commands-s2a.d.ts +0 -1
  12. package/dist/cli/commands/adapter-commands.d.ts +0 -1
  13. package/dist/cli/commands/api-diff-commands.d.ts +0 -1
  14. package/dist/cli/commands/api-diff-commands.js +0 -1
  15. package/dist/cli/commands/audit-commands.js +21 -24
  16. package/dist/cli/commands/autonomous-swarm-commands.js +0 -1
  17. package/dist/cli/commands/bee-commands.d.ts +0 -2
  18. package/dist/cli/commands/bee-commands.js +0 -2
  19. package/dist/cli/commands/best-practice-scan-command.d.ts +0 -1
  20. package/dist/cli/commands/best-practice-scan-helpers.js +0 -1
  21. package/dist/cli/commands/changeset-commands.d.ts +0 -2
  22. package/dist/cli/commands/changeset-commands.js +0 -2
  23. package/dist/cli/commands/code-commands.d.ts +0 -3
  24. package/dist/cli/commands/code-commands.js +0 -3
  25. package/dist/cli/commands/code-gate-command.d.ts +0 -1
  26. package/dist/cli/commands/code-gate-command.js +0 -1
  27. package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +0 -1
  28. package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +0 -1
  29. package/dist/cli/commands/code-job-shape-commands.d.ts +0 -2
  30. package/dist/cli/commands/code-job-shape-commands.js +0 -3
  31. package/dist/cli/commands/code-mode-gate-commands.d.ts +0 -2
  32. package/dist/cli/commands/code-mode-gate-commands.js +0 -3
  33. package/dist/cli/commands/code-mode-gate-should-pause-command.js +1 -5
  34. package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +0 -1
  35. package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +0 -2
  36. package/dist/cli/commands/code-mode-status-command.d.ts +0 -1
  37. package/dist/cli/commands/code-mode-status-command.js +0 -1
  38. package/dist/cli/commands/code-orchestrator-can-do.d.ts +0 -1
  39. package/dist/cli/commands/code-orchestrator-can-do.js +0 -1
  40. package/dist/cli/commands/code-run-command.js +0 -1
  41. package/dist/cli/commands/code-runtime-commands.d.ts +0 -3
  42. package/dist/cli/commands/code-runtime-commands.js +0 -15
  43. package/dist/cli/commands/codegraph-command-runtime.d.ts +6 -0
  44. package/dist/cli/commands/codegraph-command-runtime.js +19 -7
  45. package/dist/cli/commands/codegraph-commands.js +20 -193
  46. package/dist/cli/commands/codegraph-init-command.d.ts +8 -0
  47. package/dist/cli/commands/codegraph-init-command.js +162 -0
  48. package/dist/cli/commands/codegraph-status-command.js +5 -6
  49. package/dist/cli/commands/comments-commands.d.ts +14 -0
  50. package/dist/cli/commands/comments-commands.js +96 -0
  51. package/dist/cli/commands/compact-command.d.ts +0 -1
  52. package/dist/cli/commands/compact-command.js +0 -4
  53. package/dist/cli/commands/container-commands.d.ts +0 -1
  54. package/dist/cli/commands/container-commands.js +0 -1
  55. package/dist/cli/commands/context-commands.d.ts +0 -1
  56. package/dist/cli/commands/context-commands.js +0 -1
  57. package/dist/cli/commands/core/doctor-command.d.ts +0 -1
  58. package/dist/cli/commands/core/doctor-command.js +0 -9
  59. package/dist/cli/commands/core/memory-command.js +10 -1
  60. package/dist/cli/commands/core/session-command.js +0 -14
  61. package/dist/cli/commands/core/skill-command.js +1 -10
  62. package/dist/cli/commands/core/standards-command.js +1 -1
  63. package/dist/cli/commands/core-artifact-commands.d.ts +0 -1
  64. package/dist/cli/commands/core-artifact-commands.js +0 -1
  65. package/dist/cli/commands/cron-commands-actions.d.ts +0 -1
  66. package/dist/cli/commands/cron-commands-actions.js +0 -2
  67. package/dist/cli/commands/cron-commands-schedule.d.ts +0 -3
  68. package/dist/cli/commands/cron-commands-schedule.js +0 -1
  69. package/dist/cli/commands/cron-commands.d.ts +0 -1
  70. package/dist/cli/commands/cron-commands.js +0 -2
  71. package/dist/cli/commands/cron-scheduler-commands.d.ts +0 -1
  72. package/dist/cli/commands/cron-scheduler-commands.js +0 -1
  73. package/dist/cli/commands/cron-scheduler-persist.d.ts +0 -5
  74. package/dist/cli/commands/cron-scheduler-persist.js +0 -5
  75. package/dist/cli/commands/dashboard-summary.d.ts +0 -1
  76. package/dist/cli/commands/dispatch-commands.d.ts +0 -1
  77. package/dist/cli/commands/dispatch-commands.js +10 -37
  78. package/dist/cli/commands/dispatch-from-dag.js +0 -4
  79. package/dist/cli/commands/doctor/invoke-from-code.js +0 -1
  80. package/dist/cli/commands/e2e-verify.d.ts +0 -1
  81. package/dist/cli/commands/ecc-commands.d.ts +16 -22
  82. package/dist/cli/commands/ecc-commands.js +38 -26
  83. package/dist/cli/commands/evolution-commands.d.ts +0 -1
  84. package/dist/cli/commands/evolution-commands.js +0 -1
  85. package/dist/cli/commands/feedback-commands.d.ts +0 -1
  86. package/dist/cli/commands/feedback-commands.js +0 -2
  87. package/dist/cli/commands/fixture-commands.d.ts +0 -2
  88. package/dist/cli/commands/fresh-context-commands.d.ts +0 -1
  89. package/dist/cli/commands/gate-commands-enforce.d.ts +0 -3
  90. package/dist/cli/commands/gate-commands-enforce.js +0 -4
  91. package/dist/cli/commands/gate-commands.js +0 -2
  92. package/dist/cli/commands/governance-classify-contract-commands.d.ts +0 -3
  93. package/dist/cli/commands/governance-classify-contract-commands.js +0 -4
  94. package/dist/cli/commands/heartbeat-commands-action.js +0 -6
  95. package/dist/cli/commands/heartbeat-commands-validation.d.ts +0 -2
  96. package/dist/cli/commands/heartbeat-commands-validation.js +0 -2
  97. package/dist/cli/commands/heartbeat-commands.d.ts +0 -1
  98. package/dist/cli/commands/heartbeat-commands.js +0 -1
  99. package/dist/cli/commands/hooks-commands.js +0 -11
  100. package/dist/cli/commands/ide-commands.d.ts +0 -1
  101. package/dist/cli/commands/job-add-slice-command.d.ts +0 -2
  102. package/dist/cli/commands/job-add-slice-command.js +0 -2
  103. package/dist/cli/commands/job-commands.js +0 -4
  104. package/dist/cli/commands/lease-metrics-commands.d.ts +0 -1
  105. package/dist/cli/commands/lease-metrics-commands.js +0 -1
  106. package/dist/cli/commands/lease-stats-commands.d.ts +0 -1
  107. package/dist/cli/commands/lease-stats-commands.js +0 -1
  108. package/dist/cli/commands/log-commands.d.ts +0 -2
  109. package/dist/cli/commands/log-commands.js +0 -3
  110. package/dist/cli/commands/loop-eval-commands.js +0 -3
  111. package/dist/cli/commands/memory-commands.d.ts +0 -1
  112. package/dist/cli/commands/memory-commands.js +0 -1
  113. package/dist/cli/commands/observability-commands.d.ts +0 -6
  114. package/dist/cli/commands/observability-commands.js +0 -6
  115. package/dist/cli/commands/outer-cache-commands.js +0 -2
  116. package/dist/cli/commands/playwright-commands.d.ts +0 -1
  117. package/dist/cli/commands/playwright-commands.js +0 -1
  118. package/dist/cli/commands/polyrepo-commands.d.ts +0 -1
  119. package/dist/cli/commands/prd-commands.d.ts +0 -1
  120. package/dist/cli/commands/prd-commands.js +8 -4
  121. package/dist/cli/commands/preferences-commands.js +0 -2
  122. package/dist/cli/commands/primer-command.d.ts +0 -1
  123. package/dist/cli/commands/primer-command.js +0 -1
  124. package/dist/cli/commands/project-commands.js +0 -1
  125. package/dist/cli/commands/qa-commands.d.ts +0 -1
  126. package/dist/cli/commands/qa-commands.js +0 -2
  127. package/dist/cli/commands/release-commands.js +0 -9
  128. package/dist/cli/commands/request-commands.d.ts +0 -1
  129. package/dist/cli/commands/request-commands.js +0 -10
  130. package/dist/cli/commands/request-format-helpers.d.ts +0 -1
  131. package/dist/cli/commands/request-format-helpers.js +0 -2
  132. package/dist/cli/commands/runtime-commands.d.ts +0 -1
  133. package/dist/cli/commands/sc-commands.js +0 -1
  134. package/dist/cli/commands/session-24h-mode.d.ts +0 -1
  135. package/dist/cli/commands/session-24h-mode.js +0 -2
  136. package/dist/cli/commands/session-checkpoint-command.d.ts +0 -1
  137. package/dist/cli/commands/session-checkpoint-command.js +0 -1
  138. package/dist/cli/commands/session-resume-command.d.ts +0 -1
  139. package/dist/cli/commands/session-resume-command.js +0 -1
  140. package/dist/cli/commands/shadcn-commands.js +0 -2
  141. package/dist/cli/commands/share-commands.d.ts +0 -3
  142. package/dist/cli/commands/share-commands.js +0 -13
  143. package/dist/cli/commands/skill-search-commands.d.ts +0 -2
  144. package/dist/cli/commands/slice-commands.js +0 -2
  145. package/dist/cli/commands/slice-integrate-commands.js +0 -1
  146. package/dist/cli/commands/spill-demo-command.d.ts +0 -1
  147. package/dist/cli/commands/statusline-commands.js +0 -4
  148. package/dist/cli/commands/sub-agent/detached.js +0 -2
  149. package/dist/cli/commands/sub-agent-commands.d.ts +0 -3
  150. package/dist/cli/commands/sub-agent-shared.d.ts +0 -8
  151. package/dist/cli/commands/sub-agent-shared.js +0 -5
  152. package/dist/cli/commands/sub-agent-shutdown-commands.d.ts +0 -1
  153. package/dist/cli/commands/tech-commands.d.ts +0 -4
  154. package/dist/cli/commands/tech-commands.js +0 -4
  155. package/dist/cli/commands/vendor-detect.d.ts +0 -3
  156. package/dist/cli/commands/vendor-detect.js +0 -2
  157. package/dist/cli/commands/verdict-aggregate-command.d.ts +0 -1
  158. package/dist/cli/commands/verdict-aggregate-command.js +0 -7
  159. package/dist/cli/commands/vm-commands.d.ts +0 -1
  160. package/dist/cli/commands/vm-commands.js +5 -29
  161. package/dist/cli/commands/vm-hypervisor-probe.d.ts +27 -0
  162. package/dist/cli/commands/vm-hypervisor-probe.js +78 -0
  163. package/dist/cli/commands/vm-status-command.d.ts +3 -0
  164. package/dist/cli/commands/vm-status-command.js +50 -0
  165. package/dist/cli/commands/wave-plan-commands.d.ts +0 -1
  166. package/dist/cli/commands/web-lifecycle-commands.d.ts +0 -1
  167. package/dist/cli/commands/workflow-commands.js +0 -14
  168. package/dist/cli/commands/workflow-plan-commands-actions.js +0 -2
  169. package/dist/cli/commands/workflow-plan-commands-session.js +0 -2
  170. package/dist/cli/commands/workflow-plan-commands.d.ts +0 -1
  171. package/dist/cli/commands/workspace/clean-command.d.ts +0 -1
  172. package/dist/cli/commands/workspace/clean-command.js +0 -1
  173. package/dist/cli/commands/workspace/helpers.d.ts +0 -1
  174. package/dist/cli/commands/workspace/helpers.js +0 -1
  175. package/dist/cli/commands/workspace/init-command.d.ts +0 -6
  176. package/dist/cli/commands/workspace/init-command.js +0 -17
  177. package/dist/cli/commands/workspace/migrate-command.d.ts +0 -2
  178. package/dist/cli/commands/workspace/migrate-command.js +0 -2
  179. package/dist/cli/commands/workspace/reconcile-command.d.ts +0 -2
  180. package/dist/cli/commands/workspace/reconcile-command.js +0 -3
  181. package/dist/cli/commands/workspace-commands.d.ts +0 -2
  182. package/dist/cli/commands/workspace-commands.js +0 -4
  183. package/dist/cli/commands/worktree-auth-commands.d.ts +0 -1
  184. package/dist/cli/commands/worktree-auth-commands.js +0 -1
  185. package/dist/cli/commands/worktree-auth-grant-command.d.ts +0 -1
  186. package/dist/cli/commands/worktree-auth-grant-command.js +0 -1
  187. package/dist/cli/commands/worktree-auth-manage-commands.d.ts +0 -1
  188. package/dist/cli/commands/worktree-auth-manage-commands.js +0 -1
  189. package/dist/cli/commands/worktree-lease-commands.js +0 -1
  190. package/dist/cli/program.js +4 -16
  191. package/dist/reporters/bdd-reporter.js +0 -1
  192. package/dist/services/24h-mode/auto-engage.d.ts +0 -1
  193. package/dist/services/24h-mode/auto-engage.js +0 -1
  194. package/dist/services/24h-mode/decider.d.ts +0 -3
  195. package/dist/services/24h-mode/decider.js +0 -3
  196. package/dist/services/24h-mode/index.d.ts +0 -2
  197. package/dist/services/24h-mode/index.js +0 -2
  198. package/dist/services/24h-mode/state.d.ts +0 -1
  199. package/dist/services/24h-mode/state.js +0 -1
  200. package/dist/services/24h-mode/store.d.ts +0 -1
  201. package/dist/services/24h-mode/store.js +0 -1
  202. package/dist/services/adapter/adapter-registry.js +0 -1
  203. package/dist/services/artifacts/artifact-prerequisites.d.ts +0 -5
  204. package/dist/services/artifacts/artifact-prerequisites.js +0 -19
  205. package/dist/services/artifacts/artifact-templates.d.ts +0 -1
  206. package/dist/services/artifacts/artifact-templates.js +0 -1
  207. package/dist/services/artifacts/request-artifact-service.d.ts +0 -5
  208. package/dist/services/artifacts/request-artifact-service.js +0 -12
  209. package/dist/services/artifacts/request-artifact-state-helpers.d.ts +0 -1
  210. package/dist/services/artifacts/request-artifact-state-helpers.js +0 -1
  211. package/dist/services/audit/artifact-writer.d.ts +0 -1
  212. package/dist/services/audit/artifact-writer.js +0 -1
  213. package/dist/services/audit/decision-writer.js +3 -1
  214. package/dist/services/audit/enforcer-liveness.js +0 -1
  215. package/dist/services/audit/enforcers/active-skill-resolver.d.ts +0 -2
  216. package/dist/services/audit/enforcers/active-skill-resolver.js +0 -2
  217. package/dist/services/audit/red-line-audit-input.d.ts +11 -0
  218. package/dist/services/audit/red-line-audit-input.js +103 -0
  219. package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +0 -1
  220. package/dist/services/audit/red-line-catalog-p2-a.js +0 -9
  221. package/dist/services/audit/types.d.ts +0 -2
  222. package/dist/services/audit/types.js +0 -2
  223. package/dist/services/audit-independent/perf-audit-service.d.ts +0 -2
  224. package/dist/services/audit-independent/security-audit-service.d.ts +0 -5
  225. package/dist/services/audit-independent/security-audit-service.js +0 -2
  226. package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +0 -5
  227. package/dist/services/autonomous-swarm/autonomous-swarm-service.js +0 -5
  228. package/dist/services/best-practice/language-detector.js +0 -1
  229. package/dist/services/best-practice/output-formatter.d.ts +0 -1
  230. package/dist/services/best-practice/scan-orchestrator.d.ts +0 -1
  231. package/dist/services/capability-audit-service/types.d.ts +1 -3
  232. package/dist/services/capability-guard-runner/contracts/J08.js +2 -2
  233. package/dist/services/changeset/changeset-check-service.d.ts +0 -3
  234. package/dist/services/changeset/changeset-check-service.js +0 -3
  235. package/dist/services/classify/classify-service.d.ts +0 -1
  236. package/dist/services/classify/classify-service.js +0 -1
  237. package/dist/services/classify/classify-types.d.ts +0 -1
  238. package/dist/services/classify/classify-types.js +0 -1
  239. package/dist/services/code/auto-compact-lifecycle.d.ts +0 -11
  240. package/dist/services/code/auto-compact-lifecycle.js +0 -10
  241. package/dist/services/code/auto-compact-modes.d.ts +0 -3
  242. package/dist/services/code/auto-compact-modes.js +0 -3
  243. package/dist/services/code/auto-compact-orchestrator.d.ts +0 -9
  244. package/dist/services/code/auto-compact-orchestrator.js +0 -29
  245. package/dist/services/code/batch-heartbeat-poller.js +0 -1
  246. package/dist/services/code/compact-event-settle.js +0 -1
  247. package/dist/services/code/dag-orchestrator.d.ts +0 -1
  248. package/dist/services/code/dag-orchestrator.js +0 -1
  249. package/dist/services/code/mode-gate-types.d.ts +1 -3
  250. package/dist/services/code/mode-gate-types.js +0 -2
  251. package/dist/services/code/mode-gate.d.ts +0 -5
  252. package/dist/services/code/mode-gate.js +1 -14
  253. package/dist/services/code/orchestrator-can-do-advisories.d.ts +0 -2
  254. package/dist/services/code/orchestrator-can-do-advisories.js +0 -5
  255. package/dist/services/code/orchestrator-can-do.d.ts +0 -4
  256. package/dist/services/code/orchestrator-can-do.js +0 -3
  257. package/dist/services/code/status-line-renderer.js +0 -1
  258. package/dist/services/code/user-touchpoint-classifier.js +0 -7
  259. package/dist/services/code-review/ecc-bridge.d.ts +6 -7
  260. package/dist/services/codegraph/codegraph-autorefresh.js +6 -4
  261. package/dist/services/codegraph/codegraph-backend-advice.d.ts +26 -0
  262. package/dist/services/codegraph/codegraph-backend-advice.js +166 -0
  263. package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +0 -24
  264. package/dist/services/codegraph/codegraph-config-repair-writer.js +32 -73
  265. package/dist/services/codegraph/codegraph-exclude-integrity.d.ts +14 -6
  266. package/dist/services/codegraph/codegraph-exclude-integrity.js +24 -14
  267. package/dist/services/codegraph/codegraph-exclude-reconciler.d.ts +9 -2
  268. package/dist/services/codegraph/codegraph-exclude-reconciler.js +87 -18
  269. package/dist/services/codegraph/codegraph-exclude-repair.d.ts +9 -61
  270. package/dist/services/codegraph/codegraph-exclude-repair.js +67 -139
  271. package/dist/services/codegraph/codegraph-foreign-removal.d.ts +21 -0
  272. package/dist/services/codegraph/codegraph-foreign-removal.js +77 -0
  273. package/dist/services/codegraph/codegraph-index-integrity.d.ts +12 -25
  274. package/dist/services/codegraph/codegraph-index-integrity.js +84 -23
  275. package/dist/services/codegraph/codegraph-preflight-service.js +15 -6
  276. package/dist/services/codegraph/codegraph-project-config.d.ts +35 -0
  277. package/dist/services/codegraph/codegraph-project-config.js +90 -0
  278. package/dist/services/codegraph/codegraph-service.d.ts +1 -2
  279. package/dist/services/codegraph/codegraph-service.js +11 -11
  280. package/dist/services/codegraph/codegraph-upstream-layout.d.ts +24 -0
  281. package/dist/services/codegraph/codegraph-upstream-layout.js +85 -0
  282. package/dist/services/comments/citation-rules.d.ts +154 -0
  283. package/dist/services/comments/citation-rules.js +241 -0
  284. package/dist/services/comments/comment-audit.d.ts +68 -0
  285. package/dist/services/comments/comment-audit.js +121 -0
  286. package/dist/services/comments/comment-citations.d.ts +66 -0
  287. package/dist/services/comments/comment-citations.js +184 -0
  288. package/dist/services/comments/comment-hygiene.d.ts +105 -0
  289. package/dist/services/comments/comment-hygiene.js +170 -0
  290. package/dist/services/comments/comment-prune.d.ts +88 -0
  291. package/dist/services/comments/comment-prune.js +196 -0
  292. package/dist/services/comments/comment-spans.d.ts +30 -0
  293. package/dist/services/comments/comment-spans.js +266 -0
  294. package/dist/services/comments/prune-apply.d.ts +82 -0
  295. package/dist/services/comments/prune-apply.js +217 -0
  296. package/dist/services/comments/repo-path-probe.d.ts +43 -0
  297. package/dist/services/comments/repo-path-probe.js +78 -0
  298. package/dist/services/compact/decision-tables.d.ts +0 -2
  299. package/dist/services/compact/decision-tables.js +0 -2
  300. package/dist/services/compact/request-transition-hook.js +0 -2
  301. package/dist/services/compact-history/compact-history-service.d.ts +0 -2
  302. package/dist/services/compact-history/compact-history-service.js +0 -1
  303. package/dist/services/compact-statusline/compact-lifecycle-store.js +0 -2
  304. package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +0 -1
  305. package/dist/services/compact-statusline/compact-statusline-service.js +0 -4
  306. package/dist/services/config/config-rollback.js +0 -1
  307. package/dist/services/config/config-safety.d.ts +0 -1
  308. package/dist/services/config/config-safety.js +0 -1
  309. package/dist/services/config/config-service.d.ts +0 -1
  310. package/dist/services/config/config-service.js +0 -1
  311. package/dist/services/config/model-routing.d.ts +0 -3
  312. package/dist/services/config/model-routing.js +0 -5
  313. package/dist/services/container/container-lease.d.ts +0 -1
  314. package/dist/services/container/container-lease.js +0 -1
  315. package/dist/services/context/artifact-meta.js +0 -1
  316. package/dist/services/context/auto-compact-dispatcher-input.d.ts +0 -3
  317. package/dist/services/context/auto-compact-dispatcher.js +0 -14
  318. package/dist/services/context/auto-compact-reader-input.d.ts +0 -1
  319. package/dist/services/context/auto-compact-reader.d.ts +0 -2
  320. package/dist/services/context/auto-compact-reader.js +0 -7
  321. package/dist/services/context/auto-compact-types.d.ts +0 -11
  322. package/dist/services/context/auto-compact-types.js +0 -1
  323. package/dist/services/context/build-dispatch-system-prompt.d.ts +11 -29
  324. package/dist/services/context/build-dispatch-system-prompt.js +8 -27
  325. package/dist/services/context/codegraph-unavailable-block.d.ts +38 -0
  326. package/dist/services/context/codegraph-unavailable-block.js +77 -0
  327. package/dist/services/context/context-audit-hint.d.ts +0 -1
  328. package/dist/services/context/context-audit-hint.js +0 -1
  329. package/dist/services/context/context-audit.d.ts +0 -1
  330. package/dist/services/context/context-audit.js +0 -1
  331. package/dist/services/context/harness-window-config.d.ts +0 -4
  332. package/dist/services/context/harness-window-config.js +0 -4
  333. package/dist/services/context/main-session-monitor.d.ts +0 -2
  334. package/dist/services/context/main-session-monitor.js +0 -2
  335. package/dist/services/context/memory-index-reader.d.ts +0 -2
  336. package/dist/services/context/memory-index-reader.js +0 -1
  337. package/dist/services/context/memory-preflight-config.d.ts +0 -1
  338. package/dist/services/context/memory-preflight-service.d.ts +0 -1
  339. package/dist/services/context/memory-preflight-service.js +0 -3
  340. package/dist/services/context/memory-preflight-support.d.ts +0 -5
  341. package/dist/services/context/post-compact-reinjection.d.ts +0 -1
  342. package/dist/services/context/post-compact-reinjection.js +0 -1
  343. package/dist/services/context/summary-view.d.ts +0 -1
  344. package/dist/services/context/summary-view.js +0 -1
  345. package/dist/services/crystallization/crystallization-service.d.ts +5 -11
  346. package/dist/services/crystallization/crystallization-service.js +3 -11
  347. package/dist/services/crystallization/crystallization-store.d.ts +6 -6
  348. package/dist/services/dispatch/await-batch-helpers.js +0 -3
  349. package/dist/services/dispatch/await-batch.d.ts +0 -1
  350. package/dist/services/dispatch/await-batch.js +0 -4
  351. package/dist/services/dispatch/batch-counter.js +0 -1
  352. package/dist/services/dispatch/conflict-replay.d.ts +0 -1
  353. package/dist/services/dispatch/conflict-replay.js +0 -1
  354. package/dist/services/dispatch/contract-store.d.ts +0 -2
  355. package/dist/services/dispatch/contract-store.js +0 -2
  356. package/dist/services/dispatch/dispatch-record-input-types.d.ts +0 -2
  357. package/dist/services/dispatch/dispatch-record-types.d.ts +0 -10
  358. package/dist/services/dispatch/dispatch-record-upgrade-fields.js +0 -7
  359. package/dist/services/dispatch/dispatch-record-upgrade-guards.js +0 -2
  360. package/dist/services/dispatch/dispatch-record-writer.d.ts +0 -5
  361. package/dist/services/dispatch/dispatch-record-writer.js +0 -21
  362. package/dist/services/dispatch/dispatch-sub-agent.d.ts +0 -1
  363. package/dist/services/dispatch/dispatch-sub-agent.js +0 -1
  364. package/dist/services/dispatch/e2e-fixtures.js +0 -1
  365. package/dist/services/dispatch/file-overlap-wave-planner.d.ts +0 -1
  366. package/dist/services/dispatch/file-overlap-wave-planner.js +0 -1
  367. package/dist/services/dispatch/isolation-lease.d.ts +0 -2
  368. package/dist/services/dispatch/isolation-lease.js +0 -2
  369. package/dist/services/dispatch/service-shutdown.js +0 -1
  370. package/dist/services/dispatch/session-capsule.js +0 -1
  371. package/dist/services/dispatch/slice-dag-types.d.ts +0 -1
  372. package/dist/services/dispatch/slice-dag.js +0 -2
  373. package/dist/services/dispatch/stage-enum.d.ts +0 -1
  374. package/dist/services/dispatch/stage-enum.js +0 -1
  375. package/dist/services/dispatch/startup-timeout.d.ts +0 -1
  376. package/dist/services/dispatch/sub-agent-batch-await.js +0 -3
  377. package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +0 -1
  378. package/dist/services/dispatch/sub-agent-dispatcher.js +0 -2
  379. package/dist/services/dispatch/test-tool-detection.d.ts +0 -3
  380. package/dist/services/dispatch/test-tool-detection.js +0 -2
  381. package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +19 -12
  382. package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +1 -2
  383. package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +0 -2
  384. package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +0 -2
  385. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +0 -1
  386. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +0 -1
  387. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +0 -1
  388. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +0 -3
  389. package/dist/services/doctor/doctor-service/checks/workspace-layout.js +0 -2
  390. package/dist/services/doctor/doctor-service/index.d.ts +0 -1
  391. package/dist/services/doctor/doctor-service/index.js +0 -1
  392. package/dist/services/doctor/doctor-service/plugin-registry.d.ts +0 -2
  393. package/dist/services/doctor/doctor-service/plugin-registry.js +0 -2
  394. package/dist/services/doctor/doctor-service/probe-types.d.ts +0 -4
  395. package/dist/services/doctor/doctor-service/report/final-summary.d.ts +0 -1
  396. package/dist/services/doctor/doctor-service/report/final-summary.js +0 -1
  397. package/dist/services/doctor/doctor-service/types.d.ts +0 -5
  398. package/dist/services/doctor/doctor-service/types.js +0 -1
  399. package/dist/services/doctor/doctor-service.d.ts +0 -1
  400. package/dist/services/doctor/doctor-service.js +0 -2
  401. package/dist/services/env/shell-probe.js +0 -1
  402. package/dist/services/evidence/evidence-generator.js +0 -8
  403. package/dist/services/evolution/evolution-constraints.d.ts +0 -2
  404. package/dist/services/evolution/evolution-constraints.js +0 -2
  405. package/dist/services/evolution/evolution-service.d.ts +2 -12
  406. package/dist/services/evolution/evolution-service.js +0 -9
  407. package/dist/services/evolution/evolution-store.d.ts +6 -8
  408. package/dist/services/evolution/evolution-store.js +1 -3
  409. package/dist/services/evolution/evolution-types.d.ts +0 -2
  410. package/dist/services/evolution/evolution-types.js +0 -6
  411. package/dist/services/evolution/independent-evaluator-runner.d.ts +0 -3
  412. package/dist/services/evolution/independent-evaluator-runner.js +0 -1
  413. package/dist/services/evolution/regression-skeptic-runner.d.ts +0 -1
  414. package/dist/services/feedback/feedback-promotion-service.d.ts +0 -8
  415. package/dist/services/feedback/feedback-promotion-service.js +0 -10
  416. package/dist/services/feedback/promotion-artifact-evidence.d.ts +0 -1
  417. package/dist/services/feedback/promotion-artifact-evidence.js +0 -1
  418. package/dist/services/final-review/final-review-evidence-budget.d.ts +0 -3
  419. package/dist/services/final-review/final-review-evidence-budget.js +0 -5
  420. package/dist/services/final-review/final-review-evidence-sources.d.ts +0 -1
  421. package/dist/services/final-review/final-review-evidence-sources.js +0 -1
  422. package/dist/services/final-review/final-review-output-budget.d.ts +0 -1
  423. package/dist/services/final-review/final-review-output-budget.js +0 -3
  424. package/dist/services/final-review/final-review-service.d.ts +0 -1
  425. package/dist/services/final-review/final-review-service.js +0 -1
  426. package/dist/services/fixture/fixture-capture-service.js +0 -1
  427. package/dist/services/fixture/fixture-sanitize-service.d.ts +0 -3
  428. package/dist/services/fixture/fixture-sanitize-service.js +0 -3
  429. package/dist/services/fresh-context/config.js +0 -1
  430. package/dist/services/fresh-context/fresh-context-block.js +0 -1
  431. package/dist/services/fresh-context/trigger-scan.d.ts +0 -1
  432. package/dist/services/fresh-context/trigger-scan.js +0 -1
  433. package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +0 -1
  434. package/dist/services/fuzzy-matching/fzf-pick-service.js +0 -1
  435. package/dist/services/handoff/handoff-parser.d.ts +0 -1
  436. package/dist/services/handoff/handoff-parser.js +0 -1
  437. package/dist/services/handoff/handoff-types.d.ts +0 -1
  438. package/dist/services/handoff/handoff-types.js +0 -1
  439. package/dist/services/handoff/handoff-writer.d.ts +0 -1
  440. package/dist/services/handoff/handoff-writer.js +0 -1
  441. package/dist/services/hooks/auto-compact-hook-install.d.ts +0 -1
  442. package/dist/services/hooks/auto-compact-hook-install.js +0 -1
  443. package/dist/services/hooks/output.d.ts +0 -1
  444. package/dist/services/hooks/output.js +0 -1
  445. package/dist/services/hooks/pre-tool-code-gate.d.ts +0 -1
  446. package/dist/services/hooks/pre-tool-code-gate.js +0 -1
  447. package/dist/services/hooks/presence-marker-detector.js +0 -1
  448. package/dist/services/hooks/worktree-authorization-gate.d.ts +0 -3
  449. package/dist/services/hooks/worktree-authorization-gate.js +0 -1
  450. package/dist/services/ide/adapters/claude-code-adapter.d.ts +0 -5
  451. package/dist/services/ide/adapters/claude-code-adapter.js +0 -11
  452. package/dist/services/ide/adapters/qoder-adapter.d.ts +0 -3
  453. package/dist/services/ide/adapters/qoder-adapter.js +0 -5
  454. package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +0 -2
  455. package/dist/services/ide/adapters/tongyi-lingma-adapter.js +0 -2
  456. package/dist/services/ide/adapters/trae-adapter.d.ts +0 -3
  457. package/dist/services/ide/adapters/trae-adapter.js +3 -6
  458. package/dist/services/ide/adapters/zcode-adapter.js +0 -2
  459. package/dist/services/ide/current-model-detector.js +0 -1
  460. package/dist/services/ide/hook-protocol.d.ts +0 -2
  461. package/dist/services/ide/hook-protocol.js +0 -2
  462. package/dist/services/ide/ide-compact-types.d.ts +0 -7
  463. package/dist/services/ide/ide-types.d.ts +0 -12
  464. package/dist/services/ide/resource-profile.d.ts +0 -1
  465. package/dist/services/job/job-commit-verification.d.ts +0 -2
  466. package/dist/services/job/job-commit-verification.js +0 -2
  467. package/dist/services/job/job-orchestrator.d.ts +0 -1
  468. package/dist/services/job/job-orchestrator.js +0 -1
  469. package/dist/services/job/job-progress-store.d.ts +0 -2
  470. package/dist/services/job/job-progress-store.js +0 -3
  471. package/dist/services/job/job-types.js +0 -1
  472. package/dist/services/job-snapshot/snapshot.js +0 -1
  473. package/dist/services/karpathy-cost/karpathy-cost-check-service.js +0 -1
  474. package/dist/services/legacy/legacy-detector.js +0 -1
  475. package/dist/services/log/log-commands-service.d.ts +0 -2
  476. package/dist/services/log/log-commands-service.js +0 -2
  477. package/dist/services/log/logger.d.ts +0 -1
  478. package/dist/services/log/logger.js +0 -1
  479. package/dist/services/log/redact.d.ts +0 -1
  480. package/dist/services/log/redact.js +0 -1
  481. package/dist/services/log/retention.d.ts +0 -17
  482. package/dist/services/log/retention.js +0 -18
  483. package/dist/services/loop/loop-bee-relation-service.d.ts +3 -3
  484. package/dist/services/loop/loop-bee-relation-service.js +14 -13
  485. package/dist/services/loop/loop-bee-relation-store.d.ts +9 -10
  486. package/dist/services/loop/loop-bee-relation-store.js +1 -2
  487. package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
  488. package/dist/services/loop/loop-bee-relation-types.js +1 -1
  489. package/dist/services/loop/loop-release-service.d.ts +3 -3
  490. package/dist/services/loop/loop-release-service.js +1 -1
  491. package/dist/services/loop/loop-release-store.d.ts +6 -7
  492. package/dist/services/loop/loop-release-store.js +0 -1
  493. package/dist/services/loop/monotonic-guard.d.ts +0 -1
  494. package/dist/services/loop/monotonic-guard.js +0 -1
  495. package/dist/services/memory/memory-ingest-service.js +0 -1
  496. package/dist/services/memory/project-context-service.d.ts +0 -1
  497. package/dist/services/memory/project-context-service.js +0 -1
  498. package/dist/services/memory/project-memory-service/index/reindex.d.ts +0 -2
  499. package/dist/services/memory/project-memory-service/index/reindex.js +0 -1
  500. package/dist/services/memory/project-memory-service/index/search.d.ts +0 -1
  501. package/dist/services/memory/project-memory-service/index/search.js +0 -1
  502. package/dist/services/memory/project-memory-service/index.d.ts +1 -1
  503. package/dist/services/memory/project-memory-service/index.js +1 -1
  504. package/dist/services/memory/project-memory-service/memory-kinds.d.ts +0 -1
  505. package/dist/services/memory/project-memory-service/memory-kinds.js +0 -1
  506. package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +0 -1
  507. package/dist/services/memory/project-memory-service/parsers/frontmatter.js +0 -1
  508. package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +19 -7
  509. package/dist/services/memory/project-memory-service/store/atomic-write.js +120 -26
  510. package/dist/services/memory/project-memory-service.js +0 -1
  511. package/dist/services/mode/mode-enforcement.js +0 -1
  512. package/dist/services/mode/mode-status-service.d.ts +0 -2
  513. package/dist/services/mode/mode-status-service.js +0 -2
  514. package/dist/services/observability/aggregation.d.ts +0 -4
  515. package/dist/services/observability/aggregation.js +0 -6
  516. package/dist/services/observability/observability-schema.js +0 -1
  517. package/dist/services/observability/observability-service.d.ts +0 -5
  518. package/dist/services/observability/observability-service.js +0 -4
  519. package/dist/services/observability/report-formatter.d.ts +0 -2
  520. package/dist/services/observability/report-formatter.js +0 -2
  521. package/dist/services/openspec/artifact-boundary.d.ts +0 -4
  522. package/dist/services/openspec/artifact-boundary.js +0 -4
  523. package/dist/services/openspec/coverage-evidence-reader.d.ts +0 -1
  524. package/dist/services/openspec/coverage-evidence-reader.js +0 -1
  525. package/dist/services/polyrepo/polyrepo-dispatcher.js +0 -1
  526. package/dist/services/polyrepo/polyrepo-scanner.js +0 -1
  527. package/dist/services/polyrepo/polyrepo-service.js +0 -1
  528. package/dist/services/polyrepo/polyrepo-types.d.ts +0 -1
  529. package/dist/services/prd/best-practice-auto-trigger.d.ts +0 -2
  530. package/dist/services/prd/best-practice-auto-trigger.js +0 -2
  531. package/dist/services/prd/gate-evidence-derivation.d.ts +0 -4
  532. package/dist/services/prd/gate-evidence-derivation.js +0 -5
  533. package/dist/services/prd/handoff-auto-regen.js +0 -5
  534. package/dist/services/prd/handoff-frontmatter-shape.d.ts +0 -2
  535. package/dist/services/prd/handoff-frontmatter-shape.js +0 -2
  536. package/dist/services/prd/handoff-frontmatter.d.ts +0 -1
  537. package/dist/services/prd/handoff-frontmatter.js +61 -2
  538. package/dist/services/prd/handoff-gate-evidence.d.ts +0 -1
  539. package/dist/services/prd/handoff-gate-evidence.js +12 -12
  540. package/dist/services/prd/handoff-path-resolution.d.ts +0 -7
  541. package/dist/services/prd/handoff-path-resolution.js +0 -10
  542. package/dist/services/prd/handoff-service.d.ts +11 -3
  543. package/dist/services/prd/handoff-service.js +11 -3
  544. package/dist/services/prd/handoff-types.d.ts +33 -3
  545. package/dist/services/prd/handoff-types.js +0 -1
  546. package/dist/services/prd/project-scan-bootstrap-service.d.ts +0 -1
  547. package/dist/services/prd/project-scan-bootstrap-service.js +0 -4
  548. package/dist/services/prd/project-scan-types.d.ts +0 -1
  549. package/dist/services/prd/project-scan-types.js +0 -1
  550. package/dist/services/preferences/preferences-service.d.ts +0 -1
  551. package/dist/services/preferences/preferences-service.js +0 -5
  552. package/dist/services/preferences/preferences-types.d.ts +0 -14
  553. package/dist/services/preferences/preferences-types.js +0 -4
  554. package/dist/services/progress/progress-service.js +0 -1
  555. package/dist/services/qa/bdd-test-style-verifier.d.ts +0 -1
  556. package/dist/services/qa/bdd-test-style-verifier.js +0 -1
  557. package/dist/services/qa/browser-event-logger.d.ts +0 -1
  558. package/dist/services/qa/browser-event-logger.js +0 -1
  559. package/dist/services/qa/browser-restart-detector.d.ts +0 -1
  560. package/dist/services/qa/browser-restart-detector.js +0 -1
  561. package/dist/services/qa/browser-reuse-hint.d.ts +0 -1
  562. package/dist/services/qa/browser-reuse-hint.js +0 -1
  563. package/dist/services/qa/qa-business-review-state.js +0 -2
  564. package/dist/services/qa/screenshot-archive-service.d.ts +0 -1
  565. package/dist/services/qa/screenshot-archive-service.js +0 -1
  566. package/dist/services/rd/impl.js +0 -1
  567. package/dist/services/rd/rd-service.d.ts +0 -5
  568. package/dist/services/rd/rd-service.js +0 -5
  569. package/dist/services/rd/reviewer-dispatch-policy.d.ts +0 -4
  570. package/dist/services/rd/reviewer-dispatch-policy.js +0 -4
  571. package/dist/services/rd/standards-diagnostic.js +0 -1
  572. package/dist/services/rd/tactical-stage.js +0 -1
  573. package/dist/services/rd-swarm/rd-swarm-types.d.ts +0 -1
  574. package/dist/services/rd-swarm/rd-swarm-types.js +0 -1
  575. package/dist/services/recommendations/installed-capability-detector.d.ts +5 -6
  576. package/dist/services/recommendations/installed-capability-detector.js +11 -11
  577. package/dist/services/release/version-precheck-service.d.ts +0 -2
  578. package/dist/services/release/version-precheck-service.js +0 -3
  579. package/dist/services/retrospective/retrospective-index.d.ts +0 -1
  580. package/dist/services/retrospective/retrospective-index.js +0 -1
  581. package/dist/services/retrospective/retrospective-show.d.ts +0 -1
  582. package/dist/services/retrospective/retrospective-show.js +0 -1
  583. package/dist/services/reviewer/model-family.js +0 -1
  584. package/dist/services/reviewer/reviewer-config.js +0 -1
  585. package/dist/services/reviewer/reviewer-service.d.ts +0 -1
  586. package/dist/services/reviewer/reviewer-service.js +0 -3
  587. package/dist/services/reviewer/selection-strategies.js +0 -1
  588. package/dist/services/runtime/runtime-detector.js +0 -1
  589. package/dist/services/runtime/runtime-service.d.ts +0 -2
  590. package/dist/services/runtime/vendor-adapter.d.ts +0 -7
  591. package/dist/services/runtime/vendors/claude-code.js +0 -1
  592. package/dist/services/runtime/vendors/codex.js +0 -1
  593. package/dist/services/runtime/vendors/copilot.js +0 -1
  594. package/dist/services/sc/sc-service.js +0 -6
  595. package/dist/services/scan/acceptance-coverage-service.js +0 -2
  596. package/dist/services/scan/api-diff-recorded.d.ts +0 -1
  597. package/dist/services/scan/api-diff-recorded.js +0 -1
  598. package/dist/services/scan/api-diff-service.d.ts +0 -1
  599. package/dist/services/scan/api-diff-service.js +0 -1
  600. package/dist/services/scan/api-diff-types.d.ts +0 -1
  601. package/dist/services/scan/api-diff-types.js +0 -1
  602. package/dist/services/scan/archetype-detection.d.ts +37 -0
  603. package/dist/services/scan/archetype-detection.js +175 -2
  604. package/dist/services/scan/archetype-service.js +36 -23
  605. package/dist/services/scan/file-size-policy.d.ts +0 -1
  606. package/dist/services/scan/file-size-policy.js +0 -5
  607. package/dist/services/scan/file-size-scan.d.ts +0 -1
  608. package/dist/services/scan/scan-types.d.ts +9 -0
  609. package/dist/services/security/safe-settings-path.js +0 -1
  610. package/dist/services/session/binding-store.d.ts +0 -4
  611. package/dist/services/session/binding-store.js +0 -7
  612. package/dist/services/session/caller-binding-service.d.ts +0 -6
  613. package/dist/services/session/caller-binding-service.js +0 -4
  614. package/dist/services/session/caller-id-types.d.ts +0 -3
  615. package/dist/services/session/caller-id-types.js +0 -2
  616. package/dist/services/session/getSessionDir.js +0 -1
  617. package/dist/services/session/index.js +0 -1
  618. package/dist/services/session/platform-fallbacks.d.ts +0 -3
  619. package/dist/services/session/platform-fallbacks.js +0 -3
  620. package/dist/services/session/resolve-caller-id.d.ts +0 -2
  621. package/dist/services/session/resolve-caller-id.js +0 -2
  622. package/dist/services/session/session-binding-bridge.d.ts +0 -2
  623. package/dist/services/session/session-binding-bridge.js +0 -15
  624. package/dist/services/session/session-checkpoint-service.d.ts +0 -1
  625. package/dist/services/session/session-checkpoint-service.js +0 -1
  626. package/dist/services/session/session-manager.d.ts +0 -8
  627. package/dist/services/session/session-manager.js +0 -19
  628. package/dist/services/session/session-resume-service.d.ts +0 -1
  629. package/dist/services/session/session-resume-service.js +0 -1
  630. package/dist/services/share/bundle-reader.d.ts +2 -5
  631. package/dist/services/share/bundle-reader.js +6 -8
  632. package/dist/services/share/bundle-writer.d.ts +2 -2
  633. package/dist/services/skill/resume-detector.js +0 -3
  634. package/dist/services/skill/skill-scheduler.d.ts +0 -1
  635. package/dist/services/skill/skill-scheduler.js +0 -1
  636. package/dist/services/skill/skill-search-service.d.ts +0 -2
  637. package/dist/services/skill/skill-search-service.js +0 -2
  638. package/dist/services/skillhub/release-diff.d.ts +2 -2
  639. package/dist/services/skillhub/release-export.d.ts +2 -2
  640. package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
  641. package/dist/services/skillhub/release-import.d.ts +2 -2
  642. package/dist/services/skillhub/release-import.js +2 -1
  643. package/dist/services/skillhub/release-retain.d.ts +2 -2
  644. package/dist/services/skillhub/release-retain.js +2 -1
  645. package/dist/services/skillhub/sqlite-store.d.ts +3 -3
  646. package/dist/services/skillhub/sqlite-store.js +4 -5
  647. package/dist/services/skills/hooks-codegate-superpowers.d.ts +0 -3
  648. package/dist/services/skills/hooks-codegate-superpowers.js +0 -14
  649. package/dist/services/skills/hooks-settings-service.d.ts +0 -2
  650. package/dist/services/skills/hooks-settings-service.js +0 -6
  651. package/dist/services/skills/presence-lease-service.d.ts +0 -1
  652. package/dist/services/skills/presence-lease-service.js +0 -1
  653. package/dist/services/skills/session-start-hook-constants.d.ts +0 -4
  654. package/dist/services/skills/session-start-hook-constants.js +0 -4
  655. package/dist/services/skills/skill-presence-service.d.ts +0 -8
  656. package/dist/services/skills/skill-presence-service.js +0 -13
  657. package/dist/services/skills/skill-statusline-model.d.ts +0 -6
  658. package/dist/services/skills/skill-statusline-model.js +1 -4
  659. package/dist/services/skills/skill-statusline-renderer.d.ts +0 -1
  660. package/dist/services/skills/skill-statusline-renderer.js +0 -12
  661. package/dist/services/skills/skill-statusline-service.js +0 -6
  662. package/dist/services/skills/skill-statusline-sid-suffix.d.ts +0 -2
  663. package/dist/services/skills/skill-statusline-sid-suffix.js +0 -2
  664. package/dist/services/skills/statusline-palette.d.ts +0 -2
  665. package/dist/services/skills/statusline-palette.js +0 -3
  666. package/dist/services/slice/slice-archive-service.js +0 -1
  667. package/dist/services/slice/slice-benchmark-service.d.ts +0 -1
  668. package/dist/services/slice/slice-benchmark-service.js +0 -1
  669. package/dist/services/slice/slice-check-service.js +0 -6
  670. package/dist/services/slice/slice-check-types.d.ts +0 -1
  671. package/dist/services/slice/slice-pick-service.d.ts +0 -1
  672. package/dist/services/slice/slice-pick-service.js +0 -1
  673. package/dist/services/slice/slice-review-state.js +0 -2
  674. package/dist/services/sqlite/sqlite-driver.d.ts +118 -0
  675. package/dist/services/sqlite/sqlite-driver.js +159 -0
  676. package/dist/services/standards/ide-aware-standards-service.d.ts +0 -2
  677. package/dist/services/standards/ide-aware-standards-service.js +0 -1
  678. package/dist/services/standards/loop-engineering-readiness-lint.d.ts +0 -1
  679. package/dist/services/standards/loop-engineering-readiness-lint.js +0 -1
  680. package/dist/services/standards/migrate-claude-rules-service.js +0 -3
  681. package/dist/services/standards/migrate-service.d.ts +0 -1
  682. package/dist/services/standards/migrate-service.js +0 -1
  683. package/dist/services/standards/missing-standards-detector.d.ts +0 -2
  684. package/dist/services/standards/missing-standards-detector.js +0 -3
  685. package/dist/services/standards/project-standards-service.d.ts +0 -1
  686. package/dist/services/standards/project-standards-service.js +0 -1
  687. package/dist/services/standards/standards-render.d.ts +0 -1
  688. package/dist/services/standards/standards-render.js +0 -1
  689. package/dist/services/standards/ui-library-dispatch-block.d.ts +0 -1
  690. package/dist/services/standards/ui-library-dispatch-block.js +0 -1
  691. package/dist/services/tech/tech-change-id-service.d.ts +0 -7
  692. package/dist/services/tech/tech-change-id-service.js +0 -7
  693. package/dist/services/tech/tech-service.js +0 -5
  694. package/dist/services/verdict/envelope-parsers.d.ts +0 -2
  695. package/dist/services/verdict/envelope-parsers.js +0 -2
  696. package/dist/services/verdict/envelopes.d.ts +0 -1
  697. package/dist/services/vm/vm-lease.js +0 -1
  698. package/dist/services/web/aria-node.d.ts +0 -1
  699. package/dist/services/web/bounded-output.d.ts +0 -1
  700. package/dist/services/web/bounded-output.js +0 -1
  701. package/dist/services/web/browser-acquire.js +0 -1
  702. package/dist/services/web/browser-cache-probe.js +0 -1
  703. package/dist/services/web/browser-session-manager.js +0 -1
  704. package/dist/services/web/daemon-entry.js +0 -1
  705. package/dist/services/web/daemon-registry.js +0 -1
  706. package/dist/services/web/daemon-supervisor.d.ts +4 -3
  707. package/dist/services/web/daemon-supervisor.js +4 -4
  708. package/dist/services/web/playwright-loader.js +0 -1
  709. package/dist/services/web/playwright-types.d.ts +0 -1
  710. package/dist/services/web/snapshot-pruner.js +0 -1
  711. package/dist/services/web/untrusted-envelope.d.ts +0 -1
  712. package/dist/services/web/web-artifact-paths.js +0 -1
  713. package/dist/services/web/web-client.d.ts +0 -1
  714. package/dist/services/web/web-daemon-service.js +0 -1
  715. package/dist/services/web/web-fallback.d.ts +0 -1
  716. package/dist/services/web/web-fallback.js +0 -1
  717. package/dist/services/web/web-install-service.js +0 -1
  718. package/dist/services/web/web-login-profile.js +0 -1
  719. package/dist/services/web/web-protocol.d.ts +0 -1
  720. package/dist/services/web/web-protocol.js +0 -1
  721. package/dist/services/web/web-status-report.js +0 -1
  722. package/dist/services/workflow/artifact-paths.js +0 -3
  723. package/dist/services/workflow/autonomous-resume-writer.js +0 -2
  724. package/dist/services/workflow/pipeline-verify-gate-support.d.ts +0 -5
  725. package/dist/services/workflow/pipeline-verify-gate-support.js +0 -11
  726. package/dist/services/workflow/pipeline-verify-service.d.ts +0 -2
  727. package/dist/services/workflow/pipeline-verify-service.js +0 -15
  728. package/dist/services/workflow/pipeline-verify-types.d.ts +0 -10
  729. package/dist/services/workflow/pipeline-verify-types.js +0 -2
  730. package/dist/services/workflow/plan-reader.d.ts +0 -1
  731. package/dist/services/workflow/plan-reader.js +0 -5
  732. package/dist/services/workflow/plan-refresher.js +0 -2
  733. package/dist/services/workflow/plan-trigger-detector.d.ts +0 -2
  734. package/dist/services/workflow/plan-trigger-detector.js +0 -3
  735. package/dist/services/workflow/workflow-autonomous-resume-helpers.js +0 -5
  736. package/dist/services/workflow/workflow-autonomous-service.js +0 -2
  737. package/dist/services/workflow/workflow-autonomous-types.d.ts +0 -2
  738. package/dist/services/workflow/workflow-autonomous-types.js +0 -2
  739. package/dist/services/workflow/workflow-graph-types.d.ts +0 -1
  740. package/dist/services/workflow/workflow-graph-types.js +0 -1
  741. package/dist/services/workflow/workflow-router-service.js +0 -4
  742. package/dist/services/workflow/workflow-skip-service.d.ts +0 -1
  743. package/dist/services/workflow/workflow-skip-service.js +0 -1
  744. package/dist/services/workflow/workflow-spec-lint.d.ts +0 -2
  745. package/dist/services/workflow/workflow-spec-lint.js +0 -2
  746. package/dist/services/workflow/workflow-spec-types.d.ts +0 -1
  747. package/dist/services/workflow/workflow-spec-types.js +0 -1
  748. package/dist/services/workflow/workflow-spec-yaml.d.ts +0 -2
  749. package/dist/services/workflow/workflow-spec-yaml.js +0 -2
  750. package/dist/services/workflow/workflow-spec.js +0 -1
  751. package/dist/services/workflow/workflow-state-store.js +0 -1
  752. package/dist/services/workspace/claude-settings-template.d.ts +0 -4
  753. package/dist/services/workspace/claude-settings-template.js +0 -4
  754. package/dist/services/workspace/generated-artifacts-stamp.d.ts +2 -2
  755. package/dist/services/workspace/generated-artifacts-stamp.js +2 -2
  756. package/dist/services/workspace/migrate-1-4-1-service.d.ts +0 -1
  757. package/dist/services/workspace/migrate-1-4-1-service.js +0 -1
  758. package/dist/services/workspace/migrate-service.js +0 -8
  759. package/dist/services/workspace/migrate-types.d.ts +0 -4
  760. package/dist/services/workspace/migrate-types.js +0 -1
  761. package/dist/services/workspace/reconcile-migrate.d.ts +0 -3
  762. package/dist/services/workspace/reconcile-migrate.js +0 -5
  763. package/dist/services/workspace/reconcile-service.d.ts +0 -3
  764. package/dist/services/workspace/reconcile-service.js +0 -7
  765. package/dist/services/workspace/reconcile-types.d.ts +0 -5
  766. package/dist/services/workspace/sid-naming-guard.d.ts +0 -1
  767. package/dist/services/workspace/sid-naming-guard.js +0 -1
  768. package/dist/services/workspace/templates/project-scan/index.d.ts +0 -3
  769. package/dist/services/workspace/templates/project-scan/index.js +0 -3
  770. package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +0 -1
  771. package/dist/services/workspace/workspace-claude-settings-materializer.js +0 -4
  772. package/dist/services/workspace/workspace-service.d.ts +0 -7
  773. package/dist/services/workspace/workspace-service.js +1 -17
  774. package/dist/services/worktree/playwright-profile.js +0 -1
  775. package/dist/services/worktree/worktree-lease-types.d.ts +0 -1
  776. package/dist/services/worktree/worktree-lease-types.js +0 -1
  777. package/dist/services/worktree/worktree-lease.d.ts +0 -2
  778. package/dist/services/worktree/worktree-lease.js +0 -2
  779. package/dist/shared/format-md-compact.d.ts +0 -2
  780. package/dist/shared/format-md-compact.js +0 -2
  781. package/dist/shared/incrementing-number.d.ts +0 -1
  782. package/dist/shared/incrementing-number.js +0 -1
  783. package/dist/shared/path-utils.d.ts +0 -1
  784. package/dist/shared/path-utils.js +0 -1
  785. package/dist/shared/runtime-root.d.ts +0 -1
  786. package/dist/shared/runtime-root.js +0 -1
  787. package/dist/shared/stale-policy.d.ts +0 -1
  788. package/dist/shared/stale-policy.js +0 -1
  789. package/package.json +12 -10
  790. package/scripts/canonical-store-link.mjs +296 -0
  791. package/scripts/canonical-store-prune.mjs +131 -0
  792. package/scripts/canonical-store.mjs +298 -0
  793. package/scripts/install-skills.mjs +175 -560
  794. package/skills/bee/peaks-qa/references/reading-handoff-frontmatter.md +3 -1
  795. package/skills/bee/peaks-rd/references/parallel-review-fanout.md +1 -1
  796. package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +3 -2
  797. package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +29 -7
  798. package/skills/peaks-audit/SKILL.md +3 -3
  799. package/skills/peaks-code/references/frontend-only-mode.md +2 -2
  800. package/skills/peaks-code/references/startup-sequence.md +0 -4
  801. package/dist/cli/commands/upgrade-commands.d.ts +0 -25
  802. package/dist/cli/commands/upgrade-commands.js +0 -154
  803. package/dist/services/codegraph/codegraph-include-reconciler.d.ts +0 -10
  804. package/dist/services/codegraph/codegraph-include-reconciler.js +0 -160
  805. package/dist/services/upgrade/1x-detector-service.d.ts +0 -7
  806. package/dist/services/upgrade/1x-detector-service.js +0 -96
  807. package/dist/services/upgrade/gitignore-migrate-service.d.ts +0 -56
  808. package/dist/services/upgrade/gitignore-migrate-service.js +0 -170
  809. package/dist/services/upgrade/upgrade-service.d.ts +0 -81
  810. package/dist/services/upgrade/upgrade-service.js +0 -428
  811. package/skills/peaks-code/references/step-0-55-1x-detection.md +0 -83
@@ -9,20 +9,29 @@ import {
9
9
  mkdirSync,
10
10
  openSync,
11
11
  readFileSync,
12
- readlinkSync,
13
12
  realpathSync,
14
13
  readdirSync,
15
14
  renameSync,
16
- symlinkSync,
17
15
  unlinkSync,
18
16
  writeFileSync
19
17
  } from 'node:fs';
20
- import { spawnSync } from 'node:child_process';
21
- import { createHash, randomUUID } from 'node:crypto';
18
+ import { randomUUID } from 'node:crypto';
22
19
  import { homedir } from 'node:os';
23
- import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
20
+ import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
24
21
  import { fileURLToPath, pathToFileURL } from 'node:url';
25
22
 
23
+ // The canonical store — `~/.peaks/{skills,agents,output-styles}`. Skills are
24
+ // linked to it instead of to `<packageRoot>/skills/<name>`; see the loop in
25
+ // `installBundledSkills` for why the target moved and why repair is now
26
+ // unconditional. `canonical-store-link.mjs` is the same contract for the two
27
+ // families whose entry is a single FILE rather than a tree, and it is where the
28
+ // "the symlink was refused, here is the report" fallback lives. MUST both stay in
29
+ // `package.json#files`: this file IS the npm postinstall, and an unpublished
30
+ // sibling import breaks every user's install.
31
+ import { reconcileCanonicalEntry } from './canonical-store.mjs';
32
+ import { reconcileCanonicalFileEntry } from './canonical-store-link.mjs';
33
+ import { pruneBundledEntries } from './canonical-store-prune.mjs';
34
+
26
35
  function getPathStats(path) {
27
36
  try {
28
37
  return lstatSync(path);
@@ -31,24 +40,6 @@ function getPathStats(path) {
31
40
  }
32
41
  }
33
42
 
34
- function isBrokenSymlink(stats, targetPath) {
35
- return stats.isSymbolicLink() && !existsSync(targetPath);
36
- }
37
-
38
- function validateManagedMarkerPath(markerPath) {
39
- const markerStats = getPathStats(markerPath);
40
- if (!markerStats) return;
41
- if (markerStats.isSymbolicLink()) {
42
- throw new Error('Peaks managed marker path must not be a symlink');
43
- }
44
- if (!markerStats.isFile()) {
45
- throw new Error('Peaks managed marker path must be a file');
46
- }
47
- if (markerStats.nlink !== 1) {
48
- throw new Error('Peaks managed marker path must not be hardlinked');
49
- }
50
- }
51
-
52
43
  function validateOpenFile(fd, path, errorMessage) {
53
44
  const fdStats = fstatSync(fd);
54
45
  const pathStats = lstatSync(path);
@@ -65,26 +56,6 @@ function validateOpenFile(fd, path, errorMessage) {
65
56
  }
66
57
  }
67
58
 
68
- function createFileIdentity(path) {
69
- const stats = lstatSync(path);
70
- if (!stats.isFile() || stats.isSymbolicLink() || stats.nlink !== 1) {
71
- return null;
72
- }
73
- return { dev: stats.dev, ino: stats.ino };
74
- }
75
-
76
- function isSameFileIdentity(path, identity) {
77
- if (identity === null) return false;
78
- const stats = getPathStats(path);
79
- return Boolean(
80
- stats?.isFile() &&
81
- !stats.isSymbolicLink() &&
82
- stats.nlink === 1 &&
83
- stats.dev === identity.dev &&
84
- stats.ino === identity.ino
85
- );
86
- }
87
-
88
59
  function getSafeReadOpenFlags() {
89
60
  return typeof constants.O_NOFOLLOW === 'number'
90
61
  ? constants.O_RDONLY | constants.O_NOFOLLOW
@@ -101,94 +72,6 @@ function readFileSafely(path, errorMessage) {
101
72
  }
102
73
  }
103
74
 
104
- function getManagedTarget(targetPath) {
105
- const markerPath = `${targetPath}.peaks-managed`;
106
- validateManagedMarkerPath(markerPath);
107
- if (!existsSync(markerPath)) {
108
- return null;
109
- }
110
- return readFileSafely(markerPath, 'Peaks managed marker path changed during read').trim();
111
- }
112
-
113
- function markManagedPeaksLink(targetPath, sourcePath) {
114
- const markerPath = `${targetPath}.peaks-managed`;
115
- validateManagedMarkerPath(markerPath);
116
- writeFileAtomically(
117
- markerPath,
118
- `${sourcePath}\n`,
119
- 'Peaks managed marker path changed during write',
120
- () => validateManagedMarkerPath(markerPath)
121
- );
122
- }
123
-
124
- function readPackageSourceFile(path) {
125
- const stats = lstatSync(path);
126
- if (!stats.isFile() || stats.isSymbolicLink()) {
127
- throw new Error('Peaks package source path must be a file');
128
- }
129
- return readFileSync(path, 'utf8');
130
- }
131
-
132
- function hashContent(content) {
133
- return createHash('sha256').update(content).digest('hex');
134
- }
135
-
136
- function hashFileContent(path) {
137
- return hashContent(readFileSafely(path, 'Peaks managed file path changed during read'));
138
- }
139
-
140
- function createManagedOutputStyleMarker(sourcePath, outputStyleName) {
141
- const content = readPackageSourceFile(sourcePath);
142
- return `${JSON.stringify({ version: 1, kind: 'output-style', outputStyleName, sourcePath, contentSha256: hashContent(content) })}\n`;
143
- }
144
-
145
- function parseManagedOutputStyleMarker(managedTarget) {
146
- if (managedTarget === null) return null;
147
- try {
148
- const marker = JSON.parse(managedTarget);
149
- if (
150
- marker?.version !== 1 ||
151
- marker?.kind !== 'output-style' ||
152
- typeof marker.outputStyleName !== 'string' ||
153
- typeof marker.sourcePath !== 'string' ||
154
- typeof marker.contentSha256 !== 'string'
155
- ) {
156
- return null;
157
- }
158
- return marker;
159
- } catch {
160
- return null;
161
- }
162
- }
163
-
164
- function isTrustedOutputStyleSource(marker, sourcePath, outputStyleName) {
165
- return (
166
- marker.outputStyleName === outputStyleName &&
167
- resolve(marker.sourcePath) === resolve(sourcePath) &&
168
- basename(resolve(marker.sourcePath)) === outputStyleName
169
- );
170
- }
171
-
172
- function getManagedPeaksOutputStyleIdentity(
173
- managedTarget,
174
- targetPath,
175
- sourcePath,
176
- outputStyleName
177
- ) {
178
- const marker = parseManagedOutputStyleMarker(managedTarget);
179
- const sourceHash = hashContent(readPackageSourceFile(sourcePath));
180
- if (
181
- marker === null ||
182
- !isTrustedOutputStyleSource(marker, sourcePath, outputStyleName) ||
183
- !existsSync(targetPath) ||
184
- hashFileContent(targetPath) !== sourceHash ||
185
- marker.contentSha256 !== sourceHash
186
- ) {
187
- return null;
188
- }
189
- return createFileIdentity(targetPath);
190
- }
191
-
192
75
  function validateInstallRoot(targetRoot, label) {
193
76
  const rootStats = lstatSync(targetRoot);
194
77
  if (rootStats.isSymbolicLink()) {
@@ -211,7 +94,7 @@ function createInstallRootValidator(targetRoot, label) {
211
94
  }
212
95
 
213
96
  function createInstallResult() {
214
- return { installed: [], skipped: [] };
97
+ return { installed: [], skipped: [], pruned: [], fallbacks: [] };
215
98
  }
216
99
 
217
100
  function resolvePackageRoot(options = {}) {
@@ -335,39 +218,6 @@ function getSafeTempOpenFlags() {
335
218
  return typeof constants.O_NOFOLLOW === 'number' ? baseFlags | constants.O_NOFOLLOW : baseFlags;
336
219
  }
337
220
 
338
- function writeFileExclusively(path, content, errorMessage, validateBeforeWrite) {
339
- validateBeforeWrite();
340
- let fd = openSync(path, getSafeTempOpenFlags(), 0o600);
341
- let closeError = null;
342
- let identity = null;
343
- try {
344
- validateOpenFile(fd, path, errorMessage);
345
- validateBeforeWrite();
346
- validateOpenFile(fd, path, errorMessage);
347
- identity = createFileIdentity(path);
348
- if (identity === null) {
349
- throw new Error(errorMessage);
350
- }
351
- fchmodSync(fd, 0o600);
352
- writeFileSync(fd, content, 'utf8');
353
- const writeFd = fd;
354
- fd = null;
355
- closeSync(writeFd);
356
- return identity;
357
- } finally {
358
- if (fd !== null) {
359
- try {
360
- closeSync(fd);
361
- } catch (error) {
362
- closeError = error;
363
- }
364
- }
365
- if (closeError) {
366
- throw closeError;
367
- }
368
- }
369
- }
370
-
371
221
  function writeFileAtomically(configPath, content, errorMessage, validateBeforeWrite) {
372
222
  validateBeforeWrite();
373
223
 
@@ -785,51 +635,43 @@ export function installBundledSkills(options = {}) {
785
635
  for (const { skillName, sourcePath } of candidates) {
786
636
  const targetPath = join(targetRoot, skillName);
787
637
 
788
- const current = getPathStats(targetPath);
789
- if (current) {
790
- const managedTarget = getManagedTarget(targetPath);
791
- const linkTarget = current.isSymbolicLink() ? readlinkSync(targetPath) : null;
792
- const linkTargetExists = typeof linkTarget === 'string' && existsSync(linkTarget);
793
- if (linkTarget === sourcePath && linkTargetExists) {
794
- installed.push(skillName);
795
- continue;
796
- }
797
- // Managed Junctions may point into an ephemeral host worktree. If that
798
- // worktree was removed, Windows keeps the Junction entry but its target
799
- // no longer resolves. Repair only when reconciliation was explicitly
800
- // requested; normal postinstall keeps its existing ownership behavior.
801
- if (
802
- (current.isSymbolicLink() || isBrokenSymlink(current, targetPath)) &&
803
- (managedTarget === linkTarget ||
804
- (options.reconcileJunctions === true && managedTarget !== null && !linkTargetExists))
805
- ) {
806
- validateSkillsRoot();
807
- unlinkSync(targetPath);
808
- validateSkillsRoot();
809
- unlinkSync(`${targetPath}.peaks-managed`);
810
- } else {
811
- skipped.push(skillName);
812
- continue;
813
- }
814
- }
815
-
638
+ // Slice 2 (`agents-canonical-store`) — the entry points at the CANONICAL
639
+ // STORE (`~/.peaks/skills/<name>`), not at `<packageRoot>/skills/<name>`,
640
+ // because `<packageRoot>` changes on every `npm i -g peaks-loop@latest` and
641
+ // the links must bind to a PATH peaks-loop owns, not to a VERSION. Repair is
642
+ // the only behaviour: an entry peaks-loop owns (sidecar matches, or the link
643
+ // dangles) is relinked onto the store; only a real directory the user authored
644
+ // is left alone and reported `skipped`. `options.reconcileJunctions` is
645
+ // therefore READ NOWHERE here — still accepted (`sync-service.ts` forwards it)
646
+ // so passing it changes nothing, and removing it is a CLI-surface change this
647
+ // slice does not own.
816
648
  validateSkillsRoot();
817
- symlinkSync(sourcePath, targetPath, process.platform === 'win32' ? 'junction' : 'dir');
818
- try {
819
- validateSkillsRoot();
820
- markManagedPeaksLink(targetPath, sourcePath);
821
- } catch (error) {
822
- validateSkillsRoot();
823
- const created = getPathStats(targetPath);
824
- if (created?.isSymbolicLink() && readlinkSync(targetPath) === sourcePath) {
825
- unlinkSync(targetPath);
826
- }
827
- throw error;
649
+ const reconciled = reconcileCanonicalEntry({
650
+ kind: 'skills',
651
+ name: skillName,
652
+ sourcePath,
653
+ linkPath: targetPath
654
+ });
655
+ validateSkillsRoot();
656
+
657
+ if (reconciled.linkAction === 'skipped') {
658
+ skipped.push(skillName);
659
+ continue;
828
660
  }
829
661
  installed.push(skillName);
830
662
  }
831
663
 
832
- return { installed, skipped };
664
+ // Slice 3 — PRUNE. The loop above only ever ADDS. A skill removed from the
665
+ // package left its canonical copy, every IDE link and every sidecar on the
666
+ // user's machine forever, because nothing walked the DESTINATIONS. This does,
667
+ // and deletes only what `isManagedEntry` proves is ours.
668
+ const { pruned } = pruneBundledEntries({
669
+ kind: 'skills',
670
+ keepNames: candidates.map((candidate) => candidate.skillName),
671
+ linkDirs: [targetRoot]
672
+ });
673
+
674
+ return { installed, skipped, pruned };
833
675
  }
834
676
 
835
677
  /**
@@ -892,73 +734,55 @@ export function installBundledOutputStyles(options = {}) {
892
734
 
893
735
  const installed = [];
894
736
  const skipped = [];
737
+ const fallbacks = [];
895
738
  mkdirSync(targetRoot, { recursive: true });
896
739
  const validateOutputStylesRoot = createInstallRootValidator(targetRoot, 'Peaks output styles');
897
740
 
741
+ // Slice 4 (`agents-canonical-store`) — same move slice 2 made for skills, with the
742
+ // one difference the brief calls out: a style is a FILE, so the link is a file
743
+ // symlink, which Windows only grants with developer mode or Administrator.
744
+ // `reconcileCanonicalFileEntry` is the whole policy — canonical copy, link, and the
745
+ // reported fallback to a real copy when the host refuses the link. The loop below
746
+ // no longer decides ownership, and that is deliberate: the decision it used to make
747
+ // was `resolve(marker.sourcePath) === resolve(sourcePath)`, a string comparison
748
+ // against a version-scoped package path that went false forever on the first
749
+ // upgrade and silently froze the style.
750
+ const bundledStyleNames = [];
898
751
  for (const outputStyleName of readdirSync(outputStylesRoot)) {
899
752
  const sourcePath = join(outputStylesRoot, outputStyleName);
900
- const targetPath = join(targetRoot, outputStyleName);
901
-
902
- if (!lstatSync(sourcePath).isFile() || !outputStyleName.endsWith('.md')) {
753
+ if (!lstatSync(sourcePath).isFile() || !outputStyleName.endsWith('.md')) continue;
754
+ bundledStyleNames.push(outputStyleName);
755
+
756
+ validateOutputStylesRoot();
757
+ const reconciled = reconcileCanonicalFileEntry({
758
+ kind: 'output-styles',
759
+ name: outputStyleName,
760
+ sourcePath,
761
+ linkPath: join(targetRoot, outputStyleName),
762
+ createFileLink: options.createFileLink
763
+ });
764
+ validateOutputStylesRoot();
765
+
766
+ if (reconciled.linkAction === 'skipped') {
767
+ skipped.push(outputStyleName);
903
768
  continue;
904
769
  }
905
-
906
- const current = getPathStats(targetPath);
907
- if (current) {
908
- const managedTarget = getManagedTarget(targetPath);
909
- const managedTargetIdentity = getManagedPeaksOutputStyleIdentity(
910
- managedTarget,
911
- targetPath,
912
- sourcePath,
913
- outputStyleName
914
- );
915
- if (isSameFileIdentity(targetPath, managedTargetIdentity)) {
916
- validateOutputStylesRoot();
917
- if (!isSameFileIdentity(targetPath, managedTargetIdentity)) {
918
- throw new Error('Peaks output style path changed during unlink');
919
- }
920
- unlinkSync(targetPath);
921
- validateOutputStylesRoot();
922
- unlinkSync(`${targetPath}.peaks-managed`);
923
- } else {
924
- skipped.push(outputStyleName);
925
- continue;
926
- }
927
- }
928
-
929
- const markerPath = `${targetPath}.peaks-managed`;
930
- validateManagedMarkerPath(markerPath);
931
- if (!current && existsSync(markerPath)) {
932
- validateOutputStylesRoot();
933
- unlinkSync(markerPath);
934
- }
935
- const createdTargetIdentity = writeFileExclusively(
936
- targetPath,
937
- readPackageSourceFile(sourcePath),
938
- 'Peaks output style path changed during write',
939
- validateOutputStylesRoot
940
- );
941
- try {
942
- writeFileExclusively(
943
- markerPath,
944
- createManagedOutputStyleMarker(sourcePath, outputStyleName),
945
- 'Peaks managed marker path changed during write',
946
- () => {
947
- validateOutputStylesRoot();
948
- validateManagedMarkerPath(markerPath);
949
- }
950
- );
951
- } catch (error) {
952
- validateOutputStylesRoot();
953
- if (isSameFileIdentity(targetPath, createdTargetIdentity)) {
954
- unlinkSync(targetPath);
955
- }
956
- throw error;
957
- }
958
770
  installed.push(outputStyleName);
771
+ if (reconciled.fallback !== null) {
772
+ fallbacks.push({ name: outputStyleName, ...reconciled.fallback });
773
+ }
959
774
  }
960
775
 
961
- return { installed, skipped };
776
+ // The delete half, for the same reason skills have one: the loop above only ever
777
+ // adds. A style removed from the package used to leave its canonical copy, its IDE
778
+ // link and both sidecars behind forever.
779
+ const { pruned } = pruneBundledEntries({
780
+ kind: 'output-styles',
781
+ keepNames: bundledStyleNames,
782
+ linkDirs: [targetRoot]
783
+ });
784
+
785
+ return { installed, skipped, pruned, fallbacks };
962
786
  }
963
787
 
964
788
  /**
@@ -1112,72 +936,26 @@ export function installBundledOutputStyleDefault(options = {}) {
1112
936
  /**
1113
937
  * Slice 7/7 — bundled agents (Claude Code sub-agent prompts).
1114
938
  *
1115
- * Mirrors `installBundledOutputStyles` but writes to
1116
- * `~/.claude/agents/` (Claude Code's sub-agent loader directory). Each
1117
- * agent file ships under `agents/*.md` in the peaks-loop tarball and is
1118
- * copied on `npm i -g peaks-loop@latest` with content-hash drift detection
1119
- * via a `.peaks-managed` marker (SHA-256 of the source content).
939
+ * Writes into the IDE's sub-agent loader directory (`~/.claude/agents/` for Claude
940
+ * Code, and whatever `agentsDir` the detected profile declares). The bytes live in
941
+ * the canonical store (`~/.peaks/agents/<name>`) and the IDE entry is a link to it.
942
+ *
943
+ * Ownership policy — ONE predicate, in `canonical-store-link.mjs::isOwnedFileEntry`,
944
+ * and it is deliberately not a string comparison:
945
+ * - entry resolves to the canonical copy → leave it (idempotent run)
946
+ * - entry is a link we wrote (sidecar agrees, dangles) → relink onto the store
947
+ * - entry is a real file with OUR sidecar beside it → re-point it at the store
948
+ * - entry is a real file with a LEGACY sidecar whose
949
+ * recorded package path no longer resolves → same: repair it
950
+ * - entry is a real file we never wrote (no sidecar) → skip (user-authored)
951
+ * - entry is a real file whose sidecar names a path
952
+ * that STILL resolves → skip (a second live install)
1120
953
  *
1121
- * Drift policy (mirrors output-styles):
1122
- * - file missing, marker missing → install (write file + marker)
1123
- * - file missing, marker present → install (replace stale marker)
1124
- * - file present, marker present,
1125
- * SHA matches, sourcePath matches → skip (idempotent re-install)
1126
- * - file present, marker present,
1127
- * SHA matches, sourcePath differs → skip (stale package path;
1128
- * preserve user's local file)
1129
- * - file present, marker present,
1130
- * SHA differs → overwrite (package upgrade)
1131
- * - file present, no marker → skip (user-authored file;
1132
- * preserve)
954
+ * The two "skip" arms above are the ones the old code got wrong in opposite
955
+ * directions: it skipped whenever the package path merely DIFFERED, which froze
956
+ * every entry on the first upgrade, silently and permanently. See
957
+ * `isOwnedFileEntry` for why a vanished package path is proof of an earlier install.
1133
958
  */
1134
- function createManagedAgentMarker(sourcePath, agentName) {
1135
- const content = readPackageSourceFile(sourcePath);
1136
- return `${JSON.stringify({ version: 1, kind: 'agent', agentName, sourcePath, contentSha256: hashContent(content) })}\n`;
1137
- }
1138
-
1139
- function parseManagedAgentMarker(managedTarget) {
1140
- if (managedTarget === null) return null;
1141
- try {
1142
- const marker = JSON.parse(managedTarget);
1143
- if (
1144
- marker?.version !== 1 ||
1145
- marker?.kind !== 'agent' ||
1146
- typeof marker.agentName !== 'string' ||
1147
- typeof marker.sourcePath !== 'string' ||
1148
- typeof marker.contentSha256 !== 'string'
1149
- ) {
1150
- return null;
1151
- }
1152
- return marker;
1153
- } catch {
1154
- return null;
1155
- }
1156
- }
1157
-
1158
- function isTrustedAgentSource(marker, sourcePath, agentName) {
1159
- return (
1160
- marker.agentName === agentName &&
1161
- resolve(marker.sourcePath) === resolve(sourcePath) &&
1162
- basename(resolve(marker.sourcePath)) === agentName
1163
- );
1164
- }
1165
-
1166
- function getManagedPeaksAgentIdentity(managedTarget, targetPath, sourcePath, agentName) {
1167
- const marker = parseManagedAgentMarker(managedTarget);
1168
- const sourceHash = hashContent(readPackageSourceFile(sourcePath));
1169
- if (
1170
- marker === null ||
1171
- !isTrustedAgentSource(marker, sourcePath, agentName) ||
1172
- !existsSync(targetPath) ||
1173
- hashFileContent(targetPath) !== sourceHash ||
1174
- marker.contentSha256 !== sourceHash
1175
- ) {
1176
- return null;
1177
- }
1178
- return createFileIdentity(targetPath);
1179
- }
1180
-
1181
959
  export function installBundledAgents(options = {}) {
1182
960
  const packageRoot = resolvePackageRoot(options);
1183
961
  const agentsRoot = join(packageRoot, 'agents');
@@ -1211,73 +989,82 @@ export function installBundledAgents(options = {}) {
1211
989
 
1212
990
  const installed = [];
1213
991
  const skipped = [];
992
+ const fallbacks = [];
1214
993
  mkdirSync(targetRoot, { recursive: true });
1215
994
  const validateAgentsRoot = createInstallRootValidator(targetRoot, 'Peaks agents');
1216
995
 
996
+ // Slice 4 (`agents-canonical-store`) — the canonical store owns the bytes and the
997
+ // IDE entry points at it. Everything this loop used to decide about ownership is
998
+ // now `reconcileCanonicalFileEntry`'s, and the reason is the defect the brief
999
+ // names as this slice's core: the old test was
1000
+ // `resolve(marker.sourcePath) === resolve(sourcePath)`, a STRING comparison against
1001
+ // the package path of the installing version — a path with a node version inside it
1002
+ // (`…\nvm\v24.21.0\node_modules\peaks-loop\agents\…`). It went false the first time
1003
+ // the package moved and stayed false, so the agent silently never updated again.
1004
+ const bundledAgentNames = [];
1217
1005
  for (const agentFileName of readdirSync(agentsRoot)) {
1218
1006
  const sourcePath = join(agentsRoot, agentFileName);
1219
- const targetPath = join(targetRoot, agentFileName);
1220
-
1221
- if (!lstatSync(sourcePath).isFile() || !agentFileName.endsWith('.md')) {
1007
+ if (!lstatSync(sourcePath).isFile() || !agentFileName.endsWith('.md')) continue;
1008
+ bundledAgentNames.push(agentFileName);
1009
+
1010
+ validateAgentsRoot();
1011
+ const reconciled = reconcileCanonicalFileEntry({
1012
+ kind: 'agents',
1013
+ name: agentFileName,
1014
+ sourcePath,
1015
+ linkPath: join(targetRoot, agentFileName),
1016
+ createFileLink: options.createFileLink
1017
+ });
1018
+ validateAgentsRoot();
1019
+
1020
+ if (reconciled.linkAction === 'skipped') {
1021
+ skipped.push(agentFileName);
1222
1022
  continue;
1223
1023
  }
1224
-
1225
- const current = getPathStats(targetPath);
1226
- if (current) {
1227
- const managedTarget = getManagedTarget(targetPath);
1228
- const managedTargetIdentity = getManagedPeaksAgentIdentity(
1229
- managedTarget,
1230
- targetPath,
1231
- sourcePath,
1232
- agentFileName
1233
- );
1234
- if (isSameFileIdentity(targetPath, managedTargetIdentity)) {
1235
- validateAgentsRoot();
1236
- if (!isSameFileIdentity(targetPath, managedTargetIdentity)) {
1237
- throw new Error('Peaks agent path changed during unlink');
1238
- }
1239
- unlinkSync(targetPath);
1240
- validateAgentsRoot();
1241
- unlinkSync(`${targetPath}.peaks-managed`);
1242
- } else {
1243
- skipped.push(agentFileName);
1244
- continue;
1245
- }
1246
- }
1247
-
1248
- const markerPath = `${targetPath}.peaks-managed`;
1249
- validateManagedMarkerPath(markerPath);
1250
- if (!current && existsSync(markerPath)) {
1251
- validateAgentsRoot();
1252
- unlinkSync(markerPath);
1253
- }
1254
- const createdTargetIdentity = writeFileExclusively(
1255
- targetPath,
1256
- readPackageSourceFile(sourcePath),
1257
- 'Peaks agent path changed during write',
1258
- validateAgentsRoot
1259
- );
1260
- try {
1261
- writeFileExclusively(
1262
- markerPath,
1263
- createManagedAgentMarker(sourcePath, agentFileName),
1264
- 'Peaks managed marker path changed during write',
1265
- () => {
1266
- validateAgentsRoot();
1267
- validateManagedMarkerPath(markerPath);
1268
- }
1269
- );
1270
- } catch (error) {
1271
- validateAgentsRoot();
1272
- if (isSameFileIdentity(targetPath, createdTargetIdentity)) {
1273
- unlinkSync(targetPath);
1274
- }
1275
- throw error;
1276
- }
1277
1024
  installed.push(agentFileName);
1025
+ if (reconciled.fallback !== null) {
1026
+ fallbacks.push({ name: agentFileName, ...reconciled.fallback });
1027
+ }
1278
1028
  }
1279
1029
 
1280
- return { installed, skipped };
1030
+ // The delete half: an agent the package stops shipping used to leave its canonical
1031
+ // copy, its IDE entry and both sidecars on the machine forever.
1032
+ const { pruned } = pruneBundledEntries({
1033
+ kind: 'agents',
1034
+ keepNames: bundledAgentNames,
1035
+ linkDirs: [targetRoot]
1036
+ });
1037
+
1038
+ return { installed, skipped, pruned, fallbacks };
1039
+ }
1040
+
1041
+ /**
1042
+ * A fallback is not a failure — but it must never LOOK like a plain success. The
1043
+ * entry is a real copy instead of a link, and the postinstall says so, naming each
1044
+ * one. Silence here would be the same shape as the defect this slice fixes: an
1045
+ * outcome nobody can observe from the outside.
1046
+ */
1047
+ function reportCopyFallbacks(label, fallbacks) {
1048
+ if (fallbacks.length === 0) return;
1049
+ process.stderr.write(
1050
+ `Peaks ${label}: ${fallbacks.map((entry) => entry.name).join(', ')} ` +
1051
+ 'installed as REAL COPIES because this host refused a symlink ' +
1052
+ `(${fallbacks[0].code ?? 'no code returned'})\n`
1053
+ );
1054
+ }
1055
+
1056
+ /**
1057
+ * The other half of the same rule, for the other bucket. A `skipped` entry means the
1058
+ * canonical copy WAS written and the IDE entry was NOT — a half migration. Whatever the
1059
+ * cause (a file the user authored, or an entry whose sidecar names a second live
1060
+ * installation), it must not be invisible: the whole defect this slice fixes was an
1061
+ * outcome nobody could observe from outside.
1062
+ */
1063
+ function reportLeftAlone(label, skipped) {
1064
+ if (skipped.length === 0) return;
1065
+ process.stderr.write(
1066
+ `Peaks ${label}: left alone, not peaks-loop's to replace: ${skipped.join(', ')}\n`
1067
+ );
1281
1068
  }
1282
1069
 
1283
1070
  /**
@@ -1321,11 +1108,14 @@ export function installBundledAgentsForAllPlatforms(options = {}) {
1321
1108
  ? { ...options, ideId, targetRoot: options.targetRoot }
1322
1109
  : { ...options, ideId };
1323
1110
  const result = installBundledAgents(platformOpts);
1111
+ reportCopyFallbacks(`agents in ${profile.agentsDir}`, result.fallbacks);
1112
+ reportLeftAlone(`agents in ${profile.agentsDir}`, result.skipped);
1324
1113
  perPlatform.push({
1325
1114
  ideId,
1326
1115
  agentsDir: profile.agentsDir,
1327
1116
  installed: result.installed,
1328
- skipped: result.skipped
1117
+ skipped: result.skipped,
1118
+ fallbacks: result.fallbacks
1329
1119
  });
1330
1120
  } catch (err) {
1331
1121
  const message = err instanceof Error ? err.message : String(err);
@@ -1409,162 +1199,6 @@ export function installBundledSkillsForAllPlatforms(options = {}) {
1409
1199
  return perPlatform;
1410
1200
  }
1411
1201
 
1412
- /**
1413
- * 1.x → 2.0 detection — sniff for legacy 1.x project state
1414
- * in `cwd`. Returns a 1.x detection envelope with the
1415
- * detected signals (so the postinstall can decide whether
1416
- * to auto-upgrade).
1417
- *
1418
- * 1.x signals (any one fires the detection):
1419
- * - `~/.peaks/config.json` exists with `version: '1.4.2'` (or
1420
- * any '1.x' version that predates the 2.0 schema)
1421
- * - `.claude/rules/common/dev-preference.md` exists and
1422
- * references "peaks progress" (the 1.x CLI surface
1423
- * removed in slice #014)
1424
- * - `<cwd>/.peaks/preferences.json` missing OR has no
1425
- * `schema_version: '2.0.0'` field
1426
- *
1427
- * Returns:
1428
- * { isOneX: boolean, signals: string[], projectRoot: string|null,
1429
- * configPath: string|null }
1430
- */
1431
- export function detect1xProjectState(cwd = process.cwd()) {
1432
- const home = homedir();
1433
- const signals = [];
1434
- let projectRoot = null;
1435
- let configPath = null;
1436
-
1437
- // Walk up from cwd looking for .peaks/_runtime (signals
1438
- // we're inside a peaks project).
1439
- let dir = cwd;
1440
- for (let i = 0; i < 8; i += 1) {
1441
- const peaksRuntime = join(dir, '.peaks', '_runtime');
1442
- if (existsSync(peaksRuntime)) {
1443
- projectRoot = dir;
1444
- break;
1445
- }
1446
- const parent = dirname(dir);
1447
- if (parent === dir) break;
1448
- dir = parent;
1449
- }
1450
-
1451
- // Signal 1: ~/.peaks/config.json with 1.x version
1452
- const globalConfig = join(home, '.peaks', 'config.json');
1453
- if (existsSync(globalConfig)) {
1454
- try {
1455
- const raw = JSON.parse(readFileSync(globalConfig, 'utf8'));
1456
- if (typeof raw.version === 'string' && /^1\./.test(raw.version)) {
1457
- signals.push(`global config at ${globalConfig} is 1.x (${raw.version})`);
1458
- if (configPath === null) configPath = globalConfig;
1459
- }
1460
- } catch {
1461
- // ignore parse error — the 1.x detection is best-effort
1462
- }
1463
- }
1464
-
1465
- // Signal 2: .claude/rules/common/dev-preference.md with peaks progress
1466
- if (projectRoot !== null) {
1467
- const devPref = join(projectRoot, '.claude', 'rules', 'common', 'dev-preference.md');
1468
- if (existsSync(devPref)) {
1469
- try {
1470
- const body = readFileSync(devPref, 'utf8');
1471
- if (/peaks progress/i.test(body)) {
1472
- signals.push(
1473
- `${devPref} references "peaks progress" (1.x CLI surface, removed in slice #014)`
1474
- );
1475
- }
1476
- } catch {
1477
- // ignore
1478
- }
1479
- }
1480
- // Signal 3: project preferences.json missing or 1.x
1481
- const prefs = join(projectRoot, '.peaks', 'preferences.json');
1482
- if (!existsSync(prefs)) {
1483
- signals.push(`${prefs} does not exist (1.x project never migrated)`);
1484
- } else {
1485
- try {
1486
- const raw = JSON.parse(readFileSync(prefs, 'utf8'));
1487
- if (raw.schema_version !== '2.0.0') {
1488
- signals.push(
1489
- `${prefs} has schema_version ${JSON.stringify(raw.schema_version)}, expected '2.0.0'`
1490
- );
1491
- }
1492
- } catch {
1493
- signals.push(`${prefs} exists but is not valid JSON`);
1494
- }
1495
- }
1496
- }
1497
-
1498
- return {
1499
- isOneX: signals.length > 0,
1500
- signals,
1501
- projectRoot,
1502
- configPath
1503
- };
1504
- }
1505
-
1506
- /**
1507
- * Postinstall auto-upgrade — when the user just ran
1508
- * `npm i -g peaks-loop@2.0` and `cwd` is a 1.x peaks-loop
1509
- * project, this shells out to the installed `peaks`
1510
- * binary to run the umbrella `peaks upgrade --to 2.0 --auto`.
1511
- *
1512
- * Per the "minimal-user-operation" tenet, the user should
1513
- * never have to run a second command after `npm i -g`. The
1514
- * upgrade CLI (if installed) is at the resolved `peaks`
1515
- * binary path; if not, the user gets a hint to run it
1516
- * manually.
1517
- *
1518
- * The auto-upgrade is opt-out via:
1519
- * PEAKS_SKIP_AUTO_UPGRADE=1
1520
- * (so a CI box that installs 2.0 but never wants the
1521
- * project-level migration can suppress the auto-step).
1522
- */
1523
- export async function autoUpgrade1xProjectIfPresent(options = {}) {
1524
- if (process.env.PEAKS_SKIP_AUTO_UPGRADE === '1') {
1525
- return { ran: false, reason: 'PEAKS_SKIP_AUTO_UPGRADE=1' };
1526
- }
1527
- const state = detect1xProjectState(options.cwd ?? process.cwd());
1528
- if (!state.isOneX) {
1529
- return { ran: false, reason: 'no 1.x project state detected' };
1530
- }
1531
- if (state.projectRoot === null) {
1532
- return { ran: false, reason: 'cwd is not a peaks project (no .peaks/_runtime/)' };
1533
- }
1534
- // The peaks binary should be on PATH after `npm i -g`.
1535
- // We shell out via spawnSync (synchronous; the postinstall
1536
- // is already synchronous and the umbrella is fast).
1537
- try {
1538
- const result = spawnSync(
1539
- 'peaks',
1540
- ['upgrade', '--to', '2.0', '--auto', '--project', state.projectRoot],
1541
- {
1542
- encoding: 'utf8',
1543
- stdio: ['ignore', 'pipe', 'pipe'],
1544
- timeout: 120_000,
1545
- windowsHide: true
1546
- }
1547
- );
1548
- return {
1549
- ran: true,
1550
- reason: 'auto-upgrade dispatched',
1551
- signals: state.signals,
1552
- projectRoot: state.projectRoot,
1553
- exitCode: result.status,
1554
- stdout: result.stdout ?? '',
1555
- stderr: result.stderr ?? ''
1556
- };
1557
- } catch (err) {
1558
- return {
1559
- ran: true,
1560
- reason: 'auto-upgrade dispatched but failed',
1561
- signals: state.signals,
1562
- projectRoot: state.projectRoot,
1563
- error: err instanceof Error ? err.message : String(err)
1564
- };
1565
- }
1566
- }
1567
-
1568
1202
  if (
1569
1203
  process.argv[1] !== undefined &&
1570
1204
  import.meta.url === pathToFileURL(resolve(process.argv[1])).href
@@ -1622,6 +1256,7 @@ if (
1622
1256
  `Peaks output styles skipped because local files already exist: ${outputStylesResult.skipped.join(', ')}\n`
1623
1257
  );
1624
1258
  }
1259
+ reportCopyFallbacks('output styles', outputStylesResult.fallbacks);
1625
1260
 
1626
1261
  // Slice 2026-08-02 — auto-register bundled output style.
1627
1262
  //
@@ -1661,26 +1296,6 @@ if (
1661
1296
  if (userConfigResult.created) {
1662
1297
  process.stdout.write('Peaks user config created: ~/.peaks/config.json\n');
1663
1298
  }
1664
-
1665
- // 2.0 postinstall: auto-detect 1.x project state in cwd
1666
- // and dispatch the upgrade umbrella. This makes the
1667
- // user's `npm i -g peaks-loop@2.0` truly one-key.
1668
- if (process.env.PEAKS_SKIP_AUTO_UPGRADE !== '1') {
1669
- // Fire-and-forget; the upgrade is async by design so
1670
- // the npm install output isn't blocked. We print a
1671
- // one-line hint so the user knows the auto-step
1672
- // happened.
1673
- autoUpgrade1xProjectIfPresent().then((result) => {
1674
- if (result.ran) {
1675
- process.stdout.write(
1676
- `\n✓ Detected 1.x peaks-loop project at ${result.projectRoot}\n` +
1677
- ` → auto-upgraded to 2.0 (${result.signals?.length ?? 0} signals resolved)\n` +
1678
- ` Run \`peaks audit red-lines --project .\` to verify.\n`
1679
- );
1680
- }
1681
- // When !result.ran we say nothing — silent on success.
1682
- });
1683
- }
1684
1299
  if (userConfigResult.updated) {
1685
1300
  process.stdout.write('Peaks user config updated: ~/.peaks/config.json\n');
1686
1301
  }