peaks-loop 3.1.2 → 4.0.0-beta

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 (301) hide show
  1. package/.claude-plugin/marketplace.json +62 -12
  2. package/CHANGELOG.md +50 -36
  3. package/README-en.md +58 -240
  4. package/README.md +49 -325
  5. package/agents/karpathy-reviewer.md +3 -3
  6. package/dist/src/cli/cli-helpers.d.ts +18 -0
  7. package/dist/src/cli/cli-helpers.js +8 -0
  8. package/dist/src/cli/commands/adapter-commands.d.ts +30 -0
  9. package/dist/src/cli/commands/adapter-commands.js +35 -0
  10. package/dist/src/cli/commands/context-commands.d.ts +1 -1
  11. package/dist/src/cli/commands/context-commands.js +1 -1
  12. package/dist/src/cli/commands/contract-commands.d.ts +1 -1
  13. package/dist/src/cli/commands/contract-commands.js +1 -1
  14. package/dist/src/cli/commands/core/session-command.js +12 -0
  15. package/dist/src/cli/commands/core/skill-command.js +4 -4
  16. package/dist/src/cli/commands/dispatch-commands.js +2 -2
  17. package/dist/src/cli/commands/job-commands.js +5 -5
  18. package/dist/src/cli/commands/observability-commands.js +1 -1
  19. package/dist/src/cli/commands/perf-audit-commands.js +2 -2
  20. package/dist/src/cli/commands/security-audit-commands.js +2 -2
  21. package/dist/src/cli/commands/sediment-commands.d.ts +80 -0
  22. package/dist/src/cli/commands/sediment-commands.js +640 -0
  23. package/dist/src/cli/commands/session-migrate-skill-name.d.ts +17 -0
  24. package/dist/src/cli/commands/session-migrate-skill-name.js +41 -0
  25. package/dist/src/cli/commands/skill-visibility.d.ts +8 -0
  26. package/dist/src/cli/commands/skill-visibility.js +63 -0
  27. package/dist/src/cli/commands/slice-commands.js +2 -2
  28. package/dist/src/cli/commands/solo-commands.d.ts +2 -2
  29. package/dist/src/cli/commands/solo-commands.js +8 -8
  30. package/dist/src/cli/commands/sub-agent-commands.d.ts +1 -1
  31. package/dist/src/cli/commands/sub-agent-commands.js +1 -1
  32. package/dist/src/cli/commands/understand-commands.js +1 -1
  33. package/dist/src/cli/commands/upgrade-commands.d.ts +1 -1
  34. package/dist/src/cli/commands/upgrade-commands.js +3 -3
  35. package/dist/src/cli/commands/user-touchpoint-commands.js +1 -1
  36. package/dist/src/cli/commands/verdict-aggregate-command.d.ts +1 -1
  37. package/dist/src/cli/commands/verdict-aggregate-command.js +2 -2
  38. package/dist/src/cli/commands/workflow-commands.js +2 -2
  39. package/dist/src/cli/commands/workspace/init-command.d.ts +3 -3
  40. package/dist/src/cli/commands/workspace/init-command.js +7 -7
  41. package/dist/src/cli/program.js +19 -2
  42. package/dist/src/services/adapter/adapter.d.ts +27 -0
  43. package/dist/src/services/adapter/adapter.js +5 -0
  44. package/dist/src/services/adapter/auto-adapter.d.ts +11 -0
  45. package/dist/src/services/adapter/auto-adapter.js +15 -0
  46. package/dist/src/services/adapter/claude-adapter.d.ts +14 -0
  47. package/dist/src/services/adapter/claude-adapter.js +40 -0
  48. package/dist/src/services/adapter/codex-adapter.d.ts +14 -0
  49. package/dist/src/services/adapter/codex-adapter.js +14 -0
  50. package/dist/src/services/adapter/copilot-adapter.d.ts +14 -0
  51. package/dist/src/services/adapter/copilot-adapter.js +14 -0
  52. package/dist/src/services/audit/enforcers/solo-code-ban.d.ts +1 -1
  53. package/dist/src/services/audit/enforcers/solo-code-ban.js +2 -2
  54. package/dist/src/services/audit/red-line-catalog.js +1 -1
  55. package/dist/src/services/audit/scanners/skills-tree-scanner.js +22 -0
  56. package/dist/src/services/context/auto-compact-dispatcher.d.ts +1 -1
  57. package/dist/src/services/dispatch/batch-counter.js +1 -1
  58. package/dist/src/services/dispatch/leak-detector.js +1 -1
  59. package/dist/src/services/doctor/doctor-service.js +2 -2
  60. package/dist/src/services/job/job-resource-snapshot.js +29 -1
  61. package/dist/src/services/memory/project-memory-service.js +1 -1
  62. package/dist/src/services/migrate-skill-name/migrate.d.ts +17 -0
  63. package/dist/src/services/migrate-skill-name/migrate.js +152 -0
  64. package/dist/src/services/migrate-skill-name/schema.d.ts +42 -0
  65. package/dist/src/services/migrate-skill-name/schema.js +25 -0
  66. package/dist/src/services/observability/aggregation.d.ts +1 -1
  67. package/dist/src/services/observability/aggregation.js +1 -1
  68. package/dist/src/services/perf/perf-baseline-service.d.ts +1 -1
  69. package/dist/src/services/perf/perf-baseline-service.js +1 -1
  70. package/dist/src/services/prd/handoff-types.d.ts +1 -1
  71. package/dist/src/services/prd/handoff-types.js +1 -1
  72. package/dist/src/services/progress/progress-service.d.ts +1 -1
  73. package/dist/src/services/progress/progress-service.js +1 -1
  74. package/dist/src/services/rd/standards-diagnostic.js +1 -1
  75. package/dist/src/services/recommendations/capability-seed-mappings.js +1 -1
  76. package/dist/src/services/sc/sc-service.js +1 -1
  77. package/dist/src/services/sediment/dispose-confirm.d.ts +9 -0
  78. package/dist/src/services/sediment/dispose-confirm.js +5 -0
  79. package/dist/src/services/sediment/json-schema.d.ts +247 -0
  80. package/dist/src/services/sediment/json-schema.js +26 -0
  81. package/dist/src/services/sediment/manifest-lint.d.ts +13 -0
  82. package/dist/src/services/sediment/manifest-lint.js +11 -0
  83. package/dist/src/services/sediment/pool-paths.d.ts +22 -0
  84. package/dist/src/services/sediment/pool-paths.js +25 -0
  85. package/dist/src/services/sediment/pool-read.d.ts +20 -0
  86. package/dist/src/services/sediment/pool-read.js +73 -0
  87. package/dist/src/services/sediment/pool-rebuild-index.d.ts +15 -0
  88. package/dist/src/services/sediment/pool-rebuild-index.js +28 -0
  89. package/dist/src/services/sediment/pool-write.d.ts +14 -0
  90. package/dist/src/services/sediment/pool-write.js +25 -0
  91. package/dist/src/services/sediment/promotion-gate.d.ts +12 -0
  92. package/dist/src/services/sediment/promotion-gate.js +20 -0
  93. package/dist/src/services/sediment/types.d.ts +52 -0
  94. package/dist/src/services/sediment/types.js +1 -0
  95. package/dist/src/services/session/binding-store.d.ts +1 -1
  96. package/dist/src/services/session/binding-store.js +1 -1
  97. package/dist/src/services/session/caller-id-types.d.ts +1 -1
  98. package/dist/src/services/session/session-manager.d.ts +1 -1
  99. package/dist/src/services/session/session-manager.js +1 -1
  100. package/dist/src/services/skill/resume-detector.js +1 -1
  101. package/dist/src/services/skill/skill-scheduler.d.ts +1 -1
  102. package/dist/src/services/skill/skill-scheduler.js +1 -1
  103. package/dist/src/services/skillhub/release-diff.d.ts +18 -0
  104. package/dist/src/services/skillhub/release-diff.js +38 -0
  105. package/dist/src/services/skillhub/release-export.d.ts +8 -0
  106. package/dist/src/services/skillhub/release-export.js +31 -0
  107. package/dist/src/services/skillhub/release-gc-blobs.d.ts +13 -0
  108. package/dist/src/services/skillhub/release-gc-blobs.js +32 -0
  109. package/dist/src/services/skillhub/release-import.d.ts +7 -0
  110. package/dist/src/services/skillhub/release-import.js +59 -0
  111. package/dist/src/services/skillhub/release-retain.d.ts +23 -0
  112. package/dist/src/services/skillhub/release-retain.js +89 -0
  113. package/dist/src/services/skillhub/sqlite-store.d.ts +22 -0
  114. package/dist/src/services/skillhub/sqlite-store.js +47 -0
  115. package/dist/src/services/skillhub/tar-runtime.d.ts +21 -0
  116. package/dist/src/services/skillhub/tar-runtime.js +91 -0
  117. package/dist/src/services/skillhub/types.d.ts +105 -0
  118. package/dist/src/services/skillhub/types.js +1 -0
  119. package/dist/src/services/skills/skill-conformance-service.js +8 -5
  120. package/dist/src/services/skills/skill-presence-service.d.ts +4 -4
  121. package/dist/src/services/skills/skill-presence-service.js +2 -2
  122. package/dist/src/services/skills/skill-registry.js +27 -0
  123. package/dist/src/services/skills/skill-runbook-service.js +2 -2
  124. package/dist/src/services/slice/slice-check-service.js +1 -1
  125. package/dist/src/services/slice/slice-check-types.d.ts +1 -1
  126. package/dist/src/services/slice/slice-check-types.js +1 -1
  127. package/dist/src/services/slice/slice-decompose-types.d.ts +1 -1
  128. package/dist/src/services/slice/slice-decompose-types.js +1 -1
  129. package/dist/src/services/solo/auto-compact-orchestrator.d.ts +1 -1
  130. package/dist/src/services/solo/auto-compact-orchestrator.js +2 -2
  131. package/dist/src/services/solo/dag-orchestrator.d.ts +3 -3
  132. package/dist/src/services/solo/dag-orchestrator.js +4 -4
  133. package/dist/src/services/solo/mode-gate.d.ts +2 -2
  134. package/dist/src/services/solo/post-compact-detector.js +2 -2
  135. package/dist/src/services/solo/status-line-renderer.d.ts +4 -4
  136. package/dist/src/services/standards/missing-standards-detector.d.ts +1 -1
  137. package/dist/src/services/standards/missing-standards-detector.js +1 -1
  138. package/dist/src/services/standards/project-standards-service.d.ts +1 -1
  139. package/dist/src/services/standards/project-standards-service.js +4 -4
  140. package/dist/src/services/understand/understand-types.d.ts +1 -1
  141. package/dist/src/services/upgrade/1x-detector-service.js +1 -1
  142. package/dist/src/services/upgrade/upgrade-service.d.ts +34 -0
  143. package/dist/src/services/upgrade/upgrade-service.js +52 -30
  144. package/dist/src/services/verdict/verdict-aggregator.d.ts +1 -1
  145. package/dist/src/services/workflow/workflow-router-service.d.ts +1 -1
  146. package/dist/src/services/workflow/workflow-router-service.js +3 -3
  147. package/dist/src/services/workspace/claude-settings-template.d.ts +1 -1
  148. package/dist/src/services/workspace/claude-settings-template.js +2 -2
  149. package/dist/src/services/workspace/workspace-claude-settings-materializer.d.ts +1 -1
  150. package/dist/src/services/workspace/workspace-claude-settings-materializer.js +1 -1
  151. package/dist/src/services/workspace/workspace-service.d.ts +4 -4
  152. package/dist/src/services/workspace/workspace-service.js +2 -2
  153. package/dist/src/shared/paths.d.ts +1 -1
  154. package/dist/src/shared/paths.js +1 -1
  155. package/dist/src/shared/version.d.ts +1 -1
  156. package/dist/src/shared/version.js +1 -1
  157. package/dist/src/skills/peaks-maker/index.d.ts +5 -0
  158. package/dist/src/skills/peaks-maker/index.js +32 -0
  159. package/package.json +8 -3
  160. package/scripts/install-skills.mjs +29 -4
  161. package/skills/{peaks-prd → bee/peaks-prd}/SKILL.md +8 -2
  162. package/skills/{peaks-prd → bee/peaks-prd}/references/workflow.md +1 -1
  163. package/skills/{peaks-qa → bee/peaks-qa}/SKILL.md +10 -4
  164. package/skills/{peaks-qa → bee/peaks-qa}/references/browser-validation-contracts.md +2 -2
  165. package/skills/{peaks-qa → bee/peaks-qa}/references/external-capability-guidance.md +1 -1
  166. package/skills/{peaks-qa → bee/peaks-qa}/references/qa-fanout-contract.md +3 -3
  167. package/skills/{peaks-qa → bee/peaks-qa}/references/qa-sub-agent-dispatch.md +1 -1
  168. package/skills/{peaks-rd → bee/peaks-rd}/SKILL.md +13 -6
  169. package/skills/{peaks-rd → bee/peaks-rd}/references/browser-self-test-contracts.md +1 -1
  170. package/skills/{peaks-rd → bee/peaks-rd}/references/mock-data-placement.md +1 -1
  171. package/skills/{peaks-rd → bee/peaks-rd}/references/parallel-review-fanout.md +1 -1
  172. package/skills/{peaks-rd → bee/peaks-rd}/references/rd-runbook.md +1 -1
  173. package/skills/{peaks-rd → bee/peaks-rd}/references/rd-sub-agent-dispatch.md +2 -2
  174. package/skills/{peaks-rd → bee/peaks-rd}/references/rd-transition-gates.md +1 -1
  175. package/skills/{peaks-rd → bee/peaks-rd}/references/skill-presence-and-title.md +1 -1
  176. package/skills/{peaks-reviewer → bee/peaks-reviewer}/SKILL.md +2 -2
  177. package/skills/{peaks-sc → bee/peaks-sc}/SKILL.md +7 -1
  178. package/skills/{peaks-txt → bee/peaks-txt}/SKILL.md +9 -3
  179. package/skills/{peaks-ui → bee/peaks-ui}/SKILL.md +11 -5
  180. package/skills/peaks-audit/SKILL.md +1 -1
  181. package/skills/{peaks-solo → peaks-code}/SKILL.md +9 -9
  182. package/skills/{peaks-solo → peaks-code}/references/a2a-artifact-mapping.md +2 -2
  183. package/skills/{peaks-solo → peaks-code}/references/anchoring-and-session-info.md +4 -4
  184. package/skills/{peaks-solo → peaks-code}/references/artifact-contracts.md +2 -2
  185. package/skills/{peaks-solo → peaks-code}/references/browser-workflow.md +1 -1
  186. package/skills/peaks-code/references/command-migration.md +3 -0
  187. package/skills/{peaks-solo → peaks-code}/references/completion-handoff.md +2 -2
  188. package/skills/{peaks-solo → peaks-code}/references/context-governance.md +2 -2
  189. package/skills/{peaks-solo → peaks-code}/references/frontend-only-mode.md +1 -1
  190. package/skills/{peaks-solo → peaks-code}/references/local-artifact-workspace.md +1 -1
  191. package/skills/{peaks-solo → peaks-code}/references/micro-cycle.md +9 -9
  192. package/skills/{peaks-solo → peaks-code}/references/mode-selection-with-stale-presence.md +12 -12
  193. package/skills/{peaks-solo → peaks-code}/references/mode-selection.md +1 -1
  194. package/skills/{peaks-solo → peaks-code}/references/openspec-workflow.md +1 -1
  195. package/skills/{peaks-solo → peaks-code}/references/project-scan-checklist.md +1 -1
  196. package/skills/{peaks-solo → peaks-code}/references/refactor-mode.md +1 -1
  197. package/skills/{peaks-solo → peaks-code}/references/resume-detection.md +1 -1
  198. package/skills/{peaks-solo → peaks-code}/references/runbook.md +5 -5
  199. package/skills/{peaks-solo → peaks-code}/references/skill-presence-and-title.md +3 -3
  200. package/skills/{peaks-solo → peaks-code}/references/standards-preflight.md +1 -1
  201. package/skills/{peaks-solo → peaks-code}/references/step-0-55-1x-detection.md +5 -5
  202. package/skills/{peaks-solo → peaks-code}/references/sub-agent-dispatch.md +10 -10
  203. package/skills/{peaks-solo → peaks-code}/references/swarm-dispatch-contract.md +7 -7
  204. package/skills/{peaks-solo → peaks-code}/references/workflow-gates-and-types.md +3 -3
  205. package/skills/peaks-doctor/SKILL.md +1 -1
  206. package/skills/peaks-doctor/references/doctor-check-catalog.md +1 -1
  207. package/skills/peaks-final-review/SKILL.md +3 -3
  208. package/skills/peaks-final-review/references/4-dimensions.md +1 -1
  209. package/skills/peaks-ide/SKILL.md +1 -1
  210. package/skills/{peaks-solo-resume → peaks-resume}/SKILL.md +14 -14
  211. package/skills/peaks-sop/SKILL.md +1 -1
  212. package/skills/{peaks-solo-status → peaks-status}/SKILL.md +13 -13
  213. package/skills/{peaks-solo-test → peaks-test}/SKILL.md +11 -11
  214. package/skills/peaks-solo/references/command-migration.md +0 -3
  215. /package/skills/{peaks-perf-audit → bee/peaks-perf-audit}/SKILL.md +0 -0
  216. /package/skills/{peaks-perf-audit → bee/peaks-perf-audit}/references/audit-protocol.md +0 -0
  217. /package/skills/{peaks-prd → bee/peaks-prd}/references/artifact-contracts.md +0 -0
  218. /package/skills/{peaks-prd → bee/peaks-prd}/references/artifact-per-request.md +0 -0
  219. /package/skills/{peaks-prd → bee/peaks-prd}/references/command-migration.md +0 -0
  220. /package/skills/{peaks-prd → bee/peaks-prd}/references/prd-for-multi-pass.md +0 -0
  221. /package/skills/{peaks-qa → bee/peaks-qa}/references/artifact-contracts.md +0 -0
  222. /package/skills/{peaks-qa → bee/peaks-qa}/references/artifact-per-request.md +0 -0
  223. /package/skills/{peaks-qa → bee/peaks-qa}/references/codegraph-regression-focus.md +0 -0
  224. /package/skills/{peaks-qa → bee/peaks-qa}/references/command-migration.md +0 -0
  225. /package/skills/{peaks-qa → bee/peaks-qa}/references/openspec-validation-gate.md +0 -0
  226. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-compact-handoff.md +0 -0
  227. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-context-governance.md +0 -0
  228. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-gstack-integration.md +0 -0
  229. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-local-artifacts.md +0 -0
  230. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-matt-pocock-integration.md +0 -0
  231. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-perf-test-plan.md +0 -0
  232. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-refactor-role.md +0 -0
  233. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-runbook.md +0 -0
  234. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-security-test-plan.md +0 -0
  235. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-skill-presence.md +0 -0
  236. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-standards-preflight.md +0 -0
  237. /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-transition-gates.md +0 -0
  238. /package/skills/{peaks-qa → bee/peaks-qa}/references/reading-handoff-frontmatter.md +0 -0
  239. /package/skills/{peaks-qa → bee/peaks-qa}/references/regression-gates.md +0 -0
  240. /package/skills/{peaks-qa → bee/peaks-qa}/references/requirement-boundary-recheck.md +0 -0
  241. /package/skills/{peaks-qa → bee/peaks-qa}/references/test-case-generation.md +0 -0
  242. /package/skills/{peaks-qa → bee/peaks-qa}/references/test-report-output.md +0 -0
  243. /package/skills/{peaks-rd → bee/peaks-rd}/references/artifact-and-standards-output.md +0 -0
  244. /package/skills/{peaks-rd → bee/peaks-rd}/references/artifact-contracts.md +0 -0
  245. /package/skills/{peaks-rd → bee/peaks-rd}/references/artifact-per-request.md +0 -0
  246. /package/skills/{peaks-rd → bee/peaks-rd}/references/browser-action-wrapper.md +0 -0
  247. /package/skills/{peaks-rd → bee/peaks-rd}/references/code-reviewer-4dim-hint.md +0 -0
  248. /package/skills/{peaks-rd → bee/peaks-rd}/references/codegraph-project-analysis.md +0 -0
  249. /package/skills/{peaks-rd → bee/peaks-rd}/references/command-migration.md +0 -0
  250. /package/skills/{peaks-rd → bee/peaks-rd}/references/compact-handoff.md +0 -0
  251. /package/skills/{peaks-rd → bee/peaks-rd}/references/external-references.md +0 -0
  252. /package/skills/{peaks-rd → bee/peaks-rd}/references/frontend-project-generation.md +0 -0
  253. /package/skills/{peaks-rd → bee/peaks-rd}/references/karpathy-reviewer-prompt.md +0 -0
  254. /package/skills/{peaks-rd → bee/peaks-rd}/references/library-version-awareness.md +0 -0
  255. /package/skills/{peaks-rd → bee/peaks-rd}/references/mandatory-perf-baseline.md +0 -0
  256. /package/skills/{peaks-rd → bee/peaks-rd}/references/matt-pocock-integration.md +0 -0
  257. /package/skills/{peaks-rd → bee/peaks-rd}/references/ocr-integration.md +0 -0
  258. /package/skills/{peaks-rd → bee/peaks-rd}/references/openspec-cli.md +0 -0
  259. /package/skills/{peaks-rd → bee/peaks-rd}/references/rd-context-governance.md +0 -0
  260. /package/skills/{peaks-rd → bee/peaks-rd}/references/rd-fanout-contracts.md +0 -0
  261. /package/skills/{peaks-rd → bee/peaks-rd}/references/rd-gstack-integration.md +0 -0
  262. /package/skills/{peaks-rd → bee/peaks-rd}/references/rd-standards-preflight.md +0 -0
  263. /package/skills/{peaks-rd → bee/peaks-rd}/references/reading-v2-slice-results.md +0 -0
  264. /package/skills/{peaks-rd → bee/peaks-rd}/references/refactor-workflow.md +0 -0
  265. /package/skills/{peaks-rd → bee/peaks-rd}/references/v2-12-fanout-collapse.md +0 -0
  266. /package/skills/{peaks-rd → bee/peaks-rd}/references/writing-handoff-frontmatter.md +0 -0
  267. /package/skills/{peaks-reviewer → bee/peaks-reviewer}/references/reviewer-prompt.md +0 -0
  268. /package/skills/{peaks-reviewer → bee/peaks-reviewer}/references/reviewer-schema.md +0 -0
  269. /package/skills/{peaks-sc → bee/peaks-sc}/references/artifact-contracts.md +0 -0
  270. /package/skills/{peaks-sc → bee/peaks-sc}/references/artifact-retention.md +0 -0
  271. /package/skills/{peaks-sc → bee/peaks-sc}/references/command-migration.md +0 -0
  272. /package/skills/{peaks-sc → bee/peaks-sc}/references/openspec-commit-boundaries.md +0 -0
  273. /package/skills/{peaks-security-audit → bee/peaks-security-audit}/SKILL.md +0 -0
  274. /package/skills/{peaks-security-audit → bee/peaks-security-audit}/references/audit-protocol.md +0 -0
  275. /package/skills/{peaks-txt → bee/peaks-txt}/references/artifact-contracts.md +0 -0
  276. /package/skills/{peaks-txt → bee/peaks-txt}/references/command-migration.md +0 -0
  277. /package/skills/{peaks-txt → bee/peaks-txt}/references/context-capsule.md +0 -0
  278. /package/skills/{peaks-ui → bee/peaks-ui}/references/artifact-contracts.md +0 -0
  279. /package/skills/{peaks-ui → bee/peaks-ui}/references/artifact-per-request.md +0 -0
  280. /package/skills/{peaks-ui → bee/peaks-ui}/references/command-migration.md +0 -0
  281. /package/skills/{peaks-ui → bee/peaks-ui}/references/workflow.md +0 -0
  282. /package/skills/{peaks-solo → peaks-code}/references/boundaries.md +0 -0
  283. /package/skills/{peaks-solo → peaks-code}/references/checkpoint-resume.md +0 -0
  284. /package/skills/{peaks-solo → peaks-code}/references/codegraph-orchestration.md +0 -0
  285. /package/skills/{peaks-solo → peaks-code}/references/cross-date-session-check.md +0 -0
  286. /package/skills/{peaks-solo → peaks-code}/references/dag-orchestrator.md +0 -0
  287. /package/skills/{peaks-solo → peaks-code}/references/envelope-contract.md +0 -0
  288. /package/skills/{peaks-solo → peaks-code}/references/existing-system-extraction.md +0 -0
  289. /package/skills/{peaks-solo → peaks-code}/references/external-references.md +0 -0
  290. /package/skills/{peaks-solo → peaks-code}/references/external-skill-invocation.md +0 -0
  291. /package/skills/{peaks-solo → peaks-code}/references/fanout-mandatory.md +0 -0
  292. /package/skills/{peaks-solo → peaks-code}/references/fast-mode.md +0 -0
  293. /package/skills/{peaks-solo → peaks-code}/references/gstack-integration.md +0 -0
  294. /package/skills/{peaks-solo → peaks-code}/references/headroom-integration.md +0 -0
  295. /package/skills/{peaks-solo → peaks-code}/references/job-loop.md +0 -0
  296. /package/skills/{peaks-solo → peaks-code}/references/periodic-checkpoint.md +0 -0
  297. /package/skills/{peaks-solo → peaks-code}/references/playwright-mcp-multi-terminal.md +0 -0
  298. /package/skills/{peaks-solo → peaks-code}/references/project-memory-loading.md +0 -0
  299. /package/skills/{peaks-solo → peaks-code}/references/quality-gate-cheatsheet.md +0 -0
  300. /package/skills/{peaks-solo → peaks-code}/references/step-0-8-gate.md +0 -0
  301. /package/skills/{peaks-solo → peaks-code}/references/workflow.md +0 -0
@@ -0,0 +1,247 @@
1
+ import { z } from "zod";
2
+ export declare const BeeManifestSchema: z.ZodEffects<z.ZodObject<{
3
+ schemaVersion: z.ZodLiteral<"peaks.bee/1">;
4
+ name: z.ZodString;
5
+ source: z.ZodEnum<["system", "user"]>;
6
+ promotion_status: z.ZodEnum<["candidate", "stable", "retired", "system-stable"]>;
7
+ description: z.ZodString;
8
+ segments: z.ZodArray<z.ZodObject<{
9
+ name: z.ZodString;
10
+ inputs: z.ZodArray<z.ZodObject<{
11
+ name: z.ZodString;
12
+ type: z.ZodEnum<["string", "number", "boolean", "json"]>;
13
+ required: z.ZodBoolean;
14
+ }, "strip", z.ZodTypeAny, {
15
+ name: string;
16
+ type: "string" | "number" | "boolean" | "json";
17
+ required: boolean;
18
+ }, {
19
+ name: string;
20
+ type: "string" | "number" | "boolean" | "json";
21
+ required: boolean;
22
+ }>, "many">;
23
+ outputs: z.ZodArray<z.ZodObject<{
24
+ name: z.ZodString;
25
+ type: z.ZodEnum<["string", "number", "boolean", "json"]>;
26
+ required: z.ZodBoolean;
27
+ }, "strip", z.ZodTypeAny, {
28
+ name: string;
29
+ type: "string" | "number" | "boolean" | "json";
30
+ required: boolean;
31
+ }, {
32
+ name: string;
33
+ type: "string" | "number" | "boolean" | "json";
34
+ required: boolean;
35
+ }>, "many">;
36
+ sideEffects: z.ZodArray<z.ZodString, "many">;
37
+ }, "strip", z.ZodTypeAny, {
38
+ name: string;
39
+ outputs: {
40
+ name: string;
41
+ type: "string" | "number" | "boolean" | "json";
42
+ required: boolean;
43
+ }[];
44
+ inputs: {
45
+ name: string;
46
+ type: "string" | "number" | "boolean" | "json";
47
+ required: boolean;
48
+ }[];
49
+ sideEffects: string[];
50
+ }, {
51
+ name: string;
52
+ outputs: {
53
+ name: string;
54
+ type: "string" | "number" | "boolean" | "json";
55
+ required: boolean;
56
+ }[];
57
+ inputs: {
58
+ name: string;
59
+ type: "string" | "number" | "boolean" | "json";
60
+ required: boolean;
61
+ }[];
62
+ sideEffects: string[];
63
+ }>, "many">;
64
+ entrypoint: z.ZodObject<{
65
+ preamble: z.ZodString;
66
+ refs: z.ZodArray<z.ZodObject<{
67
+ path: z.ZodString;
68
+ kind: z.ZodEnum<["file", "dir", "script"]>;
69
+ }, "strip", z.ZodTypeAny, {
70
+ path: string;
71
+ kind: "file" | "script" | "dir";
72
+ }, {
73
+ path: string;
74
+ kind: "file" | "script" | "dir";
75
+ }>, "many">;
76
+ }, "strip", z.ZodTypeAny, {
77
+ preamble: string;
78
+ refs: {
79
+ path: string;
80
+ kind: "file" | "script" | "dir";
81
+ }[];
82
+ }, {
83
+ preamble: string;
84
+ refs: {
85
+ path: string;
86
+ kind: "file" | "script" | "dir";
87
+ }[];
88
+ }>;
89
+ promotion: z.ZodObject<{
90
+ minCycles: z.ZodNumber;
91
+ requiresHumanApproval: z.ZodBoolean;
92
+ requiresSmokeTest: z.ZodBoolean;
93
+ retireOnMissesInRow: z.ZodOptional<z.ZodNumber>;
94
+ }, "strip", z.ZodTypeAny, {
95
+ minCycles: number;
96
+ requiresHumanApproval: boolean;
97
+ requiresSmokeTest: boolean;
98
+ retireOnMissesInRow?: number | undefined;
99
+ }, {
100
+ minCycles: number;
101
+ requiresHumanApproval: boolean;
102
+ requiresSmokeTest: boolean;
103
+ retireOnMissesInRow?: number | undefined;
104
+ }>;
105
+ createdBy: z.ZodEnum<["human", "llm"]>;
106
+ lastTouchedAt: z.ZodString;
107
+ }, "strip", z.ZodTypeAny, {
108
+ name: string;
109
+ source: "user" | "system";
110
+ description: string;
111
+ schemaVersion: "peaks.bee/1";
112
+ promotion: {
113
+ minCycles: number;
114
+ requiresHumanApproval: boolean;
115
+ requiresSmokeTest: boolean;
116
+ retireOnMissesInRow?: number | undefined;
117
+ };
118
+ segments: {
119
+ name: string;
120
+ outputs: {
121
+ name: string;
122
+ type: "string" | "number" | "boolean" | "json";
123
+ required: boolean;
124
+ }[];
125
+ inputs: {
126
+ name: string;
127
+ type: "string" | "number" | "boolean" | "json";
128
+ required: boolean;
129
+ }[];
130
+ sideEffects: string[];
131
+ }[];
132
+ promotion_status: "candidate" | "stable" | "retired" | "system-stable";
133
+ entrypoint: {
134
+ preamble: string;
135
+ refs: {
136
+ path: string;
137
+ kind: "file" | "script" | "dir";
138
+ }[];
139
+ };
140
+ createdBy: "llm" | "human";
141
+ lastTouchedAt: string;
142
+ }, {
143
+ name: string;
144
+ source: "user" | "system";
145
+ description: string;
146
+ schemaVersion: "peaks.bee/1";
147
+ promotion: {
148
+ minCycles: number;
149
+ requiresHumanApproval: boolean;
150
+ requiresSmokeTest: boolean;
151
+ retireOnMissesInRow?: number | undefined;
152
+ };
153
+ segments: {
154
+ name: string;
155
+ outputs: {
156
+ name: string;
157
+ type: "string" | "number" | "boolean" | "json";
158
+ required: boolean;
159
+ }[];
160
+ inputs: {
161
+ name: string;
162
+ type: "string" | "number" | "boolean" | "json";
163
+ required: boolean;
164
+ }[];
165
+ sideEffects: string[];
166
+ }[];
167
+ promotion_status: "candidate" | "stable" | "retired" | "system-stable";
168
+ entrypoint: {
169
+ preamble: string;
170
+ refs: {
171
+ path: string;
172
+ kind: "file" | "script" | "dir";
173
+ }[];
174
+ };
175
+ createdBy: "llm" | "human";
176
+ lastTouchedAt: string;
177
+ }>, {
178
+ name: string;
179
+ source: "user" | "system";
180
+ description: string;
181
+ schemaVersion: "peaks.bee/1";
182
+ promotion: {
183
+ minCycles: number;
184
+ requiresHumanApproval: boolean;
185
+ requiresSmokeTest: boolean;
186
+ retireOnMissesInRow?: number | undefined;
187
+ };
188
+ segments: {
189
+ name: string;
190
+ outputs: {
191
+ name: string;
192
+ type: "string" | "number" | "boolean" | "json";
193
+ required: boolean;
194
+ }[];
195
+ inputs: {
196
+ name: string;
197
+ type: "string" | "number" | "boolean" | "json";
198
+ required: boolean;
199
+ }[];
200
+ sideEffects: string[];
201
+ }[];
202
+ promotion_status: "candidate" | "stable" | "retired" | "system-stable";
203
+ entrypoint: {
204
+ preamble: string;
205
+ refs: {
206
+ path: string;
207
+ kind: "file" | "script" | "dir";
208
+ }[];
209
+ };
210
+ createdBy: "llm" | "human";
211
+ lastTouchedAt: string;
212
+ }, {
213
+ name: string;
214
+ source: "user" | "system";
215
+ description: string;
216
+ schemaVersion: "peaks.bee/1";
217
+ promotion: {
218
+ minCycles: number;
219
+ requiresHumanApproval: boolean;
220
+ requiresSmokeTest: boolean;
221
+ retireOnMissesInRow?: number | undefined;
222
+ };
223
+ segments: {
224
+ name: string;
225
+ outputs: {
226
+ name: string;
227
+ type: "string" | "number" | "boolean" | "json";
228
+ required: boolean;
229
+ }[];
230
+ inputs: {
231
+ name: string;
232
+ type: "string" | "number" | "boolean" | "json";
233
+ required: boolean;
234
+ }[];
235
+ sideEffects: string[];
236
+ }[];
237
+ promotion_status: "candidate" | "stable" | "retired" | "system-stable";
238
+ entrypoint: {
239
+ preamble: string;
240
+ refs: {
241
+ path: string;
242
+ kind: "file" | "script" | "dir";
243
+ }[];
244
+ };
245
+ createdBy: "llm" | "human";
246
+ lastTouchedAt: string;
247
+ }>;
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ export const BeeManifestSchema = z.object({
3
+ schemaVersion: z.literal("peaks.bee/1"),
4
+ name: z.string().regex(/^bee-[a-z0-9][a-z0-9-]*$|^peaks-[a-z0-9][a-z0-9-]*$/),
5
+ source: z.enum(["system", "user"]),
6
+ promotion_status: z.enum(["candidate", "stable", "retired", "system-stable"]),
7
+ description: z.string().min(1).max(200),
8
+ segments: z.array(z.object({
9
+ name: z.string(),
10
+ inputs: z.array(z.object({ name: z.string(), type: z.enum(["string", "number", "boolean", "json"]), required: z.boolean() })),
11
+ outputs: z.array(z.object({ name: z.string(), type: z.enum(["string", "number", "boolean", "json"]), required: z.boolean() })),
12
+ sideEffects: z.array(z.string()),
13
+ })),
14
+ entrypoint: z.object({
15
+ preamble: z.string(),
16
+ refs: z.array(z.object({ path: z.string(), kind: z.enum(["file", "dir", "script"]) })),
17
+ }),
18
+ promotion: z.object({
19
+ minCycles: z.number().int().nonnegative(),
20
+ requiresHumanApproval: z.boolean(),
21
+ requiresSmokeTest: z.boolean(),
22
+ retireOnMissesInRow: z.number().int().positive().optional(),
23
+ }),
24
+ createdBy: z.enum(["human", "llm"]),
25
+ lastTouchedAt: z.string().datetime(),
26
+ }).refine((m) => !(m.source === "system" && m.promotion_status !== "system-stable"), { message: "source=system must have promotion_status=system-stable" });
@@ -0,0 +1,13 @@
1
+ import type { BeeManifest } from "./types.js";
2
+ export type Finding = {
3
+ path: string;
4
+ message: string;
5
+ };
6
+ export type LintResult = {
7
+ ok: true;
8
+ } | {
9
+ ok: false;
10
+ findings: Finding[];
11
+ };
12
+ export declare function lintManifest(m: unknown): LintResult;
13
+ export declare function lintManifestStrict(m: unknown): BeeManifest;
@@ -0,0 +1,11 @@
1
+ import { BeeManifestSchema } from "./json-schema.js";
2
+ export function lintManifest(m) {
3
+ const r = BeeManifestSchema.safeParse(m);
4
+ if (r.success)
5
+ return { ok: true };
6
+ return { ok: false, findings: r.error.issues.map((i) => ({ path: i.path.join("."), message: i.message })) };
7
+ }
8
+ export function lintManifestStrict(m) {
9
+ const r = BeeManifestSchema.parse(m);
10
+ return r;
11
+ }
@@ -0,0 +1,22 @@
1
+ export declare class SYSTEM_PATH_FORBIDDEN extends Error {
2
+ constructor(p: string);
3
+ }
4
+ export interface Home {
5
+ home: string;
6
+ }
7
+ export declare const resolvePoolRoot: ({ home }: Home) => string;
8
+ export declare const resolveSystemDir: ({ home }: Home) => string;
9
+ export declare const resolveUserBeesDir: ({ home }: Home) => string;
10
+ export declare const resolveUserBeeDir: ({ home }: Home, name: string) => string;
11
+ export declare const resolveSegmentsDir: ({ home }: Home) => string;
12
+ export declare const resolveSegmentDir: ({ home }: Home, name: string) => string;
13
+ export declare const resolveStateDbPath: ({ home }: Home) => string;
14
+ export declare const resolveBlobsDir: ({ home }: Home) => string;
15
+ /**
16
+ * Normalize `..` segments via `path.resolve` before splitting, so a path like
17
+ * `/h/foo/../.system/evil` collapses to `/h/.system/evil` and its `.system`
18
+ * segment is correctly identified. Also defends against Windows-style
19
+ * traversal patterns such as `..\\.system\\evil`.
20
+ */
21
+ export declare function isSystemPath(p: string): boolean;
22
+ export declare function assertNotSystemPath(p: string): void;
@@ -0,0 +1,25 @@
1
+ import { join, resolve as pathResolve } from "node:path";
2
+ export class SYSTEM_PATH_FORBIDDEN extends Error {
3
+ constructor(p) { super(`SYSTEM_PATH_FORBIDDEN: refusing to write ${p}`); }
4
+ }
5
+ export const resolvePoolRoot = ({ home }) => join(home, ".peaks", "skills");
6
+ export const resolveSystemDir = ({ home }) => join(resolvePoolRoot({ home }), ".system");
7
+ export const resolveUserBeesDir = ({ home }) => join(resolvePoolRoot({ home }), "bees");
8
+ export const resolveUserBeeDir = ({ home }, name) => join(resolveUserBeesDir({ home }), name);
9
+ export const resolveSegmentsDir = ({ home }) => join(resolvePoolRoot({ home }), "segments");
10
+ export const resolveSegmentDir = ({ home }, name) => join(resolveSegmentsDir({ home }), name);
11
+ export const resolveStateDbPath = ({ home }) => join(resolvePoolRoot({ home }), "state.db");
12
+ export const resolveBlobsDir = ({ home }) => join(resolvePoolRoot({ home }), "blobs");
13
+ /**
14
+ * Normalize `..` segments via `path.resolve` before splitting, so a path like
15
+ * `/h/foo/../.system/evil` collapses to `/h/.system/evil` and its `.system`
16
+ * segment is correctly identified. Also defends against Windows-style
17
+ * traversal patterns such as `..\\.system\\evil`.
18
+ */
19
+ export function isSystemPath(p) {
20
+ return pathResolve(p).split(/[\\/]/).some((seg) => seg === ".system");
21
+ }
22
+ export function assertNotSystemPath(p) {
23
+ if (isSystemPath(p))
24
+ throw new SYSTEM_PATH_FORBIDDEN(p);
25
+ }
@@ -0,0 +1,20 @@
1
+ import type { IndexFile } from "./types.js";
2
+ export declare class POOL_READ_ERROR extends Error {
3
+ }
4
+ /** Pure read of the in-memory pool index (Critical #2 fix).
5
+ *
6
+ * CONTRACT: this function is a READ-ONLY computation. It MUST NOT
7
+ * write `index.json` (or any other file) as a side-effect. The
8
+ * "self-heal" property of rewriting index.json when it goes stale
9
+ * belongs to `rebuildIndexFromFs`, not here. List / search / recent /
10
+ * add-* verbs that need to mutate the on-disk cache should call
11
+ * `rebuildIndexFromFs` explicitly.
12
+ *
13
+ * Edge case: if the pool root does not yet exist, this returns an
14
+ * empty index WITHOUT creating the directory. Callers that need a
15
+ * materialized root should use `rebuildIndexFromFs` or `mkdirSync`
16
+ * themselves.
17
+ */
18
+ export declare function readPool({ home }: {
19
+ home: string;
20
+ }): IndexFile;
@@ -0,0 +1,73 @@
1
+ import { readdirSync, readFileSync, existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { resolveUserBeesDir, resolveSegmentsDir } from "./pool-paths.js";
4
+ import { lintManifest } from "./manifest-lint.js";
5
+ export class POOL_READ_ERROR extends Error {
6
+ }
7
+ function readJsonIfExists(p) {
8
+ if (!existsSync(p))
9
+ return null;
10
+ return JSON.parse(readFileSync(p, "utf-8"));
11
+ }
12
+ function readBeeDir(home, name) {
13
+ const dir = join(resolveUserBeesDir({ home }), name);
14
+ const manifestPath = join(dir, "manifest.json");
15
+ const m = readJsonIfExists(manifestPath);
16
+ if (!m)
17
+ return null;
18
+ const r = lintManifest(m);
19
+ if (!r.ok)
20
+ return null;
21
+ return {
22
+ name: m.name,
23
+ kind: "bee",
24
+ path: `bees/${name}`,
25
+ source: m.source,
26
+ promotion_status: m.promotion_status,
27
+ segments: m.segments.map((s) => s.name),
28
+ };
29
+ }
30
+ function readSegmentDir(home, name) {
31
+ const dir = join(resolveSegmentsDir({ home }), name);
32
+ if (!existsSync(dir))
33
+ return null;
34
+ return {
35
+ name, kind: "segment", path: `segments/${name}`, source: "user", promotion_status: "stable",
36
+ };
37
+ }
38
+ /** Pure read of the in-memory pool index (Critical #2 fix).
39
+ *
40
+ * CONTRACT: this function is a READ-ONLY computation. It MUST NOT
41
+ * write `index.json` (or any other file) as a side-effect. The
42
+ * "self-heal" property of rewriting index.json when it goes stale
43
+ * belongs to `rebuildIndexFromFs`, not here. List / search / recent /
44
+ * add-* verbs that need to mutate the on-disk cache should call
45
+ * `rebuildIndexFromFs` explicitly.
46
+ *
47
+ * Edge case: if the pool root does not yet exist, this returns an
48
+ * empty index WITHOUT creating the directory. Callers that need a
49
+ * materialized root should use `rebuildIndexFromFs` or `mkdirSync`
50
+ * themselves.
51
+ */
52
+ export function readPool({ home }) {
53
+ const entries = [];
54
+ const beesDir = resolveUserBeesDir({ home });
55
+ if (existsSync(beesDir)) {
56
+ for (const ent of readdirSync(beesDir, { withFileTypes: true })) {
57
+ if (!ent.isDirectory())
58
+ continue;
59
+ entries.push(...[readBeeDir(home, ent.name)].filter((e) => e !== null));
60
+ }
61
+ }
62
+ const segsDir = resolveSegmentsDir({ home });
63
+ if (existsSync(segsDir)) {
64
+ for (const ent of readdirSync(segsDir, { withFileTypes: true })) {
65
+ if (!ent.isDirectory())
66
+ continue;
67
+ entries.push(...[readSegmentDir(home, ent.name)].filter((e) => e !== null));
68
+ }
69
+ }
70
+ const idx = { schemaVersion: "peaks.pool/1", generatedAt: new Date().toISOString(), entries };
71
+ // Note: NO writeFileSync here. See Critical #2 fix.
72
+ return idx;
73
+ }
@@ -0,0 +1,15 @@
1
+ import type { IndexFile } from "./types.js";
2
+ /**
3
+ * Rebuilds index.json from on-disk manifests/segments and writes the result.
4
+ *
5
+ * After the Critical #2 fix, `readPool` is a pure read (no filesystem
6
+ * side-effects). `rebuildIndexFromFs` is the single writer of
7
+ * `index.json`: it materializes the pool root if needed, walks the
8
+ * filesystem to build the in-memory index via `readPool`, and persists
9
+ * the result. Callers that need the on-disk cache up-to-date should
10
+ * call this function (or one of the add-* / rebuild-index CLI verbs
11
+ * which call it internally).
12
+ */
13
+ export declare function rebuildIndexFromFs({ home }: {
14
+ home: string;
15
+ }): IndexFile;
@@ -0,0 +1,28 @@
1
+ import { writeFileSync, mkdirSync, existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { resolvePoolRoot } from "./pool-paths.js";
4
+ import { readPool } from "./pool-read.js";
5
+ /**
6
+ * Rebuilds index.json from on-disk manifests/segments and writes the result.
7
+ *
8
+ * After the Critical #2 fix, `readPool` is a pure read (no filesystem
9
+ * side-effects). `rebuildIndexFromFs` is the single writer of
10
+ * `index.json`: it materializes the pool root if needed, walks the
11
+ * filesystem to build the in-memory index via `readPool`, and persists
12
+ * the result. Callers that need the on-disk cache up-to-date should
13
+ * call this function (or one of the add-* / rebuild-index CLI verbs
14
+ * which call it internally).
15
+ */
16
+ export function rebuildIndexFromFs({ home }) {
17
+ const root = resolvePoolRoot({ home });
18
+ if (!existsSync(root))
19
+ mkdirSync(root, { recursive: true });
20
+ const idx = readPool({ home });
21
+ // Trailing newline: POSIX-friendly (`cat`, `git diff`, log tailers all
22
+ // expect a final \n). The Minor #14 review confirmed we keep the current
23
+ // behavior rather than drop it — both are JSON-valid but the trailing
24
+ // newline matches the convention used by every other peaks-*.json file
25
+ // in the project (manifest.json, segment.json, etc.).
26
+ writeFileSync(join(root, "index.json"), JSON.stringify(idx, null, 2) + "\n");
27
+ return idx;
28
+ }
@@ -0,0 +1,14 @@
1
+ import type { BeeManifest } from "./types.js";
2
+ /**
3
+ * Atomically writes a BeeManifest to <home>/.peaks/skills/bees/<name>/manifest.json.
4
+ *
5
+ * Defense in depth:
6
+ * - re-validates the manifest via lintManifestStrict (zod) before any FS work
7
+ * - refuses to write under any path segment equal to ".system" (soft-protection)
8
+ *
9
+ * Atomicity is achieved via write-to-tmp + renameSync so readers either see the
10
+ * old file or the fully-written new file, never a half-written one.
11
+ */
12
+ export declare function writeBeeManifest({ home }: {
13
+ home: string;
14
+ }, m: BeeManifest): void;
@@ -0,0 +1,25 @@
1
+ import { writeFileSync, mkdirSync, renameSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { assertNotSystemPath, resolveUserBeeDir } from "./pool-paths.js";
4
+ import { lintManifestStrict } from "./manifest-lint.js";
5
+ /**
6
+ * Atomically writes a BeeManifest to <home>/.peaks/skills/bees/<name>/manifest.json.
7
+ *
8
+ * Defense in depth:
9
+ * - re-validates the manifest via lintManifestStrict (zod) before any FS work
10
+ * - refuses to write under any path segment equal to ".system" (soft-protection)
11
+ *
12
+ * Atomicity is achieved via write-to-tmp + renameSync so readers either see the
13
+ * old file or the fully-written new file, never a half-written one.
14
+ */
15
+ export function writeBeeManifest({ home }, m) {
16
+ const validated = lintManifestStrict(m);
17
+ const dir = resolveUserBeeDir({ home }, validated.name);
18
+ assertNotSystemPath(dir);
19
+ mkdirSync(dir, { recursive: true });
20
+ const file = join(dir, "manifest.json");
21
+ assertNotSystemPath(file);
22
+ const tmp = file + ".tmp";
23
+ writeFileSync(tmp, JSON.stringify(validated, null, 2) + "\n");
24
+ renameSync(tmp, file);
25
+ }
@@ -0,0 +1,12 @@
1
+ import type { BeeManifest } from "./types.js";
2
+ export interface GateInputs {
3
+ humanApproved: boolean;
4
+ smokeTestPresent: boolean;
5
+ }
6
+ export interface GateResult {
7
+ ok: boolean;
8
+ failedSubconditions: string[];
9
+ }
10
+ export declare function evaluateGate({ home }: {
11
+ home: string;
12
+ }, m: BeeManifest, inputs: GateInputs): GateResult;
@@ -0,0 +1,20 @@
1
+ import { readFileSync, existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { resolveUserBeeDir } from "./pool-paths.js";
4
+ export function evaluateGate({ home }, m, inputs) {
5
+ if (m.source === "system") {
6
+ return { ok: true, failedSubconditions: [] };
7
+ }
8
+ const failed = [];
9
+ const rsPath = join(resolveUserBeeDir({ home }, m.name), "run-state.json");
10
+ const cycles = existsSync(rsPath)
11
+ ? JSON.parse(readFileSync(rsPath, "utf-8")).cycles
12
+ : 0;
13
+ if (cycles < m.promotion.minCycles)
14
+ failed.push("minCycles");
15
+ if (inputs.smokeTestPresent !== m.promotion.requiresSmokeTest)
16
+ failed.push("smokeTest");
17
+ if (m.promotion.requiresHumanApproval && !inputs.humanApproved)
18
+ failed.push("humanApproval");
19
+ return { ok: failed.length === 0, failedSubconditions: failed };
20
+ }
@@ -0,0 +1,52 @@
1
+ export type Source = "system" | "user";
2
+ export type PromotionStatus = "candidate" | "stable" | "retired" | "system-stable";
3
+ export interface Param {
4
+ name: string;
5
+ type: "string" | "number" | "boolean" | "json";
6
+ required: boolean;
7
+ }
8
+ export interface SegmentRef {
9
+ name: string;
10
+ inputs: Param[];
11
+ outputs: Param[];
12
+ sideEffects: string[];
13
+ }
14
+ export interface SkillEnvelopeRef {
15
+ path: string;
16
+ kind: "file" | "dir" | "script";
17
+ }
18
+ export interface SkillEnvelope {
19
+ preamble: string;
20
+ refs: SkillEnvelopeRef[];
21
+ }
22
+ export interface PromotionGate {
23
+ minCycles: number;
24
+ requiresHumanApproval: boolean;
25
+ requiresSmokeTest: boolean;
26
+ retireOnMissesInRow?: number;
27
+ }
28
+ export interface BeeManifest {
29
+ schemaVersion: "peaks.bee/1";
30
+ name: string;
31
+ source: Source;
32
+ promotion_status: PromotionStatus;
33
+ description: string;
34
+ segments: SegmentRef[];
35
+ entrypoint: SkillEnvelope;
36
+ promotion: PromotionGate;
37
+ createdBy: "human" | "llm";
38
+ lastTouchedAt: string;
39
+ }
40
+ export interface IndexEntry {
41
+ name: string;
42
+ kind: "bee" | "segment";
43
+ path: string;
44
+ source: Source;
45
+ promotion_status: PromotionStatus;
46
+ segments?: string[];
47
+ }
48
+ export interface IndexFile {
49
+ schemaVersion: "peaks.pool/1";
50
+ generatedAt: string;
51
+ entries: IndexEntry[];
52
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -107,7 +107,7 @@ export declare function writeBinding(projectRoot: string, binding: Binding): voi
107
107
  * This is the D2 Claude-instance-level binding primitive — a single
108
108
  * Claude instance keeps one sid across multiple peaks-* skill
109
109
  * activations; binding.instances[<sid>].roles accumulates the skill
110
- * names (peaks-solo → peaks-rd → peaks-qa in the same Claude run).
110
+ * names (peaks-code → peaks-rd → peaks-qa in the same Claude run).
111
111
  *
112
112
  * The caller is responsible for actually creating the session dir via
113
113
  * `initWorkspace` and storing per-session meta via `setSessionMeta`.
@@ -192,7 +192,7 @@ export function writeBinding(projectRoot, binding) {
192
192
  * This is the D2 Claude-instance-level binding primitive — a single
193
193
  * Claude instance keeps one sid across multiple peaks-* skill
194
194
  * activations; binding.instances[<sid>].roles accumulates the skill
195
- * names (peaks-solo → peaks-rd → peaks-qa in the same Claude run).
195
+ * names (peaks-code → peaks-rd → peaks-qa in the same Claude run).
196
196
  *
197
197
  * The caller is responsible for actually creating the session dir via
198
198
  * `initWorkspace` and storing per-session meta via `setSessionMeta`.
@@ -28,7 +28,7 @@ export interface CallerBinding {
28
28
  createdAt: string;
29
29
  /** ISO 8601 timestamp; bumped on every `peaks <cmd>` that touches the binding. */
30
30
  lastActivityAt: string;
31
- /** Last skill that touched this binding, e.g. "peaks-solo". */
31
+ /** Last skill that touched this binding, e.g. "peaks-code". */
32
32
  skill: string;
33
33
  /** Last mode, e.g. "full-auto". */
34
34
  mode: string;
@@ -120,7 +120,7 @@ export declare function getSessionId(projectRoot: string): string | null;
120
120
  * caller is operating on a user-supplied `--project` flag
121
121
  * and the binding may have been written by a CLI invocation
122
122
  * that was running from inside the project dir (the common
123
- * peaks-solo / peaks-sop scenario). Other modules depend
123
+ * peaks-code / peaks-sop scenario). Other modules depend
124
124
  * on the strict-equality semantics of `getSessionId` (the
125
125
  * "no binding" fallback path is part of their contract),
126
126
  * so this variant is opt-in.