peaks-loop 4.0.0-beta.9 → 4.0.3
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/CHANGELOG.md +572 -234
- package/README-en.md +67 -30
- package/README.md +67 -30
- package/agents/karpathy-reviewer.md +33 -0
- package/bin/peaks.js +0 -0
- package/dist/cli/cli-helpers.d.ts +31 -6
- package/dist/cli/cli-helpers.js +48 -25
- package/dist/cli/commands/_register.d.ts +3 -0
- package/dist/cli/commands/_register.js +139 -0
- package/dist/cli/commands/_super.d.ts +10 -0
- package/dist/cli/commands/_super.js +97 -0
- package/dist/cli/commands/adapter-commands-s2a.js +1 -1
- package/dist/cli/commands/asset-commands.js +33 -16
- package/dist/cli/commands/audit-commands.js +2 -2
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
- package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
- package/dist/cli/commands/bee-commands.js +1 -1
- package/dist/cli/commands/capability-commands.js +1 -1
- package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
- package/dist/cli/commands/changeset-commands.d.ts +13 -0
- package/dist/cli/commands/changeset-commands.js +46 -0
- package/dist/cli/commands/code-commands.d.ts +11 -1
- package/dist/cli/commands/code-commands.js +19 -699
- package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
- package/dist/cli/commands/code-job-shape-commands.js +164 -0
- package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
- package/dist/cli/commands/code-mode-gate-commands.js +223 -0
- package/dist/cli/commands/code-review-commands.js +2 -2
- package/dist/cli/commands/code-run-command.d.ts +12 -0
- package/dist/cli/commands/code-run-command.js +68 -0
- package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
- package/dist/cli/commands/code-runtime-commands.js +391 -0
- package/dist/cli/commands/codegraph-commands.js +1 -1
- package/dist/cli/commands/compact-command.js +53 -1
- package/dist/cli/commands/complexity-commands.js +1 -1
- package/dist/cli/commands/config-commands.js +4 -75
- package/dist/cli/commands/container-commands.d.ts +28 -0
- package/dist/cli/commands/container-commands.js +221 -0
- package/dist/cli/commands/context-commands.js +3 -2
- package/dist/cli/commands/core/artifacts-command.js +1 -1
- package/dist/cli/commands/core/binding-commands.js +1 -1
- package/dist/cli/commands/core/doctor-command.js +63 -3
- package/dist/cli/commands/core/memory-command.js +1 -1
- package/dist/cli/commands/core/profile-command.js +1 -1
- package/dist/cli/commands/core/proxy-command.js +1 -1
- package/dist/cli/commands/core/session-command.js +9 -7
- package/dist/cli/commands/core/skill-command.js +7 -4
- package/dist/cli/commands/core/standards-command.js +1 -1
- package/dist/cli/commands/cron-commands.d.ts +57 -0
- package/dist/cli/commands/cron-commands.js +257 -0
- package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
- package/dist/cli/commands/cron-scheduler-commands.js +284 -0
- package/dist/cli/commands/dashboard-commands.d.ts +4 -0
- package/dist/cli/commands/dashboard-commands.js +10 -0
- package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
- package/dist/cli/commands/dashboard-long-run.js +122 -0
- package/dist/cli/commands/dashboard-summary.d.ts +12 -0
- package/dist/cli/commands/dashboard-summary.js +58 -0
- package/dist/cli/commands/dispatch-commands.d.ts +0 -7
- package/dist/cli/commands/dispatch-commands.js +372 -8
- package/dist/cli/commands/dispatch-from-dag.js +4 -1
- package/dist/cli/commands/doc-commands.js +1 -1
- package/dist/cli/commands/ecc-commands.d.ts +30 -0
- package/dist/cli/commands/ecc-commands.js +119 -0
- package/dist/cli/commands/evolution-commands.js +1 -1
- package/dist/cli/commands/feedback-commands.js +1 -1
- package/dist/cli/commands/final-review-commands.js +1 -1
- package/dist/cli/commands/fixture-commands.js +1 -1
- package/dist/cli/commands/fork-commands.js +1 -1
- package/dist/cli/commands/gate-commands.js +128 -6
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
- package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
- package/dist/cli/commands/heartbeat-commands.js +76 -5
- package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
- package/dist/cli/commands/heartbeat-watch-command.js +146 -0
- package/dist/cli/commands/hook-handle.js +1 -1
- package/dist/cli/commands/hooks-commands.js +126 -10
- package/dist/cli/commands/ide-commands.js +1 -1
- package/dist/cli/commands/impact-commands.js +1 -1
- package/dist/cli/commands/job-commands.js +34 -1
- package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
- package/dist/cli/commands/lease-metrics-commands.js +231 -0
- package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
- package/dist/cli/commands/lease-stats-commands.js +107 -0
- package/dist/cli/commands/legacy-commands.js +1 -1
- package/dist/cli/commands/log-commands.js +1 -1
- package/dist/cli/commands/loop-commands.js +1 -1
- package/dist/cli/commands/loop-eval-commands.js +1 -1
- package/dist/cli/commands/memory-commands.js +1 -1
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
- package/dist/cli/commands/mut-commands.d.ts +1 -1
- package/dist/cli/commands/mut-commands.js +1 -5
- package/dist/cli/commands/observability-commands.js +1 -1
- package/dist/cli/commands/openspec-commands.js +65 -4
- package/dist/cli/commands/perf-audit-commands.js +3 -3
- package/dist/cli/commands/perf-commands.js +1 -1
- package/dist/cli/commands/polyrepo-commands.js +1 -1
- package/dist/cli/commands/prd-blocks-commands.js +1 -1
- package/dist/cli/commands/prd-commands.js +4 -2
- package/dist/cli/commands/preferences-commands.js +23 -3
- package/dist/cli/commands/project-commands.js +1 -1
- package/dist/cli/commands/qa-business-review-commands.js +1 -1
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +39 -3
- package/dist/cli/commands/release-commands.d.ts +15 -0
- package/dist/cli/commands/release-commands.js +113 -21
- package/dist/cli/commands/request-commands.js +1 -1
- package/dist/cli/commands/retrospective-commands.js +1 -1
- package/dist/cli/commands/reviewer-commands.js +1 -1
- package/dist/cli/commands/role-commands.js +1 -1
- package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
- package/dist/cli/commands/runtime-commands-helpers.js +24 -0
- package/dist/cli/commands/runtime-commands.js +1 -2
- package/dist/cli/commands/sc-commands.js +4 -2
- package/dist/cli/commands/scan-commands.js +1 -1
- package/dist/cli/commands/security-audit-commands.js +3 -3
- package/dist/cli/commands/sediment-commands.js +10 -1
- package/dist/cli/commands/session-24h-mode.d.ts +26 -0
- package/dist/cli/commands/session-24h-mode.js +196 -0
- package/dist/cli/commands/share-commands.d.ts +19 -0
- package/dist/cli/commands/share-commands.js +121 -2
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
- package/dist/cli/commands/skill-search-commands.js +4 -1
- package/dist/cli/commands/slice-commands.js +1 -1
- package/dist/cli/commands/slice-integrate-commands.js +1 -1
- package/dist/cli/commands/slice-review-commands.js +1 -1
- package/dist/cli/commands/smoke-commands.js +1 -1
- package/dist/cli/commands/sop-commands.js +1 -1
- package/dist/cli/commands/spill-demo-command.d.ts +7 -0
- package/dist/cli/commands/spill-demo-command.js +29 -0
- package/dist/cli/commands/statusline-commands.d.ts +12 -0
- package/dist/cli/commands/statusline-commands.js +79 -17
- package/dist/cli/commands/sub-agent-commands.js +2 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
- package/dist/cli/commands/sub-agent-shared.js +24 -1
- package/dist/cli/commands/swarm-commands.d.ts +13 -0
- package/dist/cli/commands/swarm-commands.js +77 -0
- package/dist/cli/commands/tech-commands.d.ts +64 -0
- package/dist/cli/commands/tech-commands.js +195 -0
- package/dist/cli/commands/understand-commands.js +1 -1
- package/dist/cli/commands/upgrade-commands.d.ts +2 -0
- package/dist/cli/commands/upgrade-commands.js +40 -5
- package/dist/cli/commands/user-touchpoint-commands.js +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +1 -1
- package/dist/cli/commands/vm-commands.d.ts +31 -0
- package/dist/cli/commands/vm-commands.js +274 -0
- package/dist/cli/commands/workflow-commands.js +24 -1
- package/dist/cli/commands/workflow-plan-commands.js +1 -1
- package/dist/cli/commands/workspace/init-command.js +1 -1
- package/dist/cli/commands/workspace/migrate-command.js +1 -1
- package/dist/cli/commands/workspace/reconcile-command.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
- package/dist/cli/commands/worktree-auth-commands.js +652 -0
- package/dist/cli/index.js +58 -13
- package/dist/cli/program.d.ts +2 -2
- package/dist/cli/program.js +86 -281
- package/dist/services/24h-mode/decider.d.ts +103 -0
- package/dist/services/24h-mode/decider.js +144 -0
- package/dist/services/24h-mode/index.d.ts +12 -0
- package/dist/services/24h-mode/index.js +12 -0
- package/dist/services/24h-mode/state.d.ts +48 -0
- package/dist/services/24h-mode/state.js +51 -0
- package/dist/services/24h-mode/store.d.ts +27 -0
- package/dist/services/24h-mode/store.js +119 -0
- package/dist/services/artifacts/artifact-prerequisites.js +1 -1
- package/dist/services/artifacts/request-artifact-service.js +1 -1
- package/dist/services/artifacts/workspace-service.js +1 -1
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
- package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
- package/dist/services/audit/static-service.d.ts +32 -25
- package/dist/services/audit/static-service.js +30 -109
- package/dist/services/audit-independent/index.d.ts +2 -0
- package/dist/services/audit-independent/index.js +2 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
- package/dist/services/changeset/changeset-check-service.d.ts +22 -0
- package/dist/services/changeset/changeset-check-service.js +47 -0
- package/dist/services/code/auto-compact-modes.d.ts +30 -0
- package/dist/services/code/auto-compact-modes.js +38 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
- package/dist/services/code/auto-compact-orchestrator.js +101 -21
- package/dist/services/code/dag-orchestrator.d.ts +30 -1
- package/dist/services/code/dag-orchestrator.js +106 -1
- package/dist/services/code/status-line-renderer.d.ts +2 -0
- package/dist/services/code/status-line-renderer.js +21 -3
- package/dist/services/code-review/ocr-service.d.ts +1 -1
- package/dist/services/code-review/ocr-service.js +6 -3
- package/dist/services/compact-history/compact-history-service.d.ts +41 -0
- package/dist/services/compact-history/compact-history-service.js +62 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
- package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
- package/dist/services/config/config-service.d.ts +1 -12
- package/dist/services/config/config-service.js +3 -72
- package/dist/services/config/config-types.d.ts +2 -4
- package/dist/services/config/config-types.js +1 -1
- package/dist/services/container/container-lease.d.ts +67 -0
- package/dist/services/container/container-lease.js +135 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
- package/dist/services/context/auto-compact-dispatcher.js +32 -102
- package/dist/services/context/auto-compact-reader.js +1 -1
- package/dist/services/context/auto-compact-types.d.ts +27 -2
- package/dist/services/context/auto-compact-types.js +8 -1
- package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
- package/dist/services/context/build-dispatch-system-prompt.js +117 -0
- package/dist/services/context/collector.d.ts +2 -2
- package/dist/services/context/context-builder.d.ts +4 -4
- package/dist/services/context/context-schema.d.ts +48 -48
- package/dist/services/context/ide-detect.d.ts +4 -0
- package/dist/services/context/ide-detect.js +24 -0
- package/dist/services/context/main-session-monitor.d.ts +1 -4
- package/dist/services/context/main-session-monitor.js +1 -24
- package/dist/services/context/memory-index-reader.d.ts +8 -0
- package/dist/services/context/memory-index-reader.js +57 -0
- package/dist/services/context/memory-lru-cache.d.ts +12 -0
- package/dist/services/context/memory-lru-cache.js +60 -0
- package/dist/services/context/memory-preflight-config.d.ts +19 -0
- package/dist/services/context/memory-preflight-config.js +25 -0
- package/dist/services/context/memory-preflight-service.d.ts +19 -0
- package/dist/services/context/memory-preflight-service.js +120 -0
- package/dist/services/context/spillover-store.d.ts +23 -0
- package/dist/services/context/spillover-store.js +155 -0
- package/dist/services/context/spillover-types.d.ts +18 -0
- package/dist/services/context/spillover-types.js +1 -0
- package/dist/services/crystallization/crystallization-service.d.ts +22 -5
- package/dist/services/crystallization/crystallization-service.js +8 -14
- package/dist/services/crystallization/crystallization-types.d.ts +6 -6
- package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
- package/dist/services/crystallization/index.d.ts +13 -0
- package/dist/services/crystallization/index.js +13 -0
- package/dist/services/dashboard/project-dashboard-service.js +2 -2
- package/dist/services/dispatch/await-batch.d.ts +70 -0
- package/dist/services/dispatch/await-batch.js +272 -0
- package/dist/services/dispatch/batch-counter.js +1 -1
- package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
- package/dist/services/dispatch/dispatch-record-writer.js +239 -9
- package/dist/services/dispatch/slice-dag.d.ts +46 -0
- package/dist/services/dispatch/slice-dag.js +6 -0
- package/dist/services/dispatch/stage-enum.d.ts +27 -0
- package/dist/services/dispatch/stage-enum.js +48 -0
- package/dist/services/dispatch/startup-timeout.d.ts +86 -0
- package/dist/services/dispatch/startup-timeout.js +97 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
- package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
- package/dist/services/dispatch/test-tool-detection.js +80 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
- package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
- package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
- package/dist/services/doctor/doctor-service/index.d.ts +48 -0
- package/dist/services/doctor/doctor-service/index.js +254 -0
- package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
- package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
- package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
- package/dist/services/doctor/doctor-service/types.d.ts +245 -0
- package/dist/services/doctor/doctor-service/types.js +15 -0
- package/dist/services/doctor/doctor-service.d.ts +15 -146
- package/dist/services/doctor/doctor-service.js +22 -926
- package/dist/services/doctor/index.d.ts +22 -0
- package/dist/services/doctor/index.js +22 -0
- package/dist/services/env/shell-probe.d.ts +71 -0
- package/dist/services/env/shell-probe.js +161 -0
- package/dist/services/evolution/evolution-types.d.ts +39 -39
- package/dist/services/final-review/final-review-service.d.ts +11 -1
- package/dist/services/final-review/index.d.ts +2 -0
- package/dist/services/final-review/index.js +1 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
- package/dist/services/hooks/auto-compact-hook-install.js +4 -5
- package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
- package/dist/services/hooks/worktree-authorization-gate.js +492 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
- package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
- package/dist/services/ide/adapters/qoder-adapter.js +57 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
- package/dist/services/ide/ide-registry.js +6 -0
- package/dist/services/ide/ide-types.d.ts +1 -1
- package/dist/services/job/job-types.d.ts +56 -56
- package/dist/services/job-snapshot/index.d.ts +8 -0
- package/dist/services/job-snapshot/index.js +7 -0
- package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
- package/dist/services/job-snapshot/types.d.ts +7 -0
- package/dist/services/job-snapshot/types.js +1 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
- package/dist/services/log/retention.d.ts +16 -0
- package/dist/services/log/retention.js +17 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
- package/dist/services/loop/loop-release-types.d.ts +24 -24
- package/dist/services/loop/monotonic-runner.d.ts +17 -11
- package/dist/services/loop/monotonic-runner.js +118 -79
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
- package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
- package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
- package/dist/services/memory/project-memory-service/index/search.js +194 -0
- package/dist/services/memory/project-memory-service/index.d.ts +9 -0
- package/dist/services/memory/project-memory-service/index.js +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
- package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
- package/dist/services/memory/project-memory-service/store/paths.js +116 -0
- package/dist/services/memory/project-memory-service/types.d.ts +128 -0
- package/dist/services/memory/project-memory-service/types.js +9 -0
- package/dist/services/memory/project-memory-service.d.ts +1 -167
- package/dist/services/memory/project-memory-service.js +19 -816
- package/dist/services/migrate-skill-name/schema.d.ts +2 -2
- package/dist/services/observability/aggregation.d.ts +27 -0
- package/dist/services/observability/aggregation.js +72 -0
- package/dist/services/observability/observability-service.d.ts +73 -7
- package/dist/services/observability/observability-service.js +87 -1
- package/dist/services/openspec/artifact-boundary.d.ts +138 -0
- package/dist/services/openspec/artifact-boundary.js +150 -0
- package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
- package/dist/services/openspec/coverage-evidence-reader.js +386 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
- package/dist/services/openspec/openspec-archive-service.js +320 -8
- package/dist/services/openspec/openspec-bridge-service.js +1 -1
- package/dist/services/openspec/openspec-init-service.js +1 -1
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-render-service.js +7 -4
- package/dist/services/openspec/openspec-scan-service.js +1 -1
- package/dist/services/openspec/openspec-validate-service.js +5 -4
- package/dist/services/preferences/preferences-service.js +10 -0
- package/dist/services/preferences/preferences-types.d.ts +13 -0
- package/dist/services/preferences/preferences-types.js +11 -0
- package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
- package/dist/services/qa/screenshot-archive-service.js +134 -0
- package/dist/services/rd/rd-service.js +10 -11
- package/dist/services/rd/types.d.ts +32 -32
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
- package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
- package/dist/services/recommendations/capability-seed-items.js +0 -1
- package/dist/services/recommendations/capability-seed-mappings.js +0 -1
- package/dist/services/recommendations/capability-seed-sources.js +0 -1
- package/dist/services/release/version-precheck-service.d.ts +51 -0
- package/dist/services/release/version-precheck-service.js +257 -0
- package/dist/services/scan/acceptance-coverage-service.js +1 -1
- package/dist/services/scan/archetype-service.js +1 -1
- package/dist/services/scan/existing-system-service.js +1 -1
- package/dist/services/scan/libraries-service.js +1 -1
- package/dist/services/sediment/json-schema.d.ts +40 -40
- package/dist/services/share/bundle-types.d.ts +12 -12
- package/dist/services/share/run-state-contract.d.ts +2 -2
- package/dist/services/skill/skill-search-service.d.ts +12 -7
- package/dist/services/skill/skill-search-service.js +8 -4
- package/dist/services/skillhub/migrations/001-initial.sql +71 -0
- package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
- package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
- package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
- package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
- package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
- package/dist/services/skills/hooks-settings-service.d.ts +75 -0
- package/dist/services/skills/hooks-settings-service.js +230 -2
- package/dist/services/skills/skill-registry.d.ts +1 -0
- package/dist/services/skills/skill-registry.js +6 -4
- package/dist/services/skills/skill-runbook-service.js +1 -1
- package/dist/services/slice/slice-check-service.js +1 -1
- package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
- package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
- package/dist/services/standards/missing-standards-detector.d.ts +25 -0
- package/dist/services/standards/missing-standards-detector.js +43 -12
- package/dist/services/tech/tech-change-id-service.d.ts +82 -0
- package/dist/services/tech/tech-change-id-service.js +117 -0
- package/dist/services/understand/understand-hybrid-service.js +1 -1
- package/dist/services/understand/understand-scan-service.js +2 -2
- package/dist/services/upgrade/upgrade-service.js +4 -3
- package/dist/services/verdict/envelopes.d.ts +2 -2
- package/dist/services/verdict/envelopes.js +2 -2
- package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
- package/dist/services/vm/vm-lease.d.ts +40 -0
- package/dist/services/vm/vm-lease.js +137 -0
- package/dist/services/workflow/autonomous-resume-writer.js +1 -1
- package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
- package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
- package/dist/services/workflow/pipeline-verify-service.js +42 -218
- package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-types.js +10 -0
- package/dist/services/workflow/plan-reader.d.ts +1 -1
- package/dist/services/workflow/plan-reader.js +1 -1
- package/dist/services/workflow/plan-refresher.d.ts +1 -1
- package/dist/services/workflow/plan-refresher.js +1 -1
- package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
- package/dist/services/workflow/plan-trigger-detector.js +1 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
- package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
- package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
- package/dist/services/workflow/workflow-autonomous-types.js +21 -0
- package/dist/services/workflow/workflow-router-service.js +18 -16
- package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
- package/dist/services/workflow/workflow-spec-lint.js +75 -0
- package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
- package/dist/services/workflow/workflow-spec-types.js +13 -0
- package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
- package/dist/services/workflow/workflow-spec-yaml.js +88 -0
- package/dist/services/workflow/workflow-spec.d.ts +11 -91
- package/dist/services/workflow/workflow-spec.js +16 -145
- package/dist/services/workspace/migrate-service.js +1 -1
- package/dist/services/workspace/workspace-service.js +1 -1
- package/dist/services/worktree/worktree-lease.d.ts +170 -0
- package/dist/services/worktree/worktree-lease.js +242 -0
- package/package.json +91 -51
- package/scripts/clean-dist.mjs +31 -1
- package/scripts/copy-templates.mjs +16 -0
- package/scripts/sync-version.mjs +53 -2
- package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
- package/skills/bee/peaks-prd/SKILL.md +16 -0
- package/skills/bee/peaks-prd/test-prompts.json +12 -0
- package/skills/bee/peaks-qa/SKILL.md +16 -1
- package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
- package/skills/bee/peaks-qa/test-prompts.json +12 -0
- package/skills/bee/peaks-rd/SKILL.md +29 -20
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
- package/skills/bee/peaks-rd/test-prompts.json +12 -0
- package/skills/bee/peaks-reviewer/SKILL.md +17 -0
- package/skills/bee/peaks-sc/SKILL.md +16 -0
- package/skills/bee/peaks-security-audit/SKILL.md +17 -0
- package/skills/bee/peaks-txt/SKILL.md +16 -0
- package/skills/bee/peaks-txt/test-prompts.json +12 -0
- package/skills/bee/peaks-ui/SKILL.md +49 -43
- package/skills/bee/peaks-ui/test-prompts.json +12 -0
- package/skills/peaks-code/SKILL.md +54 -109
- package/skills/peaks-code/references/boundaries.md +15 -1
- package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
- package/skills/peaks-code/references/external-skill-invocation.md +27 -0
- package/skills/peaks-code/references/lease-dashboard.html +224 -0
- package/skills/peaks-code/references/lease-stats.sample.json +26 -0
- package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
- package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
- package/skills/peaks-code/references/runbook.md +63 -1
- package/skills/peaks-code/references/startup-sequence.md +110 -0
- package/skills/peaks-code/references/step-0-8-gate.md +1 -1
- package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
- package/skills/peaks-code/references/worktree-governance.md +123 -0
- package/skills/peaks-code/test-prompts.json +12 -0
- package/skills/peaks-doctor/SKILL.md +1 -1
- package/skills/peaks-ide/SKILL.md +1 -1
- package/skills/peaks-solo/SKILL.md +21 -0
- package/skills/peaks-solo/references/triage-decision-table.md +6 -0
- package/skills/peaks-sop/test-prompts.json +17 -0
- package/dist/cli/commands/agent-commands.d.ts +0 -20
- package/dist/cli/commands/agent-commands.js +0 -48
- package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
- package/dist/cli/commands/classify-classify-commands.js +0 -151
- package/dist/cli/commands/contract-commands.d.ts +0 -26
- package/dist/cli/commands/contract-commands.js +0 -114
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
- package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
- package/dist/cli/commands/worker-commands.d.ts +0 -3
- package/dist/cli/commands/worker-commands.js +0 -52
- package/dist/services/agent/ecc-agent-service.d.ts +0 -47
- package/dist/services/agent/ecc-agent-service.js +0 -143
- package/dist/services/config/provider-service.d.ts +0 -48
- package/dist/services/config/provider-service.js +0 -143
- package/dist/services/context/dispatch-context-guard.d.ts +0 -27
- package/dist/services/context/dispatch-context-guard.js +0 -192
- package/dist/services/context/shared-channel.d.ts +0 -93
- package/dist/services/context/shared-channel.js +0 -308
- package/dist/services/filesystem/file-lock.d.ts +0 -11
- package/dist/services/filesystem/file-lock.js +0 -152
- package/dist/services/mut/assert-scanner.d.ts +0 -6
- package/dist/services/mut/assert-scanner.js +0 -116
- package/dist/services/mut/index.d.ts +0 -8
- package/dist/services/mut/index.js +0 -7
- package/dist/services/mut/mut-runner.d.ts +0 -39
- package/dist/services/mut/mut-runner.js +0 -29
- package/dist/services/mut/production-stryker.d.ts +0 -2
- package/dist/services/mut/production-stryker.js +0 -75
- package/dist/services/mut/report-builder.d.ts +0 -11
- package/dist/services/mut/report-builder.js +0 -110
- package/dist/services/mut/report-loader.d.ts +0 -31
- package/dist/services/mut/report-loader.js +0 -78
- package/dist/services/mut/thresholds.d.ts +0 -21
- package/dist/services/mut/thresholds.js +0 -22
- package/dist/services/mut/types.d.ts +0 -336
- package/dist/services/mut/types.js +0 -59
- package/dist/services/providers/minimax-provider-service.d.ts +0 -24
- package/dist/services/providers/minimax-provider-service.js +0 -143
- package/dist/services/providers/minimax-worker-service.d.ts +0 -21
- package/dist/services/providers/minimax-worker-service.js +0 -83
- package/dist/shared/fs.d.ts +0 -4
- package/dist/shared/fs.js +0 -26
- package/dist/shared/paths.d.ts +0 -6
- package/dist/shared/paths.js +0 -50
- package/dist/shared/result.d.ts +0 -22
- package/dist/shared/result.js +0 -46
- package/dist/shared/version.d.ts +0 -1
- package/dist/shared/version.js +0 -1
- package/examples/video-demo/README.md +0 -142
- package/examples/video-demo/out/en-closing-960.png +0 -0
- package/examples/video-demo/out/zh-closing-960.png +0 -0
- package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
- package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
- /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Public facade for the project-memory-service split.
|
|
3
|
+
//
|
|
4
|
+
// Downstream callers (CLI commands, audit writers, presence service,
|
|
5
|
+
// search services) import from `'../memory/project-memory-service.js'`. This
|
|
6
|
+
// module re-exports every public function / type / constant from the
|
|
7
|
+
// parsers/, store/, and index/ submodules, so the existing import path
|
|
8
|
+
// keeps working unchanged.
|
|
9
|
+
//
|
|
10
|
+
// The 8-kind union, all result / plan types, and the index types live in
|
|
11
|
+
// `./types.ts` and are re-exported here.
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
export { VALID_PROJECT_MEMORY_KINDS } from './parsers/frontmatter.js';
|
|
14
|
+
// Pure markdown helpers
|
|
15
|
+
export { summarizeBackupResult, summarizeExtractResult, summarizeMemoryBody, extractStableProjectMemories, END_MARKER, START_MARKER } from './parsers/markdown-pure.js';
|
|
16
|
+
// Frontmatter parser + renderer
|
|
17
|
+
export { parseBlock, parseStoredMemoryFile, renderMemoryFile, slugify } from './parsers/frontmatter.js';
|
|
18
|
+
// Store: path safety + sensitive content
|
|
19
|
+
export { assertInsideProject, assertSafeProjectMemoryDir, assertSafeSessionDir, normalizeRealRoot, normalizeRoot, realPathOrThrow, resolveProjectPath, safeRealpath } from './store/paths.js';
|
|
20
|
+
export { assertSafeMemory, assertSafeMemoryFileContent, hasSensitiveMemoryContent, writeNewFile } from './store/atomic-write.js';
|
|
21
|
+
// Index: search / ranking / dispatch
|
|
22
|
+
export { ensureMemoryBootstrap, emptyByKind, emptyIndex, listMarkdownFiles, readProjectMemories, readProjectMemoryBody } from './index/search.js';
|
|
23
|
+
export { generateMemoryIndexFile, readExistingIndex, readMemoryFileMtime, readMemoryIndex, readStoredMemoryNames } from './index/ranking.js';
|
|
24
|
+
export { createProjectMemoryBackupPlan, createProjectMemoryExtractPlan, executeProjectMemoryBackup, executeProjectMemoryExtract, extractSessionMemories, summarizeProjectMemoryBackupResult, summarizeProjectMemoryExtractResult } from './index/kind-dispatch.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ExtractedProjectMemory, ProjectMemoryKind, StoredProjectMemory } from '../types.js';
|
|
2
|
+
export declare const VALID_MEMORY_KINDS: Set<ProjectMemoryKind>;
|
|
3
|
+
/** Exported for guard tests + tooling that needs to enumerate the valid
|
|
4
|
+
* set without duplicating the literal. Single source of truth. */
|
|
5
|
+
export declare const VALID_PROJECT_MEMORY_KINDS: readonly ProjectMemoryKind[];
|
|
6
|
+
export declare function slugify(title: string): string;
|
|
7
|
+
export declare function parseBlock(block: string, sourceArtifact: string): ExtractedProjectMemory | null;
|
|
8
|
+
export declare function renderMemoryFile(memory: ExtractedProjectMemory): string;
|
|
9
|
+
export declare function parseStoredMemoryFile(content: string, filePath: string): StoredProjectMemory | null;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Frontmatter parser + renderer for project memory files.
|
|
3
|
+
//
|
|
4
|
+
// Two surface shapes live here:
|
|
5
|
+
//
|
|
6
|
+
// 1. `parseBlock` / `renderMemoryFile` — extract-path side. We get raw
|
|
7
|
+
// markdown body content delimited by `<!-- peaks-memory:start -->` /
|
|
8
|
+
// `<!-- peaks-memory:end -->` markers with a YAML-ish header at the top
|
|
9
|
+
// (title, kind) and a `---` separator before the body.
|
|
10
|
+
//
|
|
11
|
+
// 2. `parseStoredMemoryFile` — read-path side. Files in `.peaks/memory/`
|
|
12
|
+
// are stored as standard YAML frontmatter (name / description /
|
|
13
|
+
// metadata.type / metadata.sourceArtifact) followed by the body.
|
|
14
|
+
//
|
|
15
|
+
// Both parsers share the 8-kind `VALID_MEMORY_KINDS` allow-list and the
|
|
16
|
+
// `slugify` helper used to derive filenames from titles.
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
export const VALID_MEMORY_KINDS = new Set([
|
|
19
|
+
'project',
|
|
20
|
+
'rule',
|
|
21
|
+
'decision',
|
|
22
|
+
'reference',
|
|
23
|
+
'feedback',
|
|
24
|
+
'convention',
|
|
25
|
+
'module',
|
|
26
|
+
'lesson'
|
|
27
|
+
]);
|
|
28
|
+
/** Exported for guard tests + tooling that needs to enumerate the valid
|
|
29
|
+
* set without duplicating the literal. Single source of truth. */
|
|
30
|
+
export const VALID_PROJECT_MEMORY_KINDS = Array.from(VALID_MEMORY_KINDS);
|
|
31
|
+
export function slugify(title) {
|
|
32
|
+
const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
33
|
+
return slug.length > 0 ? slug : 'project-memory';
|
|
34
|
+
}
|
|
35
|
+
export function parseBlock(block, sourceArtifact) {
|
|
36
|
+
const normalizedBlock = block.replace(/\r\n/g, '\n');
|
|
37
|
+
const separatorIndex = normalizedBlock.indexOf('\n---\n');
|
|
38
|
+
if (separatorIndex < 0)
|
|
39
|
+
return null;
|
|
40
|
+
const header = normalizedBlock.slice(0, separatorIndex).trim();
|
|
41
|
+
const body = normalizedBlock.slice(separatorIndex + '\n---\n'.length).trim();
|
|
42
|
+
const fields = new Map();
|
|
43
|
+
for (const line of header.split('\n')) {
|
|
44
|
+
const [key, ...valueParts] = line.split(':');
|
|
45
|
+
const normalizedKey = key?.trim();
|
|
46
|
+
const value = valueParts.join(':').trim();
|
|
47
|
+
if (normalizedKey && value) {
|
|
48
|
+
fields.set(normalizedKey, value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const title = fields.get('title')?.trim();
|
|
52
|
+
const kind = fields.get('kind')?.trim();
|
|
53
|
+
if (!title || !kind || !VALID_MEMORY_KINDS.has(kind) || body.length === 0)
|
|
54
|
+
return null;
|
|
55
|
+
return { title, kind, body, sourceArtifact };
|
|
56
|
+
}
|
|
57
|
+
export function renderMemoryFile(memory) {
|
|
58
|
+
const name = slugify(memory.title);
|
|
59
|
+
return [
|
|
60
|
+
'---',
|
|
61
|
+
`name: ${name}`,
|
|
62
|
+
`description: ${memory.title}`,
|
|
63
|
+
'metadata:',
|
|
64
|
+
` type: ${memory.kind}`,
|
|
65
|
+
` sourceArtifact: ${memory.sourceArtifact}`,
|
|
66
|
+
'---',
|
|
67
|
+
'',
|
|
68
|
+
memory.body,
|
|
69
|
+
''
|
|
70
|
+
].join('\n');
|
|
71
|
+
}
|
|
72
|
+
export function parseStoredMemoryFile(content, filePath) {
|
|
73
|
+
const normalized = content.replace(/\r\n/g, '\n');
|
|
74
|
+
if (!normalized.startsWith('---\n'))
|
|
75
|
+
return null;
|
|
76
|
+
const endIndex = normalized.indexOf('\n---\n', 4);
|
|
77
|
+
if (endIndex < 0)
|
|
78
|
+
return null;
|
|
79
|
+
const frontmatter = normalized.slice(4, endIndex);
|
|
80
|
+
const body = normalized.slice(endIndex + '\n---\n'.length).trim();
|
|
81
|
+
let name;
|
|
82
|
+
let description;
|
|
83
|
+
let kind;
|
|
84
|
+
let sourceArtifact;
|
|
85
|
+
for (const rawLine of frontmatter.split('\n')) {
|
|
86
|
+
const line = rawLine.trim();
|
|
87
|
+
if (line.startsWith('name:'))
|
|
88
|
+
name = line.slice('name:'.length).trim();
|
|
89
|
+
else if (line.startsWith('description:'))
|
|
90
|
+
description = line.slice('description:'.length).trim();
|
|
91
|
+
else if (line.startsWith('type:'))
|
|
92
|
+
kind = line.slice('type:'.length).trim();
|
|
93
|
+
else if (line.startsWith('sourceArtifact:'))
|
|
94
|
+
sourceArtifact = line.slice('sourceArtifact:'.length).trim();
|
|
95
|
+
}
|
|
96
|
+
if (!name || !kind || !VALID_MEMORY_KINDS.has(kind) || body.length === 0)
|
|
97
|
+
return null;
|
|
98
|
+
return {
|
|
99
|
+
name,
|
|
100
|
+
title: description ?? name,
|
|
101
|
+
kind: kind,
|
|
102
|
+
sourceArtifact: sourceArtifact && sourceArtifact !== 'undefined' ? sourceArtifact : null,
|
|
103
|
+
body,
|
|
104
|
+
filePath
|
|
105
|
+
};
|
|
106
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExtractedProjectMemory, ProjectMemoryBackupResult, ProjectMemoryBackupSummary, ProjectMemoryExtractResult, ProjectMemoryExtractSummary } from '../types.js';
|
|
2
|
+
export declare const START_MARKER = "<!-- peaks-memory:start -->";
|
|
3
|
+
export declare const END_MARKER = "<!-- peaks-memory:end -->";
|
|
4
|
+
export declare function summarizeMemoryBody(body: string): string;
|
|
5
|
+
export declare function extractStableProjectMemories(content: string, sourceArtifact: string): ExtractedProjectMemory[];
|
|
6
|
+
export declare function summarizeExtractResult(result: ProjectMemoryExtractResult): ProjectMemoryExtractSummary;
|
|
7
|
+
export declare function summarizeBackupResult(result: ProjectMemoryBackupResult): ProjectMemoryBackupSummary;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Pure (no-filesystem) markdown helpers used by the extract + summarize paths.
|
|
3
|
+
//
|
|
4
|
+
// Three concerns live here:
|
|
5
|
+
//
|
|
6
|
+
// 1. `extractStableProjectMemories` — top-level entry point called by
|
|
7
|
+
// `peaks memory extract --apply` / `--dry-run`. Walks an artifact's
|
|
8
|
+
// text, finds every `<!-- peaks-memory:start/end -->` block, and
|
|
9
|
+
// hands each one to the frontmatter parser. Sorted output is part of
|
|
10
|
+
// the contract (callers rely on deterministic order).
|
|
11
|
+
//
|
|
12
|
+
// 2. `summarizeMemoryBody` — deterministic one-sentence summary used to
|
|
13
|
+
// populate `MemoryIndexEntry.description`. No LLM call, just markdown
|
|
14
|
+
// strip + sentence selection + length truncation.
|
|
15
|
+
//
|
|
16
|
+
// 3. `summarizeExtractResult` / `summarizeBackupResult` — projector
|
|
17
|
+
// functions that take the rich extract / backup plan and trim it down
|
|
18
|
+
// to the small JSON-friendly shape consumed by the CLI layer.
|
|
19
|
+
//
|
|
20
|
+
// No filesystem imports. Pure functions only — easy to unit-test.
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
import { assertSafeMemory } from '../store/atomic-write.js';
|
|
23
|
+
import { parseBlock, slugify } from './frontmatter.js';
|
|
24
|
+
export const START_MARKER = '<!-- peaks-memory:start -->';
|
|
25
|
+
export const END_MARKER = '<!-- peaks-memory:end -->';
|
|
26
|
+
// Length bounds for index entry descriptions. The numbers were chosen when
|
|
27
|
+
// summarizeMemoryBody was first introduced; locking them in as named
|
|
28
|
+
// constants is a doc-as-code move so the truncation rule is no longer
|
|
29
|
+
// "magic". Bump MAX_DESCRIPTION_LENGTH deliberately if downstream UIs grow.
|
|
30
|
+
const MIN_BODY_SENTENCE_LENGTH = 20; // skip fragments shorter than this when picking a leading sentence
|
|
31
|
+
const MAX_DESCRIPTION_LENGTH = 120; // hard cap on description length in the memory index entry
|
|
32
|
+
const ELLIPSIS_RESERVE = 3; // length of the trailing "..." when truncating with an ellipsis
|
|
33
|
+
export function summarizeMemoryBody(body) {
|
|
34
|
+
const cleaned = body
|
|
35
|
+
.replace(/^#{1,6}\s+/gm, '')
|
|
36
|
+
.replace(/`{1,3}[^`]*`{1,3}/g, '')
|
|
37
|
+
.replace(/^\s*[-*+]\s+/gm, '')
|
|
38
|
+
.replace(/\n+/g, ' ')
|
|
39
|
+
.trim();
|
|
40
|
+
const sentences = cleaned.split(/(?<=[.!?])\s+/).filter((s) => s.length > MIN_BODY_SENTENCE_LENGTH && !/^\[.+\]$/.test(s));
|
|
41
|
+
if (sentences.length === 0) {
|
|
42
|
+
return cleaned.slice(0, MAX_DESCRIPTION_LENGTH) || 'Project memory';
|
|
43
|
+
}
|
|
44
|
+
const first = sentences[0];
|
|
45
|
+
if (first.length <= MAX_DESCRIPTION_LENGTH) {
|
|
46
|
+
return first;
|
|
47
|
+
}
|
|
48
|
+
return first.slice(0, MAX_DESCRIPTION_LENGTH - ELLIPSIS_RESERVE) + '...';
|
|
49
|
+
}
|
|
50
|
+
export function extractStableProjectMemories(content, sourceArtifact) {
|
|
51
|
+
const memories = [];
|
|
52
|
+
let searchStart = 0;
|
|
53
|
+
while (searchStart < content.length) {
|
|
54
|
+
const start = content.indexOf(START_MARKER, searchStart);
|
|
55
|
+
if (start < 0)
|
|
56
|
+
break;
|
|
57
|
+
const bodyStart = start + START_MARKER.length;
|
|
58
|
+
const end = content.indexOf(END_MARKER, bodyStart);
|
|
59
|
+
if (end < 0)
|
|
60
|
+
break;
|
|
61
|
+
const memory = parseBlock(content.slice(bodyStart, end).trim(), sourceArtifact);
|
|
62
|
+
if (memory) {
|
|
63
|
+
assertSafeMemory(memory);
|
|
64
|
+
memories.push(memory);
|
|
65
|
+
}
|
|
66
|
+
searchStart = end + END_MARKER.length;
|
|
67
|
+
}
|
|
68
|
+
return memories.sort((left, right) => slugify(left.title).localeCompare(slugify(right.title)));
|
|
69
|
+
}
|
|
70
|
+
export function summarizeExtractResult(result) {
|
|
71
|
+
return {
|
|
72
|
+
apply: result.apply,
|
|
73
|
+
projectRoot: result.projectRoot,
|
|
74
|
+
primaryMemoryDir: result.primaryMemoryDir,
|
|
75
|
+
backupPolicy: result.backupPolicy,
|
|
76
|
+
extractedCount: result.extractedMemories.length,
|
|
77
|
+
plannedWrites: result.plannedWrites.map((write) => ({
|
|
78
|
+
filePath: write.filePath,
|
|
79
|
+
title: write.memory.title,
|
|
80
|
+
kind: write.memory.kind,
|
|
81
|
+
sourceArtifact: write.memory.sourceArtifact
|
|
82
|
+
})),
|
|
83
|
+
writtenFiles: result.writtenFiles
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function summarizeBackupResult(result) {
|
|
87
|
+
return {
|
|
88
|
+
apply: result.apply,
|
|
89
|
+
projectRoot: result.projectRoot,
|
|
90
|
+
artifactWorkspacePath: result.artifactWorkspacePath,
|
|
91
|
+
primaryMemoryDir: result.primaryMemoryDir,
|
|
92
|
+
backupMemoryDir: result.backupMemoryDir,
|
|
93
|
+
plannedCopies: result.plannedCopies,
|
|
94
|
+
copiedFiles: result.copiedFiles
|
|
95
|
+
};
|
|
96
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ExtractedProjectMemory } from '../types.js';
|
|
2
|
+
export declare function hasSensitiveMemoryContent(content: string): boolean;
|
|
3
|
+
export declare function assertSafeMemory(memory: ExtractedProjectMemory): void;
|
|
4
|
+
export declare function assertSafeMemoryFileContent(content: string): void;
|
|
5
|
+
export declare function writeNewFile(path: string, content: string): void;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Sensitive-content + write helpers for the project memory store.
|
|
3
|
+
//
|
|
4
|
+
// - `hasSensitiveMemoryContent` — pattern check for api keys, tokens,
|
|
5
|
+
// PEM private keys, JWTs, GitHub / GitLab tokens, AWS access keys. Used
|
|
6
|
+
// both by the extract path (`assertSafeMemory`) and the backup path
|
|
7
|
+
// (`assertSafeMemoryFileContent`).
|
|
8
|
+
// - `assertSafeMemory` — full safety gate applied during extraction.
|
|
9
|
+
// Combines title/body content scan + config-service secret check +
|
|
10
|
+
// sensitive-path check on the title.
|
|
11
|
+
// - `assertSafeMemoryFileContent` — lighter version for backup: just
|
|
12
|
+
// the content pattern scan, since the file already lives in
|
|
13
|
+
// `.peaks/memory/` and was authored through the normal pipeline.
|
|
14
|
+
// - `writeNewFile` — `O_EXCL` create-and-write via `openSync`. Atomic
|
|
15
|
+
// with respect to other writers (no overwrite), used both for fresh
|
|
16
|
+
// memory writes and (with the O_TRUNC variant inside `ranking.ts`)
|
|
17
|
+
// for index.json regeneration.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
import { closeSync, constants, openSync, writeFileSync } from 'node:fs';
|
|
20
|
+
import { containsSensitiveConfigValue, isSensitiveConfigPath } from '../../../config/config-service.js';
|
|
21
|
+
export function hasSensitiveMemoryContent(content) {
|
|
22
|
+
return /(?:api[_-]?key|token|secret|password|credential|bearer)\s*[:=]/i.test(content)
|
|
23
|
+
|| /\bauthorization\s*:\s*bearer\s+\S+/i.test(content)
|
|
24
|
+
|| /\bbearer\s+[A-Za-z0-9._~+/=-]{12,}\b/i.test(content)
|
|
25
|
+
|| /\bsk-[A-Za-z0-9_-]{6,}\b/.test(content)
|
|
26
|
+
|| /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/.test(content)
|
|
27
|
+
|| /\bgithub_pat_[A-Za-z0-9_]{20,}\b/.test(content)
|
|
28
|
+
|| /\bglpat-[A-Za-z0-9_-]{20,}\b/.test(content)
|
|
29
|
+
|| /\bAKIA[0-9A-Z]{16}\b/.test(content)
|
|
30
|
+
|| /-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(content)
|
|
31
|
+
|| /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/.test(content);
|
|
32
|
+
}
|
|
33
|
+
export function assertSafeMemory(memory) {
|
|
34
|
+
const content = `${memory.title}\n${memory.kind}\n${memory.body}`;
|
|
35
|
+
const metadata = { title: memory.title, kind: memory.kind, body: memory.body };
|
|
36
|
+
if (containsSensitiveConfigValue(metadata) || hasSensitiveMemoryContent(content)) {
|
|
37
|
+
throw new Error('Refusing to store sensitive memory content');
|
|
38
|
+
}
|
|
39
|
+
if (isSensitiveConfigPath(memory.title)) {
|
|
40
|
+
throw new Error('Refusing to store sensitive memory content');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function assertSafeMemoryFileContent(content) {
|
|
44
|
+
if (hasSensitiveMemoryContent(content)) {
|
|
45
|
+
throw new Error('Refusing to back up sensitive memory content');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function writeNewFile(path, content) {
|
|
49
|
+
const fd = openSync(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);
|
|
50
|
+
try {
|
|
51
|
+
writeFileSync(fd, content, 'utf8');
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
closeSync(fd);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function normalizeRoot(path: string): string;
|
|
2
|
+
export declare function normalizeRealRoot(path: string): string;
|
|
3
|
+
export declare function realPathOrThrow(path: string, errorMessage: string): string;
|
|
4
|
+
export declare function resolveProjectPath(path: string, projectRoot: string): string;
|
|
5
|
+
export declare function assertInsideProject(path: string, projectRoot: string): string;
|
|
6
|
+
export declare function assertSafeProjectMemoryDir(projectRoot: string): string;
|
|
7
|
+
export declare function safeRealpath(path: string): string | null;
|
|
8
|
+
export declare function assertSafeSessionDir(projectRoot: string, sessionId: string): string;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Filesystem path safety helpers.
|
|
3
|
+
//
|
|
4
|
+
// All read/write paths in the project-memory-service flow through these
|
|
5
|
+
// guards. The contract:
|
|
6
|
+
//
|
|
7
|
+
// - `normalizeRoot` — collapses a caller-supplied project root into the
|
|
8
|
+
// canonical form the rest of the codebase expects (handles input-path
|
|
9
|
+
// quirks from the path-utils layer).
|
|
10
|
+
// - `realPathOrThrow` — refuses symlinks and missing paths. Throws with
|
|
11
|
+
// a stable message so callers can distinguish "missing" from "escape
|
|
12
|
+
// attempt".
|
|
13
|
+
// - `assertInsideProject` — confirms an artifact path resolves inside
|
|
14
|
+
// the project root after realpath, throwing the same kind of error
|
|
15
|
+
// message realPathOrThrow uses.
|
|
16
|
+
// - `assertSafeProjectMemoryDir` — confirms `.peaks/memory/` exists (or
|
|
17
|
+
// can be returned without creation) AND it is not a symlink and its
|
|
18
|
+
// realpath lives inside the project root. Returns the joined path.
|
|
19
|
+
// - `assertSafeSessionDir` — symmetric for `.peaks/_runtime/<sid>/`.
|
|
20
|
+
// Distinguishes benign "not found" (returns `SESSION_DIR_NOT_FOUND`
|
|
21
|
+
// sentinel message) from "escapes project root" (throws hard).
|
|
22
|
+
//
|
|
23
|
+
// All helpers are pure (no side effects other than throwing).
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
import { existsSync, lstatSync, realpathSync } from 'node:fs';
|
|
26
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
27
|
+
import { isInsidePath, isWindowsAbsolutePath, normalizePath, resolveInputPath, stableRealPath } from '../../../../shared/path-utils.js';
|
|
28
|
+
import { getSessionDir } from '../../../session/getSessionDir.js';
|
|
29
|
+
export function normalizeRoot(path) {
|
|
30
|
+
return resolveInputPath(path);
|
|
31
|
+
}
|
|
32
|
+
export function normalizeRealRoot(path) {
|
|
33
|
+
return stableRealPath(path);
|
|
34
|
+
}
|
|
35
|
+
export function realPathOrThrow(path, errorMessage) {
|
|
36
|
+
if (!existsSync(path)) {
|
|
37
|
+
throw new Error(errorMessage);
|
|
38
|
+
}
|
|
39
|
+
const stats = lstatSync(path);
|
|
40
|
+
if (stats.isSymbolicLink()) {
|
|
41
|
+
throw new Error(errorMessage);
|
|
42
|
+
}
|
|
43
|
+
return realpathSync(path);
|
|
44
|
+
}
|
|
45
|
+
export function resolveProjectPath(path, projectRoot) {
|
|
46
|
+
if (isWindowsAbsolutePath(path))
|
|
47
|
+
return normalizePath(path);
|
|
48
|
+
if (isAbsolute(path))
|
|
49
|
+
return resolve(path);
|
|
50
|
+
const resolvedPath = join(projectRoot, path);
|
|
51
|
+
return isWindowsAbsolutePath(projectRoot) ? normalizePath(resolvedPath) : resolve(resolvedPath);
|
|
52
|
+
}
|
|
53
|
+
export function assertInsideProject(path, projectRoot) {
|
|
54
|
+
const resolvedRoot = normalizeRoot(projectRoot);
|
|
55
|
+
const resolvedPath = resolveProjectPath(path, resolvedRoot);
|
|
56
|
+
const realProjectRoot = realPathOrThrow(resolvedRoot, 'Project root is not accessible');
|
|
57
|
+
const realArtifactPath = realPathOrThrow(resolvedPath, 'Artifact path must stay inside the project root');
|
|
58
|
+
if (!isInsidePath(realArtifactPath, realProjectRoot)) {
|
|
59
|
+
throw new Error('Artifact path must stay inside the project root');
|
|
60
|
+
}
|
|
61
|
+
return resolvedPath;
|
|
62
|
+
}
|
|
63
|
+
export function assertSafeProjectMemoryDir(projectRoot) {
|
|
64
|
+
const resolvedRoot = normalizeRoot(projectRoot);
|
|
65
|
+
const realRoot = normalizeRealRoot(projectRoot);
|
|
66
|
+
const peaksDir = join(resolvedRoot, '.peaks');
|
|
67
|
+
if (existsSync(peaksDir) && lstatSync(peaksDir).isSymbolicLink()) {
|
|
68
|
+
throw new Error('Project memory directory must stay inside the project root');
|
|
69
|
+
}
|
|
70
|
+
const memoryDir = join(peaksDir, 'memory');
|
|
71
|
+
if (existsSync(memoryDir)) {
|
|
72
|
+
if (lstatSync(memoryDir).isSymbolicLink()) {
|
|
73
|
+
throw new Error('Project memory directory must stay inside the project root');
|
|
74
|
+
}
|
|
75
|
+
const realMemoryDir = realpathSync(memoryDir);
|
|
76
|
+
if (!isInsidePath(realMemoryDir, realRoot)) {
|
|
77
|
+
throw new Error('Project memory directory must stay inside the project root');
|
|
78
|
+
}
|
|
79
|
+
return memoryDir;
|
|
80
|
+
}
|
|
81
|
+
return memoryDir;
|
|
82
|
+
}
|
|
83
|
+
export function safeRealpath(path) {
|
|
84
|
+
try {
|
|
85
|
+
return realpathSync(path);
|
|
86
|
+
}
|
|
87
|
+
catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function assertSafeSessionDir(projectRoot, sessionId) {
|
|
92
|
+
const normalizedRoot = normalizeRoot(projectRoot);
|
|
93
|
+
const realRoot = normalizeRealRoot(projectRoot);
|
|
94
|
+
const sessionDir = getSessionDir(normalizedRoot, sessionId);
|
|
95
|
+
if (!existsSync(sessionDir)) {
|
|
96
|
+
// Distinguish "not found" (caller will treat as no-op) from "escapes project
|
|
97
|
+
// root" (caller must surface a hard error). We probe by checking whether the
|
|
98
|
+
// joined path, after realpath, would still be inside the project root.
|
|
99
|
+
if (isAbsolute(getSessionDir(normalizedRoot, sessionId))) {
|
|
100
|
+
const realJoined = safeRealpath(getSessionDir(normalizedRoot, sessionId));
|
|
101
|
+
if (realJoined && !isInsidePath(realJoined, realRoot)) {
|
|
102
|
+
throw new Error('Session directory must stay inside the project root');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
throw new Error('SESSION_DIR_NOT_FOUND');
|
|
106
|
+
}
|
|
107
|
+
const stats = lstatSync(sessionDir);
|
|
108
|
+
if (stats.isSymbolicLink()) {
|
|
109
|
+
throw new Error('Session directory must stay inside the project root');
|
|
110
|
+
}
|
|
111
|
+
const realSessionDir = realpathSync(sessionDir);
|
|
112
|
+
if (!isInsidePath(realSessionDir, realRoot)) {
|
|
113
|
+
throw new Error('Session directory must stay inside the project root');
|
|
114
|
+
}
|
|
115
|
+
return sessionDir;
|
|
116
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
export type ProjectMemoryKind = 'project' | 'rule' | 'decision' | 'reference' | 'feedback' | 'convention' | 'module' | 'lesson';
|
|
2
|
+
export type ExtractedProjectMemory = {
|
|
3
|
+
title: string;
|
|
4
|
+
kind: ProjectMemoryKind;
|
|
5
|
+
body: string;
|
|
6
|
+
sourceArtifact: string;
|
|
7
|
+
};
|
|
8
|
+
export type ProjectMemoryWrite = {
|
|
9
|
+
memory: ExtractedProjectMemory;
|
|
10
|
+
filePath: string;
|
|
11
|
+
content: string;
|
|
12
|
+
};
|
|
13
|
+
export type ProjectMemoryExtractPlan = {
|
|
14
|
+
apply: boolean;
|
|
15
|
+
projectRoot: string;
|
|
16
|
+
primaryMemoryDir: string;
|
|
17
|
+
backupPolicy: 'project-memory-primary-artifact-backup';
|
|
18
|
+
extractedMemories: ExtractedProjectMemory[];
|
|
19
|
+
plannedWrites: ProjectMemoryWrite[];
|
|
20
|
+
};
|
|
21
|
+
export type ProjectMemoryExtractResult = ProjectMemoryExtractPlan & {
|
|
22
|
+
writtenFiles: string[];
|
|
23
|
+
};
|
|
24
|
+
export type ProjectMemoryExtractSummary = {
|
|
25
|
+
apply: boolean;
|
|
26
|
+
projectRoot: string;
|
|
27
|
+
primaryMemoryDir: string;
|
|
28
|
+
backupPolicy: 'project-memory-primary-artifact-backup';
|
|
29
|
+
extractedCount: number;
|
|
30
|
+
plannedWrites: Array<{
|
|
31
|
+
filePath: string;
|
|
32
|
+
title: string;
|
|
33
|
+
kind: ProjectMemoryKind;
|
|
34
|
+
sourceArtifact: string;
|
|
35
|
+
}>;
|
|
36
|
+
writtenFiles: string[];
|
|
37
|
+
};
|
|
38
|
+
export type ProjectMemoryBackupSummary = {
|
|
39
|
+
apply: boolean;
|
|
40
|
+
projectRoot: string;
|
|
41
|
+
artifactWorkspacePath: string;
|
|
42
|
+
primaryMemoryDir: string;
|
|
43
|
+
backupMemoryDir: string;
|
|
44
|
+
plannedCopies: ProjectMemoryCopy[];
|
|
45
|
+
copiedFiles: string[];
|
|
46
|
+
};
|
|
47
|
+
export type ProjectMemoryCopy = {
|
|
48
|
+
sourcePath: string;
|
|
49
|
+
targetPath: string;
|
|
50
|
+
};
|
|
51
|
+
export type ProjectMemoryBackupPlan = {
|
|
52
|
+
apply: boolean;
|
|
53
|
+
projectRoot: string;
|
|
54
|
+
artifactWorkspacePath: string;
|
|
55
|
+
primaryMemoryDir: string;
|
|
56
|
+
backupMemoryDir: string;
|
|
57
|
+
plannedCopies: ProjectMemoryCopy[];
|
|
58
|
+
};
|
|
59
|
+
export type ProjectMemoryBackupResult = ProjectMemoryBackupPlan & {
|
|
60
|
+
copiedFiles: string[];
|
|
61
|
+
};
|
|
62
|
+
export type StoredProjectMemory = {
|
|
63
|
+
name: string;
|
|
64
|
+
title: string;
|
|
65
|
+
kind: ProjectMemoryKind;
|
|
66
|
+
sourceArtifact: string | null;
|
|
67
|
+
body: string;
|
|
68
|
+
filePath: string;
|
|
69
|
+
};
|
|
70
|
+
export type ProjectMemoryReadResult = {
|
|
71
|
+
projectRoot: string;
|
|
72
|
+
memoryDir: string;
|
|
73
|
+
total: number;
|
|
74
|
+
byKind: Record<ProjectMemoryKind, StoredProjectMemory[]>;
|
|
75
|
+
memories: StoredProjectMemory[];
|
|
76
|
+
};
|
|
77
|
+
export type MemoryIndexEntry = {
|
|
78
|
+
name: string;
|
|
79
|
+
kind: ProjectMemoryKind;
|
|
80
|
+
description: string;
|
|
81
|
+
sourcePath: string;
|
|
82
|
+
sourceArtifact: string | null;
|
|
83
|
+
updatedAt: string;
|
|
84
|
+
};
|
|
85
|
+
export type MemoryIndex = {
|
|
86
|
+
version: 1;
|
|
87
|
+
updatedAt: string;
|
|
88
|
+
hot: Record<ProjectMemoryKind, MemoryIndexEntry[]>;
|
|
89
|
+
warm: Record<ProjectMemoryKind, MemoryIndexEntry[]>;
|
|
90
|
+
};
|
|
91
|
+
export type ExtractSessionMemoriesOptions = {
|
|
92
|
+
projectRoot: string;
|
|
93
|
+
sessionId: string;
|
|
94
|
+
apply?: boolean;
|
|
95
|
+
};
|
|
96
|
+
export type ExtractSessionMemoriesResult = {
|
|
97
|
+
apply: boolean;
|
|
98
|
+
projectRoot: string;
|
|
99
|
+
sessionId: string;
|
|
100
|
+
primaryMemoryDir: string;
|
|
101
|
+
memoryIndexPath: string;
|
|
102
|
+
scannedFiles: number;
|
|
103
|
+
extractedCount: number;
|
|
104
|
+
writtenFiles: string[];
|
|
105
|
+
updatedIndex: boolean;
|
|
106
|
+
};
|
|
107
|
+
export type ProjectMemoryShowResult = {
|
|
108
|
+
projectRoot: string;
|
|
109
|
+
memoryDir: string;
|
|
110
|
+
name: string;
|
|
111
|
+
body: string;
|
|
112
|
+
filePath: string;
|
|
113
|
+
updatedAt: string | null;
|
|
114
|
+
kind: ProjectMemoryKind | null;
|
|
115
|
+
title: string;
|
|
116
|
+
/** Whether the on-disk body bytes are returned (true) or a compact form (false). */
|
|
117
|
+
pretty: boolean;
|
|
118
|
+
};
|
|
119
|
+
export type ExtractPlanOptions = {
|
|
120
|
+
projectRoot: string;
|
|
121
|
+
artifactPaths: string[];
|
|
122
|
+
apply?: boolean;
|
|
123
|
+
};
|
|
124
|
+
export type BackupPlanOptions = {
|
|
125
|
+
projectRoot: string;
|
|
126
|
+
artifactWorkspacePath: string;
|
|
127
|
+
apply?: boolean;
|
|
128
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Shared type definitions for the project-memory-service split.
|
|
3
|
+
//
|
|
4
|
+
// This module is the single home of every public type / interface that the
|
|
5
|
+
// parsers/, store/, and index/ submodules exchange. Each submodule imports
|
|
6
|
+
// from here, and the top-level `index.ts` re-exports them for back-compat
|
|
7
|
+
// with downstream callers (CLI commands, audit writers, presence service).
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
export {};
|