@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,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision / media agent-tool family — `vision_analyze` / `image_generate` /
|
|
3
|
+
* `text_to_speech` (T11951 · M7 · epic T11456 · SG-TOOLS).
|
|
4
|
+
*
|
|
5
|
+
* The FIRST occupants of the previously-empty `media` toolset. Every model /
|
|
6
|
+
* multimodal call routes THROUGH the single E9 chokepoint
|
|
7
|
+
* ({@link import('../llm/system-resolver.js')}'s `resolveLLMForSystem` →
|
|
8
|
+
* {@link import('../llm/model-runner.js')}'s `ModelRunner`), EXACTLY like
|
|
9
|
+
* `browser_vision` ({@link ./web-agent-tools.js}). There is NO raw provider client,
|
|
10
|
+
* NO new transport, NO API-key read at this call-site — the plaintext credential is
|
|
11
|
+
* materialized from the sealed handle ONLY at the wire inside `ModelRunner.build`
|
|
12
|
+
* (Gate-13 stays green).
|
|
13
|
+
*
|
|
14
|
+
* - **`vision_analyze`** — read a local image + a prompt, send them as a single
|
|
15
|
+
* multimodal user turn through the chokepoint, return the model's analysis.
|
|
16
|
+
* - **`image_generate`** — send an image prompt through the chokepoint; returns
|
|
17
|
+
* the model's response (text/asset-ref it emits). When the resolved model
|
|
18
|
+
* cannot generate an image the chokepoint degrades — the tool surfaces an
|
|
19
|
+
* `unsupported` flag rather than constructing a bespoke image client.
|
|
20
|
+
* - **`text_to_speech`** — send text through the chokepoint for narration intent;
|
|
21
|
+
* same degradation contract when the modality is unsupported.
|
|
22
|
+
*
|
|
23
|
+
* ## Availability (AC3 — mirrors `browser_vision`)
|
|
24
|
+
*
|
|
25
|
+
* Hidden unless outbound egress is permitted AND the host advertises a multimodal
|
|
26
|
+
* model (`networkEgressAllowed !== false && capabilities.multimodal === true`).
|
|
27
|
+
* Registered-but-hidden so core runs credential-OFF / egress-OFF and the catalog
|
|
28
|
+
* stays stable. (The capability flag is the host's "a multimodal model is
|
|
29
|
+
* resolvable" promise — availability is a SYNC predicate, so the actual resolution
|
|
30
|
+
* happens at `execute` time with graceful degradation when no credential resolves.)
|
|
31
|
+
*
|
|
32
|
+
* @epic T11456
|
|
33
|
+
* @task T11951
|
|
34
|
+
* @see ./web-agent-tools.js — `browser_vision`, the E9-routed multimodal pattern mirrored here
|
|
35
|
+
* @see ../llm/system-resolver.js — `resolveLLMForSystem` (the E9 chokepoint)
|
|
36
|
+
* @see ../llm/model-runner.js — `ModelRunner` (the single SSoT wire builder)
|
|
37
|
+
*/
|
|
38
|
+
import { readFile } from 'node:fs/promises';
|
|
39
|
+
import { extname } from 'node:path';
|
|
40
|
+
import { z } from 'zod';
|
|
41
|
+
import { getLogger } from '../logger.js';
|
|
42
|
+
const log = getLogger('tool-media-agent');
|
|
43
|
+
/**
|
|
44
|
+
* Available only when outbound egress is permitted AND the host advertises a
|
|
45
|
+
* multimodal model. Mirrors `browser_vision`'s availability: registered-but-hidden
|
|
46
|
+
* (so the `media` catalog is stable) until a context advertises both
|
|
47
|
+
* `networkEgressAllowed !== false` and `capabilities.multimodal === true`.
|
|
48
|
+
*/
|
|
49
|
+
export const multimodalAvailable = (ctx) => ctx.networkEgressAllowed !== false && ctx.capabilities?.multimodal === true;
|
|
50
|
+
/** Default {@link ImageReader} — a local `fs` read + extension-based MIME sniff. */
|
|
51
|
+
const defaultImageReader = async (path) => {
|
|
52
|
+
const bytes = await readFile(path);
|
|
53
|
+
return { base64: bytes.toString('base64'), mediaType: mediaTypeForPath(path) };
|
|
54
|
+
};
|
|
55
|
+
/** Map a file extension to its image MIME type (defaults to `image/png`). */
|
|
56
|
+
function mediaTypeForPath(path) {
|
|
57
|
+
switch (extname(path).toLowerCase()) {
|
|
58
|
+
case '.jpg':
|
|
59
|
+
case '.jpeg':
|
|
60
|
+
return 'image/jpeg';
|
|
61
|
+
case '.webp':
|
|
62
|
+
return 'image/webp';
|
|
63
|
+
case '.gif':
|
|
64
|
+
return 'image/gif';
|
|
65
|
+
default:
|
|
66
|
+
return 'image/png';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Resolve an LLM through the SINGLE E9 chokepoint and send `messages` as one turn
|
|
71
|
+
* via the SSoT {@link ModelRunner}. The sealed credential is materialized ONLY at
|
|
72
|
+
* the wire (inside `ModelRunner.build`); there is NO raw provider/transport
|
|
73
|
+
* construction here (Gate-13). Returns `aiUnavailable: true` when no credential
|
|
74
|
+
* resolves — graceful degradation, not an error (mirrors `runBrowserVision`).
|
|
75
|
+
*
|
|
76
|
+
* @param messages - The provider-neutral turn (text and/or image blocks).
|
|
77
|
+
* @param projectRoot - Project root for the resolver.
|
|
78
|
+
* @returns The {@link MediaModelResult}.
|
|
79
|
+
*/
|
|
80
|
+
async function runChokepointModel(messages, projectRoot) {
|
|
81
|
+
// E9 resolution chokepoint — the ONLY route to an LLM credential. Never throws.
|
|
82
|
+
const { resolveLLMForSystem } = await import('../llm/system-resolver.js');
|
|
83
|
+
const resolved = await resolveLLMForSystem('task-executor', {
|
|
84
|
+
...(projectRoot !== undefined ? { projectRoot } : {}),
|
|
85
|
+
});
|
|
86
|
+
if (!resolved.sealedCredential) {
|
|
87
|
+
return { ok: false, aiUnavailable: true };
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
// Build the wire surfaces via the single SSoT ModelRunner (Gate-13: no raw
|
|
91
|
+
// transport / provider construction here). The token is materialized from the
|
|
92
|
+
// sealed handle inside ModelRunner only.
|
|
93
|
+
const { ModelRunner } = await import('../llm/model-runner.js');
|
|
94
|
+
const apiKey = (await resolved.sealedCredential.fetch()).value;
|
|
95
|
+
const built = await ModelRunner.build({
|
|
96
|
+
provider: resolved.provider,
|
|
97
|
+
model: resolved.model,
|
|
98
|
+
credential: resolved.credential
|
|
99
|
+
? {
|
|
100
|
+
provider: resolved.credential.provider,
|
|
101
|
+
apiKey,
|
|
102
|
+
source: resolved.credential.source,
|
|
103
|
+
authType: resolved.credential.authType,
|
|
104
|
+
}
|
|
105
|
+
: null,
|
|
106
|
+
source: resolved.source,
|
|
107
|
+
...(resolved.credentialLabel !== undefined
|
|
108
|
+
? { credentialLabel: resolved.credentialLabel }
|
|
109
|
+
: {}),
|
|
110
|
+
apiMode: resolved.apiMode,
|
|
111
|
+
baseUrl: resolved.baseUrl,
|
|
112
|
+
authType: resolved.authType,
|
|
113
|
+
...(resolved.capabilities !== undefined ? { capabilities: resolved.capabilities } : {}),
|
|
114
|
+
});
|
|
115
|
+
const response = await built.session.send(messages);
|
|
116
|
+
return { ok: true, content: response.content ?? undefined, model: resolved.model };
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
log.warn({ err }, 'media tool: chokepoint model call failed — returning unavailable');
|
|
120
|
+
return { ok: false, model: resolved.model, aiUnavailable: true };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Register the vision / media agent-tool family into `registry`. Pure
|
|
125
|
+
* registration — no model is resolved, no credential is read, no file is opened
|
|
126
|
+
* here; all of that happens later inside each tool's `execute` through the E9
|
|
127
|
+
* chokepoint (and the injected image reader). Import-time side-effect-free.
|
|
128
|
+
*
|
|
129
|
+
* @param registry - The registry to populate.
|
|
130
|
+
* @param options - Injectable image reader / project root (for testing).
|
|
131
|
+
*/
|
|
132
|
+
export function registerMediaAgentTools(registry, options = {}) {
|
|
133
|
+
const readImage = options.readImage ?? defaultImageReader;
|
|
134
|
+
const projectRoot = options.projectRoot;
|
|
135
|
+
// --- vision_analyze (image + prompt → analysis, via the E9 chokepoint) ----
|
|
136
|
+
registry.register({
|
|
137
|
+
name: 'vision_analyze',
|
|
138
|
+
// 'shell' — the call captures an external model response (its strongest surface).
|
|
139
|
+
class: 'shell',
|
|
140
|
+
description: 'Analyse a local image with a vision model: reads the image and sends it plus a ' +
|
|
141
|
+
'prompt as a multimodal turn through the resolveLLMForSystem chokepoint. Returns ' +
|
|
142
|
+
'the model analysis, or aiUnavailable when no credential resolves.',
|
|
143
|
+
toolset: 'media',
|
|
144
|
+
stateless: true,
|
|
145
|
+
available: multimodalAvailable,
|
|
146
|
+
parameters: z.object({
|
|
147
|
+
imagePath: z.string().describe('Absolute path to the image file to analyse.'),
|
|
148
|
+
prompt: z.string().describe('Question / instruction for the vision model about the image.'),
|
|
149
|
+
}),
|
|
150
|
+
execute: async (rawArgs) => {
|
|
151
|
+
const imagePath = String(rawArgs.imagePath);
|
|
152
|
+
const prompt = String(rawArgs.prompt);
|
|
153
|
+
let image;
|
|
154
|
+
try {
|
|
155
|
+
image = await readImage(imagePath);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
return {
|
|
159
|
+
ok: false,
|
|
160
|
+
error: {
|
|
161
|
+
code: 'E_IMAGE_READ_FAILED',
|
|
162
|
+
message: `could not read image at "${imagePath}": ${err instanceof Error ? err.message : String(err)}`,
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const messages = [
|
|
167
|
+
{
|
|
168
|
+
role: 'user',
|
|
169
|
+
content: [
|
|
170
|
+
{ type: 'text', text: prompt },
|
|
171
|
+
{
|
|
172
|
+
type: 'image',
|
|
173
|
+
source: { type: 'base64', data: image.base64, mediaType: image.mediaType },
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
];
|
|
178
|
+
return runChokepointModel(messages, projectRoot);
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
// --- image_generate (prompt → image, via the E9 chokepoint) --------------
|
|
182
|
+
registry.register({
|
|
183
|
+
name: 'image_generate',
|
|
184
|
+
class: 'shell',
|
|
185
|
+
description: 'Generate an image from a text prompt by routing the request through the ' +
|
|
186
|
+
'resolveLLMForSystem chokepoint. When the resolved model cannot synthesize an image, ' +
|
|
187
|
+
'reports unsupported rather than constructing a bespoke image client.',
|
|
188
|
+
toolset: 'media',
|
|
189
|
+
stateless: true,
|
|
190
|
+
available: multimodalAvailable,
|
|
191
|
+
parameters: z.object({
|
|
192
|
+
prompt: z.string().describe('A text description of the image to generate.'),
|
|
193
|
+
}),
|
|
194
|
+
execute: async (rawArgs) => {
|
|
195
|
+
const prompt = String(rawArgs.prompt);
|
|
196
|
+
const messages = [
|
|
197
|
+
{
|
|
198
|
+
role: 'user',
|
|
199
|
+
content: [
|
|
200
|
+
{
|
|
201
|
+
type: 'text',
|
|
202
|
+
text: `Generate an image for the following description. If you cannot produce an image, say so explicitly.\n\n${prompt}`,
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
},
|
|
206
|
+
];
|
|
207
|
+
const result = await runChokepointModel(messages, projectRoot);
|
|
208
|
+
// The chat chokepoint does not emit raw image bytes; surface the model's
|
|
209
|
+
// response and flag that true synthesis is not served by this path.
|
|
210
|
+
return { ...result, unsupported: result.ok ? true : result.unsupported };
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
// --- text_to_speech (text → narration intent, via the E9 chokepoint) -----
|
|
214
|
+
registry.register({
|
|
215
|
+
name: 'text_to_speech',
|
|
216
|
+
class: 'shell',
|
|
217
|
+
description: 'Convert text to speech by routing the request through the resolveLLMForSystem ' +
|
|
218
|
+
'chokepoint. When the resolved model cannot synthesize audio, reports unsupported ' +
|
|
219
|
+
'rather than constructing a bespoke TTS client.',
|
|
220
|
+
toolset: 'media',
|
|
221
|
+
stateless: true,
|
|
222
|
+
available: multimodalAvailable,
|
|
223
|
+
parameters: z.object({
|
|
224
|
+
text: z.string().describe('The text to narrate as speech.'),
|
|
225
|
+
}),
|
|
226
|
+
execute: async (rawArgs) => {
|
|
227
|
+
const text = String(rawArgs.text);
|
|
228
|
+
const messages = [
|
|
229
|
+
{
|
|
230
|
+
role: 'user',
|
|
231
|
+
content: [
|
|
232
|
+
{
|
|
233
|
+
type: 'text',
|
|
234
|
+
text: `Produce speech audio for the following text. If you cannot produce audio, say so explicitly.\n\n${text}`,
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
},
|
|
238
|
+
];
|
|
239
|
+
const result = await runChokepointModel(messages, projectRoot);
|
|
240
|
+
return { ...result, unsupported: result.ok ? true : result.unsupported };
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Self-registration marker (AC1) — the identifier the
|
|
246
|
+
* {@link AgentToolRegistry.discover} bounded source scan greps for. Aliases
|
|
247
|
+
* {@link registerMediaAgentTools} so a future scan-dir discovery (or the built-in
|
|
248
|
+
* aggregator) can call it uniformly with the other agent-tool modules.
|
|
249
|
+
*
|
|
250
|
+
* @param registry - The registry to populate.
|
|
251
|
+
*/
|
|
252
|
+
export function registerAgentTools(registry) {
|
|
253
|
+
registerMediaAgentTools(registry);
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=media-agent-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-agent-tools.js","sourceRoot":"","sources":["../../src/tools/media-agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOzC,MAAM,GAAG,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,GAA4B,EAAE,EAAE,CACrF,GAAG,CAAC,oBAAoB,KAAK,KAAK,IAAI,GAAG,CAAC,YAAY,EAAE,UAAU,KAAK,IAAI,CAAC;AAQ9E,oFAAoF;AACpF,MAAM,kBAAkB,GAAgB,KAAK,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AACjF,CAAC,CAAC;AAEF,6EAA6E;AAC7E,SAAS,gBAAgB,CAAC,IAAY;IACpC,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACpC,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,YAAY,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC;AAiCD;;;;;;;;;;GAUG;AACH,KAAK,UAAU,kBAAkB,CAC/B,QAA4B,EAC5B,WAA+B;IAE/B,gFAAgF;IAChF,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,eAAe,EAAE;QAC1D,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,2EAA2E;QAC3E,8EAA8E;QAC9E,yCAAyC;QACzC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC;YACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC7B,CAAC,CAAC;oBACE,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ;oBACtC,MAAM;oBACN,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;oBAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ;iBACvC;gBACH,CAAC,CAAC,IAAI;YACR,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS;gBACxC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE;gBAC/C,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IACrF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,kEAAkE,CAAC,CAAC;QACtF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAA2B,EAC3B,UAAiC,EAAE;IAEnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAExC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,gBAAgB;QACtB,kFAAkF;QAClF,KAAK,EAAE,OAAO;QACd,WAAW,EACT,iFAAiF;YACjF,kFAAkF;YAClF,mEAAmE;QACrE,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,mBAAmB;QAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAC7E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;SAC5F,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,OAAO,EAA6B,EAAE;YACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,KAA4C,CAAC;YACjD,IAAI,CAAC;gBACH,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE;wBACL,IAAI,EAAE,qBAAqB;wBAC3B,OAAO,EAAE,4BAA4B,SAAS,MAC5C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE;qBACH;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAuB;gBACnC;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;wBAC9B;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;yBAC3E;qBACF;iBACF;aACF,CAAC;YACF,OAAO,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACnD,CAAC;KACF,CAAC,CAAC;IAEH,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO;QACd,WAAW,EACT,0EAA0E;YAC1E,sFAAsF;YACtF,sEAAsE;QACxE,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,mBAAmB;QAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SAC5E,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,OAAO,EAA6B,EAAE;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAuB;gBACnC;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,0GAA0G,MAAM,EAAE;yBACzH;qBACF;iBACF;aACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC/D,yEAAyE;YACzE,oEAAoE;YACpE,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC3E,CAAC;KACF,CAAC,CAAC;IAEH,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO;QACd,WAAW,EACT,gFAAgF;YAChF,mFAAmF;YACnF,gDAAgD;QAClD,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,mBAAmB;QAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SAC5D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,OAAO,EAA6B,EAAE;YACpD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAuB;gBACnC;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mGAAmG,IAAI,EAAE;yBAChH;qBACF;iBACF;aACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC/D,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC3E,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory (BRAIN) agent-tool family — `memory_search` / `memory_observe` /
|
|
3
|
+
* `memory_fetch` / `memory_timeline` (T11947 · M7 · epic T11456 · SG-TOOLS).
|
|
4
|
+
*
|
|
5
|
+
* Surfaces the EXISTING BRAIN cognitive-memory operations to the agent loop as
|
|
6
|
+
* `agent`-toolset tools, mirroring the `cleo memory find|observe|fetch|timeline`
|
|
7
|
+
* CLI verbs. It adds NO new store, NO new SQL, and NO new schema: each tool
|
|
8
|
+
* DELEGATES to the established memory ops in
|
|
9
|
+
* {@link import('../memory/engine-compat.js')}
|
|
10
|
+
* ({@link memoryFind} / {@link memoryObserve} / {@link memoryFetch} /
|
|
11
|
+
* {@link memoryTimeline}), which themselves route through the BRAIN retrieval
|
|
12
|
+
* accessors + the store chokepoint. The agent loop never re-implements brain
|
|
13
|
+
* retrieval — it reuses the SAME path the CLI and the orchestrator use.
|
|
14
|
+
*
|
|
15
|
+
* ## Why a seam, not a hardcoded import (AC5 + Gate-11)
|
|
16
|
+
*
|
|
17
|
+
* The four memory ops are injected through the {@link MemoryOps} seam, defaulting
|
|
18
|
+
* to the real `engine-compat` functions. This lets the unit test inject a FAKE
|
|
19
|
+
* Brain surface and assert delegation + schema validation WITHOUT opening a real
|
|
20
|
+
* `brain.db`. Production binds the real ops. The tools are DEFINED here under
|
|
21
|
+
* `packages/core/src/tools` and CONSUME the memory subsystem — they construct no
|
|
22
|
+
* new atomic primitive (Gate-11).
|
|
23
|
+
*
|
|
24
|
+
* ## Availability (AC4)
|
|
25
|
+
*
|
|
26
|
+
* BRAIN read/write is a LOCAL SQLite operation through the store chokepoint — no
|
|
27
|
+
* credential, no network, no daemon. Every memory tool is therefore
|
|
28
|
+
* {@link ALWAYS_AVAILABLE}: it works daemon-OFF and credential-OFF.
|
|
29
|
+
*
|
|
30
|
+
* ## Gate-13
|
|
31
|
+
*
|
|
32
|
+
* No model/transport/provider client is constructed here — BRAIN search is a
|
|
33
|
+
* local FTS/SQLite query, not an LLM call. There is no chokepoint concern.
|
|
34
|
+
*
|
|
35
|
+
* @epic T11456
|
|
36
|
+
* @task T11947
|
|
37
|
+
* @see ../memory/engine-compat.js — the memory ops this family delegates to
|
|
38
|
+
* @see ./exec-code-agent-tool.js — the injectable-seam + self-registering-marker pattern mirrored here
|
|
39
|
+
*/
|
|
40
|
+
import type { EngineResult } from '../engine-result.js';
|
|
41
|
+
import { type AgentToolRegistry } from './agent-registry.js';
|
|
42
|
+
/**
|
|
43
|
+
* The BRAIN memory operations the family delegates to. Each member has the SAME
|
|
44
|
+
* signature as the corresponding `engine-compat` function — `(params, root?) →
|
|
45
|
+
* Promise<EngineResult>`. Injectable so the unit test can supply a fake Brain
|
|
46
|
+
* surface; defaults to the real ops in production.
|
|
47
|
+
*/
|
|
48
|
+
export interface MemoryOps {
|
|
49
|
+
/** Token-efficient compact search (→ `cleo memory find`). */
|
|
50
|
+
readonly find: (params: {
|
|
51
|
+
query: string;
|
|
52
|
+
limit?: number;
|
|
53
|
+
}, projectRoot?: string) => Promise<EngineResult>;
|
|
54
|
+
/** Append an observation (→ `cleo memory observe`). */
|
|
55
|
+
readonly observe: (params: {
|
|
56
|
+
text: string;
|
|
57
|
+
title?: string;
|
|
58
|
+
}, projectRoot?: string) => Promise<EngineResult>;
|
|
59
|
+
/** Batch fetch entries by ID (→ `cleo memory fetch`). */
|
|
60
|
+
readonly fetch: (params: {
|
|
61
|
+
ids: string[];
|
|
62
|
+
}, projectRoot?: string) => Promise<EngineResult>;
|
|
63
|
+
/** Chronological context around an anchor (→ `cleo memory timeline`). */
|
|
64
|
+
readonly timeline: (params: {
|
|
65
|
+
anchor: string;
|
|
66
|
+
depthBefore?: number;
|
|
67
|
+
depthAfter?: number;
|
|
68
|
+
}, projectRoot?: string) => Promise<EngineResult>;
|
|
69
|
+
}
|
|
70
|
+
/** Options for {@link registerMemoryAgentTools} — all injectable for testing. */
|
|
71
|
+
export interface MemoryAgentToolOptions {
|
|
72
|
+
/** The memory ops seam. Defaults to the real `engine-compat` functions. */
|
|
73
|
+
readonly memory?: MemoryOps;
|
|
74
|
+
/**
|
|
75
|
+
* The project root threaded into every op (defaults to the resolved project
|
|
76
|
+
* root via {@link resolveOrCwd} — never a bare `process.cwd()` in core, T9584).
|
|
77
|
+
*/
|
|
78
|
+
readonly projectRoot?: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Register the memory (BRAIN) agent-tool family into `registry`. Pure
|
|
82
|
+
* registration — no `brain.db` is opened, no query runs here; all of that happens
|
|
83
|
+
* later inside each tool's `execute` through the injected (or default) ops.
|
|
84
|
+
* Import-time side-effect-free.
|
|
85
|
+
*
|
|
86
|
+
* @param registry - The registry to populate.
|
|
87
|
+
* @param options - Injectable memory ops / project root (for testing).
|
|
88
|
+
*/
|
|
89
|
+
export declare function registerMemoryAgentTools(registry: AgentToolRegistry, options?: MemoryAgentToolOptions): void;
|
|
90
|
+
/**
|
|
91
|
+
* Self-registration marker (AC1) — the identifier the
|
|
92
|
+
* {@link AgentToolRegistry.discover} bounded source scan greps for. Aliases
|
|
93
|
+
* {@link registerMemoryAgentTools} so a future scan-dir discovery (or the
|
|
94
|
+
* built-in aggregator) can call it uniformly with the other agent-tool modules.
|
|
95
|
+
*
|
|
96
|
+
* @param registry - The registry to populate.
|
|
97
|
+
*/
|
|
98
|
+
export declare function registerAgentTools(registry: AgentToolRegistry): void;
|
|
99
|
+
//# sourceMappingURL=memory-agent-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-agent-tools.d.ts","sourceRoot":"","sources":["../../src/tools/memory-agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,OAAO,EAAE,KAAK,iBAAiB,EAAoB,MAAM,qBAAqB,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,CACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACzC,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,CAChB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACxC,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3F,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,CACjB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EACrE,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5B;AAUD,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAgBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,sBAA2B,GACnC,IAAI,CAgHN;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAEpE"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory (BRAIN) agent-tool family — `memory_search` / `memory_observe` /
|
|
3
|
+
* `memory_fetch` / `memory_timeline` (T11947 · M7 · epic T11456 · SG-TOOLS).
|
|
4
|
+
*
|
|
5
|
+
* Surfaces the EXISTING BRAIN cognitive-memory operations to the agent loop as
|
|
6
|
+
* `agent`-toolset tools, mirroring the `cleo memory find|observe|fetch|timeline`
|
|
7
|
+
* CLI verbs. It adds NO new store, NO new SQL, and NO new schema: each tool
|
|
8
|
+
* DELEGATES to the established memory ops in
|
|
9
|
+
* {@link import('../memory/engine-compat.js')}
|
|
10
|
+
* ({@link memoryFind} / {@link memoryObserve} / {@link memoryFetch} /
|
|
11
|
+
* {@link memoryTimeline}), which themselves route through the BRAIN retrieval
|
|
12
|
+
* accessors + the store chokepoint. The agent loop never re-implements brain
|
|
13
|
+
* retrieval — it reuses the SAME path the CLI and the orchestrator use.
|
|
14
|
+
*
|
|
15
|
+
* ## Why a seam, not a hardcoded import (AC5 + Gate-11)
|
|
16
|
+
*
|
|
17
|
+
* The four memory ops are injected through the {@link MemoryOps} seam, defaulting
|
|
18
|
+
* to the real `engine-compat` functions. This lets the unit test inject a FAKE
|
|
19
|
+
* Brain surface and assert delegation + schema validation WITHOUT opening a real
|
|
20
|
+
* `brain.db`. Production binds the real ops. The tools are DEFINED here under
|
|
21
|
+
* `packages/core/src/tools` and CONSUME the memory subsystem — they construct no
|
|
22
|
+
* new atomic primitive (Gate-11).
|
|
23
|
+
*
|
|
24
|
+
* ## Availability (AC4)
|
|
25
|
+
*
|
|
26
|
+
* BRAIN read/write is a LOCAL SQLite operation through the store chokepoint — no
|
|
27
|
+
* credential, no network, no daemon. Every memory tool is therefore
|
|
28
|
+
* {@link ALWAYS_AVAILABLE}: it works daemon-OFF and credential-OFF.
|
|
29
|
+
*
|
|
30
|
+
* ## Gate-13
|
|
31
|
+
*
|
|
32
|
+
* No model/transport/provider client is constructed here — BRAIN search is a
|
|
33
|
+
* local FTS/SQLite query, not an LLM call. There is no chokepoint concern.
|
|
34
|
+
*
|
|
35
|
+
* @epic T11456
|
|
36
|
+
* @task T11947
|
|
37
|
+
* @see ../memory/engine-compat.js — the memory ops this family delegates to
|
|
38
|
+
* @see ./exec-code-agent-tool.js — the injectable-seam + self-registering-marker pattern mirrored here
|
|
39
|
+
*/
|
|
40
|
+
import { z } from 'zod';
|
|
41
|
+
import { memoryFetch as realMemoryFetch, memoryFind as realMemoryFind, memoryObserve as realMemoryObserve, memoryTimeline as realMemoryTimeline, } from '../memory/engine-compat.js';
|
|
42
|
+
import { resolveOrCwd } from '../paths.js';
|
|
43
|
+
import { ALWAYS_AVAILABLE } from './agent-registry.js';
|
|
44
|
+
/** The real BRAIN memory ops — the production default for {@link MemoryOps}. */
|
|
45
|
+
const REAL_MEMORY_OPS = {
|
|
46
|
+
find: realMemoryFind,
|
|
47
|
+
observe: realMemoryObserve,
|
|
48
|
+
fetch: realMemoryFetch,
|
|
49
|
+
timeline: realMemoryTimeline,
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Coerce an {@link EngineResult} into the opaque value the loop serialises back
|
|
53
|
+
* to the model. On success the `data` payload is returned as-is; on failure a
|
|
54
|
+
* stable `{ ok: false, error }` shape is returned (the op never throws for an
|
|
55
|
+
* expected failure — it returns a typed `EngineFailure`).
|
|
56
|
+
*
|
|
57
|
+
* @param result - The op's EngineResult.
|
|
58
|
+
* @returns The success data, or a typed failure object.
|
|
59
|
+
*/
|
|
60
|
+
function unwrapEngineResult(result) {
|
|
61
|
+
if (result.success)
|
|
62
|
+
return result.data;
|
|
63
|
+
return { ok: false, error: result.error };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Register the memory (BRAIN) agent-tool family into `registry`. Pure
|
|
67
|
+
* registration — no `brain.db` is opened, no query runs here; all of that happens
|
|
68
|
+
* later inside each tool's `execute` through the injected (or default) ops.
|
|
69
|
+
* Import-time side-effect-free.
|
|
70
|
+
*
|
|
71
|
+
* @param registry - The registry to populate.
|
|
72
|
+
* @param options - Injectable memory ops / project root (for testing).
|
|
73
|
+
*/
|
|
74
|
+
export function registerMemoryAgentTools(registry, options = {}) {
|
|
75
|
+
const memory = options.memory ?? REAL_MEMORY_OPS;
|
|
76
|
+
const projectRoot = resolveOrCwd(options.projectRoot);
|
|
77
|
+
// --- memory_search (→ memoryFind) ----------------------------------------
|
|
78
|
+
registry.register({
|
|
79
|
+
name: 'memory_search',
|
|
80
|
+
// 'search' — a local read-query of the BRAIN store (no side effect beyond reading).
|
|
81
|
+
class: 'search',
|
|
82
|
+
description: 'Search BRAIN cognitive memory (decisions / patterns / learnings / observations) ' +
|
|
83
|
+
'for entries matching a query, returning compact hits (IDs + titles). Use memory_fetch ' +
|
|
84
|
+
'to retrieve full details for a hit.',
|
|
85
|
+
toolset: 'agent',
|
|
86
|
+
stateless: true,
|
|
87
|
+
available: ALWAYS_AVAILABLE,
|
|
88
|
+
parameters: z.object({
|
|
89
|
+
query: z.string().describe('Free-text search query.'),
|
|
90
|
+
limit: z
|
|
91
|
+
.number()
|
|
92
|
+
.int()
|
|
93
|
+
.positive()
|
|
94
|
+
.optional()
|
|
95
|
+
.describe('Maximum number of compact hits to return.'),
|
|
96
|
+
}),
|
|
97
|
+
execute: async (rawArgs) => {
|
|
98
|
+
const query = String(rawArgs.query);
|
|
99
|
+
const limit = typeof rawArgs.limit === 'number' ? rawArgs.limit : undefined;
|
|
100
|
+
const result = await memory.find({ query, limit }, projectRoot);
|
|
101
|
+
return unwrapEngineResult(result);
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
// --- memory_observe (→ memoryObserve) ------------------------------------
|
|
105
|
+
registry.register({
|
|
106
|
+
name: 'memory_observe',
|
|
107
|
+
// 'fs' — persists a row to the local BRAIN store (its strongest side-effect surface).
|
|
108
|
+
class: 'fs',
|
|
109
|
+
description: 'Append a new observation to BRAIN memory (an O-prefixed entry). Use after a ' +
|
|
110
|
+
'non-trivial step to record a learning or decision for future sessions.',
|
|
111
|
+
toolset: 'agent',
|
|
112
|
+
stateless: false,
|
|
113
|
+
available: ALWAYS_AVAILABLE,
|
|
114
|
+
parameters: z.object({
|
|
115
|
+
text: z.string().describe('The observation body to store.'),
|
|
116
|
+
title: z.string().optional().describe('A short title for the observation.'),
|
|
117
|
+
}),
|
|
118
|
+
execute: async (rawArgs) => {
|
|
119
|
+
const text = String(rawArgs.text);
|
|
120
|
+
const title = rawArgs.title === undefined ? undefined : String(rawArgs.title);
|
|
121
|
+
const result = await memory.observe({ text, title }, projectRoot);
|
|
122
|
+
return unwrapEngineResult(result);
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
// --- memory_fetch (→ memoryFetch) ----------------------------------------
|
|
126
|
+
registry.register({
|
|
127
|
+
name: 'memory_fetch',
|
|
128
|
+
class: 'search',
|
|
129
|
+
description: 'Fetch full details for one or more BRAIN entries by ID (e.g. O-abc123, D-def456). ' +
|
|
130
|
+
'Use after memory_search to expand a compact hit.',
|
|
131
|
+
toolset: 'agent',
|
|
132
|
+
stateless: true,
|
|
133
|
+
available: ALWAYS_AVAILABLE,
|
|
134
|
+
parameters: z.object({
|
|
135
|
+
ids: z
|
|
136
|
+
.array(z.string())
|
|
137
|
+
.min(1)
|
|
138
|
+
.describe('One or more BRAIN entry IDs to fetch (e.g. ["O-abc123"]).'),
|
|
139
|
+
}),
|
|
140
|
+
execute: async (rawArgs) => {
|
|
141
|
+
const ids = Array.isArray(rawArgs.ids) ? rawArgs.ids.map(String) : [];
|
|
142
|
+
const result = await memory.fetch({ ids }, projectRoot);
|
|
143
|
+
return unwrapEngineResult(result);
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
// --- memory_timeline (→ memoryTimeline) ----------------------------------
|
|
147
|
+
registry.register({
|
|
148
|
+
name: 'memory_timeline',
|
|
149
|
+
class: 'search',
|
|
150
|
+
description: 'Retrieve chronological context around a BRAIN entry — the entries recorded before ' +
|
|
151
|
+
'and after a given anchor ID — to understand the sequence of observations and decisions.',
|
|
152
|
+
toolset: 'agent',
|
|
153
|
+
stateless: true,
|
|
154
|
+
available: ALWAYS_AVAILABLE,
|
|
155
|
+
parameters: z.object({
|
|
156
|
+
anchor: z.string().describe('The BRAIN entry ID to anchor the timeline window on.'),
|
|
157
|
+
depthBefore: z
|
|
158
|
+
.number()
|
|
159
|
+
.int()
|
|
160
|
+
.nonnegative()
|
|
161
|
+
.optional()
|
|
162
|
+
.describe('How many entries before the anchor to include.'),
|
|
163
|
+
depthAfter: z
|
|
164
|
+
.number()
|
|
165
|
+
.int()
|
|
166
|
+
.nonnegative()
|
|
167
|
+
.optional()
|
|
168
|
+
.describe('How many entries after the anchor to include.'),
|
|
169
|
+
}),
|
|
170
|
+
execute: async (rawArgs) => {
|
|
171
|
+
const anchor = String(rawArgs.anchor);
|
|
172
|
+
const depthBefore = typeof rawArgs.depthBefore === 'number' ? rawArgs.depthBefore : undefined;
|
|
173
|
+
const depthAfter = typeof rawArgs.depthAfter === 'number' ? rawArgs.depthAfter : undefined;
|
|
174
|
+
const result = await memory.timeline({ anchor, depthBefore, depthAfter }, projectRoot);
|
|
175
|
+
return unwrapEngineResult(result);
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Self-registration marker (AC1) — the identifier the
|
|
181
|
+
* {@link AgentToolRegistry.discover} bounded source scan greps for. Aliases
|
|
182
|
+
* {@link registerMemoryAgentTools} so a future scan-dir discovery (or the
|
|
183
|
+
* built-in aggregator) can call it uniformly with the other agent-tool modules.
|
|
184
|
+
*
|
|
185
|
+
* @param registry - The registry to populate.
|
|
186
|
+
*/
|
|
187
|
+
export function registerAgentTools(registry) {
|
|
188
|
+
registerMemoryAgentTools(registry);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=memory-agent-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-agent-tools.js","sourceRoot":"","sources":["../../src/tools/memory-agent-tools.ts"],"names":[],"mappings":"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"}
|