peaks-loop 3.1.2 → 4.0.0-beta.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.
- package/.claude-plugin/marketplace.json +62 -12
- package/CHANGELOG.md +148 -116
- package/README-en.md +58 -240
- package/README.md +49 -325
- package/agents/karpathy-reviewer.md +3 -3
- package/dist/src/cli/cli-helpers.d.ts +18 -0
- package/dist/src/cli/cli-helpers.js +8 -0
- package/dist/src/cli/commands/adapter-commands.d.ts +30 -0
- package/dist/src/cli/commands/adapter-commands.js +35 -0
- package/dist/src/cli/commands/{solo-commands.d.ts → code-commands.d.ts} +25 -25
- package/dist/src/cli/commands/{solo-commands.js → code-commands.js} +82 -82
- package/dist/src/cli/commands/context-commands.d.ts +1 -1
- package/dist/src/cli/commands/context-commands.js +1 -1
- package/dist/src/cli/commands/contract-commands.d.ts +1 -1
- package/dist/src/cli/commands/contract-commands.js +1 -1
- package/dist/src/cli/commands/core/session-command.js +12 -0
- package/dist/src/cli/commands/core/skill-command.js +4 -4
- package/dist/src/cli/commands/dispatch-commands.js +2 -2
- package/dist/src/cli/commands/dispatch-from-dag.js +1 -1
- package/dist/src/cli/commands/hook-handle.js +7 -7
- package/dist/src/cli/commands/job-commands.js +7 -7
- package/dist/src/cli/commands/observability-commands.js +1 -1
- package/dist/src/cli/commands/perf-audit-commands.js +2 -2
- package/dist/src/cli/commands/security-audit-commands.js +2 -2
- package/dist/src/cli/commands/sediment-commands.d.ts +80 -0
- package/dist/src/cli/commands/sediment-commands.js +640 -0
- package/dist/src/cli/commands/session-auto-compact-hook-command.js +2 -2
- package/dist/src/cli/commands/session-migrate-skill-name.d.ts +17 -0
- package/dist/src/cli/commands/session-migrate-skill-name.js +41 -0
- package/dist/src/cli/commands/skill-visibility.d.ts +8 -0
- package/dist/src/cli/commands/skill-visibility.js +63 -0
- package/dist/src/cli/commands/slice-commands.js +2 -2
- package/dist/src/cli/commands/sub-agent-commands.d.ts +1 -1
- package/dist/src/cli/commands/sub-agent-commands.js +1 -1
- package/dist/src/cli/commands/sub-agent-shared.d.ts +1 -1
- package/dist/src/cli/commands/understand-commands.js +1 -1
- package/dist/src/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/src/cli/commands/upgrade-commands.js +3 -3
- package/dist/src/cli/commands/user-touchpoint-commands.d.ts +4 -4
- package/dist/src/cli/commands/user-touchpoint-commands.js +15 -15
- package/dist/src/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/src/cli/commands/verdict-aggregate-command.js +2 -2
- package/dist/src/cli/commands/workflow-commands.js +23 -23
- package/dist/src/cli/commands/workspace/init-command.d.ts +3 -3
- package/dist/src/cli/commands/workspace/init-command.js +7 -7
- package/dist/src/cli/program.js +24 -7
- package/dist/src/services/adapter/adapter.d.ts +27 -0
- package/dist/src/services/adapter/adapter.js +5 -0
- package/dist/src/services/adapter/auto-adapter.d.ts +11 -0
- package/dist/src/services/adapter/auto-adapter.js +15 -0
- package/dist/src/services/adapter/claude-adapter.d.ts +14 -0
- package/dist/src/services/adapter/claude-adapter.js +40 -0
- package/dist/src/services/adapter/codex-adapter.d.ts +14 -0
- package/dist/src/services/adapter/codex-adapter.js +14 -0
- package/dist/src/services/adapter/copilot-adapter.d.ts +14 -0
- package/dist/src/services/adapter/copilot-adapter.js +14 -0
- package/dist/src/services/artifacts/repair-cycle-service.js +1 -1
- package/dist/src/services/audit/enforcers/active-skill-resolver.d.ts +1 -1
- package/dist/src/services/audit/enforcers/active-skill-resolver.js +1 -1
- package/dist/src/services/audit/enforcers/{solo-code-ban.d.ts → code-ban.d.ts} +6 -6
- package/dist/src/services/audit/enforcers/{solo-code-ban.js → code-ban.js} +6 -6
- package/dist/src/services/audit/red-line-catalog.d.ts +2 -2
- package/dist/src/services/audit/red-line-catalog.js +6 -6
- package/dist/src/services/audit/scanners/skills-tree-scanner.js +22 -0
- package/dist/src/services/audit/types.d.ts +2 -2
- package/dist/src/services/{solo → code}/auto-compact-orchestrator.d.ts +2 -2
- package/dist/src/services/{solo → code}/auto-compact-orchestrator.js +5 -5
- package/dist/src/services/{solo → code}/dag-orchestrator.d.ts +4 -4
- package/dist/src/services/{solo → code}/dag-orchestrator.js +5 -5
- package/dist/src/services/{solo → code}/emit-handoff.d.ts +1 -1
- package/dist/src/services/{solo → code}/emit-handoff.js +1 -1
- package/dist/src/services/{solo → code}/job-shape-decision.d.ts +1 -1
- package/dist/src/services/{solo → code}/job-shape-decision.js +5 -5
- package/dist/src/services/{solo → code}/mode-gate.d.ts +11 -11
- package/dist/src/services/{solo → code}/mode-gate.js +5 -5
- package/dist/src/services/{solo → code}/post-compact-detector.d.ts +3 -3
- package/dist/src/services/{solo → code}/post-compact-detector.js +6 -6
- package/dist/src/services/{solo → code}/status-line-renderer.d.ts +4 -4
- package/dist/src/services/{solo → code}/step-08-gate.d.ts +4 -4
- package/dist/src/services/{solo → code}/step-08-gate.js +4 -4
- package/dist/src/services/{solo → code}/user-touchpoint-classifier.d.ts +1 -1
- package/dist/src/services/{solo → code}/user-touchpoint-classifier.js +1 -1
- package/dist/src/services/context/auto-compact-dispatcher.d.ts +3 -3
- package/dist/src/services/context/auto-compact-dispatcher.js +2 -2
- package/dist/src/services/context/auto-compact-types.d.ts +1 -1
- package/dist/src/services/dispatch/batch-counter.js +1 -1
- package/dist/src/services/dispatch/leak-detector.js +1 -1
- package/dist/src/services/dispatch/slice-dag.d.ts +2 -2
- package/dist/src/services/dispatch/test-tool-detection.d.ts +1 -1
- package/dist/src/services/dispatch/test-tool-detection.js +1 -1
- package/dist/src/services/doctor/doctor-service.js +2 -2
- package/dist/src/services/feedback/feedback-promotion-service.js +2 -2
- package/dist/src/services/job/job-progress-store.d.ts +1 -1
- package/dist/src/services/job/job-progress-store.js +1 -1
- package/dist/src/services/job/job-resource-snapshot.js +29 -1
- package/dist/src/services/memory/project-memory-service.js +1 -1
- package/dist/src/services/migrate-skill-name/migrate.d.ts +17 -0
- package/dist/src/services/migrate-skill-name/migrate.js +152 -0
- package/dist/src/services/migrate-skill-name/schema.d.ts +42 -0
- package/dist/src/services/migrate-skill-name/schema.js +25 -0
- package/dist/src/services/observability/aggregation.d.ts +1 -1
- package/dist/src/services/observability/aggregation.js +1 -1
- package/dist/src/services/perf/perf-baseline-service.d.ts +1 -1
- package/dist/src/services/perf/perf-baseline-service.js +1 -1
- package/dist/src/services/prd/handoff-types.d.ts +1 -1
- package/dist/src/services/prd/handoff-types.js +1 -1
- package/dist/src/services/preferences/preferences-service.d.ts +1 -1
- package/dist/src/services/preferences/preferences-types.d.ts +1 -1
- package/dist/src/services/progress/progress-service.d.ts +1 -1
- package/dist/src/services/progress/progress-service.js +1 -1
- package/dist/src/services/rd/standards-diagnostic.d.ts +1 -1
- package/dist/src/services/rd/standards-diagnostic.js +3 -3
- package/dist/src/services/recommendations/capability-seed-items.js +1 -1
- package/dist/src/services/recommendations/capability-seed-mappings.js +1 -1
- package/dist/src/services/recommendations/recommendation-service.js +1 -1
- package/dist/src/services/refactor/refactor-service.d.ts +1 -1
- package/dist/src/services/sc/sc-service.js +1 -1
- package/dist/src/services/sediment/dispose-confirm.d.ts +9 -0
- package/dist/src/services/sediment/dispose-confirm.js +5 -0
- package/dist/src/services/sediment/json-schema.d.ts +247 -0
- package/dist/src/services/sediment/json-schema.js +26 -0
- package/dist/src/services/sediment/manifest-lint.d.ts +13 -0
- package/dist/src/services/sediment/manifest-lint.js +11 -0
- package/dist/src/services/sediment/pool-paths.d.ts +22 -0
- package/dist/src/services/sediment/pool-paths.js +25 -0
- package/dist/src/services/sediment/pool-read.d.ts +20 -0
- package/dist/src/services/sediment/pool-read.js +73 -0
- package/dist/src/services/sediment/pool-rebuild-index.d.ts +15 -0
- package/dist/src/services/sediment/pool-rebuild-index.js +28 -0
- package/dist/src/services/sediment/pool-write.d.ts +14 -0
- package/dist/src/services/sediment/pool-write.js +25 -0
- package/dist/src/services/sediment/promotion-gate.d.ts +12 -0
- package/dist/src/services/sediment/promotion-gate.js +20 -0
- package/dist/src/services/sediment/types.d.ts +52 -0
- package/dist/src/services/sediment/types.js +1 -0
- package/dist/src/services/session/binding-store.d.ts +1 -1
- package/dist/src/services/session/binding-store.js +1 -1
- package/dist/src/services/session/caller-id-types.d.ts +1 -1
- package/dist/src/services/session/session-manager.d.ts +1 -1
- package/dist/src/services/session/session-manager.js +1 -1
- package/dist/src/services/signal/cancel-handler.js +3 -3
- package/dist/src/services/skill/resume-detector.js +2 -2
- package/dist/src/services/skill/skill-scheduler.d.ts +1 -1
- package/dist/src/services/skill/skill-scheduler.js +1 -1
- package/dist/src/services/skillhub/release-diff.d.ts +18 -0
- package/dist/src/services/skillhub/release-diff.js +38 -0
- package/dist/src/services/skillhub/release-export.d.ts +8 -0
- package/dist/src/services/skillhub/release-export.js +31 -0
- package/dist/src/services/skillhub/release-gc-blobs.d.ts +13 -0
- package/dist/src/services/skillhub/release-gc-blobs.js +32 -0
- package/dist/src/services/skillhub/release-import.d.ts +7 -0
- package/dist/src/services/skillhub/release-import.js +59 -0
- package/dist/src/services/skillhub/release-retain.d.ts +23 -0
- package/dist/src/services/skillhub/release-retain.js +89 -0
- package/dist/src/services/skillhub/sqlite-store.d.ts +22 -0
- package/dist/src/services/skillhub/sqlite-store.js +47 -0
- package/dist/src/services/skillhub/tar-runtime.d.ts +21 -0
- package/dist/src/services/skillhub/tar-runtime.js +91 -0
- package/dist/src/services/skillhub/types.d.ts +105 -0
- package/dist/src/services/skillhub/types.js +1 -0
- package/dist/src/services/skills/skill-conformance-service.js +8 -5
- package/dist/src/services/skills/skill-presence-service.d.ts +5 -5
- package/dist/src/services/skills/skill-presence-service.js +2 -2
- package/dist/src/services/skills/skill-registry.js +27 -0
- package/dist/src/services/skills/skill-runbook-service.js +2 -2
- package/dist/src/services/slice/slice-check-service.js +1 -1
- package/dist/src/services/slice/slice-check-types.d.ts +1 -1
- package/dist/src/services/slice/slice-check-types.js +1 -1
- package/dist/src/services/slice/slice-decompose-types.d.ts +1 -1
- package/dist/src/services/slice/slice-decompose-types.js +1 -1
- package/dist/src/services/standards/missing-standards-detector.d.ts +1 -1
- package/dist/src/services/standards/missing-standards-detector.js +1 -1
- package/dist/src/services/standards/project-standards-service.d.ts +1 -1
- package/dist/src/services/standards/project-standards-service.js +4 -4
- package/dist/src/services/understand/understand-types.d.ts +1 -1
- package/dist/src/services/upgrade/1x-detector-service.js +2 -2
- package/dist/src/services/upgrade/upgrade-service.d.ts +34 -0
- package/dist/src/services/upgrade/upgrade-service.js +52 -30
- package/dist/src/services/verdict/verdict-aggregator.d.ts +1 -1
- package/dist/src/services/workflow/pipeline-verify-service.d.ts +1 -1
- package/dist/src/services/workflow/pipeline-verify-service.js +3 -3
- package/dist/src/services/workflow/workflow-autonomous-service.d.ts +3 -3
- package/dist/src/services/workflow/workflow-autonomous-service.js +2 -2
- package/dist/src/services/workflow/workflow-router-service.d.ts +7 -7
- package/dist/src/services/workflow/workflow-router-service.js +33 -33
- package/dist/src/services/workspace/claude-settings-template.d.ts +2 -2
- package/dist/src/services/workspace/claude-settings-template.js +7 -7
- package/dist/src/services/workspace/workspace-claude-settings-materializer.d.ts +1 -1
- package/dist/src/services/workspace/workspace-claude-settings-materializer.js +1 -1
- package/dist/src/services/workspace/workspace-service.d.ts +4 -4
- package/dist/src/services/workspace/workspace-service.js +2 -2
- package/dist/src/shared/paths.d.ts +1 -1
- package/dist/src/shared/paths.js +1 -1
- package/dist/src/shared/version.d.ts +1 -1
- package/dist/src/shared/version.js +1 -1
- package/dist/src/skills/peaks-maker/index.d.ts +5 -0
- package/dist/src/skills/peaks-maker/index.js +32 -0
- package/output-styles/peaks-skill-swarm.md +3 -3
- package/package.json +8 -3
- package/scripts/install-skills.mjs +29 -4
- package/skills/{peaks-prd → bee/peaks-prd}/SKILL.md +8 -2
- package/skills/{peaks-prd → bee/peaks-prd}/references/workflow.md +1 -1
- package/skills/{peaks-qa → bee/peaks-qa}/SKILL.md +10 -4
- package/skills/{peaks-qa → bee/peaks-qa}/references/artifact-per-request.md +3 -3
- package/skills/{peaks-qa → bee/peaks-qa}/references/browser-validation-contracts.md +2 -2
- package/skills/{peaks-qa → bee/peaks-qa}/references/external-capability-guidance.md +1 -1
- package/skills/{peaks-qa → bee/peaks-qa}/references/qa-fanout-contract.md +3 -3
- package/skills/{peaks-qa → bee/peaks-qa}/references/qa-sub-agent-dispatch.md +7 -7
- package/skills/{peaks-rd → bee/peaks-rd}/SKILL.md +13 -6
- package/skills/{peaks-rd → bee/peaks-rd}/references/browser-self-test-contracts.md +1 -1
- package/skills/{peaks-rd → bee/peaks-rd}/references/mock-data-placement.md +1 -1
- package/skills/{peaks-rd → bee/peaks-rd}/references/parallel-review-fanout.md +1 -1
- package/skills/{peaks-rd → bee/peaks-rd}/references/rd-fanout-contracts.md +1 -1
- package/skills/{peaks-rd → bee/peaks-rd}/references/rd-runbook.md +2 -2
- package/skills/{peaks-rd → bee/peaks-rd}/references/rd-sub-agent-dispatch.md +13 -13
- package/skills/{peaks-rd → bee/peaks-rd}/references/rd-transition-gates.md +2 -2
- package/skills/{peaks-rd → bee/peaks-rd}/references/skill-presence-and-title.md +1 -1
- package/skills/{peaks-reviewer → bee/peaks-reviewer}/SKILL.md +2 -2
- package/skills/{peaks-sc → bee/peaks-sc}/SKILL.md +8 -2
- package/skills/{peaks-txt → bee/peaks-txt}/SKILL.md +11 -5
- package/skills/{peaks-ui → bee/peaks-ui}/SKILL.md +19 -13
- package/skills/peaks-audit/SKILL.md +1 -1
- package/skills/{peaks-solo → peaks-code}/SKILL.md +29 -29
- package/skills/{peaks-solo → peaks-code}/references/a2a-artifact-mapping.md +2 -2
- package/skills/{peaks-solo → peaks-code}/references/anchoring-and-session-info.md +6 -6
- package/skills/{peaks-solo → peaks-code}/references/artifact-contracts.md +3 -3
- package/skills/{peaks-solo → peaks-code}/references/boundaries.md +3 -3
- package/skills/{peaks-solo → peaks-code}/references/browser-workflow.md +1 -1
- package/skills/{peaks-solo → peaks-code}/references/codegraph-orchestration.md +1 -1
- package/skills/peaks-code/references/command-migration.md +3 -0
- package/skills/{peaks-solo → peaks-code}/references/completion-handoff.md +2 -2
- package/skills/{peaks-solo → peaks-code}/references/context-governance.md +2 -2
- package/skills/{peaks-solo → peaks-code}/references/dag-orchestrator.md +7 -7
- package/skills/{peaks-solo → peaks-code}/references/external-references.md +2 -2
- package/skills/{peaks-solo → peaks-code}/references/fanout-mandatory.md +3 -3
- package/skills/{peaks-solo → peaks-code}/references/fast-mode.md +2 -2
- package/skills/{peaks-solo → peaks-code}/references/frontend-only-mode.md +10 -10
- package/skills/{peaks-solo → peaks-code}/references/job-loop.md +1 -1
- package/skills/{peaks-solo → peaks-code}/references/local-artifact-workspace.md +3 -3
- package/skills/{peaks-solo → peaks-code}/references/micro-cycle.md +23 -23
- package/skills/{peaks-solo → peaks-code}/references/mode-selection-with-stale-presence.md +16 -16
- package/skills/{peaks-solo → peaks-code}/references/mode-selection.md +4 -4
- package/skills/{peaks-solo → peaks-code}/references/openspec-workflow.md +17 -17
- package/skills/{peaks-solo → peaks-code}/references/periodic-checkpoint.md +4 -4
- package/skills/{peaks-solo → peaks-code}/references/project-scan-checklist.md +1 -1
- package/skills/{peaks-solo → peaks-code}/references/quality-gate-cheatsheet.md +1 -1
- package/skills/{peaks-solo → peaks-code}/references/refactor-mode.md +2 -2
- package/skills/{peaks-solo → peaks-code}/references/resume-detection.md +1 -1
- package/skills/{peaks-solo → peaks-code}/references/runbook.md +20 -20
- package/skills/{peaks-solo → peaks-code}/references/skill-presence-and-title.md +3 -3
- package/skills/{peaks-solo → peaks-code}/references/standards-preflight.md +1 -1
- package/skills/{peaks-solo → peaks-code}/references/step-0-55-1x-detection.md +6 -6
- package/skills/{peaks-solo → peaks-code}/references/step-0-8-gate.md +11 -11
- package/skills/{peaks-solo → peaks-code}/references/sub-agent-dispatch.md +17 -17
- package/skills/{peaks-solo → peaks-code}/references/swarm-dispatch-contract.md +22 -22
- package/skills/{peaks-solo → peaks-code}/references/workflow-gates-and-types.md +4 -4
- package/skills/{peaks-solo → peaks-code}/references/workflow.md +5 -5
- package/skills/peaks-doctor/SKILL.md +1 -1
- package/skills/peaks-doctor/references/doctor-check-catalog.md +1 -1
- package/skills/peaks-final-review/SKILL.md +3 -3
- package/skills/peaks-final-review/references/4-dimensions.md +1 -1
- package/skills/peaks-ide/SKILL.md +1 -1
- package/skills/{peaks-solo-resume → peaks-resume}/SKILL.md +15 -15
- package/skills/peaks-sop/SKILL.md +1 -1
- package/skills/{peaks-solo-status → peaks-status}/SKILL.md +14 -14
- package/skills/{peaks-solo-test → peaks-test}/SKILL.md +12 -12
- package/skills/peaks-solo/references/command-migration.md +0 -3
- /package/dist/src/services/{solo → code}/batch-heartbeat-poller.d.ts +0 -0
- /package/dist/src/services/{solo → code}/batch-heartbeat-poller.js +0 -0
- /package/dist/src/services/{solo → code}/status-line-renderer.js +0 -0
- /package/skills/{peaks-perf-audit → bee/peaks-perf-audit}/SKILL.md +0 -0
- /package/skills/{peaks-perf-audit → bee/peaks-perf-audit}/references/audit-protocol.md +0 -0
- /package/skills/{peaks-prd → bee/peaks-prd}/references/artifact-contracts.md +0 -0
- /package/skills/{peaks-prd → bee/peaks-prd}/references/artifact-per-request.md +0 -0
- /package/skills/{peaks-prd → bee/peaks-prd}/references/command-migration.md +0 -0
- /package/skills/{peaks-prd → bee/peaks-prd}/references/prd-for-multi-pass.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/artifact-contracts.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/codegraph-regression-focus.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/command-migration.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/openspec-validation-gate.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-compact-handoff.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-context-governance.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-gstack-integration.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-local-artifacts.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-matt-pocock-integration.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-perf-test-plan.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-refactor-role.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-runbook.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-security-test-plan.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-skill-presence.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-standards-preflight.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/qa-transition-gates.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/reading-handoff-frontmatter.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/regression-gates.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/requirement-boundary-recheck.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/test-case-generation.md +0 -0
- /package/skills/{peaks-qa → bee/peaks-qa}/references/test-report-output.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/artifact-and-standards-output.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/artifact-contracts.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/artifact-per-request.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/browser-action-wrapper.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/code-reviewer-4dim-hint.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/codegraph-project-analysis.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/command-migration.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/compact-handoff.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/external-references.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/frontend-project-generation.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/karpathy-reviewer-prompt.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/library-version-awareness.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/mandatory-perf-baseline.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/matt-pocock-integration.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/ocr-integration.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/openspec-cli.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/rd-context-governance.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/rd-gstack-integration.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/rd-standards-preflight.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/reading-v2-slice-results.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/refactor-workflow.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/v2-12-fanout-collapse.md +0 -0
- /package/skills/{peaks-rd → bee/peaks-rd}/references/writing-handoff-frontmatter.md +0 -0
- /package/skills/{peaks-reviewer → bee/peaks-reviewer}/references/reviewer-prompt.md +0 -0
- /package/skills/{peaks-reviewer → bee/peaks-reviewer}/references/reviewer-schema.md +0 -0
- /package/skills/{peaks-sc → bee/peaks-sc}/references/artifact-contracts.md +0 -0
- /package/skills/{peaks-sc → bee/peaks-sc}/references/artifact-retention.md +0 -0
- /package/skills/{peaks-sc → bee/peaks-sc}/references/command-migration.md +0 -0
- /package/skills/{peaks-sc → bee/peaks-sc}/references/openspec-commit-boundaries.md +0 -0
- /package/skills/{peaks-security-audit → bee/peaks-security-audit}/SKILL.md +0 -0
- /package/skills/{peaks-security-audit → bee/peaks-security-audit}/references/audit-protocol.md +0 -0
- /package/skills/{peaks-txt → bee/peaks-txt}/references/artifact-contracts.md +0 -0
- /package/skills/{peaks-txt → bee/peaks-txt}/references/command-migration.md +0 -0
- /package/skills/{peaks-txt → bee/peaks-txt}/references/context-capsule.md +0 -0
- /package/skills/{peaks-ui → bee/peaks-ui}/references/artifact-contracts.md +0 -0
- /package/skills/{peaks-ui → bee/peaks-ui}/references/artifact-per-request.md +0 -0
- /package/skills/{peaks-ui → bee/peaks-ui}/references/command-migration.md +0 -0
- /package/skills/{peaks-ui → bee/peaks-ui}/references/workflow.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/checkpoint-resume.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/cross-date-session-check.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/envelope-contract.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/existing-system-extraction.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/external-skill-invocation.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/gstack-integration.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/headroom-integration.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/playwright-mcp-multi-terminal.md +0 -0
- /package/skills/{peaks-solo → peaks-code}/references/project-memory-loading.md +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { migrateSkillName } from '../../services/migrate-skill-name/migrate.js';
|
|
3
|
+
import { getErrorMessage } from '../cli-helpers.js';
|
|
4
|
+
export function registerSessionMigrateSkillNameCommand(session) {
|
|
5
|
+
session
|
|
6
|
+
.command('migrate-skill-name')
|
|
7
|
+
.description('Rewrite skill-name strings under .peaks/_runtime/** (idempotent, dry-run by default). ' +
|
|
8
|
+
'Use --apply to write through. Skips .peaks/memory/** and .peaks/skills/.system/bees/.')
|
|
9
|
+
.requiredOption('--from <old>', 'old skill name (e.g. peaks-code)')
|
|
10
|
+
.requiredOption('--to <new>', 'new skill name (e.g. peaks-code)')
|
|
11
|
+
.option('--apply', 'write through (default is dry-run)', false)
|
|
12
|
+
.option('--project <path>', 'project root (defaults to current directory)', '.')
|
|
13
|
+
.option('--json', 'emit a JSON envelope to stdout', false)
|
|
14
|
+
.action((opts) => {
|
|
15
|
+
try {
|
|
16
|
+
const projectRoot = resolve(process.cwd(), opts.project ?? '.');
|
|
17
|
+
const result = migrateSkillName({
|
|
18
|
+
projectRoot,
|
|
19
|
+
from: opts.from,
|
|
20
|
+
to: opts.to,
|
|
21
|
+
apply: opts.apply === true,
|
|
22
|
+
});
|
|
23
|
+
if (opts.json === true) {
|
|
24
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
process.stdout.write(`Scanned: ${result.scannedFiles}\n` +
|
|
28
|
+
`Modified: ${result.modifiedFiles}\n` +
|
|
29
|
+
`Key-value replacements: ${result.keyValueReplacements}\n` +
|
|
30
|
+
`String replacements: ${result.stringReplacements}\n` +
|
|
31
|
+
`Skipped: ${result.skipped.length} path(s)\n` +
|
|
32
|
+
`Errors: ${result.errors.length}\n`);
|
|
33
|
+
}
|
|
34
|
+
process.exitCode = result.ok ? 0 : 1;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
process.stderr.write(getErrorMessage(error) + '\n');
|
|
38
|
+
process.exitCode = 1;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
export interface SkillVisibility {
|
|
3
|
+
name: string;
|
|
4
|
+
userInvocable: boolean;
|
|
5
|
+
visibility: 'public' | 'internal';
|
|
6
|
+
}
|
|
7
|
+
export declare function listSkillsVisibility(repoRoot: string): SkillVisibility[];
|
|
8
|
+
export declare function registerSkillVisibilityCommand(program: Command, repoRoot: string): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks skill:visibility` — Skill visibility CLI surface.
|
|
3
|
+
*
|
|
4
|
+
* Slice: Task 1 of peaks-code → peaks-code rename plan.
|
|
5
|
+
*
|
|
6
|
+
* Reads `.claude-plugin/marketplace.json`, resolves each skill entry's
|
|
7
|
+
* visibility (public / internal) from the optional `userInvocable`
|
|
8
|
+
* field, and emits either:
|
|
9
|
+
* - a TSV list (`name \t visibility`) for human use
|
|
10
|
+
* - a JSON envelope `{ ok, skills }` for programmatic use
|
|
11
|
+
*
|
|
12
|
+
* Schema contract:
|
|
13
|
+
* - internal: `userInvocable: false`
|
|
14
|
+
* - public (default): `userInvocable` omitted OR `true`
|
|
15
|
+
*
|
|
16
|
+
* The skill list lives at `plugins[0].skills` in marketplace.json;
|
|
17
|
+
* entries are objects of shape `{ name, path?, userInvocable?, description? }`.
|
|
18
|
+
* Older string-array shapes are auto-coerced (each string is treated as
|
|
19
|
+
* a public skill whose name is the basename of the path).
|
|
20
|
+
*/
|
|
21
|
+
import { readFileSync } from 'node:fs';
|
|
22
|
+
import { join, basename } from 'node:path';
|
|
23
|
+
export function listSkillsVisibility(repoRoot) {
|
|
24
|
+
const marketplacePath = join(repoRoot, '.claude-plugin', 'marketplace.json');
|
|
25
|
+
const raw = readFileSync(marketplacePath, 'utf-8');
|
|
26
|
+
const parsed = JSON.parse(raw);
|
|
27
|
+
const skills = parsed.plugins?.[0]?.skills ?? [];
|
|
28
|
+
return skills.map((entry) => {
|
|
29
|
+
if (typeof entry === 'string') {
|
|
30
|
+
return {
|
|
31
|
+
name: basename(entry),
|
|
32
|
+
userInvocable: true,
|
|
33
|
+
visibility: 'public',
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const userInvocable = entry.userInvocable !== false;
|
|
37
|
+
return {
|
|
38
|
+
name: entry.name ?? '',
|
|
39
|
+
userInvocable,
|
|
40
|
+
visibility: userInvocable ? 'public' : 'internal',
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export function registerSkillVisibilityCommand(program, repoRoot) {
|
|
45
|
+
const cmd = program
|
|
46
|
+
.command('skill:visibility')
|
|
47
|
+
.description('List skill visibility (public vs internal)')
|
|
48
|
+
.option('--list', 'List all skills')
|
|
49
|
+
.option('--name <name>', 'Query single skill')
|
|
50
|
+
.option('--json', 'JSON output');
|
|
51
|
+
cmd.action((opts) => {
|
|
52
|
+
const all = listSkillsVisibility(repoRoot);
|
|
53
|
+
const filtered = opts.name ? all.filter((s) => s.name === opts.name) : all;
|
|
54
|
+
if (opts.json) {
|
|
55
|
+
process.stdout.write(JSON.stringify({ ok: true, skills: filtered }, null, 2) + '\n');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
for (const s of filtered) {
|
|
59
|
+
process.stdout.write(`${s.name}\t${s.visibility}\n`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
@@ -26,8 +26,8 @@ export function registerSliceCommands(program, io) {
|
|
|
26
26
|
.option('--project <path>', 'target project root', '.')
|
|
27
27
|
.option('--rid <rid>', 'request id; defaults to the active current-change binding')
|
|
28
28
|
.option('--refresh-fanout', 're-run the 3-way review fan-out (peaks-rd) even if the review files already exist', false)
|
|
29
|
-
.option('--run-tests', 'opt in to the FULL test suite at the boundary (default is the changed-only suite via `vitest run --changed`); use the peaks-
|
|
30
|
-
.option('--skip-tests', 'skip the unit-test stage entirely (e.g. docs-only slices); use the peaks-
|
|
29
|
+
.option('--run-tests', 'opt in to the FULL test suite at the boundary (default is the changed-only suite via `vitest run --changed`); use the peaks-test skill to run the full suite standalone', false)
|
|
30
|
+
.option('--skip-tests', 'skip the unit-test stage entirely (e.g. docs-only slices); use the peaks-test skill to run the full suite manually if you want a separate check', false)
|
|
31
31
|
.option('--allow-pre-existing-failures', 'opt-in: if the unit-test stage fails, report it as `skipped` with a reason naming the failure count (useful when the repo has unrelated pre-existing failures; the long-term fix is to .skip or coverage.exclude those tests). Only meaningful with --run-tests or the default changed-only mode.', false)).action(async (options) => {
|
|
32
32
|
try {
|
|
33
33
|
const projectRoot = resolveCanonicalProjectRoot(options.project);
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - `sub-agent-shared.ts` — shared types, constants, helpers
|
|
14
14
|
*
|
|
15
15
|
* Skill-first / CLI-auxiliary red line (PB-4 / AC-19/20):
|
|
16
|
-
* These commands are primitives that the peaks-
|
|
16
|
+
* These commands are primitives that the peaks-code / peaks-rd /
|
|
17
17
|
* peaks-qa SKILL.md compose. Users do NOT invoke them directly.
|
|
18
18
|
*/
|
|
19
19
|
import type { Command } from 'commander';
|
|
@@ -9,7 +9,7 @@ export function registerSubAgentCommands(program, io) {
|
|
|
9
9
|
const subAgent = program
|
|
10
10
|
.command('sub-agent')
|
|
11
11
|
.description('Sub-agent dispatch primitive (skill-first / CLI-auxiliary). ' +
|
|
12
|
-
'These commands are the primitives that peaks-
|
|
12
|
+
'These commands are the primitives that peaks-code / peaks-rd / ' +
|
|
13
13
|
'peaks-qa SKILL.md compose. Users do not invoke this directly.');
|
|
14
14
|
registerDispatchCommand(subAgent, io);
|
|
15
15
|
registerHeartbeatCommand(subAgent, io);
|
|
@@ -71,7 +71,7 @@ export type AwaitOptions = {
|
|
|
71
71
|
* to keep the warm-path dispatch CLI cold-start fast (slice 9).
|
|
72
72
|
*/
|
|
73
73
|
export type SliceDagModule = typeof import('../../services/dispatch/slice-dag.js');
|
|
74
|
-
export type DagOrchestratorModule = typeof import('../../services/
|
|
74
|
+
export type DagOrchestratorModule = typeof import('../../services/code/dag-orchestrator.js');
|
|
75
75
|
export type ContractStoreModule = typeof import('../../services/dispatch/contract-store.js');
|
|
76
76
|
/**
|
|
77
77
|
* Validate a role string. Returns `null` when valid, otherwise the
|
|
@@ -77,7 +77,7 @@ export function registerUnderstandCommands(program, io) {
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
// L3.1: opt-in UX subcommand. Returns the AskUserQuestion payload that
|
|
80
|
-
// the LLM-side UX layer (peaks-
|
|
80
|
+
// the LLM-side UX layer (peaks-code / peaks-ide) should surface when
|
|
81
81
|
// uaPrompt === 'unset' and UA is absent. When uaPrompt is skip-this-session
|
|
82
82
|
// or skip-forever, returns a no-op envelope (caller does not prompt).
|
|
83
83
|
addJsonOption(understand
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* hooks-install / skill-sync / audit-verify + write-upgrade-record.
|
|
14
14
|
*
|
|
15
15
|
* The `--detect-1x` flag (added in slice 3) is a read-only
|
|
16
|
-
* probe that the peaks-
|
|
16
|
+
* probe that the peaks-code skill calls to gate the
|
|
17
17
|
* AskUserQuestion that prompts the 1.x → 2.0 upgrade. The
|
|
18
18
|
* probe returns the JSON envelope from the
|
|
19
19
|
* 1x-detector-service; it does NOT modify any files.
|
|
@@ -8,11 +8,11 @@ import { fail, ok } from '../../shared/result.js';
|
|
|
8
8
|
export function registerUpgradeCommands(program, io) {
|
|
9
9
|
addJsonOption(program
|
|
10
10
|
.command('upgrade')
|
|
11
|
-
.description('Upgrade a peaks-loop 1.x project to 2.0. Umbrella that orquestrates 7 sub-commands: config-migrate / standards-migrate / memory-extract / hooks-install / skill-sync / audit-verify + write-upgrade-record. Per the "one-key completion" tenet, prefer letting `npm i -g peaks-loop@2.0` postinstall run this for you. Use `--detect-1x` for a read-only probe (no file writes) that the peaks-
|
|
11
|
+
.description('Upgrade a peaks-loop 1.x project to 2.0. Umbrella that orquestrates 7 sub-commands: config-migrate / standards-migrate / memory-extract / hooks-install / skill-sync / audit-verify + write-upgrade-record. Per the "one-key completion" tenet, prefer letting `npm i -g peaks-loop@2.0` postinstall run this for you. Use `--detect-1x` for a read-only probe (no file writes) that the peaks-code skill uses to gate the 1.x → 2.0 AskUserQuestion.')
|
|
12
12
|
.option('--to <version>', 'target version (only "2.0" supported)', '2.0')
|
|
13
13
|
.option('--project <path>', 'project root to upgrade (default: cwd)')
|
|
14
14
|
.option('--auto', 'non-interactive: accept soft-fail on any sub-step (used by the postinstall hook)')
|
|
15
|
-
.option('--detect-1x', 'read-only probe: returns the 1.x state as JSON (no file writes); consumed by peaks-
|
|
15
|
+
.option('--detect-1x', 'read-only probe: returns the 1.x state as JSON (no file writes); consumed by peaks-code Step 0.55 to gate the AskUserQuestion')
|
|
16
16
|
.option('--apply-init', 'slice 4 (slice 2026-06-13-selfheal-claude-settings-template): run initWorkspace so the drift-driven self-heal fires on the consumer-project .claude/settings.local.json and the offline .peaks/.claude-settings-template.json. Idempotent. Use after a peaks-loop version bump if you do not otherwise re-run init. Mutually exclusive with --detect-1x.')).action(async (options) => {
|
|
17
17
|
const projectRoot = options.project ?? process.cwd();
|
|
18
18
|
// Branch 1: --detect-1x (read-only probe)
|
|
@@ -21,7 +21,7 @@ export function registerUpgradeCommands(program, io) {
|
|
|
21
21
|
const state = detect1xProjectState(projectRoot);
|
|
22
22
|
const nextActions = [];
|
|
23
23
|
if (state.isOneX) {
|
|
24
|
-
nextActions.push(`Detected 1.x state. peaks-
|
|
24
|
+
nextActions.push(`Detected 1.x state. peaks-code Step 0.55 should present an AskUserQuestion to invoke \`peaks upgrade --to 2.0 --auto --project ${state.projectRoot ?? projectRoot}\`.`);
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
27
|
nextActions.push('No 1.x state detected. Proceed with the standing 2.0 layout.');
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* v2.15.0 follow-up — G4: user touchpoint CLI.
|
|
3
3
|
*
|
|
4
|
-
* - `peaks
|
|
5
|
-
*
|
|
4
|
+
* - `peaks code gate-classify --step <step-id>` — classify a single
|
|
5
|
+
* Code gate (business / tech / mode-selection / commit-boundary /
|
|
6
6
|
* commit-floor)
|
|
7
|
-
* - `peaks
|
|
7
|
+
* - `peaks code user-touchpoints` — list all gates the
|
|
8
8
|
* user must review (vs AI auto-decides in full-auto)
|
|
9
|
-
* - `peaks
|
|
9
|
+
* - `peaks code commit-boundary-actions` — list the 5
|
|
10
10
|
* hard-floor commit actions (push / tag / publish / global
|
|
11
11
|
* install)
|
|
12
12
|
*
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* v2.15.0 follow-up — G4: user touchpoint CLI.
|
|
3
3
|
*
|
|
4
|
-
* - `peaks
|
|
5
|
-
*
|
|
4
|
+
* - `peaks code gate-classify --step <step-id>` — classify a single
|
|
5
|
+
* Code gate (business / tech / mode-selection / commit-boundary /
|
|
6
6
|
* commit-floor)
|
|
7
|
-
* - `peaks
|
|
7
|
+
* - `peaks code user-touchpoints` — list all gates the
|
|
8
8
|
* user must review (vs AI auto-decides in full-auto)
|
|
9
|
-
* - `peaks
|
|
9
|
+
* - `peaks code commit-boundary-actions` — list the 5
|
|
10
10
|
* hard-floor commit actions (push / tag / publish / global
|
|
11
11
|
* install)
|
|
12
12
|
*
|
|
13
13
|
* Surfaces the 12 Gaps positioning memory rule:
|
|
14
14
|
* "user 在循环里 = 业务/产品审阅者,不参与技术决策"
|
|
15
15
|
*/
|
|
16
|
-
import { aiAutoDecidesGates, classifyGate, COMMIT_BOUNDARY_ACTIONS_LIST, userMustReviewGates } from '../../services/
|
|
16
|
+
import { aiAutoDecidesGates, classifyGate, COMMIT_BOUNDARY_ACTIONS_LIST, userMustReviewGates } from '../../services/code/user-touchpoint-classifier.js';
|
|
17
17
|
import { fail, ok } from '../../shared/result.js';
|
|
18
18
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
19
19
|
export function registerUserTouchpointCommands(program, io) {
|
|
20
20
|
// G4 commands are registered as TOP-LEVEL commands (not sub-commands
|
|
21
|
-
// of `peaks
|
|
21
|
+
// of `peaks code`) because `peaks code` is a SKILL (consumed by the
|
|
22
22
|
// LLM in SKILL.md), not a CLI command. Top-level names: gate-classify /
|
|
23
23
|
// user-touchpoints / commit-boundary-actions.
|
|
24
24
|
//
|
|
25
|
-
// We do NOT create a new `peaks
|
|
26
|
-
// would conflict with the peaks-
|
|
25
|
+
// We do NOT create a new `peaks code` CLI command here because that
|
|
26
|
+
// would conflict with the peaks-code skill presence tracking (see
|
|
27
27
|
// `src/services/skills/skill-presence-service.ts`).
|
|
28
28
|
addJsonOption(program
|
|
29
29
|
.command('gate-classify')
|
|
30
|
-
.description('v2.15.0 follow-up G4: classify a single
|
|
30
|
+
.description('v2.15.0 follow-up G4: classify a single Code gate by its decision kind: ' +
|
|
31
31
|
'business / tech / mode-selection / commit-boundary / commit-floor. ' +
|
|
32
32
|
'Returns null when the step is unknown.')
|
|
33
33
|
.requiredOption('--step <step-id>', 'step id (e.g. step-1-mode-select, phase-2-prd-confirm)')).action((opts) => {
|
|
34
34
|
const c = classifyGate(opts.step);
|
|
35
35
|
if (c === null) {
|
|
36
|
-
printResult(io, fail('
|
|
37
|
-
'Run `peaks
|
|
36
|
+
printResult(io, fail('code.gate-classify', 'UNKNOWN_STEP', `unknown step "${opts.step}"`, {}, [
|
|
37
|
+
'Run `peaks code user-touchpoints` to list all known steps.'
|
|
38
38
|
]), opts.json ?? false);
|
|
39
39
|
process.exitCode = 1;
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
|
-
printResult(io, ok('
|
|
42
|
+
printResult(io, ok('code.gate-classify', { classification: c }, [], [
|
|
43
43
|
c.userShouldReview === 'always'
|
|
44
44
|
? 'User must review this gate in all modes.'
|
|
45
45
|
: c.userShouldReview === 'business-only'
|
|
@@ -49,12 +49,12 @@ export function registerUserTouchpointCommands(program, io) {
|
|
|
49
49
|
});
|
|
50
50
|
addJsonOption(program
|
|
51
51
|
.command('user-touchpoints')
|
|
52
|
-
.description('List all
|
|
52
|
+
.description('List all Code gates the user must review. The 12 Gaps positioning ' +
|
|
53
53
|
'memory: user 在循环里 = 业务/产品审阅者,不参与技术决策。 ' +
|
|
54
54
|
'These are the only gates where the user is asked to decide.')).action((opts) => {
|
|
55
55
|
const must = userMustReviewGates();
|
|
56
56
|
const auto = aiAutoDecidesGates();
|
|
57
|
-
printResult(io, ok('
|
|
57
|
+
printResult(io, ok('code.user-touchpoints', {
|
|
58
58
|
userMustReview: must,
|
|
59
59
|
aiAutoDecides: auto,
|
|
60
60
|
counts: {
|
|
@@ -71,7 +71,7 @@ export function registerUserTouchpointCommands(program, io) {
|
|
|
71
71
|
.description('List the 5 commit-boundary hard-floor actions. These are the ' +
|
|
72
72
|
'actions that PAUSE even in full-auto (v2.15.0 slice 002 AC-4 rule: ' +
|
|
73
73
|
'"full-auto 只做到 commit"). The user is always asked to confirm.')).action((opts) => {
|
|
74
|
-
printResult(io, ok('
|
|
74
|
+
printResult(io, ok('code.commit-boundary-actions', { actions: COMMIT_BOUNDARY_ACTIONS_LIST }, [], [
|
|
75
75
|
'Even in full-auto, the user must explicitly confirm these actions.'
|
|
76
76
|
]), opts.json ?? false);
|
|
77
77
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Reads the 5 envelope sources under `.peaks/_runtime/<sid>/` for a
|
|
5
5
|
* given rid, runs `aggregateVerdict()`, and prints the verdict +
|
|
6
|
-
* reasons JSON envelope. Used by peaks-
|
|
6
|
+
* reasons JSON envelope. Used by peaks-code / peaks-final-review to
|
|
7
7
|
* cross-check the slice-level verdict without booting the full
|
|
8
8
|
* 5-skill fanout.
|
|
9
9
|
*
|
|
@@ -10,10 +10,10 @@ const KARPATHY_REL = 'rd/karpathy-review.md';
|
|
|
10
10
|
const MUT_REL = 'mut/mut-report.json';
|
|
11
11
|
const QA_REL = 'qa/test-reports';
|
|
12
12
|
export function registerVerdictAggregateCommands(program, io) {
|
|
13
|
-
const verdict = program.command('verdict').description('Aggregate the 5 envelope sources feeding peaks-
|
|
13
|
+
const verdict = program.command('verdict').description('Aggregate the 5 envelope sources feeding peaks-code verdict logic');
|
|
14
14
|
addJsonOption(verdict
|
|
15
15
|
.command('aggregate')
|
|
16
|
-
.description('Aggregate 5 envelope sources (security / perf / karpathy / mut / qa) and print the verdict + reasons JSON envelope. Used by peaks-
|
|
16
|
+
.description('Aggregate 5 envelope sources (security / perf / karpathy / mut / qa) and print the verdict + reasons JSON envelope. Used by peaks-code and peaks-final-review.')
|
|
17
17
|
.requiredOption('--from-rid <rid>', 'request id, e.g. 2026-06-27-...')
|
|
18
18
|
.option('--sid <sid>', 'session id, e.g. 2026-06-27-session-...; default: project default')
|
|
19
19
|
.option('--project <path>', 'project root (default: cwd)')).action(async (options) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRdSwarmPlan } from '../../services/rd/rd-service.js';
|
|
2
2
|
import { createTechPlan, getTechStatus } from '../../services/tech/tech-service.js';
|
|
3
|
-
import { createWorkflowRouterPlan,
|
|
3
|
+
import { createWorkflowRouterPlan, isCodeMode, isWorkflowMode } from '../../services/workflow/workflow-router-service.js';
|
|
4
4
|
import { createAutonomousWorkflowPlan } from '../../services/workflow/workflow-autonomous-service.js';
|
|
5
5
|
import { writeAutonomousResumeArtifacts } from '../../services/workflow/autonomous-resume-writer.js';
|
|
6
6
|
import { createRecommendationPlan } from '../../services/recommendations/recommendation-service.js';
|
|
@@ -87,21 +87,21 @@ function validatePlanningInput(goal) {
|
|
|
87
87
|
throw new Error('Goal must be non-empty');
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
function
|
|
91
|
-
if (mode !== '
|
|
92
|
-
printResult(io, fail(command, '
|
|
90
|
+
function parseCodeMode(io, command, mode, codeMode, asJson) {
|
|
91
|
+
if (mode !== 'code' && codeMode) {
|
|
92
|
+
printResult(io, fail(command, 'CODE_MODE_REQUIRES_CODE_WORKFLOW', '--code-mode can only be used with --mode code', {}, ['Remove --code-mode or use --mode code']), asJson);
|
|
93
93
|
process.exitCode = 1;
|
|
94
94
|
return null;
|
|
95
95
|
}
|
|
96
|
-
if (mode !== '
|
|
96
|
+
if (mode !== 'code' || !codeMode) {
|
|
97
97
|
return undefined;
|
|
98
98
|
}
|
|
99
|
-
if (!
|
|
100
|
-
printResult(io, fail(command, '
|
|
99
|
+
if (!isCodeMode(codeMode)) {
|
|
100
|
+
printResult(io, fail(command, 'UNSUPPORTED_CODE_MODE', `Unsupported code mode ${codeMode}`, {}, ['Use --code-mode full-auto, guided, or rnd']), asJson);
|
|
101
101
|
process.exitCode = 1;
|
|
102
102
|
return null;
|
|
103
103
|
}
|
|
104
|
-
return
|
|
104
|
+
return codeMode;
|
|
105
105
|
}
|
|
106
106
|
function runTechPlan(io, options) {
|
|
107
107
|
if (options.dryRun === false) {
|
|
@@ -145,15 +145,15 @@ function runWorkflowRoute(io, options) {
|
|
|
145
145
|
return;
|
|
146
146
|
}
|
|
147
147
|
if (!isWorkflowMode(options.mode)) {
|
|
148
|
-
printResult(io, fail('workflow.route', 'UNSUPPORTED_WORKFLOW_MODE', `Unsupported workflow mode ${options.mode}`, {}, ['Use --mode
|
|
148
|
+
printResult(io, fail('workflow.route', 'UNSUPPORTED_WORKFLOW_MODE', `Unsupported workflow mode ${options.mode}`, {}, ['Use --mode code or --mode team']), options.json);
|
|
149
149
|
process.exitCode = 1;
|
|
150
150
|
return;
|
|
151
151
|
}
|
|
152
152
|
const maxWorkers = parseMaxWorkers(io, 'workflow.route', options.maxWorkers, options.json);
|
|
153
153
|
if (maxWorkers === null)
|
|
154
154
|
return;
|
|
155
|
-
const
|
|
156
|
-
if (
|
|
155
|
+
const codeMode = parseCodeMode(io, 'workflow.route', options.mode, options.codeMode, options.json);
|
|
156
|
+
if (codeMode === null)
|
|
157
157
|
return;
|
|
158
158
|
try {
|
|
159
159
|
validatePlanningInput(options.goal);
|
|
@@ -162,7 +162,7 @@ function runWorkflowRoute(io, options) {
|
|
|
162
162
|
sessionId: '',
|
|
163
163
|
goal: options.goal,
|
|
164
164
|
mode: options.mode,
|
|
165
|
-
...(
|
|
165
|
+
...(codeMode ? { codeMode } : {}),
|
|
166
166
|
maxWorkers,
|
|
167
167
|
dryRun: true,
|
|
168
168
|
config: readConfig(),
|
|
@@ -181,15 +181,15 @@ function runAutonomousWorkflow(io, options) {
|
|
|
181
181
|
return;
|
|
182
182
|
}
|
|
183
183
|
if (!isWorkflowMode(options.mode)) {
|
|
184
|
-
printResult(io, fail('workflow.autonomous', 'UNSUPPORTED_WORKFLOW_MODE', `Unsupported workflow mode ${options.mode}`, {}, ['Use --mode
|
|
184
|
+
printResult(io, fail('workflow.autonomous', 'UNSUPPORTED_WORKFLOW_MODE', `Unsupported workflow mode ${options.mode}`, {}, ['Use --mode code or --mode team']), options.json);
|
|
185
185
|
process.exitCode = 1;
|
|
186
186
|
return;
|
|
187
187
|
}
|
|
188
188
|
const maxWorkers = parseMaxWorkers(io, 'workflow.autonomous', options.maxWorkers, options.json);
|
|
189
189
|
if (maxWorkers === null)
|
|
190
190
|
return;
|
|
191
|
-
const
|
|
192
|
-
if (
|
|
191
|
+
const codeMode = parseCodeMode(io, 'workflow.autonomous', options.mode, options.codeMode, options.json);
|
|
192
|
+
if (codeMode === null)
|
|
193
193
|
return;
|
|
194
194
|
try {
|
|
195
195
|
validatePlanningInput(options.goal);
|
|
@@ -198,7 +198,7 @@ function runAutonomousWorkflow(io, options) {
|
|
|
198
198
|
sessionId: '',
|
|
199
199
|
goal: options.goal,
|
|
200
200
|
mode: options.mode,
|
|
201
|
-
...(
|
|
201
|
+
...(codeMode ? { codeMode } : {}),
|
|
202
202
|
maxWorkers,
|
|
203
203
|
dryRun: true,
|
|
204
204
|
config: readConfig(),
|
|
@@ -300,9 +300,9 @@ function addTechStatusOptions(command) {
|
|
|
300
300
|
function addWorkflowRouteOptions(command, description) {
|
|
301
301
|
return addJsonOption(command
|
|
302
302
|
.description(description)
|
|
303
|
-
.requiredOption('--mode <mode>', 'workflow mode:
|
|
303
|
+
.requiredOption('--mode <mode>', 'workflow mode: code or team')
|
|
304
304
|
.requiredOption('--goal <goal>', 'planning goal')
|
|
305
|
-
.option('--
|
|
305
|
+
.option('--code-mode <mode>', 'code mode: full-auto, guided, or rnd')
|
|
306
306
|
.option('--max-workers <count>', 'maximum worker count', '40')
|
|
307
307
|
.option('--dry-run', 'preview without writing files', true)
|
|
308
308
|
.option('--no-dry-run', 'unsupported: do not execute workflow planning from this CLI'));
|
|
@@ -330,7 +330,7 @@ function addAutonomousResumeInitOptions(command) {
|
|
|
330
330
|
export function registerWorkflowCommands(program, io) {
|
|
331
331
|
const refactor = program.command('refactor').description('Plan a Peaks refactor run without modifying code');
|
|
332
332
|
addJsonOption(refactor
|
|
333
|
-
.option('--
|
|
333
|
+
.option('--code', 'use peaks-code orchestration mode')
|
|
334
334
|
.option('--rd', 'use peaks-rd direct mode')
|
|
335
335
|
.option('--dry-run', 'print gates and required artifacts', true)
|
|
336
336
|
.option('--no-dry-run', 'unsupported: do not modify code from this command')).action((options) => {
|
|
@@ -338,12 +338,12 @@ export function registerWorkflowCommands(program, io) {
|
|
|
338
338
|
failUnsupportedNonDryRun(io, 'refactor', options.json);
|
|
339
339
|
return;
|
|
340
340
|
}
|
|
341
|
-
if (options.
|
|
342
|
-
printResult(io, fail('refactor', 'CONFLICTING_REFACTOR_MODE', 'Choose either --
|
|
341
|
+
if (options.code && options.rd) {
|
|
342
|
+
printResult(io, fail('refactor', 'CONFLICTING_REFACTOR_MODE', 'Choose either --code or --rd, not both', {}, ['Run peaks refactor --code --dry-run']), options.json);
|
|
343
343
|
process.exitCode = 1;
|
|
344
344
|
return;
|
|
345
345
|
}
|
|
346
|
-
const mode = options.rd ? 'rd' : '
|
|
346
|
+
const mode = options.rd ? 'rd' : 'code';
|
|
347
347
|
printResult(io, ok('refactor', createRefactorDryRun(mode), [], ['This dry run never edits code']), options.json);
|
|
348
348
|
});
|
|
349
349
|
const tech = program.command('tech').description('Plan and inspect technical dry-run gates');
|
|
@@ -410,7 +410,7 @@ export function registerWorkflowCommands(program, io) {
|
|
|
410
410
|
// because we read, not write, the binding.
|
|
411
411
|
const sessionId = getSessionId(options.project);
|
|
412
412
|
if (sessionId === null) {
|
|
413
|
-
printResult(io, fail('workflow.skip', 'NO_ACTIVE_SESSION', `project "${options.project}" has no peaks-
|
|
413
|
+
printResult(io, fail('workflow.skip', 'NO_ACTIVE_SESSION', `project "${options.project}" has no peaks-code session binding; run \`peaks workspace init --project ${options.project} --json\` first`, { applied: false }, [`peaks workspace init --project ${options.project} --json`]), options.json);
|
|
414
414
|
process.exitCode = 1;
|
|
415
415
|
return;
|
|
416
416
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `peaks workspace init` — slice 006 + 007 + 014 + 018 + 2026-06-16-peaks-
|
|
2
|
+
* `peaks workspace init` — slice 006 + 007 + 014 + 018 + 2026-06-16-peaks-code-auto-scaffold.
|
|
3
3
|
*
|
|
4
4
|
* Extracted from `src/cli/commands/workspace-commands.ts` (slice
|
|
5
5
|
* 2026-06-16-workspace-commands-split) to keep that entry file under the
|
|
@@ -45,11 +45,11 @@ export type WorkspaceInitOptions = {
|
|
|
45
45
|
* (commander `--no-` prefix) is `true`; pass `--no-claude-hooks` to
|
|
46
46
|
* set this to `false`. The wrapper reads this as `=== false` to
|
|
47
47
|
* skip the materialization. The bypass is documented in
|
|
48
|
-
* `peaks-
|
|
48
|
+
* `peaks-code/references/anchoring-and-session-info.md`.
|
|
49
49
|
*/
|
|
50
50
|
claudeHooks?: boolean;
|
|
51
51
|
/**
|
|
52
|
-
* Slice 2026-06-16-peaks-
|
|
52
|
+
* Slice 2026-06-16-peaks-code-auto-scaffold (RD#7): opt-in flag to
|
|
53
53
|
* auto-scaffold `.claude/rules/{common,<language>}/` when missing.
|
|
54
54
|
* Default `false` — the diagnostic fires but no write happens.
|
|
55
55
|
* Set to `true` (via `--init-standards`) to also run
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `peaks workspace init` — slice 006 + 007 + 014 + 018 + 2026-06-16-peaks-
|
|
2
|
+
* `peaks workspace init` — slice 006 + 007 + 014 + 018 + 2026-06-16-peaks-code-auto-scaffold.
|
|
3
3
|
*
|
|
4
4
|
* Extracted from `src/cli/commands/workspace-commands.ts` (slice
|
|
5
5
|
* 2026-06-16-workspace-commands-split) to keep that entry file under the
|
|
@@ -44,7 +44,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
44
44
|
return value;
|
|
45
45
|
})
|
|
46
46
|
.option('--no-claude-hooks', 'do NOT materialize .claude/settings.local.json (slice 2.0.1-bug3 fact-forcing bypass). Default: hooks installed so tool calls inside .peaks/** are not blocked by the [Fact-Forcing Gate].')
|
|
47
|
-
.option('--init-standards', 'slice 2026-06-16-peaks-
|
|
47
|
+
.option('--init-standards', 'slice 2026-06-16-peaks-code-auto-scaffold: when the consumer project\'s .claude/rules/ is missing or empty, auto-apply `peaks standards init --project <path> --apply` after emitting the diagnostic. Default: diagnostic only (no write).')).action(async (options) => {
|
|
48
48
|
try {
|
|
49
49
|
// Resolve the session id. Two paths:
|
|
50
50
|
// - explicit --session-id: use it as the requested binding target
|
|
@@ -110,7 +110,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
110
110
|
// `false`, so the default is "install hooks" (the bypass is
|
|
111
111
|
// on). Pass `--no-claude-hooks` to opt out.
|
|
112
112
|
noClaudeHooks: options.claudeHooks === false,
|
|
113
|
-
// Slice 2026-06-16-peaks-
|
|
113
|
+
// Slice 2026-06-16-peaks-code-auto-scaffold (RD#7): opt-in
|
|
114
114
|
// auto-apply for the missing-standards scaffold. Default false
|
|
115
115
|
// — only the diagnostic is emitted. Pass --init-standards to
|
|
116
116
|
// also run `executeProjectStandardsInit({ apply: true })`.
|
|
@@ -129,7 +129,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
129
129
|
`Re-run with --no-rotate-on-outer-mismatch to suppress this rotation.`);
|
|
130
130
|
// Slice 002 (v2.15.0) AC-1: a presence marker stamped by the
|
|
131
131
|
// OLD outer session is now stale (defect A from the PRD).
|
|
132
|
-
// peaks-
|
|
132
|
+
// peaks-code Step 1 would otherwise pick up the old `mode`
|
|
133
133
|
// field and silently lock the new session into a mode the
|
|
134
134
|
// user never explicitly chose. Clear it here so Step 1's
|
|
135
135
|
// presence:check-stale reports `reason: 'no-presence'` and
|
|
@@ -142,7 +142,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
142
142
|
});
|
|
143
143
|
if (presenceClearOutcome.cleared) {
|
|
144
144
|
nextActions.push(`Auto-cleared stale skill presence (recorded outer id "${presenceClearOutcome.recordedOuter ?? '?'}" did not match the new outer session). ` +
|
|
145
|
-
'peaks-
|
|
145
|
+
'peaks-code Step 1 will now AskUserQuestion to confirm the mode.');
|
|
146
146
|
}
|
|
147
147
|
else if (presenceClearOutcome.reason === 'recorded-by-different-outer') {
|
|
148
148
|
nextActions.push(`Kept skill presence: it was recorded by a different live outer session (id "${presenceClearOutcome.recordedOuter ?? '?'}"). ` +
|
|
@@ -227,7 +227,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
227
227
|
else if (hooksOutcome.action === 'first-decision' && hooksOutcome.decision === 'skipped') {
|
|
228
228
|
nextActions.push('Skipped peaks-managed hook install for this project. Re-run with --install-hooks=auto (or peaks hooks install) to install later.');
|
|
229
229
|
}
|
|
230
|
-
// Slice 2026-06-16-peaks-
|
|
230
|
+
// Slice 2026-06-16-peaks-code-auto-scaffold (RD#7):
|
|
231
231
|
// - When the consumer project's `.claude/rules/` is missing or
|
|
232
232
|
// empty, emit the copy-pasteable diagnostic to stderr (via
|
|
233
233
|
// the JSON envelope `warnings` array) AND surface the
|
|
@@ -246,7 +246,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
246
246
|
nextActions.push(`Run \`peaks workspace init --init-standards --project ${projectRoot}\` to auto-apply the scaffold, or \`peaks standards init --project ${projectRoot} --apply\` manually.`);
|
|
247
247
|
}
|
|
248
248
|
if (report.standardsApplied !== undefined) {
|
|
249
|
-
nextActions.push(`Auto-applied .claude/rules/${report.standardsApplied.language}/ scaffold (slice 2026-06-16-peaks-
|
|
249
|
+
nextActions.push(`Auto-applied .claude/rules/${report.standardsApplied.language}/ scaffold (slice 2026-06-16-peaks-code-auto-scaffold): ` +
|
|
250
250
|
`wrote ${report.standardsApplied.writtenFiles.length} file(s), ` +
|
|
251
251
|
`kept ${report.standardsApplied.skippedFiles.length} existing file(s).`);
|
|
252
252
|
}
|
package/dist/src/cli/program.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readdirSync, existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
|
-
import { skillsDir } from '../shared/paths.js';
|
|
4
|
+
import { skillsDir, repoRoot } from '../shared/paths.js';
|
|
5
5
|
import { CLI_VERSION } from '../shared/version.js';
|
|
6
6
|
import { registerCoreAndArtifactCommands } from './commands/core-artifact-commands.js';
|
|
7
7
|
import { registerWorkflowCommands } from './commands/workflow-commands.js';
|
|
@@ -64,7 +64,7 @@ import { registerLogCommands } from './commands/log-commands.js';
|
|
|
64
64
|
import { registerQaCommands } from './commands/qa-commands.js';
|
|
65
65
|
import { registerTestCommands } from './commands/test-commands.js';
|
|
66
66
|
import { registerPlaywrightCommands } from './commands/playwright-commands.js';
|
|
67
|
-
import {
|
|
67
|
+
import { registerCodeCommands } from './commands/code-commands.js';
|
|
68
68
|
import { registerMutCommands } from './commands/mut-commands.js';
|
|
69
69
|
import { registerFixtureCommands } from './commands/fixture-commands.js';
|
|
70
70
|
import { registerReviewerCommands } from './commands/reviewer-commands.js';
|
|
@@ -76,6 +76,12 @@ import { registerObservabilityCommands } from './commands/observability-commands
|
|
|
76
76
|
import { registerCompactCommands } from './commands/compact-command.js';
|
|
77
77
|
// Slice 2026-07-01-job-m3.1: `peaks job init|status|...` — Job orchestration CLI surface.
|
|
78
78
|
import { registerJobCommands } from './commands/job-commands.js';
|
|
79
|
+
// Slice 2026-07-04-cli-15a: `peaks skill sediment <verb>` + `peaks skill adapter <verb>`
|
|
80
|
+
// — Task 15a 4-verb subset (add-segment / add-bee / list / rebuild-index).
|
|
81
|
+
// 15b / 15c / 15d will extend sediment-commands.ts with the remaining 14 verbs.
|
|
82
|
+
import { registerSedimentCommands } from './commands/sediment-commands.js';
|
|
83
|
+
import { registerAdapterCommands } from './commands/adapter-commands.js';
|
|
84
|
+
import { registerSkillVisibilityCommand } from './commands/skill-visibility.js';
|
|
79
85
|
import { applyRetention } from '../services/log/retention.js';
|
|
80
86
|
import { writeLogEntry, maybeWriteStderr } from '../services/log/logger.js';
|
|
81
87
|
export { printResult } from './cli-helpers.js';
|
|
@@ -289,7 +295,7 @@ Run peaks (no arguments) for a quickstart. You likely want one of:
|
|
|
289
295
|
// command conflict (peaks-loop-when-adding-a-new-subcommand-check-for-existing-top-level-first).
|
|
290
296
|
// Slice #14: peaks loop * + peaks goal compose — L4 Agent Loop sub-features.
|
|
291
297
|
registerLoopCommands(program, io);
|
|
292
|
-
// Slice v3.0.0 loop-eng-native-
|
|
298
|
+
// Slice v3.0.0 loop-eng-native-code-a-b: peaks workflow run|plan|lint
|
|
293
299
|
// + peaks loop eval. Wraps the existing workflow + loop groups so the
|
|
294
300
|
// add-a-new-subcommand-check-for-existing-top-level-first rule is honoured.
|
|
295
301
|
registerWorkflowEvalCommands(program, io);
|
|
@@ -315,10 +321,10 @@ Run peaks (no arguments) for a quickstart. You likely want one of:
|
|
|
315
321
|
// Slice 2026-06-17-2.5.0-sub-fix-C: `peaks playwright start|ls|stop`
|
|
316
322
|
// (multi-terminal Playwright MCP lifecycle).
|
|
317
323
|
registerPlaywrightCommands(program, io);
|
|
318
|
-
// Slice 2 (peaks-
|
|
319
|
-
// v2.11.0 Group F (D5 + D7): also registers `peaks
|
|
320
|
-
// `peaks
|
|
321
|
-
|
|
324
|
+
// Slice 2 (peaks-code fast mode): `peaks code plan [--fast] <change-id>`
|
|
325
|
+
// v2.11.0 Group F (D5 + D7): also registers `peaks code should-pause` and
|
|
326
|
+
// `peaks code post-compact-detect` for runtime-friction probes.
|
|
327
|
+
registerCodeCommands(program, io);
|
|
322
328
|
// Plan 2 / Task 6: `peaks mut run|mutants|asserts|report` — mutation
|
|
323
329
|
// testing + assertion validity scan (spec §4.2 / §7). The
|
|
324
330
|
// production Stryker invoker is wired here; tests use the
|
|
@@ -347,5 +353,16 @@ Run peaks (no arguments) for a quickstart. You likely want one of:
|
|
|
347
353
|
// orchestration CLI surface. M3.1 wires init + status + 2 stubs;
|
|
348
354
|
// the remaining 5 subcommands land in M3.2.
|
|
349
355
|
registerJobCommands(program, io);
|
|
356
|
+
// Slice 2026-07-04-cli-15a: `peaks skill sediment <verb>` — Task 15a
|
|
357
|
+
// 4-verb subset. Dispatches to runSediment; remaining verbs land in 15b/15c/15d.
|
|
358
|
+
registerSedimentCommands(program, io);
|
|
359
|
+
// Slice 2026-07-04-cli-15a: `peaks skill adapter <verb>` — adapter list / set-active.
|
|
360
|
+
registerAdapterCommands(program, io);
|
|
361
|
+
// Slice 2026-07-05-peaks-code-to-peaks-code (Task 1): `peaks skill:visibility --list --json`
|
|
362
|
+
// — read .claude-plugin/marketplace.json and report each skill's
|
|
363
|
+
// visibility (public vs internal). Used to surface which skills are
|
|
364
|
+
// user-invocable vs LLM-only internal role skills. See
|
|
365
|
+
// src/cli/commands/skill-visibility.ts.
|
|
366
|
+
registerSkillVisibilityCommand(program, repoRoot);
|
|
350
367
|
return program;
|
|
351
368
|
}
|