@cleocode/core 2026.6.12 → 2026.6.14
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/admin/ops.d.ts +4 -0
- package/dist/admin/ops.d.ts.map +1 -1
- package/dist/check/index.d.ts +12 -0
- package/dist/check/index.d.ts.map +1 -0
- package/dist/check/index.js +12 -0
- package/dist/check/index.js.map +1 -0
- package/dist/check/pr-gate.d.ts +179 -0
- package/dist/check/pr-gate.d.ts.map +1 -0
- package/dist/check/pr-gate.js +366 -0
- package/dist/check/pr-gate.js.map +1 -0
- package/dist/conduit/delivery-router.d.ts +134 -0
- package/dist/conduit/delivery-router.d.ts.map +1 -0
- package/dist/conduit/delivery-router.js +0 -0
- package/dist/conduit/delivery-router.js.map +1 -0
- package/dist/conduit/index.d.ts +5 -2
- package/dist/conduit/index.d.ts.map +1 -1
- package/dist/conduit/index.js +5 -2
- package/dist/conduit/index.js.map +1 -1
- package/dist/conduit/local-transport.d.ts +12 -0
- package/dist/conduit/local-transport.d.ts.map +1 -1
- package/dist/conduit/local-transport.js +53 -23
- package/dist/conduit/local-transport.js.map +1 -1
- package/dist/conduit/local-tui-adapter.d.ts +89 -0
- package/dist/conduit/local-tui-adapter.d.ts.map +1 -0
- package/dist/conduit/local-tui-adapter.js +225 -0
- package/dist/conduit/local-tui-adapter.js.map +1 -0
- package/dist/config/registry.d.ts +54 -0
- package/dist/config/registry.d.ts.map +1 -1
- package/dist/config/registry.js +94 -2
- package/dist/config/registry.js.map +1 -1
- package/dist/crypto/credentials.d.ts +37 -0
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +110 -0
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/deriver/queue-manager.d.ts +30 -2
- package/dist/deriver/queue-manager.d.ts.map +1 -1
- package/dist/deriver/queue-manager.js +54 -9
- package/dist/deriver/queue-manager.js.map +1 -1
- package/dist/dispatch/config-domain-handler.d.ts +125 -0
- package/dist/dispatch/config-domain-handler.d.ts.map +1 -0
- package/dist/dispatch/config-domain-handler.js +160 -0
- package/dist/dispatch/config-domain-handler.js.map +1 -0
- package/dist/dispatch/contracts/derive-output-contract.d.ts +86 -0
- package/dist/dispatch/contracts/derive-output-contract.d.ts.map +1 -0
- package/dist/dispatch/contracts/derive-output-contract.js +347 -0
- package/dist/dispatch/contracts/derive-output-contract.js.map +1 -0
- package/dist/dispatch/contracts/ensures-schema.d.ts +77 -0
- package/dist/dispatch/contracts/ensures-schema.d.ts.map +1 -0
- package/dist/dispatch/contracts/ensures-schema.js +91 -0
- package/dist/dispatch/contracts/ensures-schema.js.map +1 -0
- package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
- package/dist/dispatch/contracts/input-contracts.js +19 -1
- package/dist/dispatch/contracts/input-contracts.js.map +1 -1
- package/dist/dispatch/contracts/output-contracts.d.ts +27 -5
- package/dist/dispatch/contracts/output-contracts.d.ts.map +1 -1
- package/dist/dispatch/contracts/output-contracts.js +29 -6
- package/dist/dispatch/contracts/output-contracts.js.map +1 -1
- package/dist/docs/export-document.js +5413 -1345
- package/dist/docs/export-document.js.map +3 -3
- package/dist/gateway-client/client.d.ts +123 -0
- package/dist/gateway-client/client.d.ts.map +1 -0
- package/dist/gateway-client/client.js +93 -0
- package/dist/gateway-client/client.js.map +1 -0
- package/dist/gateway-client/generated/client/client.gen.d.ts +3 -0
- package/dist/gateway-client/generated/client/client.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/client/client.gen.js +217 -0
- package/dist/gateway-client/generated/client/client.gen.js.map +1 -0
- package/dist/gateway-client/generated/client/index.d.ts +11 -0
- package/dist/gateway-client/generated/client/index.d.ts.map +1 -0
- package/dist/gateway-client/generated/client/index.js +7 -0
- package/dist/gateway-client/generated/client/index.js.map +1 -0
- package/dist/gateway-client/generated/client/types.gen.d.ts +121 -0
- package/dist/gateway-client/generated/client/types.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/client/types.gen.js +3 -0
- package/dist/gateway-client/generated/client/types.gen.js.map +1 -0
- package/dist/gateway-client/generated/client/utils.gen.d.ts +38 -0
- package/dist/gateway-client/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/client/utils.gen.js +229 -0
- package/dist/gateway-client/generated/client/utils.gen.js.map +1 -0
- package/dist/gateway-client/generated/client.gen.d.ts +13 -0
- package/dist/gateway-client/generated/client.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/client.gen.js +4 -0
- package/dist/gateway-client/generated/client.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/auth.gen.d.ts +26 -0
- package/dist/gateway-client/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/auth.gen.js +15 -0
- package/dist/gateway-client/generated/core/auth.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts +26 -0
- package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/bodySerializer.gen.js +58 -0
- package/dist/gateway-client/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/params.gen.d.ts +44 -0
- package/dist/gateway-client/generated/core/params.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/params.gen.js +101 -0
- package/dist/gateway-client/generated/core/params.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/pathSerializer.gen.js +107 -0
- package/dist/gateway-client/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/queryKeySerializer.gen.js +93 -0
- package/dist/gateway-client/generated/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/serverSentEvents.gen.js +133 -0
- package/dist/gateway-client/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/types.gen.d.ts +84 -0
- package/dist/gateway-client/generated/core/types.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/types.gen.js +3 -0
- package/dist/gateway-client/generated/core/types.gen.js.map +1 -0
- package/dist/gateway-client/generated/core/utils.gen.d.ts +20 -0
- package/dist/gateway-client/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/core/utils.gen.js +88 -0
- package/dist/gateway-client/generated/core/utils.gen.js.map +1 -0
- package/dist/gateway-client/generated/index.d.ts +3 -0
- package/dist/gateway-client/generated/index.d.ts.map +1 -0
- package/dist/gateway-client/generated/index.js +3 -0
- package/dist/gateway-client/generated/index.js.map +1 -0
- package/dist/gateway-client/generated/namespaces.gen.d.ts +512 -0
- package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/namespaces.gen.js +521 -0
- package/dist/gateway-client/generated/namespaces.gen.js.map +1 -0
- package/dist/gateway-client/generated/sdk.gen.d.ts +1780 -0
- package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/sdk.gen.js +3811 -0
- package/dist/gateway-client/generated/sdk.gen.js.map +1 -0
- package/dist/gateway-client/generated/types.gen.d.ts +14681 -0
- package/dist/gateway-client/generated/types.gen.d.ts.map +1 -0
- package/dist/gateway-client/generated/types.gen.js +3 -0
- package/dist/gateway-client/generated/types.gen.js.map +1 -0
- package/dist/gateway-client/index.d.ts +27 -0
- package/dist/gateway-client/index.d.ts.map +1 -0
- package/dist/gateway-client/index.js +25 -0
- package/dist/gateway-client/index.js.map +1 -0
- package/dist/go/driver.d.ts +132 -7
- package/dist/go/driver.d.ts.map +1 -1
- package/dist/go/driver.js +135 -10
- package/dist/go/driver.js.map +1 -1
- package/dist/go/index.d.ts +1 -1
- package/dist/go/index.d.ts.map +1 -1
- package/dist/go/index.js +1 -1
- package/dist/go/index.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +28 -0
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +23 -11
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +29 -12
- package/dist/internal.js.map +1 -1
- package/dist/lifecycle/engine-ops.d.ts.map +1 -1
- package/dist/lifecycle/engine-ops.js +7 -4
- package/dist/lifecycle/engine-ops.js.map +1 -1
- package/dist/lifecycle/ivtr-loop.d.ts +108 -183
- package/dist/lifecycle/ivtr-loop.d.ts.map +1 -1
- package/dist/lifecycle/ivtr-loop.js +207 -522
- package/dist/lifecycle/ivtr-loop.js.map +1 -1
- package/dist/llm/auxiliary-fallback.js +1 -1
- package/dist/llm/auxiliary-fallback.js.map +1 -1
- package/dist/llm/catalog-model-resolver.d.ts +19 -0
- package/dist/llm/catalog-model-resolver.d.ts.map +1 -1
- package/dist/llm/catalog-model-resolver.js +36 -0
- package/dist/llm/catalog-model-resolver.js.map +1 -1
- package/dist/llm/catalog-resolver.d.ts +112 -0
- package/dist/llm/catalog-resolver.d.ts.map +1 -0
- package/dist/llm/catalog-resolver.js +207 -0
- package/dist/llm/catalog-resolver.js.map +1 -0
- package/dist/llm/catalog-seeder.d.ts +96 -0
- package/dist/llm/catalog-seeder.d.ts.map +1 -0
- package/dist/llm/catalog-seeder.js +189 -0
- package/dist/llm/catalog-seeder.js.map +1 -0
- package/dist/llm/cli-ops.d.ts +14 -1
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +46 -17
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/complexity-classifier.d.ts +208 -0
- package/dist/llm/complexity-classifier.d.ts.map +1 -0
- package/dist/llm/complexity-classifier.js +359 -0
- package/dist/llm/complexity-classifier.js.map +1 -0
- package/dist/llm/concrete-session.d.ts.map +1 -1
- package/dist/llm/concrete-session.js +4 -0
- package/dist/llm/concrete-session.js.map +1 -1
- package/dist/llm/credential-pool.d.ts +2 -0
- package/dist/llm/credential-pool.d.ts.map +1 -1
- package/dist/llm/credential-pool.js +5 -2
- package/dist/llm/credential-pool.js.map +1 -1
- package/dist/llm/credentials-store.d.ts +10 -14
- package/dist/llm/credentials-store.d.ts.map +1 -1
- package/dist/llm/credentials-store.js.map +1 -1
- package/dist/llm/credentials.d.ts +35 -0
- package/dist/llm/credentials.d.ts.map +1 -1
- package/dist/llm/credentials.js +49 -0
- package/dist/llm/credentials.js.map +1 -1
- package/dist/llm/entity-ops.d.ts +299 -0
- package/dist/llm/entity-ops.d.ts.map +1 -0
- package/dist/llm/entity-ops.js +441 -0
- package/dist/llm/entity-ops.js.map +1 -0
- package/dist/llm/index.d.ts +19 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +12 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/llm-queue-admit.d.ts +118 -0
- package/dist/llm/llm-queue-admit.d.ts.map +1 -0
- package/dist/llm/llm-queue-admit.js +275 -0
- package/dist/llm/llm-queue-admit.js.map +1 -0
- package/dist/llm/oauth/device-code.d.ts.map +1 -1
- package/dist/llm/oauth/device-code.js +2 -8
- package/dist/llm/oauth/device-code.js.map +1 -1
- package/dist/llm/oauth/google-pkce.d.ts.map +1 -1
- package/dist/llm/oauth/google-pkce.js +2 -18
- package/dist/llm/oauth/google-pkce.js.map +1 -1
- package/dist/llm/oauth/pkce.d.ts +70 -0
- package/dist/llm/oauth/pkce.d.ts.map +1 -1
- package/dist/llm/oauth/pkce.js +106 -29
- package/dist/llm/oauth/pkce.js.map +1 -1
- package/dist/llm/onboarding/front-door.d.ts +146 -0
- package/dist/llm/onboarding/front-door.d.ts.map +1 -0
- package/dist/llm/onboarding/front-door.js +153 -0
- package/dist/llm/onboarding/front-door.js.map +1 -0
- package/dist/llm/onboarding/login-engine.d.ts +175 -0
- package/dist/llm/onboarding/login-engine.d.ts.map +1 -0
- package/dist/llm/onboarding/login-engine.js +286 -0
- package/dist/llm/onboarding/login-engine.js.map +1 -0
- package/dist/llm/pi/gondolin-loader.d.ts +241 -0
- package/dist/llm/pi/gondolin-loader.d.ts.map +1 -0
- package/dist/llm/pi/gondolin-loader.js +195 -0
- package/dist/llm/pi/gondolin-loader.js.map +1 -0
- package/dist/llm/pi/index.d.ts +28 -0
- package/dist/llm/pi/index.d.ts.map +1 -0
- package/dist/llm/pi/index.js +27 -0
- package/dist/llm/pi/index.js.map +1 -0
- package/dist/llm/pi/pi-agent-adapter.d.ts +135 -0
- package/dist/llm/pi/pi-agent-adapter.d.ts.map +1 -0
- package/dist/llm/pi/pi-agent-adapter.js +329 -0
- package/dist/llm/pi/pi-agent-adapter.js.map +1 -0
- package/dist/llm/pi/pi-errors.d.ts +161 -0
- package/dist/llm/pi/pi-errors.d.ts.map +1 -0
- package/dist/llm/pi/pi-errors.js +296 -0
- package/dist/llm/pi/pi-errors.js.map +1 -0
- package/dist/llm/pi/pi-execution-env.d.ts +286 -0
- package/dist/llm/pi/pi-execution-env.d.ts.map +1 -0
- package/dist/llm/pi/pi-execution-env.js +406 -0
- package/dist/llm/pi/pi-execution-env.js.map +1 -0
- package/dist/llm/pi/pi-gondolin-env.d.ts +250 -0
- package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -0
- package/dist/llm/pi/pi-gondolin-env.js +541 -0
- package/dist/llm/pi/pi-gondolin-env.js.map +1 -0
- package/dist/llm/pi/pi-session-storage.d.ts +154 -0
- package/dist/llm/pi/pi-session-storage.d.ts.map +1 -0
- package/dist/llm/pi/pi-session-storage.js +314 -0
- package/dist/llm/pi/pi-session-storage.js.map +1 -0
- package/dist/llm/pi/pi-stream-fn.d.ts +124 -0
- package/dist/llm/pi/pi-stream-fn.d.ts.map +1 -0
- package/dist/llm/pi/pi-stream-fn.js +504 -0
- package/dist/llm/pi/pi-stream-fn.js.map +1 -0
- package/dist/llm/pi/pi-tool-bridge.d.ts +99 -0
- package/dist/llm/pi/pi-tool-bridge.d.ts.map +1 -0
- package/dist/llm/pi/pi-tool-bridge.js +117 -0
- package/dist/llm/pi/pi-tool-bridge.js.map +1 -0
- package/dist/llm/pi/pi-types.d.ts +56 -0
- package/dist/llm/pi/pi-types.d.ts.map +1 -0
- package/dist/llm/pi/pi-types.js +16 -0
- package/dist/llm/pi/pi-types.js.map +1 -0
- package/dist/llm/pi/resolve-execution-env.d.ts +194 -0
- package/dist/llm/pi/resolve-execution-env.d.ts.map +1 -0
- package/dist/llm/pi/resolve-execution-env.js +132 -0
- package/dist/llm/pi/resolve-execution-env.js.map +1 -0
- package/dist/llm/plugin-facade.js +5472 -1331
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/anthropic.js +23 -10
- package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
- package/dist/llm/provider-registry/provider-alias.d.ts +62 -0
- package/dist/llm/provider-registry/provider-alias.d.ts.map +1 -0
- package/dist/llm/provider-registry/provider-alias.js +85 -0
- package/dist/llm/provider-registry/provider-alias.js.map +1 -0
- package/dist/llm/provider-registry/provider-defs.d.ts +45 -0
- package/dist/llm/provider-registry/provider-defs.d.ts.map +1 -0
- package/dist/llm/provider-registry/provider-defs.js +145 -0
- package/dist/llm/provider-registry/provider-defs.js.map +1 -0
- package/dist/llm/provider-registry/provider-seed.d.ts +78 -0
- package/dist/llm/provider-registry/provider-seed.d.ts.map +1 -0
- package/dist/llm/provider-registry/provider-seed.js +113 -0
- package/dist/llm/provider-registry/provider-seed.js.map +1 -0
- package/dist/llm/role-executor.d.ts.map +1 -1
- package/dist/llm/role-executor.js +44 -5
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts +46 -14
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +185 -20
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/sealed-credential.d.ts +125 -0
- package/dist/llm/sealed-credential.d.ts.map +1 -0
- package/dist/llm/sealed-credential.js +133 -0
- package/dist/llm/sealed-credential.js.map +1 -0
- package/dist/llm/session-factory.d.ts.map +1 -1
- package/dist/llm/session-factory.js +6 -2
- package/dist/llm/session-factory.js.map +1 -1
- package/dist/llm/system-key.d.ts +67 -0
- package/dist/llm/system-key.d.ts.map +1 -0
- package/dist/llm/system-key.js +87 -0
- package/dist/llm/system-key.js.map +1 -0
- package/dist/llm/system-of-use-registry.d.ts +119 -0
- package/dist/llm/system-of-use-registry.d.ts.map +1 -0
- package/dist/llm/system-of-use-registry.js +200 -0
- package/dist/llm/system-of-use-registry.js.map +1 -0
- package/dist/llm/system-resolver.d.ts +32 -10
- package/dist/llm/system-resolver.d.ts.map +1 -1
- package/dist/llm/system-resolver.js +138 -35
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/memory/brain-writer-thread.d.ts.map +1 -1
- package/dist/memory/brain-writer-thread.js +116 -11
- package/dist/memory/brain-writer-thread.js.map +1 -1
- package/dist/memory/claude-mem-migration.d.ts.map +1 -1
- package/dist/memory/claude-mem-migration.js +21 -0
- package/dist/memory/claude-mem-migration.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
- package/dist/memory/graph-memory-bridge.js +32 -25
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/learnings.d.ts +4 -0
- package/dist/memory/learnings.d.ts.map +1 -1
- package/dist/memory/llm-backend-resolver.js +23 -5
- package/dist/memory/llm-backend-resolver.js.map +1 -1
- package/dist/memory/patterns.d.ts +4 -0
- package/dist/memory/patterns.d.ts.map +1 -1
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +1 -0
- package/dist/metrics/index.js.map +1 -1
- package/dist/nexus/migrations/M-split-graph.d.ts.map +1 -1
- package/dist/nexus/migrations/M-split-graph.js +60 -53
- package/dist/nexus/migrations/M-split-graph.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +20 -2
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestration/spawn.d.ts +89 -0
- package/dist/orchestration/spawn.d.ts.map +1 -1
- package/dist/orchestration/spawn.js +68 -0
- package/dist/orchestration/spawn.js.map +1 -1
- package/dist/playbooks/cantbook-profile.d.ts +96 -0
- package/dist/playbooks/cantbook-profile.d.ts.map +1 -0
- package/dist/playbooks/cantbook-profile.js +97 -0
- package/dist/playbooks/cantbook-profile.js.map +1 -0
- package/dist/playbooks/guarded-deterministic-runner.d.ts +153 -0
- package/dist/playbooks/guarded-deterministic-runner.d.ts.map +1 -0
- package/dist/playbooks/guarded-deterministic-runner.js +155 -0
- package/dist/playbooks/guarded-deterministic-runner.js.map +1 -0
- package/dist/playbooks/index.d.ts +2 -0
- package/dist/playbooks/index.d.ts.map +1 -1
- package/dist/playbooks/index.js +10 -0
- package/dist/playbooks/index.js.map +1 -1
- package/dist/playbooks/pi-runner-wiring.d.ts +75 -0
- package/dist/playbooks/pi-runner-wiring.d.ts.map +1 -0
- package/dist/playbooks/pi-runner-wiring.js +82 -0
- package/dist/playbooks/pi-runner-wiring.js.map +1 -0
- package/dist/release/engine-ops.js +2 -2
- package/dist/release/engine-ops.js.map +1 -1
- package/dist/routing/capability-matrix.d.ts.map +1 -1
- package/dist/routing/capability-matrix.js +0 -57
- package/dist/routing/capability-matrix.js.map +1 -1
- package/dist/runtime/openapi/generate-openapi.d.ts +211 -0
- package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -0
- package/dist/runtime/openapi/generate-openapi.js +300 -0
- package/dist/runtime/openapi/generate-openapi.js.map +1 -0
- package/dist/runtime/openapi/index.d.ts +16 -0
- package/dist/runtime/openapi/index.d.ts.map +1 -0
- package/dist/runtime/openapi/index.js +16 -0
- package/dist/runtime/openapi/index.js.map +1 -0
- package/dist/selfimprove/budget.d.ts +206 -0
- package/dist/selfimprove/budget.d.ts.map +1 -0
- package/dist/selfimprove/budget.js +203 -0
- package/dist/selfimprove/budget.js.map +1 -0
- package/dist/selfimprove/dhq-adapter.d.ts +105 -0
- package/dist/selfimprove/dhq-adapter.d.ts.map +1 -0
- package/dist/selfimprove/dhq-adapter.js +95 -0
- package/dist/selfimprove/dhq-adapter.js.map +1 -0
- package/dist/selfimprove/draft-pr.d.ts +129 -0
- package/dist/selfimprove/draft-pr.d.ts.map +1 -0
- package/dist/selfimprove/draft-pr.js +158 -0
- package/dist/selfimprove/draft-pr.js.map +1 -0
- package/dist/selfimprove/envelope-diff.d.ts +162 -0
- package/dist/selfimprove/envelope-diff.d.ts.map +1 -0
- package/dist/selfimprove/envelope-diff.js +321 -0
- package/dist/selfimprove/envelope-diff.js.map +1 -0
- package/dist/selfimprove/replay.d.ts +121 -0
- package/dist/selfimprove/replay.d.ts.map +1 -0
- package/dist/selfimprove/replay.js +109 -0
- package/dist/selfimprove/replay.js.map +1 -0
- package/dist/selfimprove/run-loop.d.ts +148 -0
- package/dist/selfimprove/run-loop.d.ts.map +1 -0
- package/dist/selfimprove/run-loop.js +240 -0
- package/dist/selfimprove/run-loop.js.map +1 -0
- package/dist/selfimprove/scenario.d.ts +145 -0
- package/dist/selfimprove/scenario.d.ts.map +1 -0
- package/dist/selfimprove/scenario.js +243 -0
- package/dist/selfimprove/scenario.js.map +1 -0
- package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +32 -0
- package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +18 -0
- package/dist/sentient/daemon-entry.js +5 -0
- package/dist/sentient/daemon-entry.js.map +1 -1
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +19 -0
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/hygiene-scan.d.ts.map +1 -1
- package/dist/sentient/hygiene-scan.js +14 -6
- package/dist/sentient/hygiene-scan.js.map +1 -1
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +13 -9
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/connection-session-handle.d.ts +161 -0
- package/dist/sessions/connection-session-handle.d.ts.map +1 -0
- package/dist/sessions/connection-session-handle.js +168 -0
- package/dist/sessions/connection-session-handle.js.map +1 -0
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +9 -0
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +4 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +31 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-id.d.ts +34 -0
- package/dist/sessions/session-id.d.ts.map +1 -1
- package/dist/sessions/session-id.js +37 -0
- package/dist/sessions/session-id.js.map +1 -1
- package/dist/sessions/session-manifest-mirror.d.ts +115 -0
- package/dist/sessions/session-manifest-mirror.d.ts.map +1 -0
- package/dist/sessions/session-manifest-mirror.js +250 -0
- package/dist/sessions/session-manifest-mirror.js.map +1 -0
- package/dist/sessions/session-switch.d.ts.map +1 -1
- package/dist/sessions/session-switch.js +5 -2
- package/dist/sessions/session-switch.js.map +1 -1
- package/dist/setup/config-json-merge.d.ts.map +1 -1
- package/dist/setup/config-json-merge.js +14 -0
- package/dist/setup/config-json-merge.js.map +1 -1
- package/dist/setup/index.d.ts +23 -11
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +25 -12
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/sections/llm.d.ts +28 -1
- package/dist/setup/sections/llm.d.ts.map +1 -1
- package/dist/setup/sections/llm.js +27 -6
- package/dist/setup/sections/llm.js.map +1 -1
- package/dist/setup/sections/models-roles.d.ts +40 -0
- package/dist/setup/sections/models-roles.d.ts.map +1 -0
- package/dist/setup/sections/models-roles.js +219 -0
- package/dist/setup/sections/models-roles.js.map +1 -0
- package/dist/setup/wizard.d.ts +19 -1
- package/dist/setup/wizard.d.ts.map +1 -1
- package/dist/setup/wizard.js.map +1 -1
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +2 -0
- package/dist/store/converters.js.map +1 -1
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +2 -0
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +87 -47
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/pi-session-store.d.ts +151 -0
- package/dist/store/pi-session-store.d.ts.map +1 -0
- package/dist/store/pi-session-store.js +166 -0
- package/dist/store/pi-session-store.js.map +1 -0
- package/dist/store/safety-data-accessor.d.ts +1 -0
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +5 -0
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schedule-schema.d.ts +195 -0
- package/dist/store/schedule-schema.d.ts.map +1 -0
- package/dist/store/schedule-schema.js +84 -0
- package/dist/store/schedule-schema.js.map +1 -0
- package/dist/store/schedule-store.d.ts +144 -0
- package/dist/store/schedule-store.d.ts.map +1 -0
- package/dist/store/schedule-store.js +162 -0
- package/dist/store/schedule-store.js.map +1 -0
- package/dist/store/schema/attachments.d.ts +1 -1
- package/dist/store/schema/cleo-global/accounts.d.ts +357 -0
- package/dist/store/schema/cleo-global/accounts.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/accounts.js +136 -0
- package/dist/store/schema/cleo-global/accounts.js.map +1 -0
- package/dist/store/schema/cleo-global/index.d.ts +5 -0
- package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/index.js +7 -0
- package/dist/store/schema/cleo-global/index.js.map +1 -1
- package/dist/store/schema/cleo-global/models-catalog.d.ts +359 -0
- package/dist/store/schema/cleo-global/models-catalog.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/models-catalog.js +114 -0
- package/dist/store/schema/cleo-global/models-catalog.js.map +1 -0
- package/dist/store/schema/cleo-global/providers.d.ts +279 -0
- package/dist/store/schema/cleo-global/providers.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/providers.js +94 -0
- package/dist/store/schema/cleo-global/providers.js.map +1 -0
- package/dist/store/schema/cleo-global/services.d.ts +493 -0
- package/dist/store/schema/cleo-global/services.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/services.js +200 -0
- package/dist/store/schema/cleo-global/services.js.map +1 -0
- package/dist/store/schema/cleo-global/session-manifest.d.ts +217 -0
- package/dist/store/schema/cleo-global/session-manifest.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/session-manifest.js +99 -0
- package/dist/store/schema/cleo-global/session-manifest.js.map +1 -0
- package/dist/store/schema/cleo-project/docs.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +16 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.js +14 -0
- package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.d.ts +2 -2
- package/dist/store/schema/memory-schema.d.ts +182 -2
- package/dist/store/schema/memory-schema.d.ts.map +1 -1
- package/dist/store/schema/memory-schema.js +111 -2
- package/dist/store/schema/memory-schema.js.map +1 -1
- package/dist/store/schema/provenance/releases.d.ts +1 -1
- package/dist/store/schema/tasks.d.ts +16 -0
- package/dist/store/schema/tasks.d.ts.map +1 -1
- package/dist/store/schema/tasks.js +10 -0
- package/dist/store/schema/tasks.js.map +1 -1
- package/dist/store/selfimprove-dhq-schema.d.ts +284 -0
- package/dist/store/selfimprove-dhq-schema.d.ts.map +1 -0
- package/dist/store/selfimprove-dhq-schema.js +128 -0
- package/dist/store/selfimprove-dhq-schema.js.map +1 -0
- package/dist/store/selfimprove-dhq-store.d.ts +175 -0
- package/dist/store/selfimprove-dhq-store.d.ts.map +1 -0
- package/dist/store/selfimprove-dhq-store.js +182 -0
- package/dist/store/selfimprove-dhq-store.js.map +1 -0
- package/dist/store/service-connections-accessor.d.ts +313 -0
- package/dist/store/service-connections-accessor.d.ts.map +1 -0
- package/dist/store/service-connections-accessor.js +464 -0
- package/dist/store/service-connections-accessor.js.map +1 -0
- package/dist/store/service-host-matcher.d.ts +70 -0
- package/dist/store/service-host-matcher.d.ts.map +1 -0
- package/dist/store/service-host-matcher.js +127 -0
- package/dist/store/service-host-matcher.js.map +1 -0
- package/dist/store/service-injection.d.ts +152 -0
- package/dist/store/service-injection.d.ts.map +1 -0
- package/dist/store/service-injection.js +225 -0
- package/dist/store/service-injection.js.map +1 -0
- package/dist/store/service-oauth.d.ts +287 -0
- package/dist/store/service-oauth.d.ts.map +1 -0
- package/dist/store/service-oauth.js +524 -0
- package/dist/store/service-oauth.js.map +1 -0
- package/dist/store/service-trust-gate.d.ts +164 -0
- package/dist/store/service-trust-gate.d.ts.map +1 -0
- package/dist/store/service-trust-gate.js +122 -0
- package/dist/store/service-trust-gate.js.map +1 -0
- package/dist/store/session-store.d.ts +52 -13
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +71 -13
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +7 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +1 -0
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +5 -0
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +36 -4
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/writer-lease-schema.d.ts +392 -0
- package/dist/store/writer-lease-schema.d.ts.map +1 -0
- package/dist/store/writer-lease-schema.js +142 -0
- package/dist/store/writer-lease-schema.js.map +1 -0
- package/dist/store/writer-lease.d.ts +368 -0
- package/dist/store/writer-lease.d.ts.map +1 -0
- package/dist/store/writer-lease.js +1002 -0
- package/dist/store/writer-lease.js.map +1 -0
- package/dist/tasks/agent-lifecycle-lane.d.ts +175 -0
- package/dist/tasks/agent-lifecycle-lane.d.ts.map +1 -0
- package/dist/tasks/agent-lifecycle-lane.js +176 -0
- package/dist/tasks/agent-lifecycle-lane.js.map +1 -0
- package/dist/tasks/backfill-child-projections.d.ts.map +1 -1
- package/dist/tasks/backfill-child-projections.js +14 -9
- package/dist/tasks/backfill-child-projections.js.map +1 -1
- package/dist/tasks/complete.d.ts +17 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +60 -20
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/depends-waiver-audit.d.ts +52 -0
- package/dist/tasks/depends-waiver-audit.d.ts.map +1 -0
- package/dist/tasks/depends-waiver-audit.js +36 -0
- package/dist/tasks/depends-waiver-audit.js.map +1 -0
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +14 -7
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/tasks/engine-wrap.d.ts +36 -2
- package/dist/tasks/engine-wrap.d.ts.map +1 -1
- package/dist/tasks/engine-wrap.js +44 -2
- package/dist/tasks/engine-wrap.js.map +1 -1
- package/dist/tasks/index.d.ts +1 -0
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +1 -0
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/ops.d.ts +3 -0
- package/dist/tasks/ops.d.ts.map +1 -1
- package/dist/tasks/task-ops.d.ts +1 -1
- package/dist/tasks/task-ops.d.ts.map +1 -1
- package/dist/tasks/task-ops.js +3 -1
- package/dist/tasks/task-ops.js.map +1 -1
- package/dist/tasks/task-reparent.d.ts +90 -0
- package/dist/tasks/task-reparent.d.ts.map +1 -1
- package/dist/tasks/task-reparent.js +171 -0
- package/dist/tasks/task-reparent.js.map +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +10 -4
- package/dist/telemetry/index.js.map +1 -1
- package/dist/tools/agent-registry.d.ts +250 -0
- package/dist/tools/agent-registry.d.ts.map +1 -0
- package/dist/tools/agent-registry.js +292 -0
- package/dist/tools/agent-registry.js.map +1 -0
- package/dist/tools/agent-tool-families.d.ts +107 -0
- package/dist/tools/agent-tool-families.d.ts.map +1 -0
- package/dist/tools/agent-tool-families.js +527 -0
- package/dist/tools/agent-tool-families.js.map +1 -0
- package/dist/tools/browser-driver.d.ts +183 -0
- package/dist/tools/browser-driver.d.ts.map +1 -0
- package/dist/tools/browser-driver.js +242 -0
- package/dist/tools/browser-driver.js.map +1 -0
- package/dist/tools/builtin-agent-tools.d.ts +36 -0
- package/dist/tools/builtin-agent-tools.d.ts.map +1 -0
- package/dist/tools/builtin-agent-tools.js +191 -0
- package/dist/tools/builtin-agent-tools.js.map +1 -0
- package/dist/tools/dispatch.d.ts +370 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +505 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/env-scrub.d.ts +93 -0
- package/dist/tools/env-scrub.d.ts.map +1 -0
- package/dist/tools/env-scrub.js +176 -0
- package/dist/tools/env-scrub.js.map +1 -0
- package/dist/tools/exec-code-agent-tool.d.ts +179 -0
- package/dist/tools/exec-code-agent-tool.d.ts.map +1 -0
- package/dist/tools/exec-code-agent-tool.js +239 -0
- package/dist/tools/exec-code-agent-tool.js.map +1 -0
- package/dist/tools/fs.d.ts +30 -0
- package/dist/tools/fs.d.ts.map +1 -1
- package/dist/tools/fs.js +55 -2
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/guard.d.ts +15 -0
- package/dist/tools/guard.d.ts.map +1 -1
- package/dist/tools/guard.js +49 -12
- package/dist/tools/guard.js.map +1 -1
- package/dist/tools/index.d.ts +16 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-agent-tool.d.ts +189 -0
- package/dist/tools/mcp-agent-tool.d.ts.map +1 -0
- package/dist/tools/mcp-agent-tool.js +243 -0
- package/dist/tools/mcp-agent-tool.js.map +1 -0
- package/dist/tools/media-agent-tools.d.ts +105 -0
- package/dist/tools/media-agent-tools.d.ts.map +1 -0
- package/dist/tools/media-agent-tools.js +255 -0
- package/dist/tools/media-agent-tools.js.map +1 -0
- package/dist/tools/memory-agent-tools.d.ts +99 -0
- package/dist/tools/memory-agent-tools.d.ts.map +1 -0
- package/dist/tools/memory-agent-tools.js +190 -0
- package/dist/tools/memory-agent-tools.js.map +1 -0
- package/dist/tools/pty.d.ts +45 -0
- package/dist/tools/pty.d.ts.map +1 -0
- package/dist/tools/pty.js +166 -0
- package/dist/tools/pty.js.map +1 -0
- package/dist/tools/schedule-agent-tools.d.ts +151 -0
- package/dist/tools/schedule-agent-tools.d.ts.map +1 -0
- package/dist/tools/schedule-agent-tools.js +238 -0
- package/dist/tools/schedule-agent-tools.js.map +1 -0
- package/dist/tools/schema-gen.d.ts +57 -0
- package/dist/tools/schema-gen.d.ts.map +1 -0
- package/dist/tools/schema-gen.js +52 -0
- package/dist/tools/schema-gen.js.map +1 -0
- package/dist/tools/shell.d.ts +12 -0
- package/dist/tools/shell.d.ts.map +1 -1
- package/dist/tools/shell.js +14 -1
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/skill-agent-tool.d.ts +108 -0
- package/dist/tools/skill-agent-tool.d.ts.map +1 -0
- package/dist/tools/skill-agent-tool.js +135 -0
- package/dist/tools/skill-agent-tool.js.map +1 -0
- package/dist/tools/web-agent-tools.d.ts +72 -0
- package/dist/tools/web-agent-tools.d.ts.map +1 -0
- package/dist/tools/web-agent-tools.js +393 -0
- package/dist/tools/web-agent-tools.js.map +1 -0
- package/dist/tools/web-search-backends.d.ts +156 -0
- package/dist/tools/web-search-backends.d.ts.map +1 -0
- package/dist/tools/web-search-backends.js +290 -0
- package/dist/tools/web-search-backends.js.map +1 -0
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +17 -1
- package/dist/validation/engine-ops.js.map +1 -1
- package/dist/validation/ops.d.ts +1 -15
- package/dist/validation/ops.d.ts.map +1 -1
- package/dist/validation/ops.js +0 -20
- package/dist/validation/ops.js.map +1 -1
- package/migrations/drizzle-brain/20260610000001_t10405-bitemporal-network-columns/migration.sql +71 -0
- package/migrations/drizzle-cleo-global/20260607000000_t11891-writer-leases/migration.sql +55 -0
- package/migrations/drizzle-cleo-global/20260607010000_t11639-session-manifest/migration.sql +43 -0
- package/migrations/drizzle-cleo-global/20260608000000_t11899-pi-session-tree/migration.sql +52 -0
- package/migrations/drizzle-cleo-global/20260608010000_t11709-accounts-credential-pool/migration.sql +72 -0
- package/migrations/drizzle-cleo-global/20260608020000_t11889-selfimprove-dhq/migration.sql +64 -0
- package/migrations/drizzle-cleo-global/20260609000000_t11937-service-vault/migration.sql +93 -0
- package/migrations/drizzle-cleo-global/20260609010000_t11733-models-catalog/migration.sql +65 -0
- package/migrations/drizzle-cleo-global/20260609020000_t11703-providers/migration.sql +52 -0
- package/migrations/drizzle-cleo-global/20260610000000_t11962-schedules/migration.sql +48 -0
- package/migrations/drizzle-cleo-project/20260607000000_t11891-writer-leases/migration.sql +55 -0
- package/migrations/drizzle-cleo-project/20260607010000_t11639-session-parent/migration.sql +22 -0
- package/migrations/drizzle-cleo-project/20260608000000_t11899-pi-session-tree/migration.sql +52 -0
- package/migrations/drizzle-cleo-project/20260608020000_t11889-selfimprove-dhq/migration.sql +64 -0
- package/migrations/drizzle-cleo-project/20260610000000_t11962-schedules/migration.sql +48 -0
- package/package.json +26 -14
- package/dist/lifecycle/chain-composition.d.ts +0 -30
- package/dist/lifecycle/chain-composition.d.ts.map +0 -1
- package/dist/lifecycle/chain-composition.js +0 -152
- package/dist/lifecycle/chain-composition.js.map +0 -1
- package/dist/lifecycle/chain-store.d.ts +0 -70
- package/dist/lifecycle/chain-store.d.ts.map +0 -1
- package/dist/lifecycle/chain-store.js +0 -246
- package/dist/lifecycle/chain-store.js.map +0 -1
- package/dist/lifecycle/default-chain.d.ts +0 -39
- package/dist/lifecycle/default-chain.d.ts.map +0 -1
- package/dist/lifecycle/default-chain.js +0 -176
- package/dist/lifecycle/default-chain.js.map +0 -1
- package/dist/lifecycle/tessera-engine.d.ts +0 -48
- package/dist/lifecycle/tessera-engine.d.ts.map +0 -1
- package/dist/lifecycle/tessera-engine.js +0 -249
- package/dist/lifecycle/tessera-engine.js.map +0 -1
- package/dist/validation/chain-validation.d.ts +0 -43
- package/dist/validation/chain-validation.d.ts.map +0 -1
- package/dist/validation/chain-validation.js +0 -146
- package/dist/validation/chain-validation.js.map +0 -1
|
@@ -22,6 +22,18 @@ import type { DatabaseSync } from 'node:sqlite';
|
|
|
22
22
|
export declare const STALE_CLAIM_MINUTES = 30;
|
|
23
23
|
/** Max retry count before item is moved to 'failed' permanently. */
|
|
24
24
|
export declare const MAX_RETRY_COUNT = 5;
|
|
25
|
+
/**
|
|
26
|
+
* Base exponential-backoff delay in seconds for a re-queued item (T10405).
|
|
27
|
+
*
|
|
28
|
+
* A failed/recovered item's next claim is gated until
|
|
29
|
+
* `now + BACKOFF_BASE_SECONDS * 2^(retryCount - 1)`, capped at
|
|
30
|
+
* {@link BACKOFF_MAX_SECONDS}. With base 30s the schedule is
|
|
31
|
+
* 30s → 60s → 120s → 240s (then capped), so a transiently-failing item
|
|
32
|
+
* backs off geometrically instead of hot-looping the worker.
|
|
33
|
+
*/
|
|
34
|
+
export declare const BACKOFF_BASE_SECONDS = 30;
|
|
35
|
+
/** Maximum exponential-backoff delay in seconds (cap for {@link computeBackoffSeconds}). */
|
|
36
|
+
export declare const BACKOFF_MAX_SECONDS: number;
|
|
25
37
|
/** Options for {@link claimNextItem}. */
|
|
26
38
|
export interface ClaimOptions {
|
|
27
39
|
/**
|
|
@@ -52,6 +64,20 @@ export interface StaleRecoveryResult {
|
|
|
52
64
|
/** Number of items permanently failed due to max retries. */
|
|
53
65
|
failed: number;
|
|
54
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Compute the exponential-backoff delay (seconds) for a re-queued item (T10405).
|
|
69
|
+
*
|
|
70
|
+
* Returns `BACKOFF_BASE_SECONDS * 2^(attempt - 1)` capped at
|
|
71
|
+
* {@link BACKOFF_MAX_SECONDS}. `attempt` is the *new* retry count (1-based:
|
|
72
|
+
* the first failure backs off by the base delay). An `attempt` of 0 or less is
|
|
73
|
+
* clamped to 1 so the first retry always waits at least the base delay.
|
|
74
|
+
*
|
|
75
|
+
* @param attempt - The new (post-increment) retry count for the item.
|
|
76
|
+
* @returns Backoff delay in seconds, in `[BACKOFF_BASE_SECONDS, BACKOFF_MAX_SECONDS]`.
|
|
77
|
+
*
|
|
78
|
+
* @task T10405
|
|
79
|
+
*/
|
|
80
|
+
export declare function computeBackoffSeconds(attempt: number): number;
|
|
55
81
|
/**
|
|
56
82
|
* Claim the next pending item from the deriver queue.
|
|
57
83
|
*
|
|
@@ -78,8 +104,10 @@ export declare function completeItem(itemId: string, options?: CompleteOptions):
|
|
|
78
104
|
* Mark a claimed item as failed (with optional error message).
|
|
79
105
|
*
|
|
80
106
|
* If `retryCount` is below {@link MAX_RETRY_COUNT}, the item is re-queued
|
|
81
|
-
* to `pending` with `retryCount + 1`
|
|
82
|
-
*
|
|
107
|
+
* to `pending` with `retryCount + 1` and an exponential-backoff
|
|
108
|
+
* `next_attempt_at` (T10405) so it is not re-claimed until the backoff window
|
|
109
|
+
* elapses. Otherwise the item is permanently moved to `failed` (DLQ semantics)
|
|
110
|
+
* and its backoff gate is cleared.
|
|
83
111
|
*
|
|
84
112
|
* @param itemId - The deriver_queue.id to fail.
|
|
85
113
|
* @param errorMsg - Human-readable error for the error_msg column.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/deriver/queue-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,oEAAoE;AACpE,eAAO,MAAM,eAAe,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/deriver/queue-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,oEAAoE;AACpE,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,QAAU,CAAC;AAS3C,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1B;AAED,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1B;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;CAChB;AAiCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI7D;AAWD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,GAAG,IAAI,CA+D5E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAYhF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAyB9F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,mBAAmB,CA4CpF"}
|
|
@@ -25,6 +25,18 @@ import { getBrainNativeDb } from '../store/memory-sqlite.js';
|
|
|
25
25
|
export const STALE_CLAIM_MINUTES = 30;
|
|
26
26
|
/** Max retry count before item is moved to 'failed' permanently. */
|
|
27
27
|
export const MAX_RETRY_COUNT = 5;
|
|
28
|
+
/**
|
|
29
|
+
* Base exponential-backoff delay in seconds for a re-queued item (T10405).
|
|
30
|
+
*
|
|
31
|
+
* A failed/recovered item's next claim is gated until
|
|
32
|
+
* `now + BACKOFF_BASE_SECONDS * 2^(retryCount - 1)`, capped at
|
|
33
|
+
* {@link BACKOFF_MAX_SECONDS}. With base 30s the schedule is
|
|
34
|
+
* 30s → 60s → 120s → 240s (then capped), so a transiently-failing item
|
|
35
|
+
* backs off geometrically instead of hot-looping the worker.
|
|
36
|
+
*/
|
|
37
|
+
export const BACKOFF_BASE_SECONDS = 30;
|
|
38
|
+
/** Maximum exponential-backoff delay in seconds (cap for {@link computeBackoffSeconds}). */
|
|
39
|
+
export const BACKOFF_MAX_SECONDS = 30 * 60;
|
|
28
40
|
/** SQLite busy error string (returned when BEGIN IMMEDIATE cannot acquire lock). */
|
|
29
41
|
const SQLITE_BUSY_STR = 'database is locked';
|
|
30
42
|
// ============================================================================
|
|
@@ -38,6 +50,28 @@ function defaultWorkerId() {
|
|
|
38
50
|
function minutesAgo(n) {
|
|
39
51
|
return new Date(Date.now() - n * 60_000).toISOString();
|
|
40
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Compute the exponential-backoff delay (seconds) for a re-queued item (T10405).
|
|
55
|
+
*
|
|
56
|
+
* Returns `BACKOFF_BASE_SECONDS * 2^(attempt - 1)` capped at
|
|
57
|
+
* {@link BACKOFF_MAX_SECONDS}. `attempt` is the *new* retry count (1-based:
|
|
58
|
+
* the first failure backs off by the base delay). An `attempt` of 0 or less is
|
|
59
|
+
* clamped to 1 so the first retry always waits at least the base delay.
|
|
60
|
+
*
|
|
61
|
+
* @param attempt - The new (post-increment) retry count for the item.
|
|
62
|
+
* @returns Backoff delay in seconds, in `[BACKOFF_BASE_SECONDS, BACKOFF_MAX_SECONDS]`.
|
|
63
|
+
*
|
|
64
|
+
* @task T10405
|
|
65
|
+
*/
|
|
66
|
+
export function computeBackoffSeconds(attempt) {
|
|
67
|
+
const safeAttempt = attempt < 1 ? 1 : attempt;
|
|
68
|
+
const delay = BACKOFF_BASE_SECONDS * 2 ** (safeAttempt - 1);
|
|
69
|
+
return Math.min(delay, BACKOFF_MAX_SECONDS);
|
|
70
|
+
}
|
|
71
|
+
/** Return ISO 8601 timestamp for N seconds in the future. */
|
|
72
|
+
function secondsFromNow(n) {
|
|
73
|
+
return new Date(Date.now() + n * 1000).toISOString();
|
|
74
|
+
}
|
|
41
75
|
// ============================================================================
|
|
42
76
|
// Public API
|
|
43
77
|
// ============================================================================
|
|
@@ -70,18 +104,22 @@ export function claimNextItem(options = {}) {
|
|
|
70
104
|
throw err;
|
|
71
105
|
}
|
|
72
106
|
try {
|
|
107
|
+
// T10405: gate on the exponential-backoff window — a re-queued item with a
|
|
108
|
+
// future `next_attempt_at` is skipped until its backoff elapses. Fresh items
|
|
109
|
+
// (next_attempt_at IS NULL) are always eligible.
|
|
110
|
+
const now = new Date().toISOString();
|
|
73
111
|
const row = nativeDb
|
|
74
112
|
.prepare(`SELECT id, item_type, item_id, priority, retry_count
|
|
75
113
|
FROM deriver_queue
|
|
76
114
|
WHERE status = 'pending'
|
|
115
|
+
AND (next_attempt_at IS NULL OR next_attempt_at <= ?)
|
|
77
116
|
ORDER BY priority DESC, created_at ASC
|
|
78
117
|
LIMIT 1`)
|
|
79
|
-
.get();
|
|
118
|
+
.get(now);
|
|
80
119
|
if (!row) {
|
|
81
120
|
nativeDb.exec('ROLLBACK');
|
|
82
121
|
return null;
|
|
83
122
|
}
|
|
84
|
-
const now = new Date().toISOString();
|
|
85
123
|
nativeDb
|
|
86
124
|
.prepare(`UPDATE deriver_queue
|
|
87
125
|
SET status = 'in_progress', claimed_at = ?, claimed_by = ?
|
|
@@ -129,8 +167,10 @@ export function completeItem(itemId, options = {}) {
|
|
|
129
167
|
* Mark a claimed item as failed (with optional error message).
|
|
130
168
|
*
|
|
131
169
|
* If `retryCount` is below {@link MAX_RETRY_COUNT}, the item is re-queued
|
|
132
|
-
* to `pending` with `retryCount + 1`
|
|
133
|
-
*
|
|
170
|
+
* to `pending` with `retryCount + 1` and an exponential-backoff
|
|
171
|
+
* `next_attempt_at` (T10405) so it is not re-claimed until the backoff window
|
|
172
|
+
* elapses. Otherwise the item is permanently moved to `failed` (DLQ semantics)
|
|
173
|
+
* and its backoff gate is cleared.
|
|
134
174
|
*
|
|
135
175
|
* @param itemId - The deriver_queue.id to fail.
|
|
136
176
|
* @param errorMsg - Human-readable error for the error_msg column.
|
|
@@ -147,13 +187,16 @@ export function failItem(itemId, errorMsg, options = {}) {
|
|
|
147
187
|
if (!row)
|
|
148
188
|
return;
|
|
149
189
|
const nextRetry = (row.retry_count ?? 0) + 1;
|
|
150
|
-
const
|
|
190
|
+
const permanentFail = nextRetry >= MAX_RETRY_COUNT;
|
|
191
|
+
const nextStatus = permanentFail ? 'failed' : 'pending';
|
|
192
|
+
// Re-queued items back off geometrically; permanently-failed items clear the gate.
|
|
193
|
+
const nextAttemptAt = permanentFail ? null : secondsFromNow(computeBackoffSeconds(nextRetry));
|
|
151
194
|
nativeDb
|
|
152
195
|
.prepare(`UPDATE deriver_queue
|
|
153
196
|
SET status = ?, retry_count = ?, error_msg = ?,
|
|
154
|
-
claimed_at = NULL, claimed_by = NULL
|
|
197
|
+
claimed_at = NULL, claimed_by = NULL, next_attempt_at = ?
|
|
155
198
|
WHERE id = ? AND status = 'in_progress'`)
|
|
156
|
-
.run(nextStatus, nextRetry, errorMsg, itemId);
|
|
199
|
+
.run(nextStatus, nextRetry, errorMsg, nextAttemptAt, itemId);
|
|
157
200
|
}
|
|
158
201
|
/**
|
|
159
202
|
* Re-queue stale in_progress items whose `claimed_at` is older than
|
|
@@ -192,12 +235,14 @@ export function recoverStaleItems(options = {}) {
|
|
|
192
235
|
result.failed++;
|
|
193
236
|
}
|
|
194
237
|
else {
|
|
238
|
+
// T10405: re-queued stale items also back off geometrically.
|
|
239
|
+
const nextAttemptAt = secondsFromNow(computeBackoffSeconds(nextRetry));
|
|
195
240
|
nativeDb
|
|
196
241
|
.prepare(`UPDATE deriver_queue
|
|
197
242
|
SET status = 'pending', retry_count = ?, error_msg = 'recovered from stale claim',
|
|
198
|
-
claimed_at = NULL, claimed_by = NULL
|
|
243
|
+
claimed_at = NULL, claimed_by = NULL, next_attempt_at = ?
|
|
199
244
|
WHERE id = ?`)
|
|
200
|
-
.run(nextRetry, row.id);
|
|
245
|
+
.run(nextRetry, nextAttemptAt, row.id);
|
|
201
246
|
result.requeued++;
|
|
202
247
|
}
|
|
203
248
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager.js","sourceRoot":"","sources":["../../src/deriver/queue-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC,oFAAoF;AACpF,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAyD7C,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,mEAAmE;AACnE,SAAS,eAAe;IACtB,OAAO,UAAU,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,mDAAmD;AACnD,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,UAAwB,EAAE;IACtD,MAAM,EAAE,QAAQ,GAAG,eAAe,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACjE,MAAM,QAAQ,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAE5E,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,0EAA0E;IAC1E,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,iDAAiD;QAChE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ;aACjB,OAAO,CACN
|
|
1
|
+
{"version":3,"file":"queue-manager.js","sourceRoot":"","sources":["../../src/deriver/queue-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigDomainHandler — routes the config-as-domain operations to the
|
|
3
|
+
* `ConfigManifest` cascade resolver.
|
|
4
|
+
*
|
|
5
|
+
* This is the CORE-side routing surface for the four config-as-domain ops added
|
|
6
|
+
* in T11917 (`config.get`, `config.list`, `config.validate`, `config.unset`),
|
|
7
|
+
* plus the pre-existing `config.show` read. Every method delegates to the pure
|
|
8
|
+
* JSON cascade resolver in `../config/registry.js` (`resolveCleoConfig`,
|
|
9
|
+
* `getConfigValue`, `validateConfig`, `unsetConfigValue`) — the SSoT
|
|
10
|
+
* implementation of the {@link ConfigManifestEntry} contract from
|
|
11
|
+
* `@cleocode/contracts/config`.
|
|
12
|
+
*
|
|
13
|
+
* The handler lives in CORE (not the CLI `cleo/` dispatch layer) so the routing
|
|
14
|
+
* logic — and the cascade resolver it calls — is reusable by every consumer
|
|
15
|
+
* (CLI dispatch, the SDK gateway, REST clients) without crossing the
|
|
16
|
+
* package boundary back into `cleo/`. The thin `admin` DomainHandler in
|
|
17
|
+
* `packages/cleo/src/dispatch/domains/admin.ts` delegates its `config.*` ops to
|
|
18
|
+
* this class and wraps the {@link EngineResult} into the LAFS envelope.
|
|
19
|
+
*
|
|
20
|
+
* Pure JSON file IO only — does NOT open SQLite (ADR-068 DB Open Guard
|
|
21
|
+
* preserved; the cascade resolver it calls is also SQLite-free).
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
* @module @cleocode/core/dispatch/config-domain-handler
|
|
25
|
+
*
|
|
26
|
+
* @task T11917 — config-as-domain (M5/AC3)
|
|
27
|
+
* @epic T11769 — EP-API-STANDARD-FOUNDATION
|
|
28
|
+
* @saga T9855 — ConfigManifest SSoT
|
|
29
|
+
* @adr 076
|
|
30
|
+
*/
|
|
31
|
+
import { type EngineResult } from '@cleocode/contracts';
|
|
32
|
+
import { type ResolveScope, type ValidateScope } from '../config/registry.js';
|
|
33
|
+
/** Result of `config.get`. */
|
|
34
|
+
export interface ConfigGetResult {
|
|
35
|
+
/** The dot-notation key that was resolved. */
|
|
36
|
+
key: string;
|
|
37
|
+
/** Cascade slice the value was resolved against. */
|
|
38
|
+
scope: ResolveScope;
|
|
39
|
+
/** Resolved value, or `null` when the key is absent. */
|
|
40
|
+
value: unknown;
|
|
41
|
+
/** `true` IFF the key resolved to a defined value in the cascade. */
|
|
42
|
+
found: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** Result of `config.list`. */
|
|
45
|
+
export interface ConfigListResult {
|
|
46
|
+
/** Cascade slice the config was resolved against. */
|
|
47
|
+
scope: ResolveScope;
|
|
48
|
+
/** Full resolved config object for the slice. */
|
|
49
|
+
config: Record<string, unknown>;
|
|
50
|
+
/** Flattened dot-notation keys present in the resolved config. */
|
|
51
|
+
keys: string[];
|
|
52
|
+
}
|
|
53
|
+
/** Result of `config.validate`. */
|
|
54
|
+
export interface ConfigValidateResult {
|
|
55
|
+
/** Scope that was validated. */
|
|
56
|
+
scope: ValidateScope;
|
|
57
|
+
/** `true` IFF every gate passed. */
|
|
58
|
+
ok: boolean;
|
|
59
|
+
/** Human-readable schema issues. Empty when `ok === true`. */
|
|
60
|
+
issues: string[];
|
|
61
|
+
}
|
|
62
|
+
/** Result of `config.unset`. */
|
|
63
|
+
export interface ConfigUnsetResult {
|
|
64
|
+
/** Config key that was targeted. */
|
|
65
|
+
key: string;
|
|
66
|
+
/** Scope the key was removed from. */
|
|
67
|
+
scope: 'project' | 'global';
|
|
68
|
+
/** `true` IFF a value was actually deleted. */
|
|
69
|
+
removed: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Routes the config-as-domain operations to the ConfigManifest cascade
|
|
73
|
+
* resolver. Stateless — construct once and reuse, or instantiate per call.
|
|
74
|
+
*
|
|
75
|
+
* @task T11917
|
|
76
|
+
*/
|
|
77
|
+
export declare class ConfigDomainHandler {
|
|
78
|
+
/**
|
|
79
|
+
* `config.get` — resolve a single config value by dot-notation key through
|
|
80
|
+
* the cascade resolver ({@link getConfigValue}).
|
|
81
|
+
*
|
|
82
|
+
* @param projectRoot - Absolute path to the project root.
|
|
83
|
+
* @param key - Dot-notation config key (required).
|
|
84
|
+
* @param scopeRaw - Cascade slice (`global` | `project` | `merged`). Defaults
|
|
85
|
+
* to `merged`.
|
|
86
|
+
*/
|
|
87
|
+
get(projectRoot: string, key: string | undefined, scopeRaw?: string): Promise<EngineResult<ConfigGetResult>>;
|
|
88
|
+
/**
|
|
89
|
+
* `config.list` — resolve the full config cascade for a slice and surface its
|
|
90
|
+
* flattened dot-notation keys ({@link resolveCleoConfig} +
|
|
91
|
+
* {@link flattenConfigKeys}).
|
|
92
|
+
*
|
|
93
|
+
* @param projectRoot - Absolute path to the project root.
|
|
94
|
+
* @param scopeRaw - Cascade slice. Defaults to `merged`.
|
|
95
|
+
*/
|
|
96
|
+
list(projectRoot: string, scopeRaw?: string): Promise<EngineResult<ConfigListResult>>;
|
|
97
|
+
/**
|
|
98
|
+
* `config.validate` — schema-validate a scoped config file against its
|
|
99
|
+
* manifest entry's schema ({@link validateConfig}). A rejected file resolves
|
|
100
|
+
* to `{ ok: false, issues: [...] }` — it does NOT throw.
|
|
101
|
+
*
|
|
102
|
+
* @param projectRoot - Absolute path to the project root.
|
|
103
|
+
* @param scopeRaw - `global` | `project`. Defaults to `project`. `merged` is
|
|
104
|
+
* rejected — validation runs against a single file's manifest entry.
|
|
105
|
+
*/
|
|
106
|
+
validate(projectRoot: string, scopeRaw?: string): Promise<EngineResult<ConfigValidateResult>>;
|
|
107
|
+
/**
|
|
108
|
+
* `config.unset` — remove a key from a scoped config file and persist the
|
|
109
|
+
* result ({@link unsetConfigValue}). Idempotent: removing an absent key is a
|
|
110
|
+
* success with `removed: false`.
|
|
111
|
+
*
|
|
112
|
+
* @param projectRoot - Absolute path to the project root.
|
|
113
|
+
* @param key - Dot-notation config key to remove (required).
|
|
114
|
+
* @param global - When `true`, target the global config file.
|
|
115
|
+
*/
|
|
116
|
+
unset(projectRoot: string, key: string | undefined, global?: boolean): Promise<EngineResult<ConfigUnsetResult>>;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Shared singleton {@link ConfigDomainHandler}. The handler is stateless, so a
|
|
120
|
+
* single instance is reused across the process.
|
|
121
|
+
*
|
|
122
|
+
* @task T11917
|
|
123
|
+
*/
|
|
124
|
+
export declare const configDomainHandler: ConfigDomainHandler;
|
|
125
|
+
//# sourceMappingURL=config-domain-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-domain-handler.d.ts","sourceRoot":"","sources":["../../src/dispatch/config-domain-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAGL,KAAK,YAAY,EAGjB,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAE/B,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,KAAK,EAAE,YAAY,CAAC;IACpB,wDAAwD;IACxD,KAAK,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,KAAK,EAAE,YAAY,CAAC;IACpB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kEAAkE;IAClE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,oCAAoC;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,8DAA8D;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;CAClB;AA2BD;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;;;OAQG;IACG,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAmBzC;;;;;;;OAOG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAgB3F;;;;;;;;OAQG;IACG,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IAmB9C;;;;;;;;OAQG;IACG,KAAK,CACT,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAW5C;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigDomainHandler — routes the config-as-domain operations to the
|
|
3
|
+
* `ConfigManifest` cascade resolver.
|
|
4
|
+
*
|
|
5
|
+
* This is the CORE-side routing surface for the four config-as-domain ops added
|
|
6
|
+
* in T11917 (`config.get`, `config.list`, `config.validate`, `config.unset`),
|
|
7
|
+
* plus the pre-existing `config.show` read. Every method delegates to the pure
|
|
8
|
+
* JSON cascade resolver in `../config/registry.js` (`resolveCleoConfig`,
|
|
9
|
+
* `getConfigValue`, `validateConfig`, `unsetConfigValue`) — the SSoT
|
|
10
|
+
* implementation of the {@link ConfigManifestEntry} contract from
|
|
11
|
+
* `@cleocode/contracts/config`.
|
|
12
|
+
*
|
|
13
|
+
* The handler lives in CORE (not the CLI `cleo/` dispatch layer) so the routing
|
|
14
|
+
* logic — and the cascade resolver it calls — is reusable by every consumer
|
|
15
|
+
* (CLI dispatch, the SDK gateway, REST clients) without crossing the
|
|
16
|
+
* package boundary back into `cleo/`. The thin `admin` DomainHandler in
|
|
17
|
+
* `packages/cleo/src/dispatch/domains/admin.ts` delegates its `config.*` ops to
|
|
18
|
+
* this class and wraps the {@link EngineResult} into the LAFS envelope.
|
|
19
|
+
*
|
|
20
|
+
* Pure JSON file IO only — does NOT open SQLite (ADR-068 DB Open Guard
|
|
21
|
+
* preserved; the cascade resolver it calls is also SQLite-free).
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
* @module @cleocode/core/dispatch/config-domain-handler
|
|
25
|
+
*
|
|
26
|
+
* @task T11917 — config-as-domain (M5/AC3)
|
|
27
|
+
* @epic T11769 — EP-API-STANDARD-FOUNDATION
|
|
28
|
+
* @saga T9855 — ConfigManifest SSoT
|
|
29
|
+
* @adr 076
|
|
30
|
+
*/
|
|
31
|
+
import { engineError, engineSuccess } from '@cleocode/contracts';
|
|
32
|
+
import { flattenConfigKeys, getConfigValue, resolveCleoConfig, unsetConfigValue, validateConfig, } from '../config/registry.js';
|
|
33
|
+
/** Cascade slice selector accepted by `config.get` / `config.list`. */
|
|
34
|
+
const RESOLVE_SCOPES = ['global', 'project', 'merged'];
|
|
35
|
+
/** Scope selector accepted by `config.validate`. */
|
|
36
|
+
const VALIDATE_SCOPES = ['global', 'project'];
|
|
37
|
+
/**
|
|
38
|
+
* Narrow an untrusted scope string to a {@link ResolveScope}, defaulting to
|
|
39
|
+
* `'merged'`. Returns `null` when the string is non-empty but invalid so the
|
|
40
|
+
* caller can reject with `E_INVALID_INPUT`.
|
|
41
|
+
*/
|
|
42
|
+
function coerceResolveScope(scope) {
|
|
43
|
+
if (scope === undefined)
|
|
44
|
+
return 'merged';
|
|
45
|
+
return RESOLVE_SCOPES.includes(scope) ? scope : null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Narrow an untrusted scope string to a {@link ValidateScope}, defaulting to
|
|
49
|
+
* `'project'`. Returns `null` when the string is non-empty but invalid.
|
|
50
|
+
*/
|
|
51
|
+
function coerceValidateScope(scope) {
|
|
52
|
+
if (scope === undefined)
|
|
53
|
+
return 'project';
|
|
54
|
+
return VALIDATE_SCOPES.includes(scope) ? scope : null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Routes the config-as-domain operations to the ConfigManifest cascade
|
|
58
|
+
* resolver. Stateless — construct once and reuse, or instantiate per call.
|
|
59
|
+
*
|
|
60
|
+
* @task T11917
|
|
61
|
+
*/
|
|
62
|
+
export class ConfigDomainHandler {
|
|
63
|
+
/**
|
|
64
|
+
* `config.get` — resolve a single config value by dot-notation key through
|
|
65
|
+
* the cascade resolver ({@link getConfigValue}).
|
|
66
|
+
*
|
|
67
|
+
* @param projectRoot - Absolute path to the project root.
|
|
68
|
+
* @param key - Dot-notation config key (required).
|
|
69
|
+
* @param scopeRaw - Cascade slice (`global` | `project` | `merged`). Defaults
|
|
70
|
+
* to `merged`.
|
|
71
|
+
*/
|
|
72
|
+
async get(projectRoot, key, scopeRaw) {
|
|
73
|
+
if (!key) {
|
|
74
|
+
return engineError('E_INVALID_INPUT', 'key is required', { fix: 'cleo config get <key>' });
|
|
75
|
+
}
|
|
76
|
+
const scope = coerceResolveScope(scopeRaw);
|
|
77
|
+
if (scope === null) {
|
|
78
|
+
return engineError('E_INVALID_INPUT', `scope must be one of: ${RESOLVE_SCOPES.join(', ')}`);
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const value = await getConfigValue(key, { scope, projectRoot });
|
|
82
|
+
return engineSuccess({ key, scope, value: value ?? null, found: value !== undefined });
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
return engineError('E_CONFIG_RESOLVE_FAILED', err instanceof Error ? err.message : String(err));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* `config.list` — resolve the full config cascade for a slice and surface its
|
|
90
|
+
* flattened dot-notation keys ({@link resolveCleoConfig} +
|
|
91
|
+
* {@link flattenConfigKeys}).
|
|
92
|
+
*
|
|
93
|
+
* @param projectRoot - Absolute path to the project root.
|
|
94
|
+
* @param scopeRaw - Cascade slice. Defaults to `merged`.
|
|
95
|
+
*/
|
|
96
|
+
async list(projectRoot, scopeRaw) {
|
|
97
|
+
const scope = coerceResolveScope(scopeRaw);
|
|
98
|
+
if (scope === null) {
|
|
99
|
+
return engineError('E_INVALID_INPUT', `scope must be one of: ${RESOLVE_SCOPES.join(', ')}`);
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const config = await resolveCleoConfig({ scope, projectRoot });
|
|
103
|
+
return engineSuccess({ scope, config, keys: flattenConfigKeys(config) });
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return engineError('E_CONFIG_RESOLVE_FAILED', err instanceof Error ? err.message : String(err));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* `config.validate` — schema-validate a scoped config file against its
|
|
111
|
+
* manifest entry's schema ({@link validateConfig}). A rejected file resolves
|
|
112
|
+
* to `{ ok: false, issues: [...] }` — it does NOT throw.
|
|
113
|
+
*
|
|
114
|
+
* @param projectRoot - Absolute path to the project root.
|
|
115
|
+
* @param scopeRaw - `global` | `project`. Defaults to `project`. `merged` is
|
|
116
|
+
* rejected — validation runs against a single file's manifest entry.
|
|
117
|
+
*/
|
|
118
|
+
async validate(projectRoot, scopeRaw) {
|
|
119
|
+
const scope = coerceValidateScope(scopeRaw);
|
|
120
|
+
if (scope === null) {
|
|
121
|
+
return engineError('E_INVALID_INPUT', `scope must be one of: ${VALIDATE_SCOPES.join(', ')} (merged is not validatable)`);
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
const result = await validateConfig(scope, projectRoot);
|
|
125
|
+
return engineSuccess({ scope, ok: result.ok, issues: result.issues });
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
return engineError('E_CONFIG_VALIDATE_FAILED', err instanceof Error ? err.message : String(err));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* `config.unset` — remove a key from a scoped config file and persist the
|
|
133
|
+
* result ({@link unsetConfigValue}). Idempotent: removing an absent key is a
|
|
134
|
+
* success with `removed: false`.
|
|
135
|
+
*
|
|
136
|
+
* @param projectRoot - Absolute path to the project root.
|
|
137
|
+
* @param key - Dot-notation config key to remove (required).
|
|
138
|
+
* @param global - When `true`, target the global config file.
|
|
139
|
+
*/
|
|
140
|
+
async unset(projectRoot, key, global) {
|
|
141
|
+
if (!key) {
|
|
142
|
+
return engineError('E_INVALID_INPUT', 'key is required', { fix: 'cleo config unset <key>' });
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const result = await unsetConfigValue(key, { projectRoot, global });
|
|
146
|
+
return engineSuccess({ key: result.key, scope: result.scope, removed: result.removed });
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
return engineError('E_CONFIG_UNSET_FAILED', err instanceof Error ? err.message : String(err));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Shared singleton {@link ConfigDomainHandler}. The handler is stateless, so a
|
|
155
|
+
* single instance is reused across the process.
|
|
156
|
+
*
|
|
157
|
+
* @task T11917
|
|
158
|
+
*/
|
|
159
|
+
export const configDomainHandler = new ConfigDomainHandler();
|
|
160
|
+
//# sourceMappingURL=config-domain-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-domain-handler.js","sourceRoot":"","sources":["../../src/dispatch/config-domain-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deriveOutputContract — generic per-operation OUTPUT contract producer.
|
|
3
|
+
*
|
|
4
|
+
* Closes the COVERAGE half of DHQ-057 / T11692 (the symptom-fix half — the
|
|
5
|
+
* `--field` remediation loop — is ST-4). The hand-authored {@link OUTPUT_CONTRACTS}
|
|
6
|
+
* registry covers only the 7 highest-traffic `tasks.*` operations. Every other
|
|
7
|
+
* operation in the 411-row {@link OPERATIONS} registry has NO machine-readable
|
|
8
|
+
* description of its result `data` shape, so an agent asking `cleo <op>
|
|
9
|
+
* --describe` (or hitting `E_FIELD_NOT_FOUND` on a bad `--field` pointer) gets
|
|
10
|
+
* nothing back for ~404 ops.
|
|
11
|
+
*
|
|
12
|
+
* Rather than hand-write 404 more contracts (unmaintainable, drifts instantly),
|
|
13
|
+
* this module DERIVES an {@link OperationOutputContract} for an operation from
|
|
14
|
+
* three shape registries that ALREADY exist:
|
|
15
|
+
*
|
|
16
|
+
* | Source registry | Home | Derives |
|
|
17
|
+
* |------------------------|--------------------------|----------------------------------------------------------|
|
|
18
|
+
* | {@link OPERATION_RESULT_SCHEMAS} | `@cleocode/contracts` | precise top-level data keys for the 5 workgraph reads |
|
|
19
|
+
* | {@link PROJECTION_PLANS} | `./mvi-projection.js` | the data PATH (`tasks.show→task`, `docs.list→attachments`) for projected reads |
|
|
20
|
+
* | {@link MUTATE_PROJECTION_PLANS} | `./mutate-projection.js` | the shared `{count, created, updated, deleted}` shape — but ONLY for the 6 ops that actually project it |
|
|
21
|
+
*
|
|
22
|
+
* Resolution precedence inside {@link deriveOutputContract} (most-precise first):
|
|
23
|
+
*
|
|
24
|
+
* 1. workgraph result schema → precise key-derived contract
|
|
25
|
+
* 2. read op with projection plan → path-rooted contract
|
|
26
|
+
* 3. mutate op WITH a {@link MUTATE_PROJECTION_PLANS} entry → shared
|
|
27
|
+
* minimal-mutate contract. An unplanned `gateway==='mutate'` op is NOT
|
|
28
|
+
* rewritten by the dispatch middleware (it returns its raw domain payload),
|
|
29
|
+
* so it must NOT advertise `/data/created/0` — it falls through to (4).
|
|
30
|
+
* 4. any other registered op (unplanned mutate or plain query) → a GENERIC
|
|
31
|
+
* object contract (data is an object; no specific `--field` pointers, but a
|
|
32
|
+
* `shapeNote` telling the agent to `--full`/`--describe`).
|
|
33
|
+
*
|
|
34
|
+
* A `null` return means the operation is NOT in {@link OPERATIONS} at all
|
|
35
|
+
* (genuinely unknown). Per T10400 §6.3 R6.7 a `null` output contract is
|
|
36
|
+
* "unverified shape", NEVER an error — callers MUST treat it as absent, not
|
|
37
|
+
* throw.
|
|
38
|
+
*
|
|
39
|
+
* ## Boundary
|
|
40
|
+
*
|
|
41
|
+
* This producer lives in `core/src/dispatch` (NOT `contracts`) because it reads
|
|
42
|
+
* `PROJECTION_PLANS` / `MUTATE_PROJECTION_PLANS`, which are core-resident, and
|
|
43
|
+
* because it is a bodied runtime helper (the contracts-purity Gate 10 forbids
|
|
44
|
+
* net-new bodied functions in `contracts`). It is import-time side-effect-free:
|
|
45
|
+
* it builds nothing at module load, only on call.
|
|
46
|
+
*
|
|
47
|
+
* @packageDocumentation
|
|
48
|
+
* @module @cleocode/core/dispatch/contracts/derive-output-contract
|
|
49
|
+
*
|
|
50
|
+
* @epic T11679
|
|
51
|
+
* @task T11762 ST-3 — DHQ-057: generic per-op output schema coverage backfill
|
|
52
|
+
*/
|
|
53
|
+
import { type OperationOutputContract } from '@cleocode/contracts';
|
|
54
|
+
/**
|
|
55
|
+
* Derive an {@link OperationOutputContract} for an operation from the existing
|
|
56
|
+
* shape registries, or `null` when the operation is genuinely unknown.
|
|
57
|
+
*
|
|
58
|
+
* Used as the SECOND tier of {@link getOutputContract}'s resolution order
|
|
59
|
+
* (hand-authored {@link OUTPUT_CONTRACTS} → `deriveOutputContract` → `null`).
|
|
60
|
+
* The hand-authored 7 stay authoritative; this lifts coverage to near-100% for
|
|
61
|
+
* the remaining ~404 ops without hand-authoring sprawl.
|
|
62
|
+
*
|
|
63
|
+
* Resolution precedence (most-precise first): workgraph result schema →
|
|
64
|
+
* projection-plan read → planned mutate op → generic registered op (unplanned
|
|
65
|
+
* mutate or plain query) → `null`.
|
|
66
|
+
*
|
|
67
|
+
* A `null` return MUST be treated as "no contract / unverified shape", NOT an
|
|
68
|
+
* error (T10400 §6.3 R6.7).
|
|
69
|
+
*
|
|
70
|
+
* @param operation - Canonical `<domain>.<verb>` operation identifier.
|
|
71
|
+
* @returns A derived contract, or `null` when the operation is not registered.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* deriveOutputContract('tasks.tree'); // precise workgraph keys
|
|
76
|
+
* deriveOutputContract('tasks.show'); // projection-plan path (`task`)
|
|
77
|
+
* deriveOutputContract('tasks.add'); // shared minimal-mutate envelope (planned)
|
|
78
|
+
* deriveOutputContract('memory.observe'); // generic object (UNPLANNED mutate)
|
|
79
|
+
* deriveOutputContract('session.start'); // generic object contract
|
|
80
|
+
* deriveOutputContract('does.not-exist'); // null
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @task T11762 ST-3
|
|
84
|
+
*/
|
|
85
|
+
export declare function deriveOutputContract(operation: string): OperationOutputContract | null;
|
|
86
|
+
//# sourceMappingURL=derive-output-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-output-contract.d.ts","sourceRoot":"","sources":["../../../src/dispatch/contracts/derive-output-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AA+P7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CA8BtF"}
|