@cleocode/core 2026.6.13 → 2026.6.15
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 +183 -0
- package/dist/check/pr-gate.d.ts.map +1 -0
- package/dist/check/pr-gate.js +348 -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-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/config-repair.d.ts +70 -0
- package/dist/config/config-repair.d.ts.map +1 -0
- package/dist/config/config-repair.js +248 -0
- package/dist/config/config-repair.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 +92 -0
- package/dist/config/registry.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -10
- package/dist/config.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/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/docs/export-document.js +3721 -696
- 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/gc/cleanup.d.ts +23 -8
- package/dist/gc/cleanup.d.ts.map +1 -1
- package/dist/gc/cleanup.js +287 -22
- package/dist/gc/cleanup.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -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 +10 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +18 -1
- package/dist/internal.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 +16 -0
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +37 -10
- 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/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/cross-provider-selector.d.ts +249 -0
- package/dist/llm/cross-provider-selector.d.ts.map +1 -0
- package/dist/llm/cross-provider-selector.js +572 -0
- package/dist/llm/cross-provider-selector.js.map +1 -0
- 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 +17 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +9 -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/local-model-fit.d.ts +260 -0
- package/dist/llm/local-model-fit.d.ts.map +1 -0
- package/dist/llm/local-model-fit.js +563 -0
- package/dist/llm/local-model-fit.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/pi-gondolin-env.d.ts +23 -0
- package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -1
- package/dist/llm/pi/pi-gondolin-env.js +2 -2
- package/dist/llm/pi/pi-gondolin-env.js.map +1 -1
- package/dist/llm/plugin-facade.js +4612 -1042
- 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/builtin/ollama.d.ts +18 -0
- package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/ollama.js +20 -2
- package/dist/llm/provider-registry/builtin/ollama.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 +36 -0
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +52 -10
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/system-resolver.d.ts.map +1 -1
- package/dist/llm/system-resolver.js +73 -22
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/llm/transports/codex-responses.d.ts +111 -88
- package/dist/llm/transports/codex-responses.d.ts.map +1 -1
- package/dist/llm/transports/codex-responses.js +456 -258
- package/dist/llm/transports/codex-responses.js.map +1 -1
- package/dist/memory/learnings.d.ts +4 -0
- package/dist/memory/learnings.d.ts.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/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/index.d.ts +2 -2
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +1 -1
- package/dist/release/index.js.map +1 -1
- package/dist/release/reconcile.d.ts +97 -0
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +412 -5
- package/dist/release/reconcile.js.map +1 -1
- package/dist/resources/backend.d.ts +155 -0
- package/dist/resources/backend.d.ts.map +1 -0
- package/dist/resources/backend.js +23 -0
- package/dist/resources/backend.js.map +1 -0
- package/dist/resources/linux-backend.d.ts +167 -0
- package/dist/resources/linux-backend.d.ts.map +1 -0
- package/dist/resources/linux-backend.js +259 -0
- package/dist/resources/linux-backend.js.map +1 -0
- package/dist/resources/monitor.d.ts +230 -0
- package/dist/resources/monitor.d.ts.map +1 -0
- package/dist/resources/monitor.js +255 -0
- package/dist/resources/monitor.js.map +1 -0
- package/dist/resources/spawn-wrapper.d.ts +265 -0
- package/dist/resources/spawn-wrapper.d.ts.map +1 -0
- package/dist/resources/spawn-wrapper.js +304 -0
- package/dist/resources/spawn-wrapper.js.map +1 -0
- 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 +11 -2
- package/dist/selfimprove/budget.d.ts.map +1 -1
- package/dist/selfimprove/budget.js +11 -2
- package/dist/selfimprove/budget.js.map +1 -1
- package/dist/selfimprove/fix-gen.d.ts +229 -0
- package/dist/selfimprove/fix-gen.d.ts.map +1 -0
- package/dist/selfimprove/fix-gen.js +266 -0
- package/dist/selfimprove/fix-gen.js.map +1 -0
- package/dist/selfimprove/run-loop.d.ts +44 -4
- package/dist/selfimprove/run-loop.d.ts.map +1 -1
- package/dist/selfimprove/run-loop.js +73 -6
- package/dist/selfimprove/run-loop.js.map +1 -1
- 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/cross-project-hygiene.d.ts +11 -2
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +73 -10
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +7 -2
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
- package/dist/sentient/worktree-dispatch.js +8 -1
- package/dist/sentient/worktree-dispatch.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/spawn/branch-lock.d.ts.map +1 -1
- package/dist/spawn/branch-lock.js +7 -1
- package/dist/spawn/branch-lock.js.map +1 -1
- package/dist/store/attachment-repair.d.ts +110 -0
- package/dist/store/attachment-repair.d.ts.map +1 -0
- package/dist/store/attachment-repair.js +326 -0
- package/dist/store/attachment-repair.js.map +1 -0
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +24 -7
- package/dist/store/attachment-store.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/index.d.ts +3 -0
- package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/index.js +5 -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-project/docs.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.d.ts +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/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/validation-schemas.d.ts +4 -4
- 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/complete.d.ts +17 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +53 -10
- 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/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/evidence.d.ts +34 -2
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +293 -35
- package/dist/tasks/evidence.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/tools/builtin-agent-tools.d.ts.map +1 -1
- package/dist/tools/builtin-agent-tools.js +41 -0
- package/dist/tools/builtin-agent-tools.js.map +1 -1
- 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/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +15 -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/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/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/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/verification/verify-tools.d.ts.map +1 -1
- package/dist/verification/verify-tools.js +5 -6
- package/dist/verification/verify-tools.js.map +1 -1
- package/migrations/drizzle-brain/20260610000001_t10405-bitemporal-network-columns/migration.sql +71 -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/20260610000000_t11962-schedules/migration.sql +48 -0
- package/package.json +33 -13
- package/templates/workflows/release-prepare.yml.tmpl +48 -2
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice-aware launch-wrapper SSoT (T11993 · Epic T11992).
|
|
3
|
+
*
|
|
4
|
+
* This module is the ONLY constructor of `systemd-run` argv for cleo children.
|
|
5
|
+
* Every consumer that needs to launch a cleo child in a memory-capped cgroup
|
|
6
|
+
* MUST call {@link buildSpawnArgs} or {@link spawnWrapped} here instead of
|
|
7
|
+
* constructing `systemd-run` arguments ad-hoc.
|
|
8
|
+
*
|
|
9
|
+
* ## Design
|
|
10
|
+
*
|
|
11
|
+
* Children are placed inside `cleo.slice` when systemd is available:
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* cleo.slice
|
|
15
|
+
* ├── cleo-daemon.service (managed by the daemon service unit)
|
|
16
|
+
* └── cleo-<scopeClass>-<n>.scope (transient scopes for child spawns)
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* The slice applies MemoryHigh (primary soft throttle) and MemoryMax (hard
|
|
20
|
+
* safety net) at the slice level, shared across all members. Child scopes
|
|
21
|
+
* inherit these limits and may override them downward.
|
|
22
|
+
*
|
|
23
|
+
* ## Staged P1 budget (IMPORTANT — read before tuning)
|
|
24
|
+
*
|
|
25
|
+
* P1 ships MemoryHigh within 5 % of MemoryMax (80 % / 85 % of a reference
|
|
26
|
+
* host total) so that reclaim stalls under the soft limit NEVER block the
|
|
27
|
+
* SQLite WAL write-transaction held by a slice member. A stalled scope
|
|
28
|
+
* holding a WAL write-txn for > 30 s (busy_timeout) cascades SQLITE_BUSY to
|
|
29
|
+
* every other slice member.
|
|
30
|
+
*
|
|
31
|
+
* **P1 installed values (safe defaults):**
|
|
32
|
+
* - `MemoryHigh = undefined` (disabled — no throttle in P1)
|
|
33
|
+
* - `MemoryMax = 32G` (hard cap, benign cgroup kill)
|
|
34
|
+
*
|
|
35
|
+
* The 60 % / 85 % target shape is documented here and in `DEFAULT_SLICE_CONFIG`
|
|
36
|
+
* as the P2 goal once the stall-escalator (T11994) is in place.
|
|
37
|
+
*
|
|
38
|
+
* **With `MemorySwapMax=0`:** reclaim has only page-cache to chew against
|
|
39
|
+
* `MemoryHigh` on anonymous heaps — admission (P2) becomes the primary
|
|
40
|
+
* control, throttling is not load-bearing in P1.
|
|
41
|
+
*
|
|
42
|
+
* ## oomd-avoid (selective)
|
|
43
|
+
*
|
|
44
|
+
* `ManagedOOMPreference=avoid` is applied ONLY to daemon/db-heavy scope
|
|
45
|
+
* classes (`'daemon'`, `'db'`). Bulk agent/test scopes do NOT get `avoid`
|
|
46
|
+
* because Fedora oomd monitors `user@1000.service` at 80 %/20 s and ranks
|
|
47
|
+
* avoid-marked candidates last — blanket avoid redirects oomd kills onto
|
|
48
|
+
* innocent user apps.
|
|
49
|
+
*
|
|
50
|
+
* ## Fallback
|
|
51
|
+
*
|
|
52
|
+
* On hosts without systemd-run (macOS, CI containers, minimal installs)
|
|
53
|
+
* the wrapper degrades log-once to plain `spawn` in a new process-group
|
|
54
|
+
* with NODE_OPTIONS heap cap inherited from the caller. This is mirrored
|
|
55
|
+
* from the writer-lease `pgid-demotion` pattern.
|
|
56
|
+
*
|
|
57
|
+
* ## Return value — ownership handle (T11998 / T11995)
|
|
58
|
+
*
|
|
59
|
+
* {@link SpawnWrappedResult} carries `{ unitName?, pid, mode }` so the
|
|
60
|
+
* suite-containment epic (T11998) and the janitor (T11995) can look up or
|
|
61
|
+
* clean up the transient scope by unit name.
|
|
62
|
+
*
|
|
63
|
+
* @module @cleocode/core/resources/spawn-wrapper
|
|
64
|
+
* @epic T11992
|
|
65
|
+
* @task T11993
|
|
66
|
+
*/
|
|
67
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
68
|
+
import { readFileSync } from 'node:fs';
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// Constants
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
/**
|
|
73
|
+
* The systemd user slice that all cleo child scopes are placed under.
|
|
74
|
+
*
|
|
75
|
+
* The slice unit (`~/.config/systemd/user/cleo.slice`) must be installed
|
|
76
|
+
* by the doctor/install flow before this is effective. Placing an orphan
|
|
77
|
+
* scope under a non-existent slice degrades silently to the default slice —
|
|
78
|
+
* so the slice install is best-effort and the wrapper is always safe to call.
|
|
79
|
+
*/
|
|
80
|
+
export const CLEO_SLICE = 'cleo.slice';
|
|
81
|
+
/**
|
|
82
|
+
* Default per-scope memory resource config (P1 staged values).
|
|
83
|
+
*
|
|
84
|
+
* P1: MemoryHigh disabled, MemoryMax=32G.
|
|
85
|
+
* P2 target (after T11994 stall-escalator lands): memoryHigh=0.60, memoryMax=0.85.
|
|
86
|
+
*/
|
|
87
|
+
export const DEFAULT_SCOPE_RESOURCES = {
|
|
88
|
+
memoryHigh: 'infinity', // P1: disabled — no throttle (safe until P2 stall-escalator)
|
|
89
|
+
memoryMax: '32G', // P1: hard cap (benign cgroup kill; coredumps suppressed via ulimit -c 0)
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Scope classes that receive `ManagedOOMPreference=avoid`.
|
|
93
|
+
*
|
|
94
|
+
* Only write-transaction holders (daemon, db) are marked `avoid` to prevent
|
|
95
|
+
* mid-txn oomd kills. See module-level TSDoc for the Fedora oomd rationale.
|
|
96
|
+
*/
|
|
97
|
+
const OOM_AVOID_CLASSES = new Set(['daemon', 'db']);
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// Internal helpers
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
/**
|
|
102
|
+
* Is `systemd-run` available on this host? Probed once and cached.
|
|
103
|
+
* Mirrors the probe in `packages/core/src/check/pr-gate.ts`.
|
|
104
|
+
*/
|
|
105
|
+
let _systemdRunAvailable;
|
|
106
|
+
/**
|
|
107
|
+
* Check whether `systemd-run --user` is usable on this host.
|
|
108
|
+
*
|
|
109
|
+
* Returns `false` on non-Linux, when systemd-run is not on PATH, or when
|
|
110
|
+
* DBUS_SESSION_BUS_ADDRESS / XDG_RUNTIME_DIR are absent (CI containers,
|
|
111
|
+
* ssh sessions without a user bus).
|
|
112
|
+
*/
|
|
113
|
+
export function hasSystemdRun() {
|
|
114
|
+
if (_systemdRunAvailable !== undefined)
|
|
115
|
+
return _systemdRunAvailable;
|
|
116
|
+
if (process.platform !== 'linux') {
|
|
117
|
+
_systemdRunAvailable = false;
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
// Quick binary availability check — does NOT test user-bus connectivity.
|
|
121
|
+
const probe = spawnSync('systemd-run', ['--version'], { stdio: 'ignore' });
|
|
122
|
+
_systemdRunAvailable = probe.status === 0;
|
|
123
|
+
return _systemdRunAvailable;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Force-override the cached systemd-run availability.
|
|
127
|
+
*
|
|
128
|
+
* Exposed for unit tests that need to exercise the pgid-fallback or
|
|
129
|
+
* systemd paths without the real binary.
|
|
130
|
+
*
|
|
131
|
+
* @param available - `true` = force systemd path, `false` = force pgid path.
|
|
132
|
+
*/
|
|
133
|
+
export function _forceSystemdRunAvailable(available) {
|
|
134
|
+
_systemdRunAvailable = available;
|
|
135
|
+
}
|
|
136
|
+
/** Whether we have already emitted the pgid-demotion log line for this process. */
|
|
137
|
+
let _pgidDemotionLogged = false;
|
|
138
|
+
/**
|
|
139
|
+
* Resolve a memory value to a systemd property string.
|
|
140
|
+
*
|
|
141
|
+
* Numbers in (0, 1] are treated as fractions of a `totalBytes` reference.
|
|
142
|
+
* Strings are passed through verbatim. `undefined` / `'infinity'` resolves
|
|
143
|
+
* to `'infinity'` (disabled).
|
|
144
|
+
*/
|
|
145
|
+
function resolveMemoryValue(val, totalBytes) {
|
|
146
|
+
if (val === undefined || val === 'infinity')
|
|
147
|
+
return 'infinity';
|
|
148
|
+
if (typeof val === 'string')
|
|
149
|
+
return val;
|
|
150
|
+
// Fraction: multiply by total and round to nearest mebibyte boundary.
|
|
151
|
+
const bytes = Math.round(val * totalBytes);
|
|
152
|
+
const mib = Math.round(bytes / (1024 * 1024));
|
|
153
|
+
return `${mib}M`;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Read /proc/meminfo MemTotal in bytes. Returns 32 GiB as a safe fallback
|
|
157
|
+
* when unavailable (non-Linux, CI, permission denied).
|
|
158
|
+
*/
|
|
159
|
+
function readMemTotalBytes() {
|
|
160
|
+
if (process.platform !== 'linux')
|
|
161
|
+
return 32 * 1024 * 1024 * 1024;
|
|
162
|
+
try {
|
|
163
|
+
const raw = readFileSync('/proc/meminfo', 'utf8');
|
|
164
|
+
const m = raw.match(/^MemTotal:\s+(\d+)\s+kB/m);
|
|
165
|
+
if (m?.[1])
|
|
166
|
+
return parseInt(m[1], 10) * 1024;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// ignore
|
|
170
|
+
}
|
|
171
|
+
return 32 * 1024 * 1024 * 1024;
|
|
172
|
+
}
|
|
173
|
+
/** Counter for generating unique scope discriminators within a process. */
|
|
174
|
+
let _scopeCounter = 0;
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
// Core API
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
/**
|
|
179
|
+
* Build the argv for a cleo child spawn.
|
|
180
|
+
*
|
|
181
|
+
* When `systemd-run` is available, the result is:
|
|
182
|
+
*
|
|
183
|
+
* ```
|
|
184
|
+
* ['systemd-run', '--user', '--scope', '--slice=cleo.slice',
|
|
185
|
+
* '--unit=cleo-<class>-<id>.scope',
|
|
186
|
+
* '-p', 'MemoryHigh=<high>', '-p', 'MemoryMax=<max>',
|
|
187
|
+
* '-p', 'MemorySwapMax=0',
|
|
188
|
+
* ['-p', 'ManagedOOMPreference=avoid'], // daemon/db only
|
|
189
|
+
* '--',
|
|
190
|
+
* // when noCoreFile=true (default):
|
|
191
|
+
* 'sh', '-c', 'ulimit -c 0; exec "$@"', 'sh', command, ...args
|
|
192
|
+
* // when noCoreFile=false:
|
|
193
|
+
* command, ...args]
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
* `LimitCORE` is intentionally NOT used — it is a service-unit EXEC property
|
|
197
|
+
* and is rejected by `systemd-run --scope` with "Unknown assignment: LimitCORE".
|
|
198
|
+
* Core-dump suppression is applied at the process level instead via
|
|
199
|
+
* `ulimit -c 0` (POSIX sh, works in both systemd and pgid-fallback paths).
|
|
200
|
+
*
|
|
201
|
+
* When `systemd-run` is NOT available, the result is `[command, ...args]`
|
|
202
|
+
* (or the sh/ulimit-wrapped form when noCoreFile=true) and `mode` is `'pgid'`.
|
|
203
|
+
*
|
|
204
|
+
* @param command - The executable to run (e.g. `'node'`).
|
|
205
|
+
* @param args - Arguments to pass to the executable.
|
|
206
|
+
* @param opts - Wrapper options (scope class, resources, etc.).
|
|
207
|
+
* @returns Build result with final command, args, mode, and unit name.
|
|
208
|
+
*/
|
|
209
|
+
export function buildSpawnArgs(command, args, opts = {}) {
|
|
210
|
+
const { scopeClass = 'agent', scopeId, resources = {}, noCoreFile = true } = opts;
|
|
211
|
+
if (!hasSystemdRun()) {
|
|
212
|
+
if (!_pgidDemotionLogged) {
|
|
213
|
+
_pgidDemotionLogged = true;
|
|
214
|
+
process.stderr.write('[cleo:spawn-wrapper] systemd-run unavailable — falling back to plain pgid spawn ' +
|
|
215
|
+
'(no cgroup containment; set NODE_OPTIONS=--max-old-space-size=<mb> externally)\n');
|
|
216
|
+
}
|
|
217
|
+
if (noCoreFile) {
|
|
218
|
+
// Apply ulimit -c 0 in the pgid path as well so core suppression is
|
|
219
|
+
// consistent regardless of whether systemd is available.
|
|
220
|
+
return {
|
|
221
|
+
command: 'sh',
|
|
222
|
+
args: ['-c', 'ulimit -c 0; exec "$@"', 'sh', command, ...args],
|
|
223
|
+
mode: 'pgid',
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return { command, args: [...args], mode: 'pgid' };
|
|
227
|
+
}
|
|
228
|
+
const totalBytes = readMemTotalBytes();
|
|
229
|
+
const merged = {
|
|
230
|
+
memoryHigh: resources.memoryHigh ?? DEFAULT_SCOPE_RESOURCES.memoryHigh,
|
|
231
|
+
memoryMax: resources.memoryMax ?? DEFAULT_SCOPE_RESOURCES.memoryMax,
|
|
232
|
+
};
|
|
233
|
+
const highStr = resolveMemoryValue(merged.memoryHigh, totalBytes);
|
|
234
|
+
const maxStr = resolveMemoryValue(merged.memoryMax, totalBytes);
|
|
235
|
+
// Build a deterministic, unique unit name.
|
|
236
|
+
const counter = ++_scopeCounter;
|
|
237
|
+
const discriminator = scopeId ? scopeId.replace(/[^a-zA-Z0-9-]/g, '-') : String(counter);
|
|
238
|
+
const unitName = `cleo-${scopeClass}-${discriminator}.scope`;
|
|
239
|
+
const wrapArgs = [
|
|
240
|
+
'--user',
|
|
241
|
+
'--scope',
|
|
242
|
+
`--slice=${CLEO_SLICE}`,
|
|
243
|
+
`--unit=${unitName}`,
|
|
244
|
+
'-p',
|
|
245
|
+
`MemoryMax=${maxStr}`,
|
|
246
|
+
'-p',
|
|
247
|
+
'MemorySwapMax=0',
|
|
248
|
+
];
|
|
249
|
+
// MemoryHigh: only emit the directive when it is a real limit (not infinity).
|
|
250
|
+
if (highStr !== 'infinity') {
|
|
251
|
+
wrapArgs.push('-p', `MemoryHigh=${highStr}`);
|
|
252
|
+
}
|
|
253
|
+
// Selective oomd-avoid: only for write-txn holder classes.
|
|
254
|
+
if (OOM_AVOID_CLASSES.has(scopeClass)) {
|
|
255
|
+
wrapArgs.push('-p', 'ManagedOOMPreference=avoid');
|
|
256
|
+
}
|
|
257
|
+
if (noCoreFile) {
|
|
258
|
+
// LimitCORE is a service-unit EXEC property — it is NOT valid on scope
|
|
259
|
+
// units and causes systemd-run to reject the argv with:
|
|
260
|
+
// "Unknown assignment: LimitCORE=0"
|
|
261
|
+
// Suppress coredumps at the process level instead: wrap the inner command
|
|
262
|
+
// in a tiny sh fragment that sets `ulimit -c 0` then execs the real binary.
|
|
263
|
+
// This is equivalent to LimitCORE for our purposes and works on both
|
|
264
|
+
// Fedora and Ubuntu CI runners.
|
|
265
|
+
wrapArgs.push('--', 'sh', '-c', 'ulimit -c 0; exec "$@"', 'sh', command, ...args);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
wrapArgs.push('--', command, ...args);
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
command: 'systemd-run',
|
|
272
|
+
args: wrapArgs,
|
|
273
|
+
mode: 'systemd',
|
|
274
|
+
unitName,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Spawn a command wrapped in a cleo.slice transient cgroup scope.
|
|
279
|
+
*
|
|
280
|
+
* This is a thin convenience wrapper over {@link buildSpawnArgs} +
|
|
281
|
+
* Node.js `child_process.spawn`. All cleo child spawns SHOULD route through
|
|
282
|
+
* this function instead of constructing `systemd-run` arguments inline.
|
|
283
|
+
*
|
|
284
|
+
* The returned {@link SpawnWrappedResult} carries `unitName` — the systemd
|
|
285
|
+
* transient scope unit name — as the ownership/cleanup handle for
|
|
286
|
+
* T11998 (suite containment) and T11995 (janitor).
|
|
287
|
+
*
|
|
288
|
+
* @param command - The executable to run.
|
|
289
|
+
* @param args - Arguments to pass to the executable.
|
|
290
|
+
* @param spawnOpts - Options forwarded to `child_process.spawn`.
|
|
291
|
+
* @param wrapOpts - Wrapper options (scope class, resources, etc.).
|
|
292
|
+
* @returns Wrapped spawn result.
|
|
293
|
+
*/
|
|
294
|
+
export function spawnWrapped(command, args, spawnOpts = {}, wrapOpts = {}) {
|
|
295
|
+
const built = buildSpawnArgs(command, args, wrapOpts);
|
|
296
|
+
const child = spawn(built.command, built.args, spawnOpts);
|
|
297
|
+
return {
|
|
298
|
+
child,
|
|
299
|
+
pid: child.pid,
|
|
300
|
+
mode: built.mode,
|
|
301
|
+
unitName: built.unitName,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=spawn-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-wrapper.js","sourceRoot":"","sources":["../../src/resources/spawn-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* generateOpenApi — projects the CLEO operations registry into an OpenAPI 3.1
|
|
3
|
+
* document (DHQ-033/057 SDK-projection · T11918 · AC2 · M5/E-API-STANDARD-FOUNDATION
|
|
4
|
+
* T11769).
|
|
5
|
+
*
|
|
6
|
+
* ## Why this exists
|
|
7
|
+
*
|
|
8
|
+
* The `/v1` REST gateway routes `POST /v1/<domain>/<operation>` for every entry
|
|
9
|
+
* in the 413-row {@link OPERATIONS} registry. Downstream task T11920 generates a
|
|
10
|
+
* typed SDK client; its projection source is an OpenAPI 3.1 spec. Hand-authoring
|
|
11
|
+
* 413 path objects (and keeping them in lock-step with the registry) is exactly
|
|
12
|
+
* the drift trap the schema-first SSoT (`inputSchema`/`outputSchema`) was built
|
|
13
|
+
* to close. This builder DERIVES the whole spec from the single source of truth:
|
|
14
|
+
*
|
|
15
|
+
* - paths ← {@link OPERATIONS} (`POST /v1/<domain>/<operation>`)
|
|
16
|
+
* - requestBody ← {@link getInputContract}(op).schema, else a JSON Schema
|
|
17
|
+
* synthesised from `def.params` (richest available input shape)
|
|
18
|
+
* - 200 response ← {@link getOutputContract}(op).dataSchema (hand-authored
|
|
19
|
+
* {@link OUTPUT_CONTRACTS}, else {@link deriveOutputContract})
|
|
20
|
+
*
|
|
21
|
+
* Because `OperationInputContract.schema` and `OperationOutputContract.dataSchema`
|
|
22
|
+
* are ALREADY JSON Schema (draft-07) documents, and OpenAPI 3.1's Schema Object
|
|
23
|
+
* IS a superset of JSON Schema (it adopts the JSON Schema 2020-12 vocabulary),
|
|
24
|
+
* the schemas embed directly — no zod→OpenAPI conversion pass, no `zod-to-openapi`
|
|
25
|
+
* dependency. Zod (v4) is the authoring substrate for the contracts upstream; by
|
|
26
|
+
* the time a schema reaches this builder it is already plain JSON Schema, so this
|
|
27
|
+
* module stays a zero-runtime-dependency projection over the registry.
|
|
28
|
+
*
|
|
29
|
+
* ## Boundary
|
|
30
|
+
*
|
|
31
|
+
* Lives in `core/src/runtime` (NOT `contracts`): it reads {@link getOutputContract}
|
|
32
|
+
* / {@link getInputContract}, which are core-resident bodied resolvers, and it is
|
|
33
|
+
* itself a bodied runtime helper (the contracts-purity Gate 10 forbids net-new
|
|
34
|
+
* bodied functions in `contracts`). Import-time side-effect-free: it builds
|
|
35
|
+
* nothing at module load, only when {@link generateOpenApi} is called.
|
|
36
|
+
*
|
|
37
|
+
* @packageDocumentation
|
|
38
|
+
* @module @cleocode/core/runtime/openapi/generate-openapi
|
|
39
|
+
*
|
|
40
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0 | OpenAPI 3.1.0 Specification}
|
|
41
|
+
* @see OperationOutputContract — the OUTPUT-side JSON Schema SSoT this projects
|
|
42
|
+
* @see OperationInputContract — the INPUT-side JSON Schema SSoT this projects
|
|
43
|
+
*
|
|
44
|
+
* @epic T11769
|
|
45
|
+
* @task T11918 — AC2: zod→OpenAPI 3.1 bridge + `cleo gateway openapi`
|
|
46
|
+
*/
|
|
47
|
+
import { type JsonSchema } from '@cleocode/contracts';
|
|
48
|
+
/**
|
|
49
|
+
* OpenAPI 3.1 `info` object — API identity surfaced to SDK generators and docs
|
|
50
|
+
* tooling.
|
|
51
|
+
*
|
|
52
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0#info-object}
|
|
53
|
+
*/
|
|
54
|
+
export interface OpenApiInfo {
|
|
55
|
+
/** Human-readable API title. */
|
|
56
|
+
title: string;
|
|
57
|
+
/**
|
|
58
|
+
* Semantic version of the API surface (NOT the package version). The `/v1`
|
|
59
|
+
* REST gateway is version `1.x`; defaults to `'1.0.0'`.
|
|
60
|
+
*/
|
|
61
|
+
version: string;
|
|
62
|
+
/** Optional one-line summary (OpenAPI 3.1 adds `summary` to the info object). */
|
|
63
|
+
summary?: string;
|
|
64
|
+
/** Optional CommonMark description. */
|
|
65
|
+
description?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* OpenAPI 3.1 Media Type object — pairs a content type with its schema.
|
|
69
|
+
*
|
|
70
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0#media-type-object}
|
|
71
|
+
*/
|
|
72
|
+
export interface OpenApiMediaType {
|
|
73
|
+
/** The JSON Schema (2020-12 vocabulary) describing the payload. */
|
|
74
|
+
schema: JsonSchema;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* OpenAPI 3.1 Request Body object.
|
|
78
|
+
*
|
|
79
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0#request-body-object}
|
|
80
|
+
*/
|
|
81
|
+
export interface OpenApiRequestBody {
|
|
82
|
+
/** Content keyed by media type (always `application/json` here). */
|
|
83
|
+
content: Record<string, OpenApiMediaType>;
|
|
84
|
+
/** Whether the request body is required (true iff the op has required params). */
|
|
85
|
+
required: boolean;
|
|
86
|
+
/** Optional human description. */
|
|
87
|
+
description?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* OpenAPI 3.1 Response object.
|
|
91
|
+
*
|
|
92
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0#response-object}
|
|
93
|
+
*/
|
|
94
|
+
export interface OpenApiResponse {
|
|
95
|
+
/** Required CommonMark description of the response. */
|
|
96
|
+
description: string;
|
|
97
|
+
/** Optional content keyed by media type. */
|
|
98
|
+
content?: Record<string, OpenApiMediaType>;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* OpenAPI 3.1 Operation object — one HTTP operation on a path.
|
|
102
|
+
*
|
|
103
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0#operation-object}
|
|
104
|
+
*/
|
|
105
|
+
export interface OpenApiOperation {
|
|
106
|
+
/** Unique, machine-friendly id (`<gateway>.<domain>.<operation>`) for SDK method naming. */
|
|
107
|
+
operationId: string;
|
|
108
|
+
/** Short summary (the registry `description`). */
|
|
109
|
+
summary: string;
|
|
110
|
+
/** Grouping tags — the canonical domain. */
|
|
111
|
+
tags: string[];
|
|
112
|
+
/** Request body, omitted when the op declares no input params. */
|
|
113
|
+
requestBody?: OpenApiRequestBody;
|
|
114
|
+
/** Responses keyed by HTTP status code (always at least `'200'`). */
|
|
115
|
+
responses: Record<string, OpenApiResponse>;
|
|
116
|
+
/**
|
|
117
|
+
* Vendor extension carrying the CQRS gateway (`'query'` | `'mutate'`) this
|
|
118
|
+
* operation routes through. The clean `/v1/<domain>/<operation>` path omits the
|
|
119
|
+
* gateway for readability, so the SDK reads this extension to pick the right
|
|
120
|
+
* dispatch gateway. OpenAPI tooling ignores `x-`-prefixed members it does not
|
|
121
|
+
* recognise, so emitting it keeps the document valid.
|
|
122
|
+
*/
|
|
123
|
+
'x-cleo-gateway': 'query' | 'mutate';
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* OpenAPI 3.1 Path Item object — the set of HTTP operations on one path. The
|
|
127
|
+
* CLEO `/v1` gateway only routes `POST`, so only `post` is ever populated.
|
|
128
|
+
*
|
|
129
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0#path-item-object}
|
|
130
|
+
*/
|
|
131
|
+
export interface OpenApiPathItem {
|
|
132
|
+
/** The single `POST` operation served at this path. */
|
|
133
|
+
post: OpenApiOperation;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* A minimal, structurally-typed OpenAPI 3.1 document — exactly the members
|
|
137
|
+
* {@link generateOpenApi} emits. The `openapi` field is pinned to the `3.1.x`
|
|
138
|
+
* literal family so consumers can statically assert the version.
|
|
139
|
+
*
|
|
140
|
+
* @see {@link https://spec.openapis.org/oas/v3.1.0#openapi-object}
|
|
141
|
+
*/
|
|
142
|
+
export interface OpenApiDocument {
|
|
143
|
+
/** OpenAPI version string — always `'3.1.0'`. */
|
|
144
|
+
openapi: '3.1.0';
|
|
145
|
+
/** API identity. */
|
|
146
|
+
info: OpenApiInfo;
|
|
147
|
+
/**
|
|
148
|
+
* The JSON Schema dialect every embedded Schema Object uses, declared once at
|
|
149
|
+
* the document root per OpenAPI 3.1. The contracts ship draft-07 schemas,
|
|
150
|
+
* which validate under the 2020-12 dialect OpenAPI 3.1 mandates.
|
|
151
|
+
*/
|
|
152
|
+
jsonSchemaDialect: string;
|
|
153
|
+
/**
|
|
154
|
+
* Path → path-item map, keyed by `<pathPrefix>/<domain>/<operation>` (with a
|
|
155
|
+
* trailing `/<gateway>` segment for the cross-gateway collision pairs).
|
|
156
|
+
*/
|
|
157
|
+
paths: Record<string, OpenApiPathItem>;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Options for {@link generateOpenApi}.
|
|
161
|
+
*/
|
|
162
|
+
export interface GenerateOpenApiOptions {
|
|
163
|
+
/**
|
|
164
|
+
* Semantic version stamped into `info.version`. This is the API-surface
|
|
165
|
+
* version (the `/v1` gateway), NOT the npm package version.
|
|
166
|
+
*
|
|
167
|
+
* @default '1.0.0'
|
|
168
|
+
*/
|
|
169
|
+
version?: string;
|
|
170
|
+
/**
|
|
171
|
+
* Path prefix prepended to every operation route. The SDK-facing REST surface
|
|
172
|
+
* is versioned under `/v1` (T11769); each op maps to
|
|
173
|
+
* `POST <pathPrefix>/<domain>/<operation>`.
|
|
174
|
+
*
|
|
175
|
+
* @default '/v1'
|
|
176
|
+
*/
|
|
177
|
+
pathPrefix?: string;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Project the {@link OPERATIONS} registry into a complete OpenAPI 3.1 document.
|
|
181
|
+
*
|
|
182
|
+
* Walks every registry entry, mapping each to a `POST` path whose `requestBody`
|
|
183
|
+
* is the resolved input schema and whose `200` response is the resolved output
|
|
184
|
+
* schema (`deriveOutputContract` coverage), wrapped in the LAFS envelope.
|
|
185
|
+
*
|
|
186
|
+
* Routing: the clean form is `POST <pathPrefix>/<domain>/<operation>`. Because
|
|
187
|
+
* the registry has cross-gateway collisions on `<domain>/<operation>` (the same
|
|
188
|
+
* pair under both `query` and `mutate`), a colliding entry is disambiguated by
|
|
189
|
+
* appending its gateway segment (`<pathPrefix>/<domain>/<operation>/<gateway>`).
|
|
190
|
+
* Each operation also carries an `x-cleo-gateway` extension so the SDK knows
|
|
191
|
+
* which CQRS gateway to dispatch through regardless of the path form.
|
|
192
|
+
*
|
|
193
|
+
* The number of paths in the returned document equals `OPERATIONS.length` (AC5):
|
|
194
|
+
* every registry entry gets a unique route (and a unique operationId).
|
|
195
|
+
*
|
|
196
|
+
* @param options - {@link GenerateOpenApiOptions} (version, path prefix).
|
|
197
|
+
* @returns A structurally-valid OpenAPI 3.1 {@link OpenApiDocument}.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```ts
|
|
201
|
+
* const doc = generateOpenApi();
|
|
202
|
+
* doc.openapi; // '3.1.0'
|
|
203
|
+
* Object.keys(doc.paths).length; // === OPERATIONS.length
|
|
204
|
+
* doc.paths['/v1/tasks/show'].post.operationId; // 'query.tasks.show'
|
|
205
|
+
* doc.paths['/v1/tasks/show'].post['x-cleo-gateway'];// 'query'
|
|
206
|
+
* ```
|
|
207
|
+
*
|
|
208
|
+
* @task T11918 — AC1/AC2/AC5
|
|
209
|
+
*/
|
|
210
|
+
export declare function generateOpenApi(options?: GenerateOpenApiOptions): OpenApiDocument;
|
|
211
|
+
//# sourceMappingURL=generate-openapi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-openapi.d.ts","sourceRoot":"","sources":["../../../src/runtime/openapi/generate-openapi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAgD,MAAM,qBAAqB,CAAC;AAQpG;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,kEAAkE;IAClE,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C;;;;;;OAMG;IACH,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC;CACtC;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACxC;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+LD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAkDrF"}
|