@cleocode/core 2026.5.133 → 2026.6.0
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/binaries/README.md +49 -27
- package/dist/agents/{agent-registry.d.ts → agent-capacity-tracker.d.ts} +2 -2
- package/dist/agents/agent-capacity-tracker.d.ts.map +1 -0
- package/dist/agents/{agent-registry.js → agent-capacity-tracker.js} +2 -2
- package/dist/agents/agent-capacity-tracker.js.map +1 -0
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +4 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/seed-install.d.ts +1 -1
- package/dist/agents/seed-install.d.ts.map +1 -1
- package/dist/agents/seed-install.js +42 -36
- package/dist/agents/seed-install.js.map +1 -1
- package/dist/caamp-export.d.ts +18 -0
- package/dist/caamp-export.d.ts.map +1 -0
- package/dist/caamp-export.js +18 -0
- package/dist/caamp-export.js.map +1 -0
- package/dist/conduit/local-transport.d.ts +1 -1
- package/dist/conduit/local-transport.d.ts.map +1 -1
- package/dist/conduit/local-transport.js +69 -43
- package/dist/conduit/local-transport.js.map +1 -1
- package/dist/dispatch/mutate-projection.d.ts.map +1 -1
- package/dist/dispatch/mutate-projection.js +11 -0
- package/dist/dispatch/mutate-projection.js.map +1 -1
- package/dist/docs/docs-read-model.d.ts +7 -0
- package/dist/docs/docs-read-model.d.ts.map +1 -1
- package/dist/docs/docs-read-model.js +5 -0
- package/dist/docs/docs-read-model.js.map +1 -1
- package/dist/docs/supersede.d.ts.map +1 -1
- package/dist/docs/supersede.js +12 -7
- package/dist/docs/supersede.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +10 -9
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/git-shim-export.d.ts +18 -0
- package/dist/git-shim-export.d.ts.map +1 -0
- package/dist/git-shim-export.js +18 -0
- package/dist/git-shim-export.js.map +1 -0
- package/dist/hooks/payload-schemas.d.ts +2 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +39 -32
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +11 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +14 -5
- package/dist/internal.js.map +1 -1
- package/dist/lafs-export.d.ts +18 -0
- package/dist/lafs-export.d.ts.map +1 -0
- package/dist/lafs-export.js +18 -0
- package/dist/lafs-export.js.map +1 -0
- package/dist/lifecycle/effective-stage.js +1 -1
- package/dist/lifecycle/index.js +1 -1
- package/dist/lifecycle/index.js.map +1 -1
- package/dist/lifecycle/rollup.js +1 -1
- package/dist/llm/credential-pool.d.ts +17 -0
- package/dist/llm/credential-pool.d.ts.map +1 -1
- package/dist/llm/credential-pool.js +40 -1
- package/dist/llm/credential-pool.js.map +1 -1
- package/dist/llm/plugin-facade.d.ts.map +1 -1
- package/dist/llm/plugin-facade.js +11 -19
- package/dist/llm/plugin-facade.js.map +1 -1
- package/dist/llm/role-executor.d.ts +8 -0
- package/dist/llm/role-executor.d.ts.map +1 -1
- package/dist/llm/role-executor.js +96 -4
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +56 -1
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/transports/codex-oauth-headers.d.ts +51 -0
- package/dist/llm/transports/codex-oauth-headers.d.ts.map +1 -0
- package/dist/llm/transports/codex-oauth-headers.js +89 -0
- package/dist/llm/transports/codex-oauth-headers.js.map +1 -0
- package/dist/memory/claude-mem-migration.d.ts.map +1 -1
- package/dist/memory/claude-mem-migration.js +1 -3
- package/dist/memory/claude-mem-migration.js.map +1 -1
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +77 -23
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
- package/dist/memory/graph-memory-bridge.js +12 -6
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/learnings.d.ts +2 -2
- package/dist/memory/nexus-plasticity.d.ts +21 -9
- package/dist/memory/nexus-plasticity.d.ts.map +1 -1
- package/dist/memory/nexus-plasticity.js +44 -22
- package/dist/memory/nexus-plasticity.js.map +1 -1
- package/dist/memory/patterns.d.ts +2 -2
- package/dist/memory/redaction.d.ts +19 -3
- package/dist/memory/redaction.d.ts.map +1 -1
- package/dist/memory/redaction.js +22 -94
- package/dist/memory/redaction.js.map +1 -1
- package/dist/metrics/token-service.d.ts +8 -2
- package/dist/metrics/token-service.d.ts.map +1 -1
- package/dist/metrics/token-service.js +1 -1
- package/dist/metrics/token-service.js.map +1 -1
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +6 -8
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/api-extractors/http-extractor.d.ts.map +1 -1
- package/dist/nexus/api-extractors/http-extractor.js +3 -3
- package/dist/nexus/api-extractors/http-extractor.js.map +1 -1
- package/dist/nexus/clusters.d.ts.map +1 -1
- package/dist/nexus/clusters.js +3 -2
- package/dist/nexus/clusters.js.map +1 -1
- package/dist/nexus/context.d.ts.map +1 -1
- package/dist/nexus/context.js +10 -16
- package/dist/nexus/context.js.map +1 -1
- package/dist/nexus/diff.d.ts.map +1 -1
- package/dist/nexus/diff.js +6 -4
- package/dist/nexus/diff.js.map +1 -1
- package/dist/nexus/export.d.ts.map +1 -1
- package/dist/nexus/export.js +7 -4
- package/dist/nexus/export.js.map +1 -1
- package/dist/nexus/flows.d.ts.map +1 -1
- package/dist/nexus/flows.js +3 -1
- package/dist/nexus/flows.js.map +1 -1
- package/dist/nexus/impact.d.ts +1 -1
- package/dist/nexus/impact.d.ts.map +1 -1
- package/dist/nexus/impact.js +31 -17
- package/dist/nexus/impact.js.map +1 -1
- package/dist/nexus/living-brain.d.ts.map +1 -1
- package/dist/nexus/living-brain.js +27 -15
- package/dist/nexus/living-brain.js.map +1 -1
- package/dist/nexus/nexus-bridge.d.ts.map +1 -1
- package/dist/nexus/nexus-bridge.js +28 -29
- package/dist/nexus/nexus-bridge.js.map +1 -1
- package/dist/nexus/plasticity-queries.d.ts +4 -2
- package/dist/nexus/plasticity-queries.d.ts.map +1 -1
- package/dist/nexus/plasticity-queries.js +27 -15
- package/dist/nexus/plasticity-queries.js.map +1 -1
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +6 -2
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +65 -30
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/route-analysis.d.ts +3 -2
- package/dist/nexus/route-analysis.d.ts.map +1 -1
- package/dist/nexus/route-analysis.js +11 -10
- package/dist/nexus/route-analysis.js.map +1 -1
- package/dist/nexus/sigil.d.ts.map +1 -1
- package/dist/nexus/sigil.js +60 -13
- package/dist/nexus/sigil.js.map +1 -1
- package/dist/nexus/user-profile.d.ts +2 -1
- package/dist/nexus/user-profile.d.ts.map +1 -1
- package/dist/nexus/user-profile.js +8 -4
- package/dist/nexus/user-profile.js.map +1 -1
- package/dist/orchestrate/index.d.ts +1 -1
- package/dist/orchestrate/index.d.ts.map +1 -1
- package/dist/orchestrate/index.js +1 -1
- package/dist/orchestrate/index.js.map +1 -1
- package/dist/orchestrate/plan.d.ts +3 -3
- package/dist/orchestrate/plan.d.ts.map +1 -1
- package/dist/orchestrate/plan.js +7 -7
- package/dist/orchestrate/plan.js.map +1 -1
- package/dist/orchestrate/spawn-ops.js +2 -2
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/classify.d.ts +2 -2
- package/dist/orchestration/classify.js +3 -3
- package/dist/orchestration/classify.js.map +1 -1
- package/dist/orchestration/validate-spawn.d.ts.map +1 -1
- package/dist/orchestration/validate-spawn.js +5 -5
- package/dist/orchestration/validate-spawn.js.map +1 -1
- package/dist/paths-export.d.ts +18 -0
- package/dist/paths-export.d.ts.map +1 -0
- package/dist/paths-export.js +18 -0
- package/dist/paths-export.js.map +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +24 -11
- package/dist/paths.js.map +1 -1
- package/dist/playbooks/index.d.ts +1 -0
- package/dist/playbooks/index.d.ts.map +1 -1
- package/dist/playbooks/index.js +4 -0
- package/dist/playbooks/index.js.map +1 -1
- package/dist/playbooks/skill-node-executor.d.ts +155 -0
- package/dist/playbooks/skill-node-executor.d.ts.map +1 -0
- package/dist/playbooks/skill-node-executor.js +156 -0
- package/dist/playbooks/skill-node-executor.js.map +1 -0
- package/dist/repair.d.ts +3 -7
- package/dist/repair.d.ts.map +1 -1
- package/dist/repair.js +5 -43
- package/dist/repair.js.map +1 -1
- package/dist/sagas/migrate-containment.js +7 -7
- package/dist/sagas/migrate-containment.js.map +1 -1
- package/dist/scaffold/ensure-dirs.d.ts +8 -2
- package/dist/scaffold/ensure-dirs.d.ts.map +1 -1
- package/dist/scaffold/ensure-dirs.js +24 -11
- package/dist/scaffold/ensure-dirs.js.map +1 -1
- package/dist/scaffold/project-detection.d.ts +5 -1
- package/dist/scaffold/project-detection.d.ts.map +1 -1
- package/dist/scaffold/project-detection.js +9 -5
- package/dist/scaffold/project-detection.js.map +1 -1
- package/dist/sentient/hygiene-scan.js +6 -6
- package/dist/sentient/hygiene-scan.js.map +1 -1
- package/dist/sentient/proposal-dedup.js +2 -2
- package/dist/sentient/proposal-rate-limiter.js +1 -1
- package/dist/sentient/propose-tick.js +5 -5
- package/dist/sentient/propose-tick.js.map +1 -1
- package/dist/sentient/stage-drift-tick.js +3 -3
- package/dist/sentient/stage-drift-tick.js.map +1 -1
- package/dist/sequence/index.d.ts.map +1 -1
- package/dist/sequence/index.js +6 -2
- package/dist/sequence/index.js.map +1 -1
- package/dist/setup/sections/verification.js +2 -2
- package/dist/setup/sections/verification.js.map +1 -1
- package/dist/shutdown.d.ts +81 -0
- package/dist/shutdown.d.ts.map +1 -0
- package/dist/shutdown.js +105 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/skills/index.d.ts +2 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/skill-executor-adapter.d.ts +136 -0
- package/dist/skills/skill-executor-adapter.d.ts.map +1 -0
- package/dist/skills/skill-executor-adapter.js +137 -0
- package/dist/skills/skill-executor-adapter.js.map +1 -0
- package/dist/skills/usage-recorder.d.ts.map +1 -1
- package/dist/skills/usage-recorder.js +30 -0
- package/dist/skills/usage-recorder.js.map +1 -1
- package/dist/skills-export.d.ts +23 -0
- package/dist/skills-export.d.ts.map +1 -0
- package/dist/skills-export.js +23 -0
- package/dist/skills-export.js.map +1 -0
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/index.js +8 -3
- package/dist/stats/index.js.map +1 -1
- package/dist/store/agent-doctor.d.ts +3 -3
- package/dist/store/agent-doctor.d.ts.map +1 -1
- package/dist/store/agent-doctor.js +18 -13
- package/dist/store/agent-doctor.js.map +1 -1
- package/dist/store/agent-install.d.ts +6 -5
- package/dist/store/agent-install.d.ts.map +1 -1
- package/dist/store/agent-install.js +20 -16
- package/dist/store/agent-install.js.map +1 -1
- package/dist/store/agent-registry-accessor.d.ts +66 -28
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +248 -167
- package/dist/store/agent-registry-accessor.js.map +1 -1
- package/dist/store/agent-registry-store.d.ts +242 -0
- package/dist/store/agent-registry-store.d.ts.map +1 -0
- package/dist/store/agent-registry-store.js +501 -0
- package/dist/store/agent-registry-store.js.map +1 -0
- package/dist/store/agent-resolver.d.ts +8 -8
- package/dist/store/agent-resolver.d.ts.map +1 -1
- package/dist/store/agent-resolver.js +19 -17
- package/dist/store/agent-resolver.js.map +1 -1
- package/dist/store/backup-pack.d.ts.map +1 -1
- package/dist/store/backup-pack.js +24 -8
- package/dist/store/backup-pack.js.map +1 -1
- package/dist/store/conduit-sqlite.d.ts +181 -74
- package/dist/store/conduit-sqlite.d.ts.map +1 -1
- package/dist/store/conduit-sqlite.js +307 -528
- package/dist/store/conduit-sqlite.js.map +1 -1
- package/dist/store/cross-db-cleanup.d.ts +5 -5
- package/dist/store/cross-db-cleanup.d.ts.map +1 -1
- package/dist/store/cross-db-cleanup.js +12 -10
- package/dist/store/cross-db-cleanup.js.map +1 -1
- package/dist/store/data-accessor.d.ts +4 -4
- package/dist/store/data-accessor.js +5 -5
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/data-safety-central.d.ts +83 -1
- package/dist/store/data-safety-central.d.ts.map +1 -1
- package/dist/store/data-safety-central.js +257 -0
- package/dist/store/data-safety-central.js.map +1 -1
- package/dist/store/db-helpers.d.ts +8 -2
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +6 -2
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +46 -4
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +103 -9
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/__fixtures__/representative-fixture.d.ts +116 -0
- package/dist/store/exodus/__fixtures__/representative-fixture.d.ts.map +1 -0
- package/dist/store/exodus/__fixtures__/representative-fixture.js +274 -0
- package/dist/store/exodus/__fixtures__/representative-fixture.js.map +1 -0
- package/dist/store/exodus/index.d.ts +18 -0
- package/dist/store/exodus/index.d.ts.map +1 -0
- package/dist/store/exodus/index.js +18 -0
- package/dist/store/exodus/index.js.map +1 -0
- package/dist/store/exodus/migrate.d.ts +160 -0
- package/dist/store/exodus/migrate.d.ts.map +1 -0
- package/dist/store/exodus/migrate.js +1220 -0
- package/dist/store/exodus/migrate.js.map +1 -0
- package/dist/store/exodus/on-open.d.ts +189 -0
- package/dist/store/exodus/on-open.d.ts.map +1 -0
- package/dist/store/exodus/on-open.js +464 -0
- package/dist/store/exodus/on-open.js.map +1 -0
- package/dist/store/exodus/plan.d.ts +44 -0
- package/dist/store/exodus/plan.d.ts.map +1 -0
- package/dist/store/exodus/plan.js +178 -0
- package/dist/store/exodus/plan.js.map +1 -0
- package/dist/store/exodus/status.d.ts +22 -0
- package/dist/store/exodus/status.d.ts.map +1 -0
- package/dist/store/exodus/status.js +88 -0
- package/dist/store/exodus/status.js.map +1 -0
- package/dist/store/exodus/table-name-map.d.ts +173 -0
- package/dist/store/exodus/table-name-map.d.ts.map +1 -0
- package/dist/store/exodus/table-name-map.js +660 -0
- package/dist/store/exodus/table-name-map.js.map +1 -0
- package/dist/store/exodus/types.d.ts +169 -0
- package/dist/store/exodus/types.d.ts.map +1 -0
- package/dist/store/exodus/types.js +21 -0
- package/dist/store/exodus/types.js.map +1 -0
- package/dist/store/exodus/verify-migration.d.ts +72 -0
- package/dist/store/exodus/verify-migration.d.ts.map +1 -0
- package/dist/store/exodus/verify-migration.js +678 -0
- package/dist/store/exodus/verify-migration.js.map +1 -0
- package/dist/store/exodus/verify.d.ts +58 -0
- package/dist/store/exodus/verify.d.ts.map +1 -0
- package/dist/store/exodus/verify.js +74 -0
- package/dist/store/exodus/verify.js.map +1 -0
- package/dist/store/index.d.ts +2 -3
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +2 -3
- package/dist/store/index.js.map +1 -1
- package/dist/store/memory-accessor.d.ts +31 -0
- package/dist/store/memory-accessor.d.ts.map +1 -1
- package/dist/store/memory-accessor.js +38 -0
- package/dist/store/memory-accessor.js.map +1 -1
- package/dist/store/memory-sqlite.d.ts +86 -13
- package/dist/store/memory-sqlite.d.ts.map +1 -1
- package/dist/store/memory-sqlite.js +326 -528
- package/dist/store/memory-sqlite.js.map +1 -1
- package/dist/store/migrate-signaldock-to-conduit.d.ts +1 -1
- package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -1
- package/dist/store/migrate-signaldock-to-conduit.js +126 -35
- package/dist/store/migrate-signaldock-to-conduit.js.map +1 -1
- package/dist/store/migration-manager.d.ts +49 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +167 -67
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/migration-sqlite.d.ts +1 -1
- package/dist/store/migration-sqlite.d.ts.map +1 -1
- package/dist/store/migration-sqlite.js +32 -3
- package/dist/store/migration-sqlite.js.map +1 -1
- package/dist/store/nexus-sqlite.d.ts +152 -29
- package/dist/store/nexus-sqlite.d.ts.map +1 -1
- package/dist/store/nexus-sqlite.js +496 -177
- package/dist/store/nexus-sqlite.js.map +1 -1
- package/dist/store/nexus-validation-schemas.d.ts +32 -32
- package/dist/store/open-cleo-db.d.ts +37 -40
- package/dist/store/open-cleo-db.d.ts.map +1 -1
- package/dist/store/open-cleo-db.js +76 -153
- package/dist/store/open-cleo-db.js.map +1 -1
- package/dist/store/role-accessors-impl.d.ts +4 -4
- package/dist/store/role-accessors-impl.d.ts.map +1 -1
- package/dist/store/role-accessors-impl.js +18 -15
- package/dist/store/role-accessors-impl.js.map +1 -1
- package/dist/store/schema/{signaldock-schema.d.ts → agent-registry-schema.d.ts} +15 -5
- package/dist/store/schema/agent-registry-schema.d.ts.map +1 -0
- package/dist/store/schema/{signaldock-schema.js → agent-registry-schema.js} +15 -5
- package/dist/store/schema/agent-registry-schema.js.map +1 -0
- package/dist/store/schema/agent-schema.d.ts +1 -1
- package/dist/store/schema/agent-schema.js +4 -4
- package/dist/store/schema/agent-schema.js.map +1 -1
- package/dist/store/schema/attachments.d.ts +1 -1
- package/dist/store/schema/audit.d.ts +15 -5
- package/dist/store/schema/audit.d.ts.map +1 -1
- package/dist/store/schema/audit.js +12 -2
- package/dist/store/schema/audit.js.map +1 -1
- package/dist/store/schema/background-jobs.d.ts +1 -1
- package/dist/store/schema/cleo-global/{signaldock.d.ts → agent-registry.d.ts} +277 -271
- package/dist/store/schema/cleo-global/agent-registry.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/{signaldock.js → agent-registry.js} +136 -125
- package/dist/store/schema/cleo-global/agent-registry.js.map +1 -0
- package/dist/store/schema/cleo-global/index.d.ts +29 -22
- package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/index.js +29 -22
- package/dist/store/schema/cleo-global/index.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +36 -1034
- package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +32 -337
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/cleo-global/skills.d.ts +16 -0
- package/dist/store/schema/cleo-global/skills.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/skills.js +11 -0
- package/dist/store/schema/cleo-global/skills.js.map +1 -1
- package/dist/store/schema/{cleo-project → cleo-global}/telemetry.d.ts +33 -17
- package/dist/store/schema/cleo-global/telemetry.d.ts.map +1 -0
- package/dist/store/schema/{cleo-project → cleo-global}/telemetry.js +30 -18
- package/dist/store/schema/cleo-global/telemetry.js.map +1 -0
- package/dist/store/schema/cleo-project/audit.d.ts +8 -8
- package/dist/store/schema/cleo-project/audit.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/audit.js +2 -6
- package/dist/store/schema/cleo-project/audit.js.map +1 -1
- package/dist/store/schema/cleo-project/docs.d.ts +1 -1
- package/dist/store/schema/cleo-project/index.d.ts +29 -12
- package/dist/store/schema/cleo-project/index.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/index.js +29 -12
- package/dist/store/schema/cleo-project/index.js.map +1 -1
- package/dist/store/schema/cleo-project/lifecycle.d.ts +2 -2
- package/dist/store/schema/cleo-project/nexus-graph.d.ts +1067 -0
- package/dist/store/schema/cleo-project/nexus-graph.d.ts.map +1 -0
- package/dist/store/schema/cleo-project/nexus-graph.js +407 -0
- package/dist/store/schema/cleo-project/nexus-graph.js.map +1 -0
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts +385 -0
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts.map +1 -0
- package/dist/store/schema/cleo-project/provenance-orphans.js +142 -0
- package/dist/store/schema/cleo-project/provenance-orphans.js.map +1 -0
- package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
- package/dist/store/schema/cleo-project/runtime.d.ts +1 -1
- package/dist/store/schema/cleo-project/tasks-core-batch2.d.ts +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +3 -3
- package/dist/store/schema/cleo-shared/brain.d.ts +711 -494
- package/dist/store/schema/cleo-shared/brain.d.ts.map +1 -1
- package/dist/store/schema/cleo-shared/brain.js +215 -134
- package/dist/store/schema/cleo-shared/brain.js.map +1 -1
- package/dist/store/schema/conduit-schema.d.ts +63 -51
- package/dist/store/schema/conduit-schema.d.ts.map +1 -1
- package/dist/store/schema/conduit-schema.js +23 -11
- package/dist/store/schema/conduit-schema.js.map +1 -1
- package/dist/store/schema/goal.d.ts +3 -2
- package/dist/store/schema/goal.d.ts.map +1 -1
- package/dist/store/schema/goal.js +3 -2
- package/dist/store/schema/goal.js.map +1 -1
- package/dist/store/schema/index.d.ts +1 -0
- package/dist/store/schema/index.d.ts.map +1 -1
- package/dist/store/schema/index.js +1 -0
- package/dist/store/schema/index.js.map +1 -1
- package/dist/store/schema/lifecycle.d.ts +2 -2
- package/dist/store/schema/memory-schema.d.ts +2 -2
- package/dist/store/schema/nexus-schema.d.ts +174 -115
- package/dist/store/schema/nexus-schema.d.ts.map +1 -1
- package/dist/store/schema/nexus-schema.js +175 -55
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/schema/provenance/releases.d.ts +1 -1
- package/dist/store/schema/schema-utils.d.ts +78 -0
- package/dist/store/schema/schema-utils.d.ts.map +1 -0
- package/dist/store/schema/schema-utils.js +49 -0
- package/dist/store/schema/schema-utils.js.map +1 -0
- package/dist/store/schema/skills-schema.d.ts +81 -44
- package/dist/store/schema/skills-schema.d.ts.map +1 -1
- package/dist/store/schema/skills-schema.js +49 -16
- package/dist/store/schema/skills-schema.js.map +1 -1
- package/dist/store/schema/tasks.d.ts +3 -3
- package/dist/store/skills-db.d.ts +90 -50
- package/dist/store/skills-db.d.ts.map +1 -1
- package/dist/store/skills-db.js +132 -146
- package/dist/store/skills-db.js.map +1 -1
- package/dist/store/sqlite-backup.d.ts +2 -2
- package/dist/store/sqlite-backup.d.ts.map +1 -1
- package/dist/store/sqlite-backup.js +11 -10
- package/dist/store/sqlite-backup.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +25 -18
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +72 -12
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +153 -89
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +4 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +60 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts +2 -2
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +10 -5
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +17 -6
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +8 -8
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +241 -208
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +11 -6
- package/dist/system/health.js.map +1 -1
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +58 -12
- package/dist/system/project-health.js.map +1 -1
- package/dist/tasks/add.d.ts +8 -0
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +101 -0
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/cancelled-child-waiver-audit.d.ts +47 -0
- package/dist/tasks/cancelled-child-waiver-audit.d.ts.map +1 -0
- package/dist/tasks/cancelled-child-waiver-audit.js +34 -0
- package/dist/tasks/cancelled-child-waiver-audit.js.map +1 -0
- package/dist/tasks/complete.d.ts +22 -2
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +71 -6
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/compute-task-view.js +1 -1
- package/dist/tasks/session-scope.d.ts +5 -0
- package/dist/tasks/session-scope.d.ts.map +1 -1
- package/dist/tasks/session-scope.js +4 -0
- package/dist/tasks/session-scope.js.map +1 -1
- package/dist/tools/guard.d.ts +71 -1
- package/dist/tools/guard.d.ts.map +1 -1
- package/dist/tools/guard.js +73 -1
- package/dist/tools/guard.js.map +1 -1
- package/dist/tools/index.d.ts +21 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +25 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +22 -13
- package/dist/upgrade.js.map +1 -1
- package/dist/workgraph/containment.js +18 -18
- package/dist/workgraph/relations.js +2 -2
- package/dist/worktree/list.d.ts +1 -1
- package/dist/worktree/list.d.ts.map +1 -1
- package/dist/worktree/list.js +19 -21
- package/dist/worktree/list.js.map +1 -1
- package/dist/worktree-export.d.ts +18 -0
- package/dist/worktree-export.d.ts.map +1 -0
- package/dist/worktree-export.js +18 -0
- package/dist/worktree-export.js.map +1 -0
- package/migrations/drizzle-agent-registry/20260412000000_initial-global-agent-registry/migration.sql +29 -0
- package/migrations/drizzle-brain/20260601000001_t11522-brain-task-observations/migration.sql +28 -0
- package/migrations/drizzle-brain/20260601000002_t11522-inline-only-brain-tables/migration.sql +75 -0
- package/migrations/drizzle-cleo-global/20260531000001_t11363-consolidation-cleo-global/migration.sql +49 -144
- package/migrations/drizzle-cleo-global/20260531000001_t11363-consolidation-cleo-global/snapshot.json +8 -8
- package/migrations/drizzle-cleo-global/20260531000002_t11546-brain-usage-log/migration.sql +16 -0
- package/migrations/drizzle-cleo-global/20260601000001_t11544-skills-usage-project-id/migration.sql +12 -0
- package/migrations/drizzle-cleo-global/20260602000001_t11622-agent-registry-rename/migration.sql +80 -0
- package/migrations/drizzle-cleo-project/20260531000001_t11363-consolidation-cleo-project/migration.sql +26 -167
- package/migrations/drizzle-cleo-project/20260531000001_t11363-consolidation-cleo-project/snapshot.json +8 -8
- package/migrations/drizzle-cleo-project/20260531000002_t11546-brain-usage-log/migration.sql +21 -0
- package/migrations/drizzle-cleo-project/20260601000001_t11549-agent-credentials-brain-release-links/migration.sql +49 -0
- package/migrations/drizzle-cleo-project/20260601000002_t11538-project-nexus-graph/migration.sql +140 -0
- package/migrations/drizzle-cleo-project/20260602000002_t11649-token-usage-transport-mcp/migration.sql +146 -0
- package/migrations/drizzle-conduit/20260601000003_t11523-conduit-inline-schema/migration.sql +82 -0
- package/migrations/drizzle-nexus/20260421200001_t1165-baseline-reset/migration.sql +26 -8
- package/migrations/drizzle-nexus/20260601000001_t11545-nexus-relation-weights-partition/migration.sql +97 -0
- package/package.json +43 -11
- package/scripts/install-supervisor-binary.mjs +50 -201
- package/scripts/napi-binary-picker.mjs +267 -0
- package/dist/agents/agent-registry.d.ts.map +0 -1
- package/dist/agents/agent-registry.js.map +0 -1
- package/dist/store/data-safety.d.ts +0 -92
- package/dist/store/data-safety.d.ts.map +0 -1
- package/dist/store/data-safety.js +0 -274
- package/dist/store/data-safety.js.map +0 -1
- package/dist/store/schema/cleo-global/signaldock.d.ts.map +0 -1
- package/dist/store/schema/cleo-global/signaldock.js.map +0 -1
- package/dist/store/schema/cleo-project/telemetry.d.ts.map +0 -1
- package/dist/store/schema/cleo-project/telemetry.js.map +0 -1
- package/dist/store/schema/signaldock-schema.d.ts.map +0 -1
- package/dist/store/schema/signaldock-schema.js.map +0 -1
- package/dist/store/signaldock-sqlite.d.ts +0 -173
- package/dist/store/signaldock-sqlite.d.ts.map +0 -1
- package/dist/store/signaldock-sqlite.js +0 -445
- package/dist/store/signaldock-sqlite.js.map +0 -1
- package/migrations/drizzle-nexus/20260318205558_initial/migration.sql +0 -46
- package/migrations/drizzle-nexus/20260412000001_t529-nexus-graph-tables/migration.sql +0 -49
- package/migrations/drizzle-nexus/20260415000001_t622-project-registry-paths/migration.sql +0 -12
- package/migrations/drizzle-nexus/20260419000001_t998-nexus-plasticity/migration.sql +0 -13
- package/migrations/drizzle-nexus/20260423052640_t1077-add-user-profile-table/migration.sql +0 -16
- package/migrations/drizzle-nexus/20260423052640_t1077-add-user-profile-table/snapshot.json +0 -1531
- package/migrations/drizzle-nexus/20260424140538_t1148-add-sigils-table/migration.sql +0 -13
- package/migrations/drizzle-nexus/20260424140538_t1148-add-sigils-table/snapshot.json +0 -1652
- package/migrations/drizzle-nexus/20260504000001_t1839-fts5-nexus-symbols/migration.sql +0 -68
- package/migrations/drizzle-nexus/20260507135519_t9163-nexus-is-external/migration.sql +0 -20
- package/migrations/drizzle-nexus/20260507135519_t9163-nexus-is-external/snapshot.json +0 -1652
- package/migrations/drizzle-nexus/20260526222449_t11025-project-id-aliases/migration.sql +0 -16
- package/migrations/drizzle-signaldock/20260412000000_initial-global-signaldock/migration.sql +0 -209
- package/migrations/drizzle-signaldock/20260412000000_initial-global-signaldock/snapshot.json +0 -2060
|
@@ -1,229 +1,78 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Postinstall picker for
|
|
4
|
-
* (T11340 — SG-RUNTIME-UNIFICATION R1
|
|
3
|
+
* Postinstall picker entrypoint for CLEO-managed native binaries
|
|
4
|
+
* (T11340 — SG-RUNTIME-UNIFICATION R1; extended T11580 — R10-L1).
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* Historically this script resolved ONLY the `cleo-supervisor` executable. As
|
|
7
|
+
* of R10-L1 (T11580) it drives the SAME picker over BOTH CLEO-managed native
|
|
8
|
+
* binaries — `cleo-supervisor` and `worktree-napi` — via the shared
|
|
9
|
+
* {@link pickBinary} module. The resolution + verification flow (P2 download +
|
|
10
|
+
* sha256 fail-closed + `CLEO_NAPI_BINARY_MIRROR` override + idempotent cache
|
|
11
|
+
* reuse + P1 bundled fallback) is identical for both; only the manifest,
|
|
12
|
+
* fallback path, and cache filename differ per binary.
|
|
7
13
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* publish time, never fetched). The manifest pins the GitHub Release
|
|
13
|
-
* base URL + per-triple sha256 + filename.
|
|
14
|
-
* 3. If the binary is already cached + sha256-valid, reuse it (idempotent).
|
|
15
|
-
* 4. Otherwise download `<baseUrl>/<file>` (base URL overridable via
|
|
16
|
-
* `CLEO_NAPI_BINARY_MIRROR`), verify sha256 against the manifest
|
|
17
|
-
* (FAIL CLOSED on mismatch), write atomically (tmp-then-rename), chmod +x.
|
|
18
|
-
* 5. P1 fallback: when the download is unavailable (offline, `--ignore-scripts`
|
|
19
|
-
* so this never ran, or a mirror outage) AND the bundled
|
|
20
|
-
* `binaries/fallback/cleo-supervisor` matches the host triple
|
|
21
|
-
* (linux-x64-gnu), use it.
|
|
14
|
+
* The package `postinstall` invokes this once. Each binary is resolved
|
|
15
|
+
* independently and best-effort — a failure of one never blocks the other, and
|
|
16
|
+
* neither ever fails `npm install` (graceful degrade; the dependent feature is
|
|
17
|
+
* resolved on first use).
|
|
22
18
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
19
|
+
* Standalone binary specs:
|
|
20
|
+
*
|
|
21
|
+
* - `cleo-supervisor`: a single executable per triple, cached as
|
|
22
|
+
* `cleo-supervisor<ext>` and chmod +x.
|
|
23
|
+
* - `worktree-napi`: a napi-rs `.node` addon, cached as
|
|
24
|
+
* `worktree-napi.<triple>.node` (no exec bit needed — it is `require()`d).
|
|
28
25
|
*
|
|
29
26
|
* @task T11340
|
|
27
|
+
* @task T11580
|
|
30
28
|
*/
|
|
31
29
|
|
|
32
|
-
import { createHash } from 'node:crypto';
|
|
33
|
-
import {
|
|
34
|
-
chmodSync,
|
|
35
|
-
copyFileSync,
|
|
36
|
-
existsSync,
|
|
37
|
-
mkdirSync,
|
|
38
|
-
readFileSync,
|
|
39
|
-
renameSync,
|
|
40
|
-
rmSync,
|
|
41
|
-
writeFileSync,
|
|
42
|
-
} from 'node:fs';
|
|
43
|
-
import { homedir, platform as osPlatform } from 'node:os';
|
|
44
30
|
import { dirname, join } from 'node:path';
|
|
45
31
|
import { fileURLToPath } from 'node:url';
|
|
32
|
+
import { pickBinary } from './napi-binary-picker.mjs';
|
|
46
33
|
|
|
47
34
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
48
35
|
|
|
49
36
|
/** Package root: packages/core (scripts/ is a direct child). */
|
|
50
37
|
const PKG_ROOT = join(__dirname, '..');
|
|
51
38
|
|
|
52
|
-
/**
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
/** Bundled P1 fallback binary (linux-x64-gnu only). */
|
|
56
|
-
const FALLBACK_BIN = join(PKG_ROOT, 'binaries', 'fallback', 'cleo-supervisor');
|
|
57
|
-
|
|
58
|
-
/** The single triple the P1 fallback binary targets. */
|
|
59
|
-
const FALLBACK_TRIPLE = 'linux-x64-gnu';
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Resolve the platform triple for the current host.
|
|
63
|
-
*
|
|
64
|
-
* @returns {{ triple: string; ext: string } | null} Triple + binary extension,
|
|
65
|
-
* or null if the host platform/arch is unsupported.
|
|
66
|
-
*/
|
|
67
|
-
function resolveTriple() {
|
|
68
|
-
const p = process.platform;
|
|
69
|
-
const a = process.arch;
|
|
70
|
-
if (p === 'linux' && a === 'x64') return { triple: 'linux-x64-gnu', ext: '' };
|
|
71
|
-
if (p === 'linux' && a === 'arm64') return { triple: 'linux-arm64-gnu', ext: '' };
|
|
72
|
-
if (p === 'darwin' && a === 'x64') return { triple: 'darwin-x64', ext: '' };
|
|
73
|
-
if (p === 'darwin' && a === 'arm64') return { triple: 'darwin-arm64', ext: '' };
|
|
74
|
-
if (p === 'win32' && a === 'x64') return { triple: 'win32-x64-msvc', ext: '.exe' };
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
39
|
+
/** Directory holding the checked-in manifests + bundled P1 fallbacks. */
|
|
40
|
+
const BINARIES_DIR = join(PKG_ROOT, 'binaries');
|
|
77
41
|
|
|
78
42
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* through to the descriptive "unsupported" path.
|
|
82
|
-
*
|
|
83
|
-
* @returns {boolean} True when the host appears to be musl-based.
|
|
43
|
+
* The CLEO-managed native binaries resolved at postinstall. Each entry is a
|
|
44
|
+
* {@link import('./napi-binary-picker.mjs').BinarySpec}.
|
|
84
45
|
*/
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
function sha256(buf) {
|
|
102
|
-
return createHash('sha256').update(buf).digest('hex');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/** Cache directory for the resolved binary: `<cache>/cleo/napi-bin/<version>/`. */
|
|
106
|
-
function cacheDir(version) {
|
|
107
|
-
// Mirror env-paths('cleo', {suffix:''}).cache without importing @cleocode/paths
|
|
108
|
-
// (this script runs in postinstall where workspace deps may not be linked yet).
|
|
109
|
-
const p = process.platform;
|
|
110
|
-
if (p === 'win32') {
|
|
111
|
-
const local = process.env.LOCALAPPDATA ?? join(homedir(), 'AppData', 'Local');
|
|
112
|
-
return join(local, 'cleo', 'Cache', 'napi-bin', version);
|
|
113
|
-
}
|
|
114
|
-
if (p === 'darwin') {
|
|
115
|
-
return join(homedir(), 'Library', 'Caches', 'cleo', 'napi-bin', version);
|
|
116
|
-
}
|
|
117
|
-
const xdg = process.env.XDG_CACHE_HOME;
|
|
118
|
-
const base = xdg && xdg.startsWith('/') ? xdg : join(homedir(), '.cache');
|
|
119
|
-
return join(base, 'cleo', 'napi-bin', version);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/** Write `buf` to `dest` atomically (tmp-then-rename) and chmod +x. */
|
|
123
|
-
function writeBinaryAtomic(dest, buf) {
|
|
124
|
-
mkdirSync(dirname(dest), { recursive: true });
|
|
125
|
-
const tmp = `${dest}.${process.pid}.tmp`;
|
|
126
|
-
writeFileSync(tmp, buf);
|
|
127
|
-
chmodSync(tmp, 0o755);
|
|
128
|
-
renameSync(tmp, dest);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/** Use the bundled P1 fallback if it matches the host triple. */
|
|
132
|
-
function tryFallback(triple, dest) {
|
|
133
|
-
if (triple !== FALLBACK_TRIPLE || !existsSync(FALLBACK_BIN)) return false;
|
|
134
|
-
try {
|
|
135
|
-
mkdirSync(dirname(dest), { recursive: true });
|
|
136
|
-
const tmp = `${dest}.${process.pid}.fallback.tmp`;
|
|
137
|
-
copyFileSync(FALLBACK_BIN, tmp);
|
|
138
|
-
chmodSync(tmp, 0o755);
|
|
139
|
-
renameSync(tmp, dest);
|
|
140
|
-
console.log(`[cleo-supervisor] using bundled P1 fallback for ${triple}`);
|
|
141
|
-
return true;
|
|
142
|
-
} catch (err) {
|
|
143
|
-
console.warn(`[cleo-supervisor] fallback copy failed: ${err?.message ?? err}`);
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
46
|
+
const BINARY_SPECS = [
|
|
47
|
+
{
|
|
48
|
+
label: 'cleo-supervisor',
|
|
49
|
+
manifestPath: join(BINARIES_DIR, 'cleo-supervisor-manifest.json'),
|
|
50
|
+
fallbackPath: join(BINARIES_DIR, 'fallback', 'cleo-supervisor'),
|
|
51
|
+
executable: true,
|
|
52
|
+
cachedName: (_triple, ext) => `cleo-supervisor${ext}`,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
label: 'worktree-napi',
|
|
56
|
+
manifestPath: join(BINARIES_DIR, 'worktree-napi-manifest.json'),
|
|
57
|
+
fallbackPath: join(BINARIES_DIR, 'fallback', 'worktree-napi.linux-x64-gnu.node'),
|
|
58
|
+
executable: false,
|
|
59
|
+
cachedName: (triple) => `worktree-napi.${triple}.node`,
|
|
60
|
+
},
|
|
61
|
+
];
|
|
147
62
|
|
|
148
63
|
async function main() {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
(
|
|
154
|
-
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
const { triple, ext } = resolved;
|
|
159
|
-
|
|
160
|
-
if (!existsSync(MANIFEST_PATH)) {
|
|
161
|
-
console.warn(
|
|
162
|
-
`[cleo-supervisor] manifest missing at ${MANIFEST_PATH} — skipping binary install` +
|
|
163
|
-
' (development checkout or --ignore-scripts publish).',
|
|
164
|
-
);
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/** @type {{version:string; baseUrl:string; binaries:Record<string,{file:string; sha256:string; size:number}>}} */
|
|
169
|
-
const manifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8'));
|
|
170
|
-
const entry = manifest.binaries?.[triple];
|
|
171
|
-
if (!entry) {
|
|
172
|
-
console.warn(`[cleo-supervisor] manifest has no entry for ${triple} — skipping.`);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
const dest = join(cacheDir(manifest.version), `cleo-supervisor${ext}`);
|
|
177
|
-
|
|
178
|
-
// Idempotent: reuse a cached binary that already matches the pinned sha256.
|
|
179
|
-
if (existsSync(dest)) {
|
|
180
|
-
try {
|
|
181
|
-
if (sha256(readFileSync(dest)) === entry.sha256) {
|
|
182
|
-
console.log(`[cleo-supervisor] cached binary OK at ${dest}`);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
} catch {
|
|
186
|
-
// fall through to re-download
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// CLEO_NAPI_BINARY_MIRROR overrides the download base URL (corporate proxies).
|
|
191
|
-
const mirror = process.env.CLEO_NAPI_BINARY_MIRROR?.replace(/\/+$/, '');
|
|
192
|
-
const base = mirror ?? manifest.baseUrl;
|
|
193
|
-
const url = `${base}/${entry.file}`;
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
const res = await fetch(url);
|
|
197
|
-
if (!res.ok) {
|
|
198
|
-
throw new Error(`HTTP ${res.status} for ${url}`);
|
|
199
|
-
}
|
|
200
|
-
const buf = Buffer.from(await res.arrayBuffer());
|
|
201
|
-
const digest = sha256(buf);
|
|
202
|
-
if (digest !== entry.sha256) {
|
|
203
|
-
// FAIL CLOSED on the bytes — never install a tampered binary.
|
|
204
|
-
throw new Error(
|
|
205
|
-
`sha256 mismatch for ${triple}: expected ${entry.sha256}, got ${digest} — refusing to install`,
|
|
206
|
-
);
|
|
207
|
-
}
|
|
208
|
-
writeBinaryAtomic(dest, buf);
|
|
209
|
-
console.log(`[cleo-supervisor] installed ${triple} -> ${dest} (sha256 verified)`);
|
|
210
|
-
} catch (err) {
|
|
211
|
-
console.warn(`[cleo-supervisor] download failed: ${err?.message ?? err}`);
|
|
212
|
-
if (tryFallback(triple, dest)) return;
|
|
213
|
-
// Clean a partial cache entry, then degrade gracefully.
|
|
214
|
-
try {
|
|
215
|
-
rmSync(dest, { force: true });
|
|
216
|
-
} catch {
|
|
217
|
-
/* ignore */
|
|
218
|
-
}
|
|
219
|
-
console.warn(
|
|
220
|
-
`[cleo-supervisor] binary unavailable for ${triple}; daemon features deferred until first use.`,
|
|
221
|
-
);
|
|
222
|
-
}
|
|
64
|
+
// Resolve each binary independently — one failure must not block the other.
|
|
65
|
+
await Promise.all(
|
|
66
|
+
BINARY_SPECS.map((spec) =>
|
|
67
|
+
pickBinary(spec).catch((err) => {
|
|
68
|
+
console.warn(`[${spec.label}] picker error (non-fatal): ${err?.message ?? err}`);
|
|
69
|
+
}),
|
|
70
|
+
),
|
|
71
|
+
);
|
|
223
72
|
}
|
|
224
73
|
|
|
225
74
|
main().catch((err) => {
|
|
226
75
|
// postinstall must never break `npm install`.
|
|
227
|
-
console.warn(`[cleo-
|
|
76
|
+
console.warn(`[cleo-napi] postinstall picker error (non-fatal): ${err?.message ?? err}`);
|
|
228
77
|
process.exit(0);
|
|
229
78
|
});
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Shared postinstall picker for CLEO-managed native binaries
|
|
4
|
+
* (T11580 — R10-L1 · SG-PACKAGE-ARCH; generalizes the T11340 supervisor picker).
|
|
5
|
+
*
|
|
6
|
+
* Two binaries flow through this single picker:
|
|
7
|
+
*
|
|
8
|
+
* - `cleo-supervisor` — the standalone process supervisor executable
|
|
9
|
+
* (`crates/cleo-supervisor`). A single exec per triple.
|
|
10
|
+
* - `worktree-napi` — the napi-rs Node-API addon (`crates/worktree-napi`)
|
|
11
|
+
* consumed by `@cleocode/worktree`. The host-triple `.node` is cached so the
|
|
12
|
+
* worktree loader resolves a core-managed path instead of bundling all four
|
|
13
|
+
* `.node` files in the `@cleocode/worktree` tarball.
|
|
14
|
+
*
|
|
15
|
+
* Both follow Distribution Pattern P2 (primary) + P1 (fallback):
|
|
16
|
+
*
|
|
17
|
+
* 1. Resolve the platform triple from `process.platform` + `process.arch` +
|
|
18
|
+
* libc (gnu/musl on Linux).
|
|
19
|
+
* 2. Read the sha256 manifest CHECKED INTO this package (P2 — pinned at
|
|
20
|
+
* publish time, never fetched). The manifest pins the GitHub Release base
|
|
21
|
+
* URL + per-triple sha256 + filename.
|
|
22
|
+
* 3. If the binary is already cached + sha256-valid, reuse it (idempotent).
|
|
23
|
+
* 4. Otherwise download `<baseUrl>/<file>` (base URL overridable via
|
|
24
|
+
* `CLEO_NAPI_BINARY_MIRROR`), verify sha256 against the manifest
|
|
25
|
+
* (FAIL CLOSED on mismatch), write atomically (tmp-then-rename), chmod +x
|
|
26
|
+
* for executables.
|
|
27
|
+
* 5. P1 fallback: when the download is unavailable (offline, `--ignore-scripts`
|
|
28
|
+
* so this never ran, or a mirror outage) AND the bundled
|
|
29
|
+
* `binaries/fallback/<fallbackFile>` matches the host triple
|
|
30
|
+
* (linux-x64-gnu), use it.
|
|
31
|
+
*
|
|
32
|
+
* postinstall MUST NOT fail the install — a missing binary degrades gracefully
|
|
33
|
+
* (the dependent feature is resolved on first use). Callers therefore exit 0
|
|
34
|
+
* even on download failure, logging a diagnostic. The fail-closed sha256 check
|
|
35
|
+
* applies to the BYTES (a tampered download is rejected); it does not abort
|
|
36
|
+
* `npm install`.
|
|
37
|
+
*
|
|
38
|
+
* @task T11580
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
import { createHash } from 'node:crypto';
|
|
42
|
+
import {
|
|
43
|
+
chmodSync,
|
|
44
|
+
copyFileSync,
|
|
45
|
+
existsSync,
|
|
46
|
+
mkdirSync,
|
|
47
|
+
readFileSync,
|
|
48
|
+
renameSync,
|
|
49
|
+
rmSync,
|
|
50
|
+
writeFileSync,
|
|
51
|
+
} from 'node:fs';
|
|
52
|
+
import { homedir, platform as osPlatform } from 'node:os';
|
|
53
|
+
import { dirname, join } from 'node:path';
|
|
54
|
+
|
|
55
|
+
/** The single triple every P1 fallback binary targets. */
|
|
56
|
+
export const FALLBACK_TRIPLE = 'linux-x64-gnu';
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Resolve the platform triple for the current host.
|
|
60
|
+
*
|
|
61
|
+
* @returns {{ triple: string; ext: string } | null} Triple + executable
|
|
62
|
+
* extension (`.exe` on Windows, `''` elsewhere), or null if the host
|
|
63
|
+
* platform/arch is unsupported. `ext` only applies to standalone
|
|
64
|
+
* executables; napi `.node` addons ignore it.
|
|
65
|
+
*/
|
|
66
|
+
export function resolveTriple() {
|
|
67
|
+
const p = process.platform;
|
|
68
|
+
const a = process.arch;
|
|
69
|
+
if (p === 'linux' && a === 'x64') return { triple: 'linux-x64-gnu', ext: '' };
|
|
70
|
+
if (p === 'linux' && a === 'arm64') return { triple: 'linux-arm64-gnu', ext: '' };
|
|
71
|
+
if (p === 'darwin' && a === 'x64') return { triple: 'darwin-x64', ext: '' };
|
|
72
|
+
if (p === 'darwin' && a === 'arm64') return { triple: 'darwin-arm64', ext: '' };
|
|
73
|
+
if (p === 'win32' && a === 'x64') return { triple: 'win32-x64-msvc', ext: '.exe' };
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Detect whether the Linux host uses musl libc (Alpine et al.). The published
|
|
79
|
+
* Linux binaries are gnu-only; a musl host has no matching prebuild and falls
|
|
80
|
+
* through to the descriptive "unsupported" path.
|
|
81
|
+
*
|
|
82
|
+
* @returns {boolean} True when the host appears to be musl-based.
|
|
83
|
+
*/
|
|
84
|
+
export function isMuslLinux() {
|
|
85
|
+
if (osPlatform() !== 'linux') return false;
|
|
86
|
+
try {
|
|
87
|
+
// The simplest robust signal available without spawning: the ldd report
|
|
88
|
+
// embedded in process.report (Node exposes glibc/musl there on Linux).
|
|
89
|
+
const report =
|
|
90
|
+
typeof process.report?.getReport === 'function' ? process.report.getReport() : null;
|
|
91
|
+
const glibc = report?.header?.glibcVersionRuntime;
|
|
92
|
+
// glibcVersionRuntime present => glibc; absent on musl.
|
|
93
|
+
return !glibc;
|
|
94
|
+
} catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Compute the sha256 hex digest of a buffer. */
|
|
100
|
+
export function sha256(buf) {
|
|
101
|
+
return createHash('sha256').update(buf).digest('hex');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Cache directory for resolved native binaries:
|
|
106
|
+
* `<cache>/cleo/napi-bin/<version>/`.
|
|
107
|
+
*
|
|
108
|
+
* Mirrors `env-paths('cleo', {suffix:''}).cache` without importing
|
|
109
|
+
* `@cleocode/paths` (this runs in postinstall where workspace deps may not be
|
|
110
|
+
* linked yet).
|
|
111
|
+
*
|
|
112
|
+
* @param {string} version - The manifest version segment.
|
|
113
|
+
* @returns {string} Absolute cache directory path.
|
|
114
|
+
*/
|
|
115
|
+
export function cacheDir(version) {
|
|
116
|
+
const p = process.platform;
|
|
117
|
+
if (p === 'win32') {
|
|
118
|
+
const local = process.env.LOCALAPPDATA ?? join(homedir(), 'AppData', 'Local');
|
|
119
|
+
return join(local, 'cleo', 'Cache', 'napi-bin', version);
|
|
120
|
+
}
|
|
121
|
+
if (p === 'darwin') {
|
|
122
|
+
return join(homedir(), 'Library', 'Caches', 'cleo', 'napi-bin', version);
|
|
123
|
+
}
|
|
124
|
+
const xdg = process.env.XDG_CACHE_HOME;
|
|
125
|
+
const base = xdg && xdg.startsWith('/') ? xdg : join(homedir(), '.cache');
|
|
126
|
+
return join(base, 'cleo', 'napi-bin', version);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Write `buf` to `dest` atomically (tmp-then-rename). Executables are chmod'd
|
|
131
|
+
* +x; napi `.node` addons are loaded by `require()` and need no exec bit.
|
|
132
|
+
*
|
|
133
|
+
* @param {string} dest - Destination path.
|
|
134
|
+
* @param {Buffer} buf - Bytes to write.
|
|
135
|
+
* @param {boolean} executable - Whether to chmod 0o755.
|
|
136
|
+
*/
|
|
137
|
+
function writeBinaryAtomic(dest, buf, executable) {
|
|
138
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
139
|
+
const tmp = `${dest}.${process.pid}.tmp`;
|
|
140
|
+
writeFileSync(tmp, buf);
|
|
141
|
+
if (executable) chmodSync(tmp, 0o755);
|
|
142
|
+
renameSync(tmp, dest);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Copy the bundled P1 fallback into the cache if it matches the host triple.
|
|
147
|
+
*
|
|
148
|
+
* @param {object} spec - The binary spec (see {@link pickBinary}).
|
|
149
|
+
* @param {string} triple - The resolved host triple.
|
|
150
|
+
* @param {string} dest - Cache destination path.
|
|
151
|
+
* @returns {boolean} True when the fallback was used.
|
|
152
|
+
*/
|
|
153
|
+
function tryFallback(spec, triple, dest) {
|
|
154
|
+
if (triple !== FALLBACK_TRIPLE || !existsSync(spec.fallbackPath)) return false;
|
|
155
|
+
try {
|
|
156
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
157
|
+
const tmp = `${dest}.${process.pid}.fallback.tmp`;
|
|
158
|
+
copyFileSync(spec.fallbackPath, tmp);
|
|
159
|
+
if (spec.executable) chmodSync(tmp, 0o755);
|
|
160
|
+
renameSync(tmp, dest);
|
|
161
|
+
console.log(`[${spec.label}] using bundled P1 fallback for ${triple}`);
|
|
162
|
+
return true;
|
|
163
|
+
} catch (err) {
|
|
164
|
+
console.warn(`[${spec.label}] fallback copy failed: ${err?.message ?? err}`);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* @typedef {object} BinarySpec
|
|
171
|
+
* @property {string} label - Diagnostic label, e.g. `cleo-supervisor`.
|
|
172
|
+
* @property {string} manifestPath - Absolute path to the checked-in sha256
|
|
173
|
+
* manifest (P2).
|
|
174
|
+
* @property {string} fallbackPath - Absolute path to the bundled P1 fallback
|
|
175
|
+
* binary (linux-x64-gnu).
|
|
176
|
+
* @property {boolean} executable - Whether the resolved binary is a standalone
|
|
177
|
+
* executable (`true` → chmod +x) or a napi `.node` addon (`false`).
|
|
178
|
+
* @property {(triple: string, ext: string) => string} cachedName - The basename
|
|
179
|
+
* the binary is cached under in `<cache>/napi-bin/<version>/`. Supervisor uses
|
|
180
|
+
* `cleo-supervisor<ext>`; worktree-napi uses `worktree-napi.<triple>.node`.
|
|
181
|
+
*/
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Resolve a single CLEO-managed native binary into the shared cache following
|
|
185
|
+
* Distribution Pattern P2 (download + sha256) with a P1 (bundled fallback) safety
|
|
186
|
+
* net. Never throws to the caller for install-failure conditions — degrades
|
|
187
|
+
* gracefully and logs.
|
|
188
|
+
*
|
|
189
|
+
* @param {BinarySpec} spec - The per-binary distribution spec.
|
|
190
|
+
* @returns {Promise<void>}
|
|
191
|
+
*/
|
|
192
|
+
export async function pickBinary(spec) {
|
|
193
|
+
const resolved = resolveTriple();
|
|
194
|
+
if (!resolved) {
|
|
195
|
+
console.warn(
|
|
196
|
+
`[${spec.label}] no prebuilt binary for ${process.platform}/${process.arch}` +
|
|
197
|
+
(isMuslLinux() ? ' (musl libc — only gnu Linux prebuilds are published)' : '') +
|
|
198
|
+
' — feature unavailable until resolved on first use.',
|
|
199
|
+
);
|
|
200
|
+
return; // graceful: do not fail install
|
|
201
|
+
}
|
|
202
|
+
const { triple, ext } = resolved;
|
|
203
|
+
|
|
204
|
+
if (!existsSync(spec.manifestPath)) {
|
|
205
|
+
console.warn(
|
|
206
|
+
`[${spec.label}] manifest missing at ${spec.manifestPath} — skipping binary install` +
|
|
207
|
+
' (development checkout or --ignore-scripts publish).',
|
|
208
|
+
);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** @type {{version:string; baseUrl:string; binaries:Record<string,{file:string; sha256:string; size:number}>}} */
|
|
213
|
+
const manifest = JSON.parse(readFileSync(spec.manifestPath, 'utf8'));
|
|
214
|
+
const entry = manifest.binaries?.[triple];
|
|
215
|
+
if (!entry) {
|
|
216
|
+
console.warn(`[${spec.label}] manifest has no entry for ${triple} — skipping.`);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const dest = join(cacheDir(manifest.version), spec.cachedName(triple, ext));
|
|
221
|
+
|
|
222
|
+
// Idempotent: reuse a cached binary that already matches the pinned sha256.
|
|
223
|
+
if (existsSync(dest)) {
|
|
224
|
+
try {
|
|
225
|
+
if (sha256(readFileSync(dest)) === entry.sha256) {
|
|
226
|
+
console.log(`[${spec.label}] cached binary OK at ${dest}`);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
} catch {
|
|
230
|
+
// fall through to re-download
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// CLEO_NAPI_BINARY_MIRROR overrides the download base URL (corporate proxies).
|
|
235
|
+
const mirror = process.env.CLEO_NAPI_BINARY_MIRROR?.replace(/\/+$/, '');
|
|
236
|
+
const base = mirror ?? manifest.baseUrl;
|
|
237
|
+
const url = `${base}/${entry.file}`;
|
|
238
|
+
|
|
239
|
+
try {
|
|
240
|
+
const res = await fetch(url);
|
|
241
|
+
if (!res.ok) {
|
|
242
|
+
throw new Error(`HTTP ${res.status} for ${url}`);
|
|
243
|
+
}
|
|
244
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
245
|
+
const digest = sha256(buf);
|
|
246
|
+
if (digest !== entry.sha256) {
|
|
247
|
+
// FAIL CLOSED on the bytes — never install a tampered binary.
|
|
248
|
+
throw new Error(
|
|
249
|
+
`sha256 mismatch for ${triple}: expected ${entry.sha256}, got ${digest} — refusing to install`,
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
writeBinaryAtomic(dest, buf, spec.executable);
|
|
253
|
+
console.log(`[${spec.label}] installed ${triple} -> ${dest} (sha256 verified)`);
|
|
254
|
+
} catch (err) {
|
|
255
|
+
console.warn(`[${spec.label}] download failed: ${err?.message ?? err}`);
|
|
256
|
+
if (tryFallback(spec, triple, dest)) return;
|
|
257
|
+
// Clean a partial cache entry, then degrade gracefully.
|
|
258
|
+
try {
|
|
259
|
+
rmSync(dest, { force: true });
|
|
260
|
+
} catch {
|
|
261
|
+
/* ignore */
|
|
262
|
+
}
|
|
263
|
+
console.warn(
|
|
264
|
+
`[${spec.label}] binary unavailable for ${triple}; feature deferred until first use.`,
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../../src/agents/agent-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,yBAAyB,CAAC;AAOjC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAMrC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,mCAAmC;IACnC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,EAAE,qBAAqB,CAAC;IAC/B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;CACnD;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA+C/B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,CAAC,EAAE,SAAS,EACrB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,EAAE,CAAC,CAc1B;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkB9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAwB1B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,uBAAuB,EAChC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/agents/agent-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Data Safety Module - Critical protection layer for CLEO data operations.
|
|
3
|
-
*
|
|
4
|
-
* Implements:
|
|
5
|
-
* - Write verification (verify data was actually persisted)
|
|
6
|
-
* - Collision detection (prevent duplicate task IDs)
|
|
7
|
-
* - Sequence validation (ensure sequence counter matches database)
|
|
8
|
-
* - Auto-checkpoint integration (git commit after writes)
|
|
9
|
-
*
|
|
10
|
-
* @task T4739
|
|
11
|
-
* @epic T4732
|
|
12
|
-
*/
|
|
13
|
-
import type { Session, Task } from '@cleocode/contracts';
|
|
14
|
-
/** Safety configuration options. */
|
|
15
|
-
export interface SafetyConfig {
|
|
16
|
-
/** Enable write verification (default: true) */
|
|
17
|
-
verifyWrites: boolean;
|
|
18
|
-
/** Enable collision detection (default: true) */
|
|
19
|
-
detectCollisions: boolean;
|
|
20
|
-
/** Enable sequence validation (default: true) */
|
|
21
|
-
validateSequence: boolean;
|
|
22
|
-
/** Enable auto-checkpoint (default: true) */
|
|
23
|
-
autoCheckpoint: boolean;
|
|
24
|
-
/** Throw on safety violations (default: true) */
|
|
25
|
-
strictMode: boolean;
|
|
26
|
-
}
|
|
27
|
-
/** Safety violation error. */
|
|
28
|
-
export declare class SafetyError extends Error {
|
|
29
|
-
code: string;
|
|
30
|
-
details?: Record<string, unknown> | undefined;
|
|
31
|
-
constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Check if a task ID already exists (collision detection).
|
|
35
|
-
* @throws SafetyError if task exists and strict mode is enabled
|
|
36
|
-
*/
|
|
37
|
-
export declare function checkTaskExists(taskId: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
|
|
38
|
-
/**
|
|
39
|
-
* Verify a task was actually written to the database.
|
|
40
|
-
* @throws SafetyError if verification fails
|
|
41
|
-
*/
|
|
42
|
-
export declare function verifyTaskWrite(taskId: string, expectedData?: Partial<Task>, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
|
|
43
|
-
/**
|
|
44
|
-
* Validate and repair sequence if necessary.
|
|
45
|
-
* @returns true if sequence was valid or successfully repaired
|
|
46
|
-
*/
|
|
47
|
-
export declare function validateAndRepairSequence(cwd?: string, config?: Partial<SafetyConfig>): Promise<{
|
|
48
|
-
valid: boolean;
|
|
49
|
-
repaired: boolean;
|
|
50
|
-
oldCounter?: number;
|
|
51
|
-
newCounter?: number;
|
|
52
|
-
}>;
|
|
53
|
-
/**
|
|
54
|
-
* Trigger auto-checkpoint after successful write.
|
|
55
|
-
*/
|
|
56
|
-
export declare function triggerCheckpoint(context: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Safely create a task with all safety mechanisms.
|
|
59
|
-
* Wraps the actual createTask operation.
|
|
60
|
-
*/
|
|
61
|
-
export declare function safeCreateTask(createFn: () => Promise<Task>, task: Task, cwd?: string, config?: Partial<SafetyConfig>): Promise<Task>;
|
|
62
|
-
/**
|
|
63
|
-
* Safely update a task with all safety mechanisms.
|
|
64
|
-
*/
|
|
65
|
-
export declare function safeUpdateTask(updateFn: () => Promise<Task | null>, taskId: string, _updates: Partial<Task>, cwd?: string, config?: Partial<SafetyConfig>): Promise<Task | null>;
|
|
66
|
-
/**
|
|
67
|
-
* Safely delete a task with all safety mechanisms.
|
|
68
|
-
*/
|
|
69
|
-
export declare function safeDeleteTask(deleteFn: () => Promise<boolean>, taskId: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
|
|
70
|
-
/**
|
|
71
|
-
* Verify session write.
|
|
72
|
-
*/
|
|
73
|
-
export declare function verifySessionWrite(sessionId: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
|
|
74
|
-
/**
|
|
75
|
-
* Safely create a session with all safety mechanisms.
|
|
76
|
-
*/
|
|
77
|
-
export declare function safeCreateSession(createFn: () => Promise<Session>, session: Session, cwd?: string, config?: Partial<SafetyConfig>): Promise<Session>;
|
|
78
|
-
/**
|
|
79
|
-
* Force a checkpoint before destructive operations.
|
|
80
|
-
* Use this before migrations, bulk updates, etc.
|
|
81
|
-
*/
|
|
82
|
-
export declare function forceCheckpointBeforeOperation(operation: string, cwd?: string): Promise<void>;
|
|
83
|
-
/**
|
|
84
|
-
* Run comprehensive data integrity check.
|
|
85
|
-
* Reports all issues found.
|
|
86
|
-
*/
|
|
87
|
-
export declare function runDataIntegrityCheck(cwd?: string): Promise<{
|
|
88
|
-
passed: boolean;
|
|
89
|
-
issues: string[];
|
|
90
|
-
repairs: string[];
|
|
91
|
-
}>;
|
|
92
|
-
//# sourceMappingURL=data-safety.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-safety.d.ts","sourceRoot":"","sources":["../../src/store/data-safety.ts"],"names":[],"mappings":"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"}
|