@cleocode/core 2026.10.4 → 2026.10.5
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/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +7 -37
- package/dist/bootstrap.js.map +1 -1
- package/dist/build-provenance.json +2 -2
- package/dist/caamp/adapter.d.ts.map +1 -1
- package/dist/caamp/adapter.js +5 -2
- package/dist/caamp/adapter.js.map +1 -1
- package/dist/changesets/parse-frontmatter.d.ts +1 -1
- package/dist/changesets/parse-frontmatter.d.ts.map +1 -1
- package/dist/changesets/parse-frontmatter.js +2 -1
- package/dist/changesets/parse-frontmatter.js.map +1 -1
- package/dist/changesets/parser.d.ts +1 -1
- package/dist/changesets/parser.d.ts.map +1 -1
- package/dist/changesets/parser.js +2 -1
- package/dist/changesets/parser.js.map +1 -1
- package/dist/changesets/writer.d.ts +8 -1
- package/dist/changesets/writer.d.ts.map +1 -1
- package/dist/changesets/writer.js +56 -5
- package/dist/changesets/writer.js.map +1 -1
- package/dist/cloud/keys.d.ts +9 -0
- package/dist/cloud/keys.d.ts.map +1 -1
- package/dist/cloud/keys.js +11 -0
- package/dist/cloud/keys.js.map +1 -1
- package/dist/cloud/nexus-attach.d.ts +17 -0
- package/dist/cloud/nexus-attach.d.ts.map +1 -1
- package/dist/cloud/nexus-attach.js +30 -9
- package/dist/cloud/nexus-attach.js.map +1 -1
- package/dist/cloud/nexus-auth.d.ts +7 -1
- package/dist/cloud/nexus-auth.d.ts.map +1 -1
- package/dist/cloud/nexus-auth.js +7 -1
- package/dist/cloud/nexus-auth.js.map +1 -1
- package/dist/cloud/nexus-cloud-activity.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-activity.js +2 -1
- package/dist/cloud/nexus-cloud-activity.js.map +1 -1
- package/dist/cloud/nexus-cloud-conflicts.d.ts +48 -0
- package/dist/cloud/nexus-cloud-conflicts.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud-conflicts.js +68 -0
- package/dist/cloud/nexus-cloud-conflicts.js.map +1 -0
- package/dist/cloud/nexus-cloud-status.d.ts +42 -6
- package/dist/cloud/nexus-cloud-status.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-status.js +233 -19
- package/dist/cloud/nexus-cloud-status.js.map +1 -1
- package/dist/cloud/nexus-cloud.d.ts +18 -1
- package/dist/cloud/nexus-cloud.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud.js +56 -2
- package/dist/cloud/nexus-cloud.js.map +1 -1
- package/dist/cloud/nexus-credentials.d.ts +1 -1
- package/dist/cloud/nexus-credentials.d.ts.map +1 -1
- package/dist/cloud/nexus-credentials.js +1 -1
- package/dist/cloud/nexus-credentials.js.map +1 -1
- package/dist/cloud/nexus-enrol.d.ts +1 -1
- package/dist/cloud/nexus-enrol.d.ts.map +1 -1
- package/dist/cloud/nexus-enrol.js +2 -1
- package/dist/cloud/nexus-enrol.js.map +1 -1
- package/dist/cloud/nexus-first-run.d.ts +6 -2
- package/dist/cloud/nexus-first-run.d.ts.map +1 -1
- package/dist/cloud/nexus-first-run.js +8 -2
- package/dist/cloud/nexus-first-run.js.map +1 -1
- package/dist/cloud/nexus-link.d.ts +35 -4
- package/dist/cloud/nexus-link.d.ts.map +1 -1
- package/dist/cloud/nexus-link.js +172 -7
- package/dist/cloud/nexus-link.js.map +1 -1
- package/dist/cloud/nexus-presence-refresh.d.ts +65 -0
- package/dist/cloud/nexus-presence-refresh.d.ts.map +1 -0
- package/dist/cloud/nexus-presence-refresh.js +122 -0
- package/dist/cloud/nexus-presence-refresh.js.map +1 -0
- package/dist/cloud/nexus-project-history.d.ts +54 -0
- package/dist/cloud/nexus-project-history.d.ts.map +1 -0
- package/dist/cloud/nexus-project-history.js +108 -0
- package/dist/cloud/nexus-project-history.js.map +1 -0
- package/dist/cloud/nexus-vault-keys.d.ts.map +1 -1
- package/dist/cloud/nexus-vault-keys.js +12 -6
- package/dist/cloud/nexus-vault-keys.js.map +1 -1
- package/dist/cloud/nexus-vault.d.ts +7 -3
- package/dist/cloud/nexus-vault.d.ts.map +1 -1
- package/dist/cloud/nexus-vault.js +176 -29
- package/dist/cloud/nexus-vault.js.map +1 -1
- package/dist/cloud/presence.d.ts +1 -1
- package/dist/cloud/presence.d.ts.map +1 -1
- package/dist/cloud/presence.js +1 -1
- package/dist/cloud/presence.js.map +1 -1
- package/dist/cloud/projects.d.ts +7 -4
- package/dist/cloud/projects.d.ts.map +1 -1
- package/dist/cloud/projects.js +10 -1
- package/dist/cloud/projects.js.map +1 -1
- package/dist/cloud/signing.d.ts +14 -0
- package/dist/cloud/signing.d.ts.map +1 -1
- package/dist/cloud/signing.js +9 -0
- package/dist/cloud/signing.js.map +1 -1
- package/dist/conduit/cloud-endpoint.d.ts +96 -0
- package/dist/conduit/cloud-endpoint.d.ts.map +1 -0
- package/dist/conduit/cloud-endpoint.js +191 -0
- package/dist/conduit/cloud-endpoint.js.map +1 -0
- package/dist/conduit/conduit-client.d.ts.map +1 -1
- package/dist/conduit/conduit-client.js +2 -1
- package/dist/conduit/conduit-client.js.map +1 -1
- package/dist/conduit/factory.d.ts +4 -0
- package/dist/conduit/factory.d.ts.map +1 -1
- package/dist/conduit/factory.js +7 -1
- package/dist/conduit/factory.js.map +1 -1
- package/dist/conduit/http-transport.d.ts +12 -7
- package/dist/conduit/http-transport.d.ts.map +1 -1
- package/dist/conduit/http-transport.js +18 -11
- package/dist/conduit/http-transport.js.map +1 -1
- package/dist/conduit/index.d.ts +3 -1
- package/dist/conduit/index.d.ts.map +1 -1
- package/dist/conduit/index.js +3 -1
- package/dist/conduit/index.js.map +1 -1
- package/dist/conduit/sse-transport.d.ts +5 -1
- package/dist/conduit/sse-transport.d.ts.map +1 -1
- package/dist/conduit/sse-transport.js +10 -2
- package/dist/conduit/sse-transport.js.map +1 -1
- package/dist/config/registry.js +1 -1
- package/dist/config/registry.js.map +1 -1
- package/dist/core-paths.d.ts +13 -0
- package/dist/core-paths.d.ts.map +1 -0
- package/dist/core-paths.js +13 -0
- package/dist/core-paths.js.map +1 -0
- package/dist/decide/bench/source.js +1 -1
- package/dist/decide/bench/source.js.map +1 -1
- package/dist/decide/client.d.ts +1 -1
- package/dist/decide/client.d.ts.map +1 -1
- package/dist/decide/client.js +1 -1
- package/dist/decide/client.js.map +1 -1
- package/dist/decide/credentials.d.ts +1 -1
- package/dist/decide/credentials.d.ts.map +1 -1
- package/dist/decide/credentials.js +1 -1
- package/dist/decide/credentials.js.map +1 -1
- package/dist/decide/jev-wire.d.ts +1 -1
- package/dist/decide/jev-wire.d.ts.map +1 -1
- package/dist/decide/jev-wire.js +1 -1
- package/dist/decide/jev-wire.js.map +1 -1
- package/dist/decide/operations.d.ts +1 -1
- package/dist/decide/operations.d.ts.map +1 -1
- package/dist/decide/operations.js +1 -1
- package/dist/decide/operations.js.map +1 -1
- package/dist/decide/providers.d.ts +1 -1
- package/dist/decide/providers.d.ts.map +1 -1
- package/dist/decide/providers.js +1 -1
- package/dist/decide/providers.js.map +1 -1
- package/dist/decide/wizard.d.ts.map +1 -1
- package/dist/decide/wizard.js +1 -1
- package/dist/decide/wizard.js.map +1 -1
- package/dist/dispatch/config-domain-handler.d.ts +1 -1
- package/dist/dispatch/config-domain-handler.d.ts.map +1 -1
- package/dist/dispatch/config-domain-handler.js +1 -1
- package/dist/dispatch/config-domain-handler.js.map +1 -1
- package/dist/dispatch/contracts/ensures-schema.d.ts +1 -1
- package/dist/dispatch/contracts/ensures-schema.d.ts.map +1 -1
- package/dist/dispatch/contracts/ensures-schema.js +1 -1
- package/dist/dispatch/contracts/ensures-schema.js.map +1 -1
- package/dist/dispatch/contracts/input-contracts.d.ts +1 -1
- package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
- package/dist/dispatch/contracts/input-contracts.js +3 -1
- package/dist/dispatch/contracts/input-contracts.js.map +1 -1
- package/dist/dispatch/describe-operation.d.ts +1 -1
- package/dist/dispatch/describe-operation.d.ts.map +1 -1
- package/dist/dispatch/describe-operation.js +1 -1
- package/dist/dispatch/describe-operation.js.map +1 -1
- package/dist/docs/display-alias.js +1 -1
- package/dist/docs/display-alias.js.map +1 -1
- package/dist/docs/docs-update.d.ts +1 -1
- package/dist/docs/docs-update.d.ts.map +1 -1
- package/dist/docs/docs-update.js +2 -1
- package/dist/docs/docs-update.js.map +1 -1
- package/dist/docs/export-document.js +14 -58300
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/publish-pr.js +1 -1
- package/dist/docs/publish-pr.js.map +1 -1
- package/dist/docs/supersede.js +1 -1
- package/dist/docs/supersede.js.map +1 -1
- package/dist/docs/validate-body.d.ts +1 -1
- package/dist/docs/validate-body.d.ts.map +1 -1
- package/dist/docs/validate-body.js +1 -1
- package/dist/docs/validate-body.js.map +1 -1
- package/dist/docs/writer-registry.js +1 -1
- package/dist/docs/writer-registry.js.map +1 -1
- package/dist/doctor/acceptance-drift.js +1 -1
- package/dist/doctor/acceptance-drift.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts +1 -1
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +1 -1
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/doctor/invariant-audit.js +1 -1
- package/dist/doctor/invariant-audit.js.map +1 -1
- package/dist/doctor/malformed-task-ids.js +1 -1
- package/dist/doctor/malformed-task-ids.js.map +1 -1
- package/dist/doctor/row-identity-refill.d.ts +43 -0
- package/dist/doctor/row-identity-refill.d.ts.map +1 -0
- package/dist/doctor/row-identity-refill.js +186 -0
- package/dist/doctor/row-identity-refill.js.map +1 -0
- package/dist/doctor/superseded-store.d.ts.map +1 -1
- package/dist/doctor/superseded-store.js +51 -2
- package/dist/doctor/superseded-store.js.map +1 -1
- package/dist/doctor/sync-repair.d.ts +39 -0
- package/dist/doctor/sync-repair.d.ts.map +1 -0
- package/dist/doctor/sync-repair.js +71 -0
- package/dist/doctor/sync-repair.js.map +1 -0
- package/dist/doctor/sync-triggers.d.ts +63 -4
- package/dist/doctor/sync-triggers.d.ts.map +1 -1
- package/dist/doctor/sync-triggers.js +352 -9
- package/dist/doctor/sync-triggers.js.map +1 -1
- package/dist/doctor/twin-collapse.js +1 -1
- package/dist/doctor/twin-collapse.js.map +1 -1
- package/dist/engine/engine-ops.d.ts.map +1 -1
- package/dist/engine/engine-ops.js +7 -1
- package/dist/engine/engine-ops.js.map +1 -1
- package/dist/engine-result.d.ts +1 -1
- package/dist/engine-result.d.ts.map +1 -1
- package/dist/engine-result.js +1 -1
- package/dist/engine-result.js.map +1 -1
- package/dist/error-registry.d.ts +1 -1
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/error-registry.js +1 -1
- package/dist/error-registry.js.map +1 -1
- package/dist/errors-to-engine.d.ts +20 -0
- package/dist/errors-to-engine.d.ts.map +1 -1
- package/dist/errors-to-engine.js +37 -0
- package/dist/errors-to-engine.js.map +1 -1
- package/dist/gc/janitor.d.ts +23 -4
- package/dist/gc/janitor.d.ts.map +1 -1
- package/dist/gc/janitor.js +71 -11
- package/dist/gc/janitor.js.map +1 -1
- package/dist/goal/continuation.d.ts +1 -1
- package/dist/goal/continuation.d.ts.map +1 -1
- package/dist/goal/continuation.js +1 -1
- package/dist/goal/continuation.js.map +1 -1
- package/dist/goal/judge.d.ts.map +1 -1
- package/dist/goal/judge.js +2 -1
- package/dist/goal/judge.js.map +1 -1
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +1 -1
- package/dist/hooks/handlers/session-hooks.js.map +1 -1
- package/dist/init/engine-ops.js +1 -1
- package/dist/init/engine-ops.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +10 -41
- package/dist/init.js.map +1 -1
- package/dist/inject/index.js +1 -1
- package/dist/inject/index.js.map +1 -1
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +13 -0
- package/dist/injection.js.map +1 -1
- package/dist/internal.d.ts +4 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +7 -4
- package/dist/internal.js.map +1 -1
- package/dist/issue/create.js +1 -1
- package/dist/issue/create.js.map +1 -1
- package/dist/json-schema-validator.js +1 -1
- package/dist/json-schema-validator.js.map +1 -1
- package/dist/lifecycle/index.d.ts +2 -23
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +5 -112
- package/dist/lifecycle/index.js.map +1 -1
- package/dist/lifecycle/kind-requirements.d.ts +1 -1
- package/dist/lifecycle/kind-requirements.d.ts.map +1 -1
- package/dist/lifecycle/kind-requirements.js +1 -1
- package/dist/lifecycle/kind-requirements.js.map +1 -1
- package/dist/lifecycle/pipeline.js +1 -1
- package/dist/lifecycle/pipeline.js.map +1 -1
- package/dist/lifecycle/resume.js +2 -2
- package/dist/lifecycle/resume.js.map +1 -1
- package/dist/lifecycle/state-machine.js +1 -1
- package/dist/lifecycle/state-machine.js.map +1 -1
- package/dist/lifecycle/status.d.ts +46 -0
- package/dist/lifecycle/status.d.ts.map +1 -0
- package/dist/lifecycle/status.js +147 -0
- package/dist/lifecycle/status.js.map +1 -0
- package/dist/lifecycle/verification/satisfies-validator.js +1 -1
- package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
- package/dist/llm/catalog-seeder.d.ts +1 -1
- package/dist/llm/catalog-seeder.d.ts.map +1 -1
- package/dist/llm/catalog-seeder.js +1 -1
- package/dist/llm/catalog-seeder.js.map +1 -1
- package/dist/llm/cli-ops.d.ts +1 -2
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +2 -1
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/credential-seeders/claude-code-seeder.js +1 -1
- package/dist/llm/credential-seeders/claude-code-seeder.js.map +1 -1
- package/dist/llm/credential-seeders/cleo-pkce-seeder.js +1 -1
- package/dist/llm/credential-seeders/cleo-pkce-seeder.js.map +1 -1
- package/dist/llm/credential-writeback.js +1 -1
- package/dist/llm/credential-writeback.js.map +1 -1
- package/dist/llm/entity-ops.d.ts +1 -1
- package/dist/llm/entity-ops.d.ts.map +1 -1
- package/dist/llm/entity-ops.js +2 -1
- package/dist/llm/entity-ops.js.map +1 -1
- package/dist/llm/llm-queue-admit.d.ts +1 -1
- package/dist/llm/llm-queue-admit.d.ts.map +1 -1
- package/dist/llm/llm-queue-admit.js +2 -1
- package/dist/llm/llm-queue-admit.js.map +1 -1
- package/dist/llm/onboarding/login-engine.js +1 -1
- package/dist/llm/onboarding/login-engine.js.map +1 -1
- package/dist/llm/pi/pi-errors.d.ts +1 -1
- package/dist/llm/pi/pi-errors.d.ts.map +1 -1
- package/dist/llm/pi/pi-errors.js +1 -1
- package/dist/llm/pi/pi-errors.js.map +1 -1
- package/dist/llm/plugin-facade.d.ts.map +1 -1
- package/dist/llm/plugin-facade.js +14 -93552
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/system-key.d.ts +1 -1
- package/dist/llm/system-key.d.ts.map +1 -1
- package/dist/llm/system-key.js +1 -1
- package/dist/llm/system-key.js.map +1 -1
- package/dist/llm/system-of-use-registry.d.ts +1 -1
- package/dist/llm/system-of-use-registry.d.ts.map +1 -1
- package/dist/llm/system-of-use-registry.js +1 -1
- package/dist/llm/system-of-use-registry.js.map +1 -1
- package/dist/llm/system-resolver.js +1 -1
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/memory/brain-host.d.ts +71 -0
- package/dist/memory/brain-host.d.ts.map +1 -0
- package/dist/memory/brain-host.js +84 -0
- package/dist/memory/brain-host.js.map +1 -0
- package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
- package/dist/memory/brain-writer-handlers.js +24 -7
- package/dist/memory/brain-writer-handlers.js.map +1 -1
- package/dist/memory/brain-writer-thread.d.ts +66 -6
- package/dist/memory/brain-writer-thread.d.ts.map +1 -1
- package/dist/memory/brain-writer-thread.js +67 -10
- package/dist/memory/brain-writer-thread.js.map +1 -1
- package/dist/memory/brain-writer-worker.js +7 -0
- package/dist/memory/brain-writer-worker.js.map +1 -1
- package/dist/memory/decisions.js +2 -1
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/embedding-backfill.d.ts +70 -0
- package/dist/memory/embedding-backfill.d.ts.map +1 -0
- package/dist/memory/embedding-backfill.js +110 -0
- package/dist/memory/embedding-backfill.js.map +1 -0
- package/dist/memory/index.js +1 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/manifest-identity.js +1 -1
- package/dist/memory/manifest-identity.js.map +1 -1
- package/dist/memory/retrieval/observe.d.ts +23 -0
- package/dist/memory/retrieval/observe.d.ts.map +1 -1
- package/dist/memory/retrieval/observe.js +82 -36
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/metrics/model-provider-registry.d.ts.map +1 -1
- package/dist/metrics/model-provider-registry.js +6 -0
- package/dist/metrics/model-provider-registry.js.map +1 -1
- package/dist/metrics/token-service.d.ts +17 -0
- package/dist/metrics/token-service.d.ts.map +1 -1
- package/dist/metrics/token-service.js +17 -0
- package/dist/metrics/token-service.js.map +1 -1
- package/dist/migration/index.js +1 -1
- package/dist/migration/index.js.map +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js.map +1 -1
- package/dist/nexus/assessment-projection.d.ts +1 -1
- package/dist/nexus/assessment-projection.d.ts.map +1 -1
- package/dist/nexus/assessment-projection.js +1 -1
- package/dist/nexus/assessment-projection.js.map +1 -1
- package/dist/nexus/deps.d.ts +1 -1
- package/dist/nexus/deps.d.ts.map +1 -1
- package/dist/nexus/deps.js +1 -1
- package/dist/nexus/deps.js.map +1 -1
- package/dist/nexus/fleet-status.d.ts +1 -1
- package/dist/nexus/fleet-status.d.ts.map +1 -1
- package/dist/nexus/fleet-status.js +1 -1
- package/dist/nexus/fleet-status.js.map +1 -1
- package/dist/nexus/identity.js +1 -1
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/permissions.d.ts +1 -1
- package/dist/nexus/permissions.d.ts.map +1 -1
- package/dist/nexus/permissions.js +1 -1
- package/dist/nexus/permissions.js.map +1 -1
- package/dist/nexus/query-dsl.js +1 -1
- package/dist/nexus/query-dsl.js.map +1 -1
- package/dist/nexus/query.d.ts +1 -2
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +1 -1
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-errors.js +1 -1
- package/dist/nexus/registry-errors.js.map +1 -1
- package/dist/nexus/registry.d.ts +1 -1
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +1 -1
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/workspace.js +1 -1
- package/dist/nexus/workspace.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +2 -1
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestrate/query-ops.js +1 -1
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestrate/spawn-ops.js +1 -1
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/atomicity.d.ts +1 -1
- package/dist/orchestration/atomicity.d.ts.map +1 -1
- package/dist/orchestration/atomicity.js +1 -1
- package/dist/orchestration/atomicity.js.map +1 -1
- package/dist/orchestration/classify.js +1 -1
- package/dist/orchestration/classify.js.map +1 -1
- package/dist/orchestration/index.js +1 -1
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/parallel.js +1 -1
- package/dist/orchestration/parallel.js.map +1 -1
- package/dist/orchestration/protocol-validators.d.ts +1 -1
- package/dist/orchestration/protocol-validators.d.ts.map +1 -1
- package/dist/orchestration/protocol-validators.js +1 -1
- package/dist/orchestration/protocol-validators.js.map +1 -1
- package/dist/orchestration/skill-ops.js +1 -1
- package/dist/orchestration/skill-ops.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts +9 -0
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +13 -2
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/spawn.js +1 -1
- package/dist/orchestration/spawn.js.map +1 -1
- package/dist/paths.d.ts +3 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +3 -1
- package/dist/paths.js.map +1 -1
- package/dist/phases/deps.js +1 -1
- package/dist/phases/deps.js.map +1 -1
- package/dist/phases/index.js +1 -1
- package/dist/phases/index.js.map +1 -1
- package/dist/project-lifecycle.js +3 -3
- package/dist/project-lifecycle.js.map +1 -1
- package/dist/registrations.d.ts +30 -0
- package/dist/registrations.d.ts.map +1 -0
- package/dist/registrations.js +30 -0
- package/dist/registrations.js.map +1 -0
- package/dist/release/changesets-aggregator.js +1 -1
- package/dist/release/changesets-aggregator.js.map +1 -1
- package/dist/release/ci-evidence.d.ts +68 -2
- package/dist/release/ci-evidence.d.ts.map +1 -1
- package/dist/release/ci-evidence.js +203 -39
- package/dist/release/ci-evidence.js.map +1 -1
- package/dist/release/invariants/archive-reason-invariant.d.ts +1 -1
- package/dist/release/invariants/archive-reason-invariant.d.ts.map +1 -1
- package/dist/release/invariants/archive-reason-invariant.js +1 -1
- package/dist/release/invariants/archive-reason-invariant.js.map +1 -1
- package/dist/release/invariants/registry.d.ts +1 -1
- package/dist/release/invariants/registry.d.ts.map +1 -1
- package/dist/release/invariants/registry.js +1 -1
- package/dist/release/invariants/registry.js.map +1 -1
- package/dist/release/open.d.ts +1 -1
- package/dist/release/open.d.ts.map +1 -1
- package/dist/release/open.js +3 -1
- package/dist/release/open.js.map +1 -1
- package/dist/release/plan.d.ts +1 -2
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +4 -1
- package/dist/release/plan.js.map +1 -1
- package/dist/release/pr-evidence.d.ts +1 -1
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +2 -2
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/release/preflight-skip.d.ts +5 -0
- package/dist/release/preflight-skip.d.ts.map +1 -1
- package/dist/release/preflight-skip.js +60 -1
- package/dist/release/preflight-skip.js.map +1 -1
- package/dist/release/reconcile.d.ts +1 -1
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +19 -3
- package/dist/release/reconcile.js.map +1 -1
- package/dist/release/version-bump.d.ts +1 -1
- package/dist/release/version-bump.d.ts.map +1 -1
- package/dist/release/version-bump.js +1 -1
- package/dist/release/version-bump.js.map +1 -1
- package/dist/resources/admission-ledger.d.ts +587 -0
- package/dist/resources/admission-ledger.d.ts.map +1 -0
- package/dist/resources/admission-ledger.js +1401 -0
- package/dist/resources/admission-ledger.js.map +1 -0
- package/dist/resources/backend.d.ts +37 -1
- package/dist/resources/backend.d.ts.map +1 -1
- package/dist/resources/backend.js +1 -1
- package/dist/resources/darwin-backend.d.ts +152 -26
- package/dist/resources/darwin-backend.d.ts.map +1 -1
- package/dist/resources/darwin-backend.js +217 -34
- package/dist/resources/darwin-backend.js.map +1 -1
- package/dist/resources/governor.d.ts +36 -39
- package/dist/resources/governor.d.ts.map +1 -1
- package/dist/resources/governor.js +140 -49
- package/dist/resources/governor.js.map +1 -1
- package/dist/resources/pressure-gate.d.ts +148 -0
- package/dist/resources/pressure-gate.d.ts.map +1 -0
- package/dist/resources/pressure-gate.js +273 -0
- package/dist/resources/pressure-gate.js.map +1 -0
- package/dist/resources/run-admission.d.ts +33 -45
- package/dist/resources/run-admission.d.ts.map +1 -1
- package/dist/resources/run-admission.js +50 -118
- package/dist/resources/run-admission.js.map +1 -1
- package/dist/resources/run-class.d.ts +60 -4
- package/dist/resources/run-class.d.ts.map +1 -1
- package/dist/resources/run-class.js +473 -6
- package/dist/resources/run-class.js.map +1 -1
- package/dist/resources/run-governed.d.ts +43 -11
- package/dist/resources/run-governed.d.ts.map +1 -1
- package/dist/resources/run-governed.js +139 -99
- package/dist/resources/run-governed.js.map +1 -1
- package/dist/resources/slot-holder.d.ts +12 -4
- package/dist/resources/slot-holder.d.ts.map +1 -1
- package/dist/resources/slot-holder.js +19 -14
- package/dist/resources/slot-holder.js.map +1 -1
- package/dist/resources/spawn-wrapper.js +1 -1
- package/dist/resources/spawn-wrapper.js.map +1 -1
- package/dist/resources/supervisor-admit.d.ts +1 -1
- package/dist/resources/supervisor-admit.d.ts.map +1 -1
- package/dist/resources/supervisor-admit.js +2 -1
- package/dist/resources/supervisor-admit.js.map +1 -1
- package/dist/runtime/openapi/generate-openapi.d.ts +1 -1
- package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -1
- package/dist/runtime/openapi/generate-openapi.js +1 -1
- package/dist/runtime/openapi/generate-openapi.js.map +1 -1
- package/dist/sagas/index.d.ts +3 -1
- package/dist/sagas/index.d.ts.map +1 -1
- package/dist/sagas/index.js +2 -5
- package/dist/sagas/index.js.map +1 -1
- package/dist/scaffold/project-identity.js +1 -1
- package/dist/scaffold/project-identity.js.map +1 -1
- package/dist/sdk/validator-attest.d.ts +1 -1
- package/dist/sdk/validator-attest.d.ts.map +1 -1
- package/dist/sdk/validator-attest.js +1 -1
- package/dist/sdk/validator-attest.js.map +1 -1
- package/dist/sdk/validator-reject.d.ts +1 -1
- package/dist/sdk/validator-reject.d.ts.map +1 -1
- package/dist/sdk/validator-reject.js +1 -1
- package/dist/sdk/validator-reject.js.map +1 -1
- package/dist/security/input-sanitization.js +2 -1
- package/dist/security/input-sanitization.js.map +1 -1
- package/dist/security/override-cap.js +1 -1
- package/dist/security/override-cap.js.map +1 -1
- package/dist/security/owner-override-auth.js +1 -1
- package/dist/security/owner-override-auth.js.map +1 -1
- package/dist/security/shared-evidence-tracker.js +1 -1
- package/dist/security/shared-evidence-tracker.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +35 -93037
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +3 -0
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/tick.d.ts +7 -0
- package/dist/sentient/tick.d.ts.map +1 -1
- package/dist/sentient/tick.js +11 -0
- package/dist/sentient/tick.js.map +1 -1
- package/dist/sequence/index.js +1 -1
- package/dist/sequence/index.js.map +1 -1
- package/dist/session/engine-ops.d.ts +3 -45
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +63 -112
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/session/status-op.d.ts +40 -0
- package/dist/session/status-op.d.ts.map +1 -0
- package/dist/session/status-op.js +71 -0
- package/dist/session/status-op.js.map +1 -0
- package/dist/session/task-current.d.ts +31 -0
- package/dist/session/task-current.d.ts.map +1 -0
- package/dist/session/task-current.js +59 -0
- package/dist/session/task-current.js.map +1 -0
- package/dist/sessions/assumptions.d.ts +1 -1
- package/dist/sessions/assumptions.d.ts.map +1 -1
- package/dist/sessions/assumptions.js +1 -1
- package/dist/sessions/assumptions.js.map +1 -1
- package/dist/sessions/context-inject.js +1 -1
- package/dist/sessions/context-inject.js.map +1 -1
- package/dist/sessions/decisions.d.ts +1 -1
- package/dist/sessions/decisions.d.ts.map +1 -1
- package/dist/sessions/decisions.js +1 -1
- package/dist/sessions/decisions.js.map +1 -1
- package/dist/sessions/focus-state-store.d.ts.map +1 -1
- package/dist/sessions/focus-state-store.js +2 -1
- package/dist/sessions/focus-state-store.js.map +1 -1
- package/dist/sessions/handoff.js +1 -1
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +1 -2
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +3 -2
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-drift.js +1 -1
- package/dist/sessions/session-drift.js.map +1 -1
- package/dist/sessions/session-end-snapshot-entry.d.ts +4 -0
- package/dist/sessions/session-end-snapshot-entry.d.ts.map +1 -1
- package/dist/sessions/session-end-snapshot-entry.js +11 -0
- package/dist/sessions/session-end-snapshot-entry.js.map +1 -1
- package/dist/sessions/session-end-snapshot.d.ts.map +1 -1
- package/dist/sessions/session-end-snapshot.js +4 -0
- package/dist/sessions/session-end-snapshot.js.map +1 -1
- package/dist/sessions/session-enforcement.js +1 -1
- package/dist/sessions/session-enforcement.js.map +1 -1
- package/dist/sessions/session-show.d.ts +1 -2
- package/dist/sessions/session-show.d.ts.map +1 -1
- package/dist/sessions/session-show.js +1 -1
- package/dist/sessions/session-show.js.map +1 -1
- package/dist/sessions/session-stats.js +1 -1
- package/dist/sessions/session-stats.js.map +1 -1
- package/dist/sessions/session-suspend.d.ts +1 -2
- package/dist/sessions/session-suspend.d.ts.map +1 -1
- package/dist/sessions/session-suspend.js +1 -1
- package/dist/sessions/session-suspend.js.map +1 -1
- package/dist/sessions/session-switch.js +1 -1
- package/dist/sessions/session-switch.js.map +1 -1
- package/dist/sessions/snapshot.js +1 -1
- package/dist/sessions/snapshot.js.map +1 -1
- package/dist/sessions/terminal-identity.d.ts +1 -1
- package/dist/sessions/terminal-identity.d.ts.map +1 -1
- package/dist/sessions/terminal-identity.js +1 -1
- package/dist/sessions/terminal-identity.js.map +1 -1
- package/dist/setup/sections/integrations.d.ts.map +1 -1
- package/dist/setup/sections/integrations.js +9 -0
- package/dist/setup/sections/integrations.js.map +1 -1
- package/dist/setup/sections/models-roles.js +1 -1
- package/dist/setup/sections/models-roles.js.map +1 -1
- package/dist/setup/sections/verification.d.ts.map +1 -1
- package/dist/setup/sections/verification.js +8 -2
- package/dist/setup/sections/verification.js.map +1 -1
- package/dist/shutdown.d.ts +24 -0
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +30 -1
- package/dist/shutdown.js.map +1 -1
- package/dist/skills/agents/install.d.ts +46 -6
- package/dist/skills/agents/install.d.ts.map +1 -1
- package/dist/skills/agents/install.js +86 -17
- package/dist/skills/agents/install.js.map +1 -1
- package/dist/skills/injection/subagent.js +1 -1
- package/dist/skills/injection/subagent.js.map +1 -1
- package/dist/skills/manifests/research.d.ts.map +1 -1
- package/dist/skills/manifests/research.js +2 -1
- package/dist/skills/manifests/research.js.map +1 -1
- package/dist/skills/orchestrator/spawn.js +1 -1
- package/dist/skills/orchestrator/spawn.js.map +1 -1
- package/dist/skills/orchestrator/validator.js +1 -1
- package/dist/skills/orchestrator/validator.js.map +1 -1
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +13 -0
- package/dist/snapshot/index.js.map +1 -1
- package/dist/spawn/agent-identity.js +1 -1
- package/dist/spawn/agent-identity.js.map +1 -1
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/index.js +2 -1
- package/dist/stats/index.js.map +1 -1
- package/dist/store/agent-install.d.ts.map +1 -1
- package/dist/store/agent-install.js +2 -1
- package/dist/store/agent-install.js.map +1 -1
- package/dist/store/agent-registry-accessor.d.ts +1 -0
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +3 -1
- package/dist/store/agent-registry-accessor.js.map +1 -1
- package/dist/store/atomic.js +1 -1
- package/dist/store/atomic.js.map +1 -1
- package/dist/store/attachment-store.js +1 -1
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/audit-log-schema.d.ts +645 -0
- package/dist/store/audit-log-schema.d.ts.map +1 -0
- package/dist/store/audit-log-schema.js +30 -0
- package/dist/store/audit-log-schema.js.map +1 -0
- package/dist/store/background-ops.d.ts +26 -0
- package/dist/store/background-ops.d.ts.map +1 -1
- package/dist/store/background-ops.js +46 -0
- package/dist/store/background-ops.js.map +1 -1
- package/dist/store/backup-recover.d.ts +36 -1
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +99 -1
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/backup-verify.d.ts +1 -1
- package/dist/store/backup-verify.d.ts.map +1 -1
- package/dist/store/backup-verify.js +6 -1
- package/dist/store/backup-verify.js.map +1 -1
- package/dist/store/backup.js +1 -1
- package/dist/store/backup.js.map +1 -1
- package/dist/store/conduit-sqlite.d.ts.map +1 -1
- package/dist/store/conduit-sqlite.js +2 -26
- package/dist/store/conduit-sqlite.js.map +1 -1
- package/dist/store/converters.js +1 -1
- package/dist/store/converters.js.map +1 -1
- package/dist/store/db-helpers.js +1 -1
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dependency-cycles.js +1 -1
- package/dist/store/dependency-cycles.js.map +1 -1
- package/dist/store/display-id-alias.d.ts +2 -2
- package/dist/store/display-id-alias.d.ts.map +1 -1
- package/dist/store/display-id-alias.js +5 -28
- package/dist/store/display-id-alias.js.map +1 -1
- package/dist/store/drizzle-node-sqlite.d.ts +56 -0
- package/dist/store/drizzle-node-sqlite.d.ts.map +1 -0
- package/dist/store/drizzle-node-sqlite.js +87 -0
- package/dist/store/drizzle-node-sqlite.js.map +1 -0
- package/dist/store/dual-scope-db.d.ts +26 -33
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +416 -127
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/abort-events.d.ts +134 -0
- package/dist/store/exodus/abort-events.d.ts.map +1 -1
- package/dist/store/exodus/abort-events.js +201 -0
- package/dist/store/exodus/abort-events.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts +7 -0
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +156 -118
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts +36 -0
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +102 -27
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/prior-recoveries.d.ts +75 -0
- package/dist/store/exodus/prior-recoveries.d.ts.map +1 -0
- package/dist/store/exodus/prior-recoveries.js +122 -0
- package/dist/store/exodus/prior-recoveries.js.map +1 -0
- package/dist/store/exodus/reconcile.d.ts.map +1 -1
- package/dist/store/exodus/reconcile.js +188 -24
- package/dist/store/exodus/reconcile.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +3 -3
- package/dist/store/exodus/runtime-targets.js +3 -3
- package/dist/store/exodus/task-id-collision-sql.d.ts +52 -0
- package/dist/store/exodus/task-id-collision-sql.d.ts.map +1 -0
- package/dist/store/exodus/task-id-collision-sql.js +97 -0
- package/dist/store/exodus/task-id-collision-sql.js.map +1 -0
- package/dist/store/exodus/task-id-remap.d.ts +113 -0
- package/dist/store/exodus/task-id-remap.d.ts.map +1 -0
- package/dist/store/exodus/task-id-remap.js +301 -0
- package/dist/store/exodus/task-id-remap.js.map +1 -0
- package/dist/store/exodus/verify-migration.js +1 -1
- package/dist/store/exodus/verify-migration.js.map +1 -1
- package/dist/store/exodus/write-guard.d.ts +136 -0
- package/dist/store/exodus/write-guard.d.ts.map +1 -0
- package/dist/store/exodus/write-guard.js +289 -0
- package/dist/store/exodus/write-guard.js.map +1 -0
- package/dist/store/identity-share.d.ts +31 -0
- package/dist/store/identity-share.d.ts.map +1 -0
- package/dist/store/identity-share.js +54 -0
- package/dist/store/identity-share.js.map +1 -0
- package/dist/store/import-remap.js +1 -1
- package/dist/store/import-remap.js.map +1 -1
- package/dist/store/import-sort.js +1 -1
- package/dist/store/import-sort.js.map +1 -1
- package/dist/store/json.js +1 -1
- package/dist/store/json.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +3 -3
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/lock.d.ts +17 -0
- package/dist/store/lock.d.ts.map +1 -1
- package/dist/store/lock.js +18 -1
- package/dist/store/lock.js.map +1 -1
- package/dist/store/memory-sqlite.d.ts.map +1 -1
- package/dist/store/memory-sqlite.js +2 -25
- package/dist/store/memory-sqlite.js.map +1 -1
- package/dist/store/migration-files.d.ts +30 -0
- package/dist/store/migration-files.d.ts.map +1 -0
- package/dist/store/migration-files.js +59 -0
- package/dist/store/migration-files.js.map +1 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +14 -14
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/migration-runner.d.ts.map +1 -1
- package/dist/store/migration-runner.js +2 -2
- package/dist/store/migration-runner.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 +290 -355
- package/dist/store/migration-sqlite.js.map +1 -1
- package/dist/store/open-cleo-db.d.ts.map +1 -1
- package/dist/store/open-cleo-db.js +4 -2
- package/dist/store/open-cleo-db.js.map +1 -1
- package/dist/store/pid-alive.d.ts +15 -0
- package/dist/store/pid-alive.d.ts.map +1 -0
- package/dist/store/pid-alive.js +24 -0
- package/dist/store/pid-alive.js.map +1 -0
- package/dist/store/portable-bundle-scan.d.ts +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +1 -1
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts +10 -1
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +10 -1
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/recover-malformed-db.d.ts +1 -1
- package/dist/store/recover-malformed-db.d.ts.map +1 -1
- package/dist/store/recover-malformed-db.js +1 -1
- package/dist/store/recover-malformed-db.js.map +1 -1
- package/dist/store/repair-malformed-dbs.d.ts +1 -1
- package/dist/store/repair-malformed-dbs.d.ts.map +1 -1
- package/dist/store/repair-malformed-dbs.js +1 -1
- package/dist/store/repair-malformed-dbs.js.map +1 -1
- package/dist/store/restore-marker.d.ts +89 -0
- package/dist/store/restore-marker.d.ts.map +1 -0
- package/dist/store/restore-marker.js +197 -0
- package/dist/store/restore-marker.js.map +1 -0
- package/dist/store/restore-store.d.ts +85 -0
- package/dist/store/restore-store.d.ts.map +1 -0
- package/dist/store/restore-store.js +391 -0
- package/dist/store/restore-store.js.map +1 -0
- package/dist/store/row-identity.d.ts +123 -1
- package/dist/store/row-identity.d.ts.map +1 -1
- package/dist/store/row-identity.js +454 -80
- package/dist/store/row-identity.js.map +1 -1
- package/dist/store/schema/agent-registry-schema.d.ts +1 -1
- package/dist/store/schema/agent-registry-schema.d.ts.map +1 -1
- package/dist/store/schema/agent-registry-schema.js +5 -1
- package/dist/store/schema/agent-registry-schema.js.map +1 -1
- package/dist/store/schema/cleo-global/agent-registry.d.ts +1 -1
- package/dist/store/schema/cleo-global/agent-registry.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/agent-registry.js +9 -5
- package/dist/store/schema/cleo-global/agent-registry.js.map +1 -1
- package/dist/store/schema/cleo-global/models-catalog.js +1 -1
- package/dist/store/schema/cleo-global/models-catalog.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +1 -1
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/cleo-project/provenance-commits.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.js +9 -2
- package/dist/store/schema/cleo-project/provenance-orphans.js.map +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.js +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.js +1 -1
- package/dist/store/schema/cleo-shared/brain.js.map +1 -1
- package/dist/store/schema/memory-schema.d.ts +1 -1
- package/dist/store/schema/memory-schema.d.ts.map +1 -1
- package/dist/store/schema/memory-schema.js +1 -1
- package/dist/store/schema/memory-schema.js.map +1 -1
- package/dist/store/schema/nexus-schema.js +1 -1
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/service-host-matcher.d.ts +1 -1
- package/dist/store/service-host-matcher.d.ts.map +1 -1
- package/dist/store/service-host-matcher.js +1 -1
- package/dist/store/service-host-matcher.js.map +1 -1
- package/dist/store/service-oauth.js +1 -1
- package/dist/store/service-oauth.js.map +1 -1
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +7 -1
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-backup.d.ts +1 -1
- package/dist/store/sqlite-backup.d.ts.map +1 -1
- package/dist/store/sqlite-backup.js +1 -1
- package/dist/store/sqlite-backup.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +52 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +95 -22
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite-native.d.ts.map +1 -1
- package/dist/store/sqlite-native.js +9 -9
- package/dist/store/sqlite-native.js.map +1 -1
- package/dist/store/sqlite-pragmas.d.ts +12 -5
- package/dist/store/sqlite-pragmas.d.ts.map +1 -1
- package/dist/store/sqlite-pragmas.js +13 -2
- package/dist/store/sqlite-pragmas.js.map +1 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +7 -32
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/status-registry.d.ts +1 -1
- package/dist/store/status-registry.d.ts.map +1 -1
- package/dist/store/status-registry.js +1 -1
- package/dist/store/status-registry.js.map +1 -1
- package/dist/store/sync/apply/applier.d.ts +119 -0
- package/dist/store/sync/apply/applier.d.ts.map +1 -0
- package/dist/store/sync/apply/applier.js +1239 -0
- package/dist/store/sync/apply/applier.js.map +1 -0
- package/dist/store/sync/apply/fk.d.ts +47 -0
- package/dist/store/sync/apply/fk.d.ts.map +1 -0
- package/dist/store/sync/apply/fk.js +89 -0
- package/dist/store/sync/apply/fk.js.map +1 -0
- package/dist/store/sync/apply/footprints.d.ts +60 -0
- package/dist/store/sync/apply/footprints.d.ts.map +1 -0
- package/dist/store/sync/apply/footprints.js +235 -0
- package/dist/store/sync/apply/footprints.js.map +1 -0
- package/dist/store/sync/apply/frame.d.ts +80 -0
- package/dist/store/sync/apply/frame.d.ts.map +1 -0
- package/dist/store/sync/apply/frame.js +127 -0
- package/dist/store/sync/apply/frame.js.map +1 -0
- package/dist/store/sync/apply/index.d.ts +11 -0
- package/dist/store/sync/apply/index.d.ts.map +1 -0
- package/dist/store/sync/apply/index.js +11 -0
- package/dist/store/sync/apply/index.js.map +1 -0
- package/dist/store/sync/apply/parent-delete.d.ts +38 -0
- package/dist/store/sync/apply/parent-delete.d.ts.map +1 -0
- package/dist/store/sync/apply/parent-delete.js +41 -0
- package/dist/store/sync/apply/parent-delete.js.map +1 -0
- package/dist/store/sync/apply/post-apply.d.ts +67 -0
- package/dist/store/sync/apply/post-apply.d.ts.map +1 -0
- package/dist/store/sync/apply/post-apply.js +118 -0
- package/dist/store/sync/apply/post-apply.js.map +1 -0
- package/dist/store/sync/apply/refs.d.ts +60 -0
- package/dist/store/sync/apply/refs.d.ts.map +1 -0
- package/dist/store/sync/apply/refs.js +90 -0
- package/dist/store/sync/apply/refs.js.map +1 -0
- package/dist/store/sync/apply/write-api.d.ts +195 -0
- package/dist/store/sync/apply/write-api.d.ts.map +1 -0
- package/dist/store/sync/apply/write-api.js +416 -0
- package/dist/store/sync/apply/write-api.js.map +1 -0
- package/dist/store/sync/apply-intent.d.ts +117 -0
- package/dist/store/sync/apply-intent.d.ts.map +1 -0
- package/dist/store/sync/apply-intent.js +225 -0
- package/dist/store/sync/apply-intent.js.map +1 -0
- package/dist/store/sync/capture.d.ts +32 -2
- package/dist/store/sync/capture.d.ts.map +1 -1
- package/dist/store/sync/capture.js +47 -13
- package/dist/store/sync/capture.js.map +1 -1
- package/dist/store/sync/conflicts.d.ts +81 -0
- package/dist/store/sync/conflicts.d.ts.map +1 -0
- package/dist/store/sync/conflicts.js +98 -0
- package/dist/store/sync/conflicts.js.map +1 -0
- package/dist/store/sync/field-leave.d.ts +146 -0
- package/dist/store/sync/field-leave.d.ts.map +1 -0
- package/dist/store/sync/field-leave.js +241 -0
- package/dist/store/sync/field-leave.js.map +1 -0
- package/dist/store/sync/flags.d.ts +119 -0
- package/dist/store/sync/flags.d.ts.map +1 -1
- package/dist/store/sync/flags.js +360 -0
- package/dist/store/sync/flags.js.map +1 -1
- package/dist/store/sync/held.d.ts +197 -0
- package/dist/store/sync/held.d.ts.map +1 -0
- package/dist/store/sync/held.js +314 -0
- package/dist/store/sync/held.js.map +1 -0
- package/dist/store/sync/identity-fill.d.ts.map +1 -1
- package/dist/store/sync/identity-fill.js +10 -2
- package/dist/store/sync/identity-fill.js.map +1 -1
- package/dist/store/sync/inbox.d.ts +114 -0
- package/dist/store/sync/inbox.d.ts.map +1 -0
- package/dist/store/sync/inbox.js +222 -0
- package/dist/store/sync/inbox.js.map +1 -0
- package/dist/store/sync/inherit.d.ts +36 -0
- package/dist/store/sync/inherit.d.ts.map +1 -0
- package/dist/store/sync/inherit.js +38 -0
- package/dist/store/sync/inherit.js.map +1 -0
- package/dist/store/sync/merge/engine.d.ts +114 -0
- package/dist/store/sync/merge/engine.d.ts.map +1 -0
- package/dist/store/sync/merge/engine.js +698 -0
- package/dist/store/sync/merge/engine.js.map +1 -0
- package/dist/store/sync/merge/index.d.ts +11 -0
- package/dist/store/sync/merge/index.d.ts.map +1 -0
- package/dist/store/sync/merge/index.js +11 -0
- package/dist/store/sync/merge/index.js.map +1 -0
- package/dist/store/sync/merge/rules.d.ts +91 -0
- package/dist/store/sync/merge/rules.d.ts.map +1 -0
- package/dist/store/sync/merge/rules.js +151 -0
- package/dist/store/sync/merge/rules.js.map +1 -0
- package/dist/store/sync/merge/types.d.ts +206 -0
- package/dist/store/sync/merge/types.d.ts.map +1 -0
- package/dist/store/sync/merge/types.js +15 -0
- package/dist/store/sync/merge/types.js.map +1 -0
- package/dist/store/sync/migration-hooks.d.ts +47 -0
- package/dist/store/sync/migration-hooks.d.ts.map +1 -0
- package/dist/store/sync/migration-hooks.js +74 -0
- package/dist/store/sync/migration-hooks.js.map +1 -0
- package/dist/store/sync/netting.d.ts +5 -0
- package/dist/store/sync/netting.d.ts.map +1 -1
- package/dist/store/sync/netting.js +29 -2
- package/dist/store/sync/netting.js.map +1 -1
- package/dist/store/sync/remap.d.ts +72 -0
- package/dist/store/sync/remap.d.ts.map +1 -0
- package/dist/store/sync/remap.js +209 -0
- package/dist/store/sync/remap.js.map +1 -0
- package/dist/store/sync/repair.d.ts +180 -0
- package/dist/store/sync/repair.d.ts.map +1 -0
- package/dist/store/sync/repair.js +499 -0
- package/dist/store/sync/repair.js.map +1 -0
- package/dist/store/sync/replica-registry.d.ts +54 -0
- package/dist/store/sync/replica-registry.d.ts.map +1 -1
- package/dist/store/sync/replica-registry.js +72 -2
- package/dist/store/sync/replica-registry.js.map +1 -1
- package/dist/store/sync/replica.d.ts +71 -9
- package/dist/store/sync/replica.d.ts.map +1 -1
- package/dist/store/sync/replica.js +95 -11
- package/dist/store/sync/replica.js.map +1 -1
- package/dist/store/sync/row-meta.d.ts +148 -0
- package/dist/store/sync/row-meta.d.ts.map +1 -0
- package/dist/store/sync/row-meta.js +200 -0
- package/dist/store/sync/row-meta.js.map +1 -0
- package/dist/store/sync/schema.d.ts +13 -5
- package/dist/store/sync/schema.d.ts.map +1 -1
- package/dist/store/sync/schema.js +34 -7
- package/dist/store/sync/schema.js.map +1 -1
- package/dist/store/sync/sealer-values.d.ts.map +1 -1
- package/dist/store/sync/sealer-values.js +1 -0
- package/dist/store/sync/sealer-values.js.map +1 -1
- package/dist/store/sync/sealer.d.ts +96 -0
- package/dist/store/sync/sealer.d.ts.map +1 -1
- package/dist/store/sync/sealer.js +532 -58
- package/dist/store/sync/sealer.js.map +1 -1
- package/dist/store/sync/sequencing.d.ts +175 -0
- package/dist/store/sync/sequencing.d.ts.map +1 -0
- package/dist/store/sync/sequencing.js +295 -0
- package/dist/store/sync/sequencing.js.map +1 -0
- package/dist/store/sync/structural.d.ts +30 -2
- package/dist/store/sync/structural.d.ts.map +1 -1
- package/dist/store/sync/structural.js +64 -2
- package/dist/store/sync/structural.js.map +1 -1
- package/dist/store/sync/timestamp-canon.d.ts +44 -0
- package/dist/store/sync/timestamp-canon.d.ts.map +1 -0
- package/dist/store/sync/timestamp-canon.js +102 -0
- package/dist/store/sync/timestamp-canon.js.map +1 -0
- package/dist/store/sync/timestamps.d.ts +1 -30
- package/dist/store/sync/timestamps.d.ts.map +1 -1
- package/dist/store/sync/timestamps.js +2 -89
- package/dist/store/sync/timestamps.js.map +1 -1
- package/dist/store/sync/trigger-classes.d.ts +8 -0
- package/dist/store/sync/trigger-classes.d.ts.map +1 -1
- package/dist/store/sync/trigger-classes.js +13 -0
- package/dist/store/sync/trigger-classes.js.map +1 -1
- package/dist/store/sync/write-actor.d.ts +58 -0
- package/dist/store/sync/write-actor.d.ts.map +1 -0
- package/dist/store/sync/write-actor.js +67 -0
- package/dist/store/sync/write-actor.js.map +1 -0
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +84 -0
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/task-claim.d.ts +1 -1
- package/dist/store/task-claim.d.ts.map +1 -1
- package/dist/store/task-claim.js +1 -1
- package/dist/store/task-claim.js.map +1 -1
- package/dist/store/task-reference-columns.d.ts +27 -0
- package/dist/store/task-reference-columns.d.ts.map +1 -0
- package/dist/store/task-reference-columns.js +65 -0
- package/dist/store/task-reference-columns.js.map +1 -0
- package/dist/store/task-version.d.ts +1 -1
- package/dist/store/task-version.d.ts.map +1 -1
- package/dist/store/task-version.js +1 -1
- package/dist/store/task-version.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +2 -1
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +5 -4
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts +1 -1
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +3 -1
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +43 -14
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +373 -32
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +44 -674
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/validation-schemas.js +2 -22
- package/dist/store/validation-schemas.js.map +1 -1
- package/dist/store/vault-manifest.d.ts +1 -1
- package/dist/store/vault-manifest.d.ts.map +1 -1
- package/dist/store/vault-manifest.js +1 -1
- package/dist/store/vault-manifest.js.map +1 -1
- package/dist/store/worktree-build-guard.js +1 -1
- package/dist/store/worktree-build-guard.js.map +1 -1
- package/dist/store/worktree-isolation-guard.js +1 -1
- package/dist/store/worktree-isolation-guard.js.map +1 -1
- package/dist/store/writer-lease.d.ts.map +1 -1
- package/dist/store/writer-lease.js +1 -11
- package/dist/store/writer-lease.js.map +1 -1
- package/dist/store/zod-schema-factory.d.ts +16 -0
- package/dist/store/zod-schema-factory.d.ts.map +1 -0
- package/dist/store/zod-schema-factory.js +23 -0
- package/dist/store/zod-schema-factory.js.map +1 -0
- package/dist/system/backup.d.ts +106 -0
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +295 -19
- package/dist/system/backup.js.map +1 -1
- package/dist/system/cleanup.js +1 -1
- package/dist/system/cleanup.js.map +1 -1
- package/dist/system/labels.js +1 -1
- package/dist/system/labels.js.map +1 -1
- package/dist/system/migrate.js +1 -1
- package/dist/system/migrate.js.map +1 -1
- package/dist/system/safestop.d.ts.map +1 -1
- package/dist/system/safestop.js +1 -1
- package/dist/system/safestop.js.map +1 -1
- package/dist/task-work/current.d.ts +34 -0
- package/dist/task-work/current.d.ts.map +1 -0
- package/dist/task-work/current.js +34 -0
- package/dist/task-work/current.js.map +1 -0
- package/dist/task-work/index.d.ts +2 -19
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +6 -20
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/ac-identity.d.ts +28 -0
- package/dist/tasks/ac-identity.d.ts.map +1 -0
- package/dist/tasks/ac-identity.js +43 -0
- package/dist/tasks/ac-identity.js.map +1 -0
- package/dist/tasks/ac-immutability.d.ts +1 -1
- package/dist/tasks/ac-immutability.d.ts.map +1 -1
- package/dist/tasks/ac-immutability.js +1 -1
- package/dist/tasks/ac-immutability.js.map +1 -1
- package/dist/tasks/ac-table.d.ts +2 -14
- package/dist/tasks/ac-table.d.ts.map +1 -1
- package/dist/tasks/ac-table.js +6 -29
- package/dist/tasks/ac-table.js.map +1 -1
- package/dist/tasks/acceptance-input.js +1 -1
- package/dist/tasks/acceptance-input.js.map +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +3 -1
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +80 -12
- package/dist/tasks/affected-packages.d.ts.map +1 -1
- package/dist/tasks/affected-packages.js +130 -19
- package/dist/tasks/affected-packages.js.map +1 -1
- package/dist/tasks/archive.d.ts.map +1 -1
- package/dist/tasks/archive.js +1 -1
- package/dist/tasks/archive.js.map +1 -1
- package/dist/tasks/axis-filters.d.ts.map +1 -1
- package/dist/tasks/axis-filters.js +2 -1
- package/dist/tasks/axis-filters.js.map +1 -1
- package/dist/tasks/child-disposition.js +1 -1
- package/dist/tasks/child-disposition.js.map +1 -1
- package/dist/tasks/collection.js +1 -1
- package/dist/tasks/collection.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +2 -1
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/decompose.js +1 -1
- package/dist/tasks/decompose.js.map +1 -1
- package/dist/tasks/delete.js +1 -1
- package/dist/tasks/delete.js.map +1 -1
- package/dist/tasks/done-plan.d.ts +2 -1
- package/dist/tasks/done-plan.d.ts.map +1 -1
- package/dist/tasks/done-plan.js +10 -20
- package/dist/tasks/done-plan.js.map +1 -1
- package/dist/tasks/done-record.d.ts +1 -1
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +1 -1
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/enforcement.d.ts +2 -1
- package/dist/tasks/enforcement.d.ts.map +1 -1
- package/dist/tasks/enforcement.js +1 -1
- package/dist/tasks/enforcement.js.map +1 -1
- package/dist/tasks/engine-wrap-ops.js +1 -1
- package/dist/tasks/engine-wrap-ops.js.map +1 -1
- package/dist/tasks/engine-wrap.d.ts.map +1 -1
- package/dist/tasks/engine-wrap.js +7 -3
- package/dist/tasks/engine-wrap.js.map +1 -1
- package/dist/tasks/epic-enforcement.js +1 -1
- package/dist/tasks/epic-enforcement.js.map +1 -1
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +41 -19
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/find.js +1 -1
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/gate-result-cache.js +1 -1
- package/dist/tasks/gate-result-cache.js.map +1 -1
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +1 -1
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/heavy-tool-env.d.ts +79 -11
- package/dist/tasks/heavy-tool-env.d.ts.map +1 -1
- package/dist/tasks/heavy-tool-env.js +111 -14
- package/dist/tasks/heavy-tool-env.js.map +1 -1
- package/dist/tasks/index.d.ts +1 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +2 -2
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/labels.js +1 -1
- package/dist/tasks/labels.js.map +1 -1
- package/dist/tasks/nexus-impact-gate.js +1 -1
- package/dist/tasks/nexus-impact-gate.js.map +1 -1
- package/dist/tasks/pipeline-stage.js +1 -1
- package/dist/tasks/pipeline-stage.js.map +1 -1
- package/dist/tasks/population.js +1 -1
- package/dist/tasks/population.js.map +1 -1
- package/dist/tasks/ranking-audit.js +1 -1
- package/dist/tasks/ranking-audit.js.map +1 -1
- package/dist/tasks/reconcile-scope.js +1 -1
- package/dist/tasks/reconcile-scope.js.map +1 -1
- package/dist/tasks/relates.js +1 -1
- package/dist/tasks/relates.js.map +1 -1
- package/dist/tasks/req.d.ts.map +1 -1
- package/dist/tasks/req.js +2 -1
- package/dist/tasks/req.js.map +1 -1
- package/dist/tasks/severity-attestation.d.ts +1 -1
- package/dist/tasks/severity-attestation.d.ts.map +1 -1
- package/dist/tasks/severity-attestation.js +1 -1
- package/dist/tasks/severity-attestation.js.map +1 -1
- package/dist/tasks/show.d.ts.map +1 -1
- package/dist/tasks/show.js +47 -3
- package/dist/tasks/show.js.map +1 -1
- package/dist/tasks/task-import.js +1 -1
- package/dist/tasks/task-import.js.map +1 -1
- package/dist/tasks/task-reparent.d.ts.map +1 -1
- package/dist/tasks/task-reparent.js +2 -1
- package/dist/tasks/task-reparent.js.map +1 -1
- package/dist/tasks/test-run-binding.d.ts.map +1 -1
- package/dist/tasks/test-run-binding.js +9 -2
- package/dist/tasks/test-run-binding.js.map +1 -1
- package/dist/tasks/tool-cache.d.ts +23 -8
- package/dist/tasks/tool-cache.d.ts.map +1 -1
- package/dist/tasks/tool-cache.js +57 -16
- package/dist/tasks/tool-cache.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +8 -0
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +15 -1
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/tool-runner-guard.d.ts +131 -0
- package/dist/tasks/tool-runner-guard.d.ts.map +1 -0
- package/dist/tasks/tool-runner-guard.js +141 -0
- package/dist/tasks/tool-runner-guard.js.map +1 -0
- package/dist/tasks/tool-semaphore.d.ts +103 -342
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +131 -619
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +2 -1
- package/dist/tasks/update.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +5 -34
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +24 -0
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +168 -0
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/validation/doctor/index.d.ts +1 -1
- package/dist/validation/doctor/index.d.ts.map +1 -1
- package/dist/validation/doctor/index.js +1 -1
- package/dist/validation/doctor/index.js.map +1 -1
- package/dist/validation/engine-ops.js +1 -1
- package/dist/validation/engine-ops.js.map +1 -1
- package/dist/validation/engine.d.ts +1 -1
- package/dist/validation/engine.d.ts.map +1 -1
- package/dist/validation/engine.js +2 -1
- package/dist/validation/engine.js.map +1 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/operation-gate-validators.js +1 -1
- package/dist/validation/operation-gate-validators.js.map +1 -1
- package/dist/validation/protocol-common.js +1 -1
- package/dist/validation/protocol-common.js.map +1 -1
- package/dist/validation/protocols/_shared.js +1 -1
- package/dist/validation/protocols/_shared.js.map +1 -1
- package/dist/validation/validate-ops.js +1 -1
- package/dist/validation/validate-ops.js.map +1 -1
- package/dist/validation/verification.js +1 -1
- package/dist/validation/verification.js.map +1 -1
- package/dist/workgraph/index.d.ts +1 -1
- package/dist/workgraph/index.d.ts.map +1 -1
- package/dist/workgraph/index.js +1 -1
- package/dist/workgraph/index.js.map +1 -1
- package/dist/workgraph/reparent-preflight.d.ts +1 -2
- package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
- package/dist/workgraph/reparent-preflight.js +1 -1
- package/dist/workgraph/reparent-preflight.js.map +1 -1
- package/dist/workgraph/scaffold-validate.js +1 -1
- package/dist/workgraph/scaffold-validate.js.map +1 -1
- package/dist/worktree/force-unlock.d.ts +1 -1
- package/dist/worktree/force-unlock.d.ts.map +1 -1
- package/dist/worktree/force-unlock.js +1 -1
- package/dist/worktree/force-unlock.js.map +1 -1
- package/dist/worktree/isolation.d.ts +1 -1
- package/dist/worktree/isolation.d.ts.map +1 -1
- package/dist/worktree/isolation.js +1 -1
- package/dist/worktree/isolation.js.map +1 -1
- package/dist/worktree/list.d.ts +1 -1
- package/dist/worktree/list.d.ts.map +1 -1
- package/dist/worktree/list.js +1 -1
- package/dist/worktree/list.js.map +1 -1
- package/dist/worktree/prune.d.ts +1 -1
- package/dist/worktree/prune.d.ts.map +1 -1
- package/dist/worktree/prune.js +1 -1
- package/dist/worktree/prune.js.map +1 -1
- package/dist/worktree/worktree-adopt.d.ts +1 -2
- package/dist/worktree/worktree-adopt.d.ts.map +1 -1
- package/dist/worktree/worktree-adopt.js +1 -1
- package/dist/worktree/worktree-adopt.js.map +1 -1
- package/migrations/sync-journal/20261004120000_t12757-apply-intent/migration.sql +21 -0
- package/migrations/sync-journal/20261005120000_t12344-inbox/migration.sql +67 -0
- package/migrations/sync-journal/20261006120000_t13193-rebase-undo/migration.sql +51 -0
- package/migrations/sync-journal/20261006130000_t13193-rebase-state/migration.sql +17 -0
- package/migrations/sync-journal/20261006140000_t13193-held-rows/migration.sql +24 -0
- package/package.json +13 -13
- package/schemas/project-context.schema.json +14 -0
- package/templates/CLEO-INJECTION.md +11 -11
- package/templates/CLEO-REFERENCE.md +2 -2
- package/templates/workflows/release-prepare.yml.tmpl +10 -10
|
@@ -134,23 +134,38 @@
|
|
|
134
134
|
* `cleo doctor` reports them missing. The (b) defences above cover the time
|
|
135
135
|
* a freeze is missing.
|
|
136
136
|
*
|
|
137
|
+
* `token_usage` → `tasks_token_usage` (T13115) is a DRAIN, not a mirror: token
|
|
138
|
+
* rows are append-only telemetry with random ids, and since T13111 this build
|
|
139
|
+
* reads and writes only the twin. Every merge moves each bare row into the twin
|
|
140
|
+
* (only the columns both tables hold) and deletes it from the bare table, so
|
|
141
|
+
* the bare table is the empty inbox of whatever an older build writes. A row
|
|
142
|
+
* the twin cannot hold verbatim, or holds a different copy of, stays there,
|
|
143
|
+
* listed as a conflict, and is not decided again unless it changes. The drain
|
|
144
|
+
* deletes a bare row only when the twin holds every value of it, so it is
|
|
145
|
+
* lossless and takes no snapshot; the twin is correct whatever the bare table
|
|
146
|
+
* holds, so a failed drain degrades nothing (contract 5 does not apply) and is
|
|
147
|
+
* retried at the next open; and a long backlog drains in bounded transactions.
|
|
148
|
+
* See `TOKEN_USAGE`.
|
|
149
|
+
*
|
|
137
150
|
* ## Contract
|
|
138
151
|
*
|
|
139
152
|
* 1. **Snapshot first** (initial collapse only, only when the merge changes
|
|
140
|
-
* the twin). The free space is
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* the next open (`cleo
|
|
153
|
+
* the twin; never for the lossless `token_usage` drain). The free space is
|
|
154
|
+
* checked before the `VACUUM INTO`. One snapshot covers every pair
|
|
155
|
+
* collapsing in this open, registered as a PINNED `migration` backup:
|
|
156
|
+
* `cleo backup list` shows it, rotation never deletes it, and a snapshot
|
|
157
|
+
* an earlier build wrote unpinned is pinned at the next open (`cleo
|
|
158
|
+
* doctor` lists an unpinned one).
|
|
145
159
|
* 2. **Atomic.** Each pair merges, verifies and writes its marker in one
|
|
146
160
|
* `BEGIN IMMEDIATE` transaction, the marker re-read under the write lock.
|
|
147
161
|
* Any failure rolls back: both tables byte-identical.
|
|
148
162
|
* 3. **Verified.** Every row the merge decided is re-read and compared before
|
|
149
163
|
* the marker is written; a mismatch rolls back.
|
|
150
|
-
* 4. **The bare table is never written**, with
|
|
151
|
-
* {@link mirrorCounterToBare}. When
|
|
152
|
-
*
|
|
153
|
-
*
|
|
164
|
+
* 4. **The bare table is never written**, with two sanctioned exceptions:
|
|
165
|
+
* the `token_usage` drain (above), and {@link mirrorCounterToBare}. When
|
|
166
|
+
* this build writes a counter key (`task_id_sequence`,
|
|
167
|
+
* `sqlite_snapshot_gate`, `file_meta`) it raises the bare row's counter
|
|
168
|
+
* field to the twin's in the same transaction, and the
|
|
154
169
|
* allocation floors on the bare counter ({@link bareCounterOf}). The
|
|
155
170
|
* 2026.9.20 build still allocates ids from the bare counter; without the
|
|
156
171
|
* mirror, an id one build reserved but had not stored yet could be issued
|
|
@@ -200,17 +215,21 @@ export interface TwinCollapseReceipt {
|
|
|
200
215
|
* `initial`: the first collapse ran. `incremental`: bare changes since the
|
|
201
216
|
* last merge were carried. `unchanged`: the bare table matched the stored
|
|
202
217
|
* hashes. `degraded`: the collapse failed inside a bind; reads are served
|
|
203
|
-
* from TEMP shadows and writes are refused. `
|
|
204
|
-
*
|
|
218
|
+
* from TEMP shadows and writes are refused. `deferred`: a lossless pair's
|
|
219
|
+
* merge failed; nothing is degraded, its bare rows wait, and the next open
|
|
220
|
+
* retries (T13115). `no-bare-table`: a table of the pair is missing.
|
|
205
221
|
*/
|
|
206
|
-
readonly status: 'initial' | 'incremental' | 'unchanged' | 'degraded' | 'no-bare-table';
|
|
222
|
+
readonly status: 'initial' | 'incremental' | 'unchanged' | 'degraded' | 'deferred' | 'no-bare-table';
|
|
207
223
|
/** The initial collapse's snapshot, or `null`. */
|
|
208
224
|
readonly snapshotPath: string | null;
|
|
209
225
|
/** Rows added to the twin. */
|
|
210
226
|
readonly inserted: number;
|
|
211
227
|
/** Twin rows whose value was replaced. */
|
|
212
228
|
readonly replaced: number;
|
|
213
|
-
/**
|
|
229
|
+
/**
|
|
230
|
+
* Twin rows deleted (bare deletions, frozen rows dropped initially); for the
|
|
231
|
+
* `token_usage` drain, bare rows removed once the twin held them.
|
|
232
|
+
*/
|
|
214
233
|
readonly deleted: number;
|
|
215
234
|
/** Bare rows not carried by rule (dead keys, tags of deleted notes). */
|
|
216
235
|
readonly skipped: number;
|
|
@@ -341,6 +360,13 @@ export declare function setFreezeBuildForTests(override: {
|
|
|
341
360
|
} | undefined): void;
|
|
342
361
|
/** Phrases the freeze message must never contain (older builds' retry and recovery matchers). */
|
|
343
362
|
export declare const DOCS_FROZEN_FORBIDDEN: readonly string[];
|
|
363
|
+
/**
|
|
364
|
+
* Override the token drain's chunk size, for tests (`undefined` restores it).
|
|
365
|
+
*
|
|
366
|
+
* @param size - Rows per drain transaction.
|
|
367
|
+
* @task T13115
|
|
368
|
+
*/
|
|
369
|
+
export declare function setTokenDrainChunkForTests(size: number | undefined): void;
|
|
344
370
|
/** Why a collapse failed, as carried by `E_TWIN_COLLAPSE_FAILED`. */
|
|
345
371
|
export interface TwinCollapseFailure {
|
|
346
372
|
/** The bare tables whose collapse did not complete. */
|
|
@@ -433,7 +459,10 @@ export interface TwinCollapseStatus {
|
|
|
433
459
|
* served, writes refused. `no-bare-table`: nothing to collapse.
|
|
434
460
|
*/
|
|
435
461
|
readonly state: 'collapsed' | 'bare-changed' | 'pending' | 'failed' | 'no-bare-table';
|
|
436
|
-
/**
|
|
462
|
+
/**
|
|
463
|
+
* Whether a pending initial collapse would change the twin and so needs a
|
|
464
|
+
* snapshot (never for a lossless pair, which takes none).
|
|
465
|
+
*/
|
|
437
466
|
readonly wouldChangeTwin: boolean;
|
|
438
467
|
/** The initial collapse's snapshot (or the planned one of a failed attempt). */
|
|
439
468
|
readonly snapshotPath: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twin-collapse.d.ts","sourceRoot":"","sources":["../../src/store/twin-collapse.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"twin-collapse.d.ts","sourceRoot":"","sources":["../../src/store/twin-collapse.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,23 +134,38 @@
|
|
|
134
134
|
* `cleo doctor` reports them missing. The (b) defences above cover the time
|
|
135
135
|
* a freeze is missing.
|
|
136
136
|
*
|
|
137
|
+
* `token_usage` → `tasks_token_usage` (T13115) is a DRAIN, not a mirror: token
|
|
138
|
+
* rows are append-only telemetry with random ids, and since T13111 this build
|
|
139
|
+
* reads and writes only the twin. Every merge moves each bare row into the twin
|
|
140
|
+
* (only the columns both tables hold) and deletes it from the bare table, so
|
|
141
|
+
* the bare table is the empty inbox of whatever an older build writes. A row
|
|
142
|
+
* the twin cannot hold verbatim, or holds a different copy of, stays there,
|
|
143
|
+
* listed as a conflict, and is not decided again unless it changes. The drain
|
|
144
|
+
* deletes a bare row only when the twin holds every value of it, so it is
|
|
145
|
+
* lossless and takes no snapshot; the twin is correct whatever the bare table
|
|
146
|
+
* holds, so a failed drain degrades nothing (contract 5 does not apply) and is
|
|
147
|
+
* retried at the next open; and a long backlog drains in bounded transactions.
|
|
148
|
+
* See `TOKEN_USAGE`.
|
|
149
|
+
*
|
|
137
150
|
* ## Contract
|
|
138
151
|
*
|
|
139
152
|
* 1. **Snapshot first** (initial collapse only, only when the merge changes
|
|
140
|
-
* the twin). The free space is
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* the next open (`cleo
|
|
153
|
+
* the twin; never for the lossless `token_usage` drain). The free space is
|
|
154
|
+
* checked before the `VACUUM INTO`. One snapshot covers every pair
|
|
155
|
+
* collapsing in this open, registered as a PINNED `migration` backup:
|
|
156
|
+
* `cleo backup list` shows it, rotation never deletes it, and a snapshot
|
|
157
|
+
* an earlier build wrote unpinned is pinned at the next open (`cleo
|
|
158
|
+
* doctor` lists an unpinned one).
|
|
145
159
|
* 2. **Atomic.** Each pair merges, verifies and writes its marker in one
|
|
146
160
|
* `BEGIN IMMEDIATE` transaction, the marker re-read under the write lock.
|
|
147
161
|
* Any failure rolls back: both tables byte-identical.
|
|
148
162
|
* 3. **Verified.** Every row the merge decided is re-read and compared before
|
|
149
163
|
* the marker is written; a mismatch rolls back.
|
|
150
|
-
* 4. **The bare table is never written**, with
|
|
151
|
-
* {@link mirrorCounterToBare}. When
|
|
152
|
-
*
|
|
153
|
-
*
|
|
164
|
+
* 4. **The bare table is never written**, with two sanctioned exceptions:
|
|
165
|
+
* the `token_usage` drain (above), and {@link mirrorCounterToBare}. When
|
|
166
|
+
* this build writes a counter key (`task_id_sequence`,
|
|
167
|
+
* `sqlite_snapshot_gate`, `file_meta`) it raises the bare row's counter
|
|
168
|
+
* field to the twin's in the same transaction, and the
|
|
154
169
|
* allocation floors on the bare counter ({@link bareCounterOf}). The
|
|
155
170
|
* 2026.9.20 build still allocates ids from the bare counter; without the
|
|
156
171
|
* mirror, an id one build reserved but had not stored yet could be issued
|
|
@@ -182,7 +197,7 @@ import { createHash } from 'node:crypto';
|
|
|
182
197
|
import { existsSync, statSync } from 'node:fs';
|
|
183
198
|
import { basename, dirname } from 'node:path';
|
|
184
199
|
import { fileURLToPath } from 'node:url';
|
|
185
|
-
import { ExitCode } from '@cleocode/contracts';
|
|
200
|
+
import { ExitCode } from '@cleocode/contracts/exit-codes.js';
|
|
186
201
|
import { z } from 'zod';
|
|
187
202
|
import { CleoError } from '../errors.js';
|
|
188
203
|
import { getLogger } from '../logger.js';
|
|
@@ -216,6 +231,11 @@ export const SCHEMA_META_NEVER_DELETED = new Set([
|
|
|
216
231
|
const SNAPSHOT_PIN_REASON = 'T12535 twin collapse: the store before the merge (only copy of any row it replaced)';
|
|
217
232
|
/** Most conflicts kept in the marker (the doctor warning lists them). */
|
|
218
233
|
const MAX_CONFLICTS = 50;
|
|
234
|
+
/**
|
|
235
|
+
* Most drain transactions one open runs for a lossless pair (T13115); a
|
|
236
|
+
* backlog beyond that continues at the next open.
|
|
237
|
+
*/
|
|
238
|
+
const MAX_DRAIN_CHUNKS = 500;
|
|
219
239
|
const sha = (value) => createHash('sha256').update(value).digest('hex');
|
|
220
240
|
/** Hash of an absent value (distinct from any real value's hash). */
|
|
221
241
|
const ABSENT = sha('\u0000absent');
|
|
@@ -1417,8 +1437,293 @@ const DOCS = {
|
|
|
1417
1437
|
}
|
|
1418
1438
|
},
|
|
1419
1439
|
};
|
|
1440
|
+
// ── token_usage (T13115) ─────────────────────────────────────────────────────
|
|
1441
|
+
/** The bare token table and its twin (the runtime has written the twin since T13111). */
|
|
1442
|
+
const TOKEN_BARE = 'token_usage';
|
|
1443
|
+
const TOKEN_TWIN = 'tasks_token_usage';
|
|
1444
|
+
/** Most bare token rows one drain transaction decides; a longer backlog drains in several. */
|
|
1445
|
+
const TOKEN_DRAIN_CHUNK = 2000;
|
|
1446
|
+
let tokenDrainChunk = TOKEN_DRAIN_CHUNK;
|
|
1447
|
+
/**
|
|
1448
|
+
* Override the token drain's chunk size, for tests (`undefined` restores it).
|
|
1449
|
+
*
|
|
1450
|
+
* @param size - Rows per drain transaction.
|
|
1451
|
+
* @task T13115
|
|
1452
|
+
*/
|
|
1453
|
+
export function setTokenDrainChunkForTests(size) {
|
|
1454
|
+
tokenDrainChunk = size ?? TOKEN_DRAIN_CHUNK;
|
|
1455
|
+
}
|
|
1456
|
+
/** The token columns both tables hold (a cut-down legacy shape carries what it has). */
|
|
1457
|
+
const tokenColumns = (db) => sharedColumns(db, TOKEN_BARE, TOKEN_TWIN);
|
|
1458
|
+
/** JSON of `cols` of one row (missing values as null). */
|
|
1459
|
+
const rowJson = (row, cols) => JSON.stringify(cols.map((c) => row[c] ?? null));
|
|
1460
|
+
/** The token shape, or `null` when the tables share no `id` column (nothing is ever drained). */
|
|
1461
|
+
function tokenShape(db, schema) {
|
|
1462
|
+
const shared = tokenColumns(db);
|
|
1463
|
+
if (!shared.includes('id'))
|
|
1464
|
+
return null;
|
|
1465
|
+
const all = columnsOf(db, 'main', TOKEN_BARE);
|
|
1466
|
+
const list = (cols) => cols.map(quoteIdent).join(', ');
|
|
1467
|
+
return {
|
|
1468
|
+
shared,
|
|
1469
|
+
all,
|
|
1470
|
+
bareOnly: all.filter((c) => !shared.includes(c)),
|
|
1471
|
+
twinRow: db.prepare(`SELECT ${list(shared)} FROM ${schema}.${TOKEN_TWIN} WHERE "id" = ?`),
|
|
1472
|
+
bareById: db.prepare(`SELECT ${list(all)} FROM main.${TOKEN_BARE} WHERE "id" = ?`),
|
|
1473
|
+
};
|
|
1474
|
+
}
|
|
1475
|
+
/** One twin token row as the JSON of the shared columns, or `undefined` when absent. */
|
|
1476
|
+
function twinTokenJson(shape, id) {
|
|
1477
|
+
const row = shape.twinRow.get(id);
|
|
1478
|
+
return row === undefined ? undefined : rowJson(row, shape.shared);
|
|
1479
|
+
}
|
|
1480
|
+
/** The hash that stands for every bare row with this id (its change identity), or `undefined`. */
|
|
1481
|
+
function bareTokenHash(shape, id) {
|
|
1482
|
+
const rows = shape.bareById.all(id);
|
|
1483
|
+
if (rows.length === 0)
|
|
1484
|
+
return undefined;
|
|
1485
|
+
const fulls = rows.map((r) => rowJson(r, shape.all));
|
|
1486
|
+
return sha(fulls.length === 1 ? fulls[0] : JSON.stringify(fulls));
|
|
1487
|
+
}
|
|
1488
|
+
/** Bare ids a cut-down table without a key holds more than once (empty when `id` is the key). */
|
|
1489
|
+
function duplicateTokenIds(db) {
|
|
1490
|
+
return db
|
|
1491
|
+
.prepare(`SELECT "id" AS id FROM main.${TOKEN_BARE} WHERE "id" IS NOT NULL GROUP BY "id" HAVING count(*) > 1`)
|
|
1492
|
+
.all().map((r) => String(r.id));
|
|
1493
|
+
}
|
|
1494
|
+
/**
|
|
1495
|
+
* Bare token rows by id, as the hash of the whole row (the change identity a
|
|
1496
|
+
* marker records). Read in full: used to detect a change when no change
|
|
1497
|
+
* counter can be trusted, and by `cleo doctor`.
|
|
1498
|
+
*/
|
|
1499
|
+
function bareTokenHashes(db) {
|
|
1500
|
+
const shape = tokenShape(db, 'main');
|
|
1501
|
+
if (shape === null)
|
|
1502
|
+
return {};
|
|
1503
|
+
const dups = new Set(duplicateTokenIds(db));
|
|
1504
|
+
const out = {};
|
|
1505
|
+
for (const id of dups) {
|
|
1506
|
+
const h = bareTokenHash(shape, id);
|
|
1507
|
+
if (h !== undefined)
|
|
1508
|
+
out[id] = h;
|
|
1509
|
+
}
|
|
1510
|
+
const rows = db
|
|
1511
|
+
.prepare(`SELECT ${shape.all.map(quoteIdent).join(', ')} FROM main.${TOKEN_BARE} WHERE "id" IS NOT NULL`)
|
|
1512
|
+
.iterate();
|
|
1513
|
+
for (const r of rows) {
|
|
1514
|
+
const id = String(r['id']);
|
|
1515
|
+
if (!dups.has(id))
|
|
1516
|
+
out[id] = sha(rowJson(r, shape.all));
|
|
1517
|
+
}
|
|
1518
|
+
return out;
|
|
1519
|
+
}
|
|
1520
|
+
/**
|
|
1521
|
+
* A cheap token that moves when an older build writes the bare table: its row
|
|
1522
|
+
* count and highest rowid. `undefined` (compare full hashes) when the table
|
|
1523
|
+
* has no rowid.
|
|
1524
|
+
*/
|
|
1525
|
+
function tokenChangeSeq(db) {
|
|
1526
|
+
try {
|
|
1527
|
+
const r = db.prepare(`SELECT count(*) AS n, max(rowid) AS m FROM main.${TOKEN_BARE}`).get();
|
|
1528
|
+
return r === undefined ? undefined : `${r.n}:${r.m ?? 0}`;
|
|
1529
|
+
}
|
|
1530
|
+
catch {
|
|
1531
|
+
return undefined;
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
/**
|
|
1535
|
+
* Plan one bounded step of the drain: at most {@link TOKEN_DRAIN_CHUNK} bare
|
|
1536
|
+
* rows an earlier merge did not leave behind are decided, streamed rather than
|
|
1537
|
+
* read in full:
|
|
1538
|
+
*
|
|
1539
|
+
* - the twin lacks it → carried (`set`), then removed from the bare table;
|
|
1540
|
+
* - the twin holds an identical copy (a store an older build reconciled holds
|
|
1541
|
+
* the same rows in both tables) → only removed from the bare table (`del`),
|
|
1542
|
+
* so each row lands once;
|
|
1543
|
+
* - the twin holds a different copy → the twin wins, and the bare copy stays
|
|
1544
|
+
* where it is, listed as a conflict;
|
|
1545
|
+
* - a bare-only column holds a value, or a cut-down table without a key holds
|
|
1546
|
+
* the id twice → the row cannot leave without losing a value, so it stays,
|
|
1547
|
+
* listed as a conflict.
|
|
1548
|
+
*
|
|
1549
|
+
* A row an earlier merge left behind (same hash as then) is never decided
|
|
1550
|
+
* again, so a twin row deleted since cannot come back from it. Every row left
|
|
1551
|
+
* behind, earlier or now, goes into `leftBehind`: the marker records exactly
|
|
1552
|
+
* those, never a row still waiting to be decided (`truncated` says more
|
|
1553
|
+
* remain), so a long backlog drains in several transactions without any row
|
|
1554
|
+
* being taken for "left behind" before it was decided.
|
|
1555
|
+
*/
|
|
1556
|
+
function planTokenUsage(db, state) {
|
|
1557
|
+
const plan = { ...emptyPlan(), leftBehind: new Map(), fullHashes: new Map() };
|
|
1558
|
+
const left = plan.leftBehind;
|
|
1559
|
+
const shape = tokenShape(db, 'main');
|
|
1560
|
+
if (shape === null)
|
|
1561
|
+
return plan;
|
|
1562
|
+
const last = state?.hashes?.bare ?? {};
|
|
1563
|
+
const keepLeft = (id, hash, reason) => {
|
|
1564
|
+
left.set(id, hash);
|
|
1565
|
+
plan.skipped++;
|
|
1566
|
+
plan.conflicts.push(last[id] === hash
|
|
1567
|
+
? (state?.conflicts.find((c) => c.startsWith(`${id}: `)) ?? reason)
|
|
1568
|
+
: reason);
|
|
1569
|
+
};
|
|
1570
|
+
const visited = new Set();
|
|
1571
|
+
const dups = duplicateTokenIds(db);
|
|
1572
|
+
for (const id of dups) {
|
|
1573
|
+
visited.add(id);
|
|
1574
|
+
const hash = bareTokenHash(shape, id);
|
|
1575
|
+
if (hash !== undefined)
|
|
1576
|
+
keepLeft(id, hash, `${id}: not carried (${TOKEN_BARE} holds this id more than once)`);
|
|
1577
|
+
}
|
|
1578
|
+
const dupSet = new Set(dups);
|
|
1579
|
+
let decided = 0;
|
|
1580
|
+
const rows = db
|
|
1581
|
+
.prepare(`SELECT ${shape.all.map(quoteIdent).join(', ')} FROM main.${TOKEN_BARE} WHERE "id" IS NOT NULL`)
|
|
1582
|
+
.iterate();
|
|
1583
|
+
for (const r of rows) {
|
|
1584
|
+
const id = String(r['id']);
|
|
1585
|
+
if (dupSet.has(id))
|
|
1586
|
+
continue;
|
|
1587
|
+
const hash = sha(rowJson(r, shape.all));
|
|
1588
|
+
if (last[id] === hash) {
|
|
1589
|
+
visited.add(id);
|
|
1590
|
+
keepLeft(id, hash, `${id}: left in ${TOKEN_BARE} by an earlier merge`);
|
|
1591
|
+
continue;
|
|
1592
|
+
}
|
|
1593
|
+
if (decided >= tokenDrainChunk) {
|
|
1594
|
+
plan.truncated = true;
|
|
1595
|
+
break;
|
|
1596
|
+
}
|
|
1597
|
+
visited.add(id);
|
|
1598
|
+
decided++;
|
|
1599
|
+
const extra = shape.bareOnly.filter((c) => (r[c] ?? null) !== null);
|
|
1600
|
+
if (extra.length > 0) {
|
|
1601
|
+
keepLeft(id, hash, `${id}: not carried (${TOKEN_TWIN} has no column ${extra.join(', ')})`);
|
|
1602
|
+
continue;
|
|
1603
|
+
}
|
|
1604
|
+
const json = rowJson(r, shape.shared);
|
|
1605
|
+
const twin = twinTokenJson(shape, id);
|
|
1606
|
+
if (twin === undefined) {
|
|
1607
|
+
plan.set.set(id, json);
|
|
1608
|
+
plan.fullHashes?.set(id, hash);
|
|
1609
|
+
}
|
|
1610
|
+
else if (twin === json)
|
|
1611
|
+
plan.del.push(id);
|
|
1612
|
+
else
|
|
1613
|
+
keepLeft(id, hash, `${id}: kept in ${TOKEN_BARE} (${TOKEN_TWIN} holds another copy)`);
|
|
1614
|
+
}
|
|
1615
|
+
// Rows left behind earlier that this bounded pass did not reach stay left
|
|
1616
|
+
// behind while they are unchanged.
|
|
1617
|
+
if (plan.truncated) {
|
|
1618
|
+
for (const [id, hash] of Object.entries(last)) {
|
|
1619
|
+
if (!visited.has(id) && bareTokenHash(shape, id) === hash)
|
|
1620
|
+
left.set(id, hash);
|
|
1621
|
+
}
|
|
1622
|
+
}
|
|
1623
|
+
return plan;
|
|
1624
|
+
}
|
|
1625
|
+
/**
|
|
1626
|
+
* Carry a token plan into `tasks_token_usage`, one row at a time, each in its
|
|
1627
|
+
* own savepoint and re-read before it counts. A row the twin refuses (a
|
|
1628
|
+
* CHECK, NOT NULL or type mismatch from a differing shape, or a value it
|
|
1629
|
+
* stores differently) is rolled back, listed as a conflict and left where it
|
|
1630
|
+
* is (recorded in `leftBehind`): one bad row never fails the merge, so the
|
|
1631
|
+
* open is never blocked by it. A carried row and every row of `del` are then
|
|
1632
|
+
* deleted from the bare table.
|
|
1633
|
+
*/
|
|
1634
|
+
function applyTokenUsage(db, plan) {
|
|
1635
|
+
const refused = new Set();
|
|
1636
|
+
const shape = tokenShape(db, 'main');
|
|
1637
|
+
if (shape === null)
|
|
1638
|
+
return { inserted: 0, replaced: 0, deleted: 0, refused };
|
|
1639
|
+
const insert = db.prepare(`INSERT INTO main.${TOKEN_TWIN} (${shape.shared.map(quoteIdent).join(', ')}) ` +
|
|
1640
|
+
`VALUES (${shape.shared.map(() => '?').join(', ')})`);
|
|
1641
|
+
const removeBare = db.prepare(`DELETE FROM main.${TOKEN_BARE} WHERE "id" = ?`);
|
|
1642
|
+
let inserted = 0;
|
|
1643
|
+
let deleted = 0;
|
|
1644
|
+
for (const [id, json] of plan.set) {
|
|
1645
|
+
db.exec('SAVEPOINT token_usage_row');
|
|
1646
|
+
try {
|
|
1647
|
+
insert.run(...JSON.parse(json));
|
|
1648
|
+
if (twinTokenJson(shape, id) !== json)
|
|
1649
|
+
// @sync-invariant none:local-only re-reads a row this device's own drain just inserted; the savepoint rolls it back and the row stays in the bare table
|
|
1650
|
+
throw new Error('the stored row differs');
|
|
1651
|
+
db.exec('RELEASE token_usage_row');
|
|
1652
|
+
inserted++;
|
|
1653
|
+
}
|
|
1654
|
+
catch (error) {
|
|
1655
|
+
db.exec('ROLLBACK TO token_usage_row');
|
|
1656
|
+
db.exec('RELEASE token_usage_row');
|
|
1657
|
+
plan.conflicts.push(`${id}: not carried (${error instanceof Error ? error.message : error})`);
|
|
1658
|
+
plan.skipped++;
|
|
1659
|
+
refused.add(id);
|
|
1660
|
+
const hash = plan.fullHashes?.get(id);
|
|
1661
|
+
if (hash !== undefined)
|
|
1662
|
+
plan.leftBehind?.set(id, hash);
|
|
1663
|
+
continue;
|
|
1664
|
+
}
|
|
1665
|
+
deleted += Number(removeBare.run(id).changes);
|
|
1666
|
+
}
|
|
1667
|
+
for (const id of plan.del)
|
|
1668
|
+
deleted += Number(removeBare.run(id).changes);
|
|
1669
|
+
return { inserted, replaced: 0, deleted, refused };
|
|
1670
|
+
}
|
|
1671
|
+
/**
|
|
1672
|
+
* `token_usage` → `tasks_token_usage`, a DRAIN rather than a mirror. Token rows
|
|
1673
|
+
* are append-only telemetry with random ids, and since T13111 this build reads
|
|
1674
|
+
* and writes only the twin. So each merge moves the bare rows into the twin
|
|
1675
|
+
* and deletes them from the bare table, the second sanctioned bare write after
|
|
1676
|
+
* {@link mirrorCounterToBare}: the bare table becomes the inbox of rows an
|
|
1677
|
+
* older build writes, empty after every open unless a row is left behind (see
|
|
1678
|
+
* {@link planTokenUsage}). `cleo token` reports then cover all history, and
|
|
1679
|
+
* `cleo token delete` / `clear` need to touch the twin only.
|
|
1680
|
+
*
|
|
1681
|
+
* - Lossless: a bare row is deleted only when the twin holds every value of
|
|
1682
|
+
* it, so no snapshot is taken and no marker names one.
|
|
1683
|
+
* - Bounded: a merge decides at most {@link TOKEN_DRAIN_CHUNK} rows per
|
|
1684
|
+
* `BEGIN IMMEDIATE`, so a long legacy table drains in several short
|
|
1685
|
+
* transactions instead of holding the write lock for all of it.
|
|
1686
|
+
* - Degrades nothing: the twin is correct whatever the bare table holds, so a
|
|
1687
|
+
* failed merge is recorded (`cleo doctor twin-collapse`) and retried at the
|
|
1688
|
+
* next open; no shadow is built and no write is refused.
|
|
1689
|
+
* - Only the columns both tables hold are carried, so a cut-down legacy shape
|
|
1690
|
+
* on either side drains what it can and never fails the open.
|
|
1691
|
+
* - An unchanged bare table costs one `count`/`max(rowid)` read.
|
|
1692
|
+
*/
|
|
1693
|
+
const TOKEN_USAGE = {
|
|
1694
|
+
table: TOKEN_BARE,
|
|
1695
|
+
twin: TOKEN_TWIN,
|
|
1696
|
+
kvTable: 'tasks_schema_meta',
|
|
1697
|
+
tables: [TOKEN_BARE, TOKEN_TWIN, 'tasks_schema_meta'],
|
|
1698
|
+
lossless: true,
|
|
1699
|
+
bareHashes: (db) => bareTokenHashes(db),
|
|
1700
|
+
// The twin is not tracked: the bare side is drained, never compared.
|
|
1701
|
+
twinHashes: () => ({}),
|
|
1702
|
+
changeSeq: (db) => tokenChangeSeq(db),
|
|
1703
|
+
plan: (db, state) => planTokenUsage(db, state),
|
|
1704
|
+
apply(db, plan) {
|
|
1705
|
+
const { refused, ...counts } = applyTokenUsage(db, plan);
|
|
1706
|
+
const shape = tokenShape(db, 'main');
|
|
1707
|
+
if (shape === null)
|
|
1708
|
+
return counts;
|
|
1709
|
+
const left = db.prepare(`SELECT 1 FROM main.${TOKEN_BARE} WHERE "id" = ?`);
|
|
1710
|
+
for (const [id, json] of plan.set) {
|
|
1711
|
+
if (refused.has(id))
|
|
1712
|
+
continue;
|
|
1713
|
+
if (twinTokenJson(shape, id) !== json)
|
|
1714
|
+
// @sync-invariant none:local-only verifies this device's own collapse transaction before commit; a mismatch rolls the whole drain back
|
|
1715
|
+
throw new Error(`token_usage collapse did not verify the carried row ${id}`);
|
|
1716
|
+
}
|
|
1717
|
+
for (const id of [...plan.set.keys(), ...plan.del]) {
|
|
1718
|
+
if (!refused.has(id) && left.get(id) !== undefined)
|
|
1719
|
+
// @sync-invariant none:local-only verifies this device's own collapse transaction before commit; a mismatch rolls the whole drain back
|
|
1720
|
+
throw new Error(`token_usage collapse did not verify the drain of ${id}`);
|
|
1721
|
+
}
|
|
1722
|
+
return counts;
|
|
1723
|
+
},
|
|
1724
|
+
};
|
|
1420
1725
|
/** The pairs this build collapses, in order. */
|
|
1421
|
-
const PAIRS = [SCHEMA_META, STICKY_TAGS, DOCS];
|
|
1726
|
+
const PAIRS = [SCHEMA_META, STICKY_TAGS, DOCS, TOKEN_USAGE];
|
|
1422
1727
|
/** Connections serving TEMP shadows because their collapse failed. */
|
|
1423
1728
|
const degraded = new WeakMap();
|
|
1424
1729
|
/**
|
|
@@ -1551,18 +1856,26 @@ function receipt(pair, status, snapshotPath) {
|
|
|
1551
1856
|
archived: [],
|
|
1552
1857
|
};
|
|
1553
1858
|
}
|
|
1554
|
-
/**
|
|
1555
|
-
|
|
1859
|
+
/**
|
|
1860
|
+
* Run one pair's merge in its own transaction. Returns the receipt and
|
|
1861
|
+
* whether a lossless pair's bounded plan left rows undecided (the caller runs
|
|
1862
|
+
* another transaction). A continuation skips the change check: the plan reads
|
|
1863
|
+
* the bare table under this transaction's write lock either way.
|
|
1864
|
+
*/
|
|
1865
|
+
function collapsePair(db, pair, snapshotPath, dbPath, continuation = false) {
|
|
1556
1866
|
db.exec('BEGIN IMMEDIATE');
|
|
1557
1867
|
try {
|
|
1558
1868
|
// Re-read under the write lock: another process may have merged since.
|
|
1559
1869
|
const state = readState(db, pair);
|
|
1560
|
-
if (!bareChanged(db, pair, state)) {
|
|
1870
|
+
if (!continuation && !bareChanged(db, pair, state)) {
|
|
1561
1871
|
db.exec('ROLLBACK');
|
|
1562
|
-
return receipt(pair, 'unchanged', state?.snapshot ?? null);
|
|
1872
|
+
return [receipt(pair, 'unchanged', state?.snapshot ?? null), false];
|
|
1563
1873
|
}
|
|
1564
1874
|
const plan = pair.plan(db, state);
|
|
1565
|
-
if (state === undefined &&
|
|
1875
|
+
if (state === undefined &&
|
|
1876
|
+
snapshotPath === null &&
|
|
1877
|
+
!pair.lossless &&
|
|
1878
|
+
(plan.set.size > 0 || plan.del.length > 0))
|
|
1566
1879
|
throw new Error(`bare ${pair.table} changed after the snapshot decision; retry the open`);
|
|
1567
1880
|
const counts = pair.apply(db, plan);
|
|
1568
1881
|
const now = new Date().toISOString();
|
|
@@ -1574,15 +1887,21 @@ function collapsePair(db, pair, snapshotPath, dbPath) {
|
|
|
1574
1887
|
// Only an initial collapse records the snapshot it took. A later one
|
|
1575
1888
|
// keeps what the marker holds, including `null` after an owner
|
|
1576
1889
|
// released it (T12767): the snapshot another pair's initial collapse
|
|
1577
|
-
// took is not this pair's pre-collapse store.
|
|
1578
|
-
|
|
1579
|
-
|
|
1890
|
+
// took is not this pair's pre-collapse store. A lossless pair never
|
|
1891
|
+
// names one, so it never holds a snapshot release back.
|
|
1892
|
+
snapshot: state === undefined ? (pair.lossless ? null : snapshotPath) : state.snapshot,
|
|
1893
|
+
hashes: {
|
|
1894
|
+
bare: plan.leftBehind ? Object.fromEntries(plan.leftBehind) : pair.bareHashes(db),
|
|
1895
|
+
twin: pair.twinHashes(db),
|
|
1896
|
+
},
|
|
1580
1897
|
dropped: state === undefined ? plan.dropped : state.dropped,
|
|
1581
1898
|
kept: state === undefined ? plan.kept.slice(0, MAX_CONFLICTS) : state.kept,
|
|
1582
1899
|
archived: state === undefined ? plan.archived : state.archived,
|
|
1583
1900
|
conflicts: plan.conflicts.slice(0, MAX_CONFLICTS),
|
|
1584
1901
|
conflictsAt: plan.conflicts.length > 0 ? now : null,
|
|
1585
|
-
|
|
1902
|
+
// A truncated drain records no counter, so the next open compares
|
|
1903
|
+
// hashes and finds the undecided rows (T13115).
|
|
1904
|
+
seq: plan.truncated ? null : (pair.changeSeq?.(db) ?? null),
|
|
1586
1905
|
merged: plan.merged.slice(0, MAX_CONFLICTS),
|
|
1587
1906
|
renamed: plan.renamed.slice(0, MAX_CONFLICTS),
|
|
1588
1907
|
};
|
|
@@ -1607,8 +1926,8 @@ function collapsePair(db, pair, snapshotPath, dbPath) {
|
|
|
1607
1926
|
archived: plan.archived,
|
|
1608
1927
|
};
|
|
1609
1928
|
if (counts.inserted + counts.replaced + counts.deleted > 0 || plan.conflicts.length > 0)
|
|
1610
|
-
log.warn(done, `carried bare ${pair.table} into ${pair.twin} (${done.status}, T12535)`);
|
|
1611
|
-
return done;
|
|
1929
|
+
log.warn({ ...done, conflicts: done.conflicts.slice(0, MAX_CONFLICTS) }, `carried bare ${pair.table} into ${pair.twin} (${done.status}, T12535)`);
|
|
1930
|
+
return [done, plan.truncated === true];
|
|
1612
1931
|
}
|
|
1613
1932
|
catch (error) {
|
|
1614
1933
|
if (db.isTransaction)
|
|
@@ -1657,7 +1976,7 @@ export function collapseTwinTables(nativeDb, dbPath, options = {}) {
|
|
|
1657
1976
|
// A bind on a connection already degraded in this process does not retry:
|
|
1658
1977
|
// the cause is outside CLEO; `cleo doctor twin-collapse --retry` retries.
|
|
1659
1978
|
if (onFailure === 'degrade' && degraded.has(nativeDb))
|
|
1660
|
-
return PAIRS.map((p) => receipt(p, 'degraded', null));
|
|
1979
|
+
return PAIRS.map((p) => receipt(p, p.lossless ? 'deferred' : 'degraded', null));
|
|
1661
1980
|
const byTable = new Map();
|
|
1662
1981
|
const inOrder = () => PAIRS.map((p) => byTable.get(p.table)).filter((r) => r !== undefined);
|
|
1663
1982
|
const pending = [];
|
|
@@ -1691,27 +2010,36 @@ export function collapseTwinTables(nativeDb, dbPath, options = {}) {
|
|
|
1691
2010
|
log.error(failure, `twin collapse of ${failure.tables.join(', ')} failed (T12535)`);
|
|
1692
2011
|
if (onFailure === 'throw')
|
|
1693
2012
|
throw twinCollapseError(failure, cause);
|
|
2013
|
+
// A lossless pair degrades nothing: its twin is correct as it is, its bare
|
|
2014
|
+
// rows wait, and the next open retries (T13115).
|
|
2015
|
+
for (const pair of pairs.filter((p) => p.lossless))
|
|
2016
|
+
byTable.set(pair.table, receipt(pair, 'deferred', null));
|
|
2017
|
+
const degrading = pairs.filter((p) => !p.lossless);
|
|
2018
|
+
if (degrading.length === 0)
|
|
2019
|
+
return;
|
|
2020
|
+
const scoped = { ...failure, tables: degrading.map((p) => p.table) };
|
|
1694
2021
|
// Read-only-for-users mode: serve the merged view from TEMP shadows. If
|
|
1695
2022
|
// even that cannot be built, reads cannot be served correctly either.
|
|
1696
2023
|
try {
|
|
1697
|
-
for (const pair of
|
|
2024
|
+
for (const pair of degrading) {
|
|
1698
2025
|
for (const shadow of pair.shadows ?? [pair.twin])
|
|
1699
2026
|
unsealShadow(nativeDb, shadow);
|
|
1700
|
-
pair.shadow(nativeDb, pair.plan(nativeDb, readState(nativeDb, pair)));
|
|
2027
|
+
pair.shadow?.(nativeDb, pair.plan(nativeDb, readState(nativeDb, pair)));
|
|
1701
2028
|
for (const shadow of pair.shadows ?? [pair.twin])
|
|
1702
2029
|
sealShadow(nativeDb, shadow);
|
|
1703
2030
|
}
|
|
1704
2031
|
}
|
|
1705
2032
|
catch (shadowError) {
|
|
1706
|
-
throw twinCollapseError(
|
|
2033
|
+
throw twinCollapseError(scoped, shadowError);
|
|
1707
2034
|
}
|
|
1708
|
-
degraded.set(nativeDb,
|
|
1709
|
-
for (const pair of
|
|
2035
|
+
degraded.set(nativeDb, scoped);
|
|
2036
|
+
for (const pair of degrading)
|
|
1710
2037
|
byTable.set(pair.table, receipt(pair, 'degraded', failure.snapshotPath));
|
|
1711
2038
|
};
|
|
1712
|
-
// One snapshot covers every pair whose INITIAL collapse changes its twin
|
|
2039
|
+
// One snapshot covers every pair whose INITIAL collapse changes its twin
|
|
2040
|
+
// (a lossless pair discards nothing, so it needs none).
|
|
1713
2041
|
const needSnapshot = pending.filter((p) => {
|
|
1714
|
-
if (readState(nativeDb, p) !== undefined)
|
|
2042
|
+
if (p.lossless || readState(nativeDb, p) !== undefined)
|
|
1715
2043
|
return false;
|
|
1716
2044
|
const plan = p.plan(nativeDb, undefined);
|
|
1717
2045
|
return plan.set.size > 0 || plan.del.length > 0;
|
|
@@ -1742,7 +2070,20 @@ export function collapseTwinTables(nativeDb, dbPath, options = {}) {
|
|
|
1742
2070
|
let firstError;
|
|
1743
2071
|
for (const pair of pending) {
|
|
1744
2072
|
try {
|
|
1745
|
-
|
|
2073
|
+
let [done, more] = collapsePair(nativeDb, pair, snapshotPath, dbPath);
|
|
2074
|
+
// A lossless drain's long backlog: one short transaction per chunk.
|
|
2075
|
+
for (let chunk = 1; more && chunk < MAX_DRAIN_CHUNKS; chunk++) {
|
|
2076
|
+
const [next, again] = collapsePair(nativeDb, pair, snapshotPath, dbPath, true);
|
|
2077
|
+
done = {
|
|
2078
|
+
...next,
|
|
2079
|
+
status: done.status,
|
|
2080
|
+
inserted: done.inserted + next.inserted,
|
|
2081
|
+
replaced: done.replaced + next.replaced,
|
|
2082
|
+
deleted: done.deleted + next.deleted,
|
|
2083
|
+
};
|
|
2084
|
+
more = again;
|
|
2085
|
+
}
|
|
2086
|
+
byTable.set(pair.table, done);
|
|
1746
2087
|
}
|
|
1747
2088
|
catch (error) {
|
|
1748
2089
|
failed.push(pair);
|
|
@@ -1819,7 +2160,7 @@ export function inspectTwinCollapse(db) {
|
|
|
1819
2160
|
changed++;
|
|
1820
2161
|
}
|
|
1821
2162
|
let wouldChangeTwin = false;
|
|
1822
|
-
if (state === undefined) {
|
|
2163
|
+
if (state === undefined && !pair.lossless) {
|
|
1823
2164
|
const plan = pair.plan(db, undefined);
|
|
1824
2165
|
wouldChangeTwin = plan.set.size > 0 || plan.del.length > 0;
|
|
1825
2166
|
}
|