@cleocode/core 2026.6.11 → 2026.6.13
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/conduit/local-transport.d.ts +12 -0
- package/dist/conduit/local-transport.d.ts.map +1 -1
- package/dist/conduit/local-transport.js +53 -23
- package/dist/conduit/local-transport.js.map +1 -1
- package/dist/crypto/credentials.d.ts +37 -0
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +110 -0
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/dispatch/contracts/derive-output-contract.d.ts +86 -0
- package/dist/dispatch/contracts/derive-output-contract.d.ts.map +1 -0
- package/dist/dispatch/contracts/derive-output-contract.js +347 -0
- package/dist/dispatch/contracts/derive-output-contract.js.map +1 -0
- package/dist/dispatch/contracts/ensures-schema.d.ts +77 -0
- package/dist/dispatch/contracts/ensures-schema.d.ts.map +1 -0
- package/dist/dispatch/contracts/ensures-schema.js +91 -0
- package/dist/dispatch/contracts/ensures-schema.js.map +1 -0
- package/dist/dispatch/contracts/output-contracts.d.ts +27 -5
- package/dist/dispatch/contracts/output-contracts.d.ts.map +1 -1
- package/dist/dispatch/contracts/output-contracts.js +29 -6
- package/dist/dispatch/contracts/output-contracts.js.map +1 -1
- package/dist/docs/export-document.js +2309 -1262
- package/dist/docs/export-document.js.map +3 -3
- package/dist/go/driver.d.ts +132 -7
- package/dist/go/driver.d.ts.map +1 -1
- package/dist/go/driver.js +135 -10
- package/dist/go/driver.js.map +1 -1
- package/dist/go/index.d.ts +1 -1
- package/dist/go/index.d.ts.map +1 -1
- package/dist/go/index.js +1 -1
- package/dist/go/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +13 -10
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +11 -11
- package/dist/internal.js.map +1 -1
- package/dist/lifecycle/engine-ops.d.ts.map +1 -1
- package/dist/lifecycle/engine-ops.js +7 -4
- package/dist/lifecycle/engine-ops.js.map +1 -1
- package/dist/lifecycle/ivtr-loop.d.ts +108 -183
- package/dist/lifecycle/ivtr-loop.d.ts.map +1 -1
- package/dist/lifecycle/ivtr-loop.js +207 -522
- package/dist/lifecycle/ivtr-loop.js.map +1 -1
- package/dist/llm/auxiliary-fallback.js +1 -1
- package/dist/llm/auxiliary-fallback.js.map +1 -1
- package/dist/llm/cli-ops.d.ts +14 -1
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +41 -12
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/concrete-session.d.ts.map +1 -1
- package/dist/llm/concrete-session.js +4 -0
- package/dist/llm/concrete-session.js.map +1 -1
- package/dist/llm/credentials.d.ts +35 -0
- package/dist/llm/credentials.d.ts.map +1 -1
- package/dist/llm/credentials.js +49 -0
- package/dist/llm/credentials.js.map +1 -1
- package/dist/llm/index.d.ts +4 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +4 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/pi/gondolin-loader.d.ts +241 -0
- package/dist/llm/pi/gondolin-loader.d.ts.map +1 -0
- package/dist/llm/pi/gondolin-loader.js +195 -0
- package/dist/llm/pi/gondolin-loader.js.map +1 -0
- package/dist/llm/pi/index.d.ts +28 -0
- package/dist/llm/pi/index.d.ts.map +1 -0
- package/dist/llm/pi/index.js +27 -0
- package/dist/llm/pi/index.js.map +1 -0
- package/dist/llm/pi/pi-agent-adapter.d.ts +135 -0
- package/dist/llm/pi/pi-agent-adapter.d.ts.map +1 -0
- package/dist/llm/pi/pi-agent-adapter.js +329 -0
- package/dist/llm/pi/pi-agent-adapter.js.map +1 -0
- package/dist/llm/pi/pi-errors.d.ts +161 -0
- package/dist/llm/pi/pi-errors.d.ts.map +1 -0
- package/dist/llm/pi/pi-errors.js +296 -0
- package/dist/llm/pi/pi-errors.js.map +1 -0
- package/dist/llm/pi/pi-execution-env.d.ts +286 -0
- package/dist/llm/pi/pi-execution-env.d.ts.map +1 -0
- package/dist/llm/pi/pi-execution-env.js +406 -0
- package/dist/llm/pi/pi-execution-env.js.map +1 -0
- package/dist/llm/pi/pi-gondolin-env.d.ts +227 -0
- package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -0
- package/dist/llm/pi/pi-gondolin-env.js +541 -0
- package/dist/llm/pi/pi-gondolin-env.js.map +1 -0
- package/dist/llm/pi/pi-session-storage.d.ts +154 -0
- package/dist/llm/pi/pi-session-storage.d.ts.map +1 -0
- package/dist/llm/pi/pi-session-storage.js +314 -0
- package/dist/llm/pi/pi-session-storage.js.map +1 -0
- package/dist/llm/pi/pi-stream-fn.d.ts +124 -0
- package/dist/llm/pi/pi-stream-fn.d.ts.map +1 -0
- package/dist/llm/pi/pi-stream-fn.js +504 -0
- package/dist/llm/pi/pi-stream-fn.js.map +1 -0
- package/dist/llm/pi/pi-tool-bridge.d.ts +99 -0
- package/dist/llm/pi/pi-tool-bridge.d.ts.map +1 -0
- package/dist/llm/pi/pi-tool-bridge.js +117 -0
- package/dist/llm/pi/pi-tool-bridge.js.map +1 -0
- package/dist/llm/pi/pi-types.d.ts +56 -0
- package/dist/llm/pi/pi-types.d.ts.map +1 -0
- package/dist/llm/pi/pi-types.js +16 -0
- package/dist/llm/pi/pi-types.js.map +1 -0
- package/dist/llm/pi/resolve-execution-env.d.ts +194 -0
- package/dist/llm/pi/resolve-execution-env.d.ts.map +1 -0
- package/dist/llm/pi/resolve-execution-env.js +132 -0
- package/dist/llm/pi/resolve-execution-env.js.map +1 -0
- package/dist/llm/plugin-facade.js +2253 -1151
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/role-executor.d.ts.map +1 -1
- package/dist/llm/role-executor.js +8 -5
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts +46 -14
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +178 -20
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/sealed-credential.d.ts +125 -0
- package/dist/llm/sealed-credential.d.ts.map +1 -0
- package/dist/llm/sealed-credential.js +133 -0
- package/dist/llm/sealed-credential.js.map +1 -0
- package/dist/llm/session-factory.d.ts.map +1 -1
- package/dist/llm/session-factory.js +6 -2
- package/dist/llm/session-factory.js.map +1 -1
- package/dist/llm/system-key.d.ts +67 -0
- package/dist/llm/system-key.d.ts.map +1 -0
- package/dist/llm/system-key.js +87 -0
- package/dist/llm/system-key.js.map +1 -0
- package/dist/llm/system-of-use-registry.d.ts +119 -0
- package/dist/llm/system-of-use-registry.d.ts.map +1 -0
- package/dist/llm/system-of-use-registry.js +200 -0
- package/dist/llm/system-of-use-registry.js.map +1 -0
- package/dist/llm/system-resolver.d.ts +32 -10
- package/dist/llm/system-resolver.d.ts.map +1 -1
- package/dist/llm/system-resolver.js +70 -18
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/memory/brain-writer-thread.d.ts.map +1 -1
- package/dist/memory/brain-writer-thread.js +116 -11
- package/dist/memory/brain-writer-thread.js.map +1 -1
- package/dist/memory/claude-mem-migration.d.ts.map +1 -1
- package/dist/memory/claude-mem-migration.js +21 -0
- package/dist/memory/claude-mem-migration.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
- package/dist/memory/graph-memory-bridge.js +32 -25
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/llm-backend-resolver.js +23 -5
- package/dist/memory/llm-backend-resolver.js.map +1 -1
- package/dist/nexus/migrations/M-split-graph.d.ts.map +1 -1
- package/dist/nexus/migrations/M-split-graph.js +60 -53
- package/dist/nexus/migrations/M-split-graph.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +20 -2
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/release/engine-ops.js +2 -2
- package/dist/release/engine-ops.js.map +1 -1
- package/dist/release/plan.d.ts +4 -6
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +10 -23
- package/dist/release/plan.js.map +1 -1
- package/dist/release/reconcile.d.ts +0 -2
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +43 -50
- package/dist/release/reconcile.js.map +1 -1
- package/dist/release/release-manifest.d.ts.map +1 -1
- package/dist/release/release-manifest.js +4 -1
- package/dist/release/release-manifest.js.map +1 -1
- package/dist/release/verify-provenance.js +20 -20
- package/dist/release/verify-provenance.js.map +1 -1
- package/dist/routing/capability-matrix.d.ts.map +1 -1
- package/dist/routing/capability-matrix.js +0 -57
- package/dist/routing/capability-matrix.js.map +1 -1
- package/dist/selfimprove/budget.d.ts +206 -0
- package/dist/selfimprove/budget.d.ts.map +1 -0
- package/dist/selfimprove/budget.js +203 -0
- package/dist/selfimprove/budget.js.map +1 -0
- package/dist/selfimprove/dhq-adapter.d.ts +105 -0
- package/dist/selfimprove/dhq-adapter.d.ts.map +1 -0
- package/dist/selfimprove/dhq-adapter.js +95 -0
- package/dist/selfimprove/dhq-adapter.js.map +1 -0
- package/dist/selfimprove/draft-pr.d.ts +129 -0
- package/dist/selfimprove/draft-pr.d.ts.map +1 -0
- package/dist/selfimprove/draft-pr.js +158 -0
- package/dist/selfimprove/draft-pr.js.map +1 -0
- package/dist/selfimprove/envelope-diff.d.ts +162 -0
- package/dist/selfimprove/envelope-diff.d.ts.map +1 -0
- package/dist/selfimprove/envelope-diff.js +321 -0
- package/dist/selfimprove/envelope-diff.js.map +1 -0
- package/dist/selfimprove/replay.d.ts +121 -0
- package/dist/selfimprove/replay.d.ts.map +1 -0
- package/dist/selfimprove/replay.js +109 -0
- package/dist/selfimprove/replay.js.map +1 -0
- package/dist/selfimprove/run-loop.d.ts +148 -0
- package/dist/selfimprove/run-loop.d.ts.map +1 -0
- package/dist/selfimprove/run-loop.js +240 -0
- package/dist/selfimprove/run-loop.js.map +1 -0
- package/dist/selfimprove/scenario.d.ts +145 -0
- package/dist/selfimprove/scenario.d.ts.map +1 -0
- package/dist/selfimprove/scenario.js +243 -0
- package/dist/selfimprove/scenario.js.map +1 -0
- package/dist/sentient/daemon-entry.js +5 -0
- package/dist/sentient/daemon-entry.js.map +1 -1
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +19 -0
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/hygiene-scan.d.ts.map +1 -1
- package/dist/sentient/hygiene-scan.js +14 -6
- package/dist/sentient/hygiene-scan.js.map +1 -1
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +13 -9
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/connection-session-handle.d.ts +161 -0
- package/dist/sessions/connection-session-handle.d.ts.map +1 -0
- package/dist/sessions/connection-session-handle.js +168 -0
- package/dist/sessions/connection-session-handle.js.map +1 -0
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +9 -0
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +4 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +31 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-id.d.ts +34 -0
- package/dist/sessions/session-id.d.ts.map +1 -1
- package/dist/sessions/session-id.js +37 -0
- package/dist/sessions/session-id.js.map +1 -1
- package/dist/sessions/session-manifest-mirror.d.ts +115 -0
- package/dist/sessions/session-manifest-mirror.d.ts.map +1 -0
- package/dist/sessions/session-manifest-mirror.js +250 -0
- package/dist/sessions/session-manifest-mirror.js.map +1 -0
- package/dist/sessions/session-switch.d.ts.map +1 -1
- package/dist/sessions/session-switch.js +5 -2
- package/dist/sessions/session-switch.js.map +1 -1
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +2 -0
- package/dist/store/converters.js.map +1 -1
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +2 -0
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +87 -47
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/pi-session-store.d.ts +151 -0
- package/dist/store/pi-session-store.d.ts.map +1 -0
- package/dist/store/pi-session-store.js +166 -0
- package/dist/store/pi-session-store.js.map +1 -0
- package/dist/store/safety-data-accessor.d.ts +1 -0
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +5 -0
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schema/cleo-global/accounts.d.ts +357 -0
- package/dist/store/schema/cleo-global/accounts.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/accounts.js +136 -0
- package/dist/store/schema/cleo-global/accounts.js.map +1 -0
- package/dist/store/schema/cleo-global/index.d.ts +2 -0
- package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/index.js +2 -0
- package/dist/store/schema/cleo-global/index.js.map +1 -1
- package/dist/store/schema/cleo-global/session-manifest.d.ts +217 -0
- package/dist/store/schema/cleo-global/session-manifest.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/session-manifest.js +99 -0
- package/dist/store/schema/cleo-global/session-manifest.js.map +1 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts +16 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.js +14 -0
- package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
- package/dist/store/schema/tasks.d.ts +16 -0
- package/dist/store/schema/tasks.d.ts.map +1 -1
- package/dist/store/schema/tasks.js +10 -0
- package/dist/store/schema/tasks.js.map +1 -1
- package/dist/store/selfimprove-dhq-schema.d.ts +284 -0
- package/dist/store/selfimprove-dhq-schema.d.ts.map +1 -0
- package/dist/store/selfimprove-dhq-schema.js +128 -0
- package/dist/store/selfimprove-dhq-schema.js.map +1 -0
- package/dist/store/selfimprove-dhq-store.d.ts +175 -0
- package/dist/store/selfimprove-dhq-store.d.ts.map +1 -0
- package/dist/store/selfimprove-dhq-store.js +182 -0
- package/dist/store/selfimprove-dhq-store.js.map +1 -0
- package/dist/store/session-store.d.ts +52 -13
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +71 -13
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +7 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +4 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +14 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +1 -0
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +5 -0
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +94 -62
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/writer-lease-schema.d.ts +392 -0
- package/dist/store/writer-lease-schema.d.ts.map +1 -0
- package/dist/store/writer-lease-schema.js +142 -0
- package/dist/store/writer-lease-schema.js.map +1 -0
- package/dist/store/writer-lease.d.ts +368 -0
- package/dist/store/writer-lease.d.ts.map +1 -0
- package/dist/store/writer-lease.js +1002 -0
- package/dist/store/writer-lease.js.map +1 -0
- package/dist/task-tools/describe-schema.d.ts +4 -2
- package/dist/task-tools/describe-schema.d.ts.map +1 -1
- package/dist/task-tools/describe-schema.js +9 -3
- package/dist/task-tools/describe-schema.js.map +1 -1
- package/dist/tasks/backfill-child-projections.d.ts.map +1 -1
- package/dist/tasks/backfill-child-projections.js +14 -9
- package/dist/tasks/backfill-child-projections.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +7 -10
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +14 -7
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +10 -4
- package/dist/telemetry/index.js.map +1 -1
- package/dist/tools/agent-registry.d.ts +250 -0
- package/dist/tools/agent-registry.d.ts.map +1 -0
- package/dist/tools/agent-registry.js +292 -0
- package/dist/tools/agent-registry.js.map +1 -0
- package/dist/tools/agent-tool-families.d.ts +107 -0
- package/dist/tools/agent-tool-families.d.ts.map +1 -0
- package/dist/tools/agent-tool-families.js +527 -0
- package/dist/tools/agent-tool-families.js.map +1 -0
- package/dist/tools/browser-driver.d.ts +183 -0
- package/dist/tools/browser-driver.d.ts.map +1 -0
- package/dist/tools/browser-driver.js +242 -0
- package/dist/tools/browser-driver.js.map +1 -0
- package/dist/tools/builtin-agent-tools.d.ts +36 -0
- package/dist/tools/builtin-agent-tools.d.ts.map +1 -0
- package/dist/tools/builtin-agent-tools.js +150 -0
- package/dist/tools/builtin-agent-tools.js.map +1 -0
- package/dist/tools/dispatch.d.ts +370 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +505 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/env-scrub.d.ts +93 -0
- package/dist/tools/env-scrub.d.ts.map +1 -0
- package/dist/tools/env-scrub.js +176 -0
- package/dist/tools/env-scrub.js.map +1 -0
- package/dist/tools/fs.d.ts +30 -0
- package/dist/tools/fs.d.ts.map +1 -1
- package/dist/tools/fs.js +55 -2
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/guard.d.ts +15 -0
- package/dist/tools/guard.d.ts.map +1 -1
- package/dist/tools/guard.js +49 -12
- package/dist/tools/guard.js.map +1 -1
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +37 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/pty.d.ts +45 -0
- package/dist/tools/pty.d.ts.map +1 -0
- package/dist/tools/pty.js +166 -0
- package/dist/tools/pty.js.map +1 -0
- package/dist/tools/schema-gen.d.ts +57 -0
- package/dist/tools/schema-gen.d.ts.map +1 -0
- package/dist/tools/schema-gen.js +52 -0
- package/dist/tools/schema-gen.js.map +1 -0
- package/dist/tools/shell.d.ts +12 -0
- package/dist/tools/shell.d.ts.map +1 -1
- package/dist/tools/shell.js +14 -1
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/web-agent-tools.d.ts +72 -0
- package/dist/tools/web-agent-tools.d.ts.map +1 -0
- package/dist/tools/web-agent-tools.js +393 -0
- package/dist/tools/web-agent-tools.js.map +1 -0
- package/dist/tools/web-search-backends.d.ts +156 -0
- package/dist/tools/web-search-backends.d.ts.map +1 -0
- package/dist/tools/web-search-backends.js +290 -0
- package/dist/tools/web-search-backends.js.map +1 -0
- package/dist/validation/ops.d.ts +1 -15
- package/dist/validation/ops.d.ts.map +1 -1
- package/dist/validation/ops.js +0 -20
- package/dist/validation/ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260607000000_t11891-writer-leases/migration.sql +55 -0
- package/migrations/drizzle-cleo-global/20260607010000_t11639-session-manifest/migration.sql +43 -0
- package/migrations/drizzle-cleo-global/20260608000000_t11899-pi-session-tree/migration.sql +52 -0
- package/migrations/drizzle-cleo-global/20260608010000_t11709-accounts-credential-pool/migration.sql +72 -0
- package/migrations/drizzle-cleo-global/20260608020000_t11889-selfimprove-dhq/migration.sql +64 -0
- package/migrations/drizzle-cleo-project/20260606000000_t11884-restore-prefixed-task-triggers/migration.sql +272 -0
- package/migrations/drizzle-cleo-project/20260606000000_t11884-restore-prefixed-task-triggers/revert.sql +29 -0
- package/migrations/drizzle-cleo-project/20260606000100_t11883-tasks-releases-version-unique/migration.sql +21 -0
- package/migrations/drizzle-cleo-project/20260606000100_t11883-tasks-releases-version-unique/revert.sql +4 -0
- package/migrations/drizzle-cleo-project/20260607000000_t11891-writer-leases/migration.sql +55 -0
- package/migrations/drizzle-cleo-project/20260607010000_t11639-session-parent/migration.sql +22 -0
- package/migrations/drizzle-cleo-project/20260608000000_t11899-pi-session-tree/migration.sql +52 -0
- package/migrations/drizzle-cleo-project/20260608020000_t11889-selfimprove-dhq/migration.sql +64 -0
- package/package.json +15 -13
- package/dist/lifecycle/chain-composition.d.ts +0 -30
- package/dist/lifecycle/chain-composition.d.ts.map +0 -1
- package/dist/lifecycle/chain-composition.js +0 -152
- package/dist/lifecycle/chain-composition.js.map +0 -1
- package/dist/lifecycle/chain-store.d.ts +0 -70
- package/dist/lifecycle/chain-store.d.ts.map +0 -1
- package/dist/lifecycle/chain-store.js +0 -246
- package/dist/lifecycle/chain-store.js.map +0 -1
- package/dist/lifecycle/default-chain.d.ts +0 -39
- package/dist/lifecycle/default-chain.d.ts.map +0 -1
- package/dist/lifecycle/default-chain.js +0 -176
- package/dist/lifecycle/default-chain.js.map +0 -1
- package/dist/lifecycle/tessera-engine.d.ts +0 -48
- package/dist/lifecycle/tessera-engine.d.ts.map +0 -1
- package/dist/lifecycle/tessera-engine.js +0 -249
- package/dist/lifecycle/tessera-engine.js.map +0 -1
- package/dist/release/provenance-fk.d.ts +0 -74
- package/dist/release/provenance-fk.d.ts.map +0 -1
- package/dist/release/provenance-fk.js +0 -122
- package/dist/release/provenance-fk.js.map +0 -1
- package/dist/validation/chain-validation.d.ts +0 -43
- package/dist/validation/chain-validation.d.ts.map +0 -1
- package/dist/validation/chain-validation.js +0 -146
- package/dist/validation/chain-validation.js.map +0 -1
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web + browser agent-tool FAMILY — registration (T1742 · epic T11456 · SG-TOOLS).
|
|
3
|
+
*
|
|
4
|
+
* Registers the `web` toolset into the {@link ./agent-registry.js |
|
|
5
|
+
* AgentToolRegistry}, on top of the terminal/file/search/git families
|
|
6
|
+
* ({@link ./agent-tool-families.js}):
|
|
7
|
+
*
|
|
8
|
+
* - **AC1** `web_search` — pluggable, backend-agnostic search
|
|
9
|
+
* ({@link ./web-search-backends.js}); graceful `unavailable` result when no
|
|
10
|
+
* backend can answer. NO hard paid-API dependency.
|
|
11
|
+
* - **AC2** `web_extract` — fetch a URL + convert HTML to markdown.
|
|
12
|
+
* - **AC3** `browser_navigate` — Playwright (lazily, optionally loaded).
|
|
13
|
+
* - **AC4** `browser_click` / `browser_type` / `browser_press`.
|
|
14
|
+
* - **AC5** `browser_snapshot` — accessibility tree.
|
|
15
|
+
* - **AC6** `browser_vision` — screenshot + AI analysis routed THROUGH the E9
|
|
16
|
+
* `resolveLLMForSystem` chokepoint + sealed-credential handle (never a raw
|
|
17
|
+
* provider call).
|
|
18
|
+
* - **AC7** `browser_scroll` up / down.
|
|
19
|
+
* - **AC8** all registered; the browser tools' `available()` returns `false`
|
|
20
|
+
* (with an install hint) when Playwright is absent.
|
|
21
|
+
*
|
|
22
|
+
* Browser tools share ONE lazily-launched {@link BrowserSession} per registration
|
|
23
|
+
* (a closure cell), so the optional Playwright load happens at most once per run.
|
|
24
|
+
* The web tools' network egress flows through an injectable {@link HttpFetch}; the
|
|
25
|
+
* vision AI call flows through the single E9 chokepoint — neither bypasses the
|
|
26
|
+
* resolver / credential layer. Import-time side-effect-free (NO top-level
|
|
27
|
+
* playwright import).
|
|
28
|
+
*
|
|
29
|
+
* @epic T11456
|
|
30
|
+
* @task T1742
|
|
31
|
+
* @see ./browser-driver.js — the optional-Playwright lazy-load backend
|
|
32
|
+
* @see ./web-search-backends.js — the pluggable search backends + HTML→markdown
|
|
33
|
+
*/
|
|
34
|
+
import { z } from 'zod';
|
|
35
|
+
import { getLogger } from '../logger.js';
|
|
36
|
+
import { BrowserSession, PLAYWRIGHT_INSTALL_HINT } from './browser-driver.js';
|
|
37
|
+
import { defaultHttpFetch, fetchAndExtract, resolveSearchBackends, runSearch, } from './web-search-backends.js';
|
|
38
|
+
const log = getLogger('tool-web-agent');
|
|
39
|
+
/**
|
|
40
|
+
* Available only when outbound network egress is permitted. When the context
|
|
41
|
+
* does not declare egress (`networkEgressAllowed === undefined`) the tool is
|
|
42
|
+
* permitted — the registry default is permissive; a context that explicitly sets
|
|
43
|
+
* `false` hides it (AC5/availability).
|
|
44
|
+
*/
|
|
45
|
+
const networkAvailable = (ctx) => ctx.networkEgressAllowed !== false;
|
|
46
|
+
/**
|
|
47
|
+
* Available only when the optional Playwright capability is present in the
|
|
48
|
+
* context. The browser tools are ALWAYS registered (AC8), but report unavailable
|
|
49
|
+
* — surfacing {@link PLAYWRIGHT_INSTALL_HINT} in their description — until a
|
|
50
|
+
* context advertises `capabilities.playwright === true`. The registration helper
|
|
51
|
+
* probes Playwright once and stamps that flag, so an absent optional dep simply
|
|
52
|
+
* leaves the browser tools hidden rather than crashing.
|
|
53
|
+
*/
|
|
54
|
+
const playwrightAvailable = (ctx) => ctx.capabilities?.playwright === true && ctx.networkEgressAllowed !== false;
|
|
55
|
+
/**
|
|
56
|
+
* Run the `browser_vision` AI analysis: capture a screenshot, then resolve an
|
|
57
|
+
* LLM through the SINGLE E9 chokepoint (`resolveLLMForSystem`) and send the
|
|
58
|
+
* screenshot as a multimodal user turn. The plaintext credential is materialized
|
|
59
|
+
* from the sealed handle ONLY at the wire (inside `ModelRunner.build`), never
|
|
60
|
+
* surfaced up the stack — and there is NO raw provider/transport construction
|
|
61
|
+
* here (Gate-13). Returns `aiUnavailable: true` (with the screenshot still
|
|
62
|
+
* captured) when no credential resolves — graceful degradation, not an error.
|
|
63
|
+
*
|
|
64
|
+
* @param browser - The shared browser session.
|
|
65
|
+
* @param prompt - The analysis instruction.
|
|
66
|
+
* @param fullPage - Capture the full page rather than the viewport.
|
|
67
|
+
* @param projectRoot - Project root for the resolver.
|
|
68
|
+
* @returns The {@link BrowserVisionResult}.
|
|
69
|
+
*/
|
|
70
|
+
async function runBrowserVision(browser, prompt, fullPage, projectRoot) {
|
|
71
|
+
const shot = await browser.screenshot(fullPage);
|
|
72
|
+
const base = { url: shot.url, title: shot.title };
|
|
73
|
+
// E9 resolution chokepoint — the ONLY route to an LLM credential. Never throws.
|
|
74
|
+
const { resolveLLMForSystem } = await import('../llm/system-resolver.js');
|
|
75
|
+
const resolved = await resolveLLMForSystem('task-executor', {
|
|
76
|
+
...(projectRoot !== undefined ? { projectRoot } : {}),
|
|
77
|
+
});
|
|
78
|
+
if (!resolved.sealedCredential) {
|
|
79
|
+
// No credential reachable — return the screenshot-only result (graceful).
|
|
80
|
+
return { ...base, analysis: null, aiUnavailable: true };
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
// Build the wire surfaces via the single SSoT ModelRunner (Gate-13: no raw
|
|
84
|
+
// transport / provider construction at this call-site). The descriptor's
|
|
85
|
+
// token is materialized from the sealed handle inside ModelRunner only.
|
|
86
|
+
const { ModelRunner } = await import('../llm/model-runner.js');
|
|
87
|
+
const apiKey = (await resolved.sealedCredential.fetch()).value;
|
|
88
|
+
const built = await ModelRunner.build({
|
|
89
|
+
provider: resolved.provider,
|
|
90
|
+
model: resolved.model,
|
|
91
|
+
credential: resolved.credential
|
|
92
|
+
? {
|
|
93
|
+
provider: resolved.credential.provider,
|
|
94
|
+
apiKey,
|
|
95
|
+
source: resolved.credential.source,
|
|
96
|
+
authType: resolved.credential.authType,
|
|
97
|
+
}
|
|
98
|
+
: null,
|
|
99
|
+
source: resolved.source,
|
|
100
|
+
...(resolved.credentialLabel !== undefined
|
|
101
|
+
? { credentialLabel: resolved.credentialLabel }
|
|
102
|
+
: {}),
|
|
103
|
+
apiMode: resolved.apiMode,
|
|
104
|
+
baseUrl: resolved.baseUrl,
|
|
105
|
+
authType: resolved.authType,
|
|
106
|
+
...(resolved.capabilities !== undefined ? { capabilities: resolved.capabilities } : {}),
|
|
107
|
+
});
|
|
108
|
+
// A single multimodal user turn: the instruction text + the screenshot as a
|
|
109
|
+
// native image block (transports that cannot do images degrade per imageMode).
|
|
110
|
+
const messages = [
|
|
111
|
+
{
|
|
112
|
+
role: 'user',
|
|
113
|
+
content: [
|
|
114
|
+
{ type: 'text', text: prompt },
|
|
115
|
+
{
|
|
116
|
+
type: 'image',
|
|
117
|
+
source: { type: 'base64', data: shot.base64Png, mediaType: 'image/png' },
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
const response = await built.session.send(messages);
|
|
123
|
+
return {
|
|
124
|
+
...base,
|
|
125
|
+
analysis: response.content,
|
|
126
|
+
model: resolved.model,
|
|
127
|
+
aiUnavailable: false,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
log.warn({ err }, 'browser_vision: AI analysis failed — returning screenshot-only result');
|
|
132
|
+
return { ...base, analysis: null, model: resolved.model, aiUnavailable: true };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Register the web + browser agent-tool family into `registry`. Pure
|
|
137
|
+
* registration — no network, no browser launch, no scan; side effects happen
|
|
138
|
+
* later through the injected {@link HttpFetch} / {@link BrowserSession}.
|
|
139
|
+
*
|
|
140
|
+
* The browser tools are registered with a `playwright`-gated availability
|
|
141
|
+
* predicate (AC8): present in the registry but hidden by `available()` until a
|
|
142
|
+
* context advertises the optional Playwright capability.
|
|
143
|
+
*
|
|
144
|
+
* @param registry - The registry to populate.
|
|
145
|
+
* @param options - Injectable backends (HTTP fetch, browser session, searxng URL).
|
|
146
|
+
*/
|
|
147
|
+
export function registerWebAgentTools(registry, options = {}) {
|
|
148
|
+
const http = options.http ?? defaultHttpFetch;
|
|
149
|
+
// ONE browser session shared by every browser tool in this registration — the
|
|
150
|
+
// optional Playwright load happens at most once. Constructing it is free (no
|
|
151
|
+
// import until the first navigation).
|
|
152
|
+
const browser = options.browser ?? new BrowserSession();
|
|
153
|
+
const searxngUrl = options.searxngUrl ?? process.env.SEARXNG_URL;
|
|
154
|
+
const projectRoot = options.projectRoot;
|
|
155
|
+
// --- AC1: web_search (pluggable backends, graceful when unconfigured) ----
|
|
156
|
+
registry.register({
|
|
157
|
+
name: 'web_search',
|
|
158
|
+
class: 'net',
|
|
159
|
+
description: 'Search the web via a pluggable backend (DuckDuckGo / SearXNG — no API key required). ' +
|
|
160
|
+
'Returns ranked results, or an `unavailable` result when no backend can answer.',
|
|
161
|
+
toolset: 'web',
|
|
162
|
+
stateless: true,
|
|
163
|
+
available: networkAvailable,
|
|
164
|
+
parameters: z.object({
|
|
165
|
+
query: z.string().describe('Free-text search query.'),
|
|
166
|
+
maxResults: z.number().int().positive().optional().describe('Max results (default 10).'),
|
|
167
|
+
backend: z
|
|
168
|
+
.enum(['duckduckgo', 'searxng', 'auto'])
|
|
169
|
+
.optional()
|
|
170
|
+
.describe("Preferred backend: 'duckduckgo', 'searxng', or 'auto' (default)."),
|
|
171
|
+
}),
|
|
172
|
+
execute: async (rawArgs) => {
|
|
173
|
+
const backend = rawArgs.backend === 'duckduckgo' ||
|
|
174
|
+
rawArgs.backend === 'searxng' ||
|
|
175
|
+
rawArgs.backend === 'auto'
|
|
176
|
+
? rawArgs.backend
|
|
177
|
+
: undefined;
|
|
178
|
+
const input = {
|
|
179
|
+
query: String(rawArgs.query),
|
|
180
|
+
maxResults: typeof rawArgs.maxResults === 'number' ? rawArgs.maxResults : undefined,
|
|
181
|
+
backend,
|
|
182
|
+
};
|
|
183
|
+
const backends = resolveSearchBackends(input, searxngUrl);
|
|
184
|
+
if (backends.length === 0) {
|
|
185
|
+
return {
|
|
186
|
+
query: input.query,
|
|
187
|
+
results: [],
|
|
188
|
+
backend: null,
|
|
189
|
+
unavailable: true,
|
|
190
|
+
reason: 'no configured web-search backend',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const outcome = await runSearch(input, backends, http);
|
|
194
|
+
if (outcome === null) {
|
|
195
|
+
return {
|
|
196
|
+
query: input.query,
|
|
197
|
+
results: [],
|
|
198
|
+
backend: null,
|
|
199
|
+
unavailable: true,
|
|
200
|
+
reason: 'every web-search backend failed',
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
query: input.query,
|
|
205
|
+
results: outcome.results,
|
|
206
|
+
backend: outcome.backend,
|
|
207
|
+
unavailable: false,
|
|
208
|
+
};
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
// --- AC2: web_extract (URL → markdown) ----------------------------------
|
|
212
|
+
registry.register({
|
|
213
|
+
name: 'web_extract',
|
|
214
|
+
class: 'net',
|
|
215
|
+
description: 'Fetch a URL and convert its HTML content to markdown.',
|
|
216
|
+
toolset: 'web',
|
|
217
|
+
stateless: true,
|
|
218
|
+
available: networkAvailable,
|
|
219
|
+
parameters: z.object({
|
|
220
|
+
url: z.string().describe('Absolute URL to fetch and convert.'),
|
|
221
|
+
timeoutMs: z
|
|
222
|
+
.number()
|
|
223
|
+
.int()
|
|
224
|
+
.positive()
|
|
225
|
+
.optional()
|
|
226
|
+
.describe('Fetch timeout in ms (default 30000).'),
|
|
227
|
+
maxChars: z
|
|
228
|
+
.number()
|
|
229
|
+
.int()
|
|
230
|
+
.positive()
|
|
231
|
+
.optional()
|
|
232
|
+
.describe('Cap on markdown length in characters (default 100000).'),
|
|
233
|
+
}),
|
|
234
|
+
execute: async (rawArgs) => {
|
|
235
|
+
const url = String(rawArgs.url);
|
|
236
|
+
return fetchAndExtract(url, http, {
|
|
237
|
+
timeoutMs: typeof rawArgs.timeoutMs === 'number' ? rawArgs.timeoutMs : undefined,
|
|
238
|
+
maxChars: typeof rawArgs.maxChars === 'number' ? rawArgs.maxChars : undefined,
|
|
239
|
+
});
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
// --- AC3: browser_navigate ----------------------------------------------
|
|
243
|
+
registry.register({
|
|
244
|
+
name: 'browser_navigate',
|
|
245
|
+
class: 'shell',
|
|
246
|
+
description: `Navigate a headless browser to a URL (Playwright). ${PLAYWRIGHT_INSTALL_HINT}`,
|
|
247
|
+
toolset: 'web',
|
|
248
|
+
stateless: false,
|
|
249
|
+
available: playwrightAvailable,
|
|
250
|
+
parameters: z.object({
|
|
251
|
+
url: z.string().describe('Absolute URL to navigate to.'),
|
|
252
|
+
waitUntil: z
|
|
253
|
+
.enum(['load', 'domcontentloaded', 'networkidle'])
|
|
254
|
+
.optional()
|
|
255
|
+
.describe("When navigation is complete (default 'load')."),
|
|
256
|
+
timeoutMs: z
|
|
257
|
+
.number()
|
|
258
|
+
.int()
|
|
259
|
+
.positive()
|
|
260
|
+
.optional()
|
|
261
|
+
.describe('Navigation timeout in ms (default 30000).'),
|
|
262
|
+
}),
|
|
263
|
+
execute: async (rawArgs) => browser.navigate({
|
|
264
|
+
url: String(rawArgs.url),
|
|
265
|
+
waitUntil: rawArgs.waitUntil === 'load' ||
|
|
266
|
+
rawArgs.waitUntil === 'domcontentloaded' ||
|
|
267
|
+
rawArgs.waitUntil === 'networkidle'
|
|
268
|
+
? rawArgs.waitUntil
|
|
269
|
+
: undefined,
|
|
270
|
+
timeoutMs: typeof rawArgs.timeoutMs === 'number' ? rawArgs.timeoutMs : undefined,
|
|
271
|
+
}),
|
|
272
|
+
});
|
|
273
|
+
// --- AC4: browser_click / browser_type / browser_press ------------------
|
|
274
|
+
registry.register({
|
|
275
|
+
name: 'browser_click',
|
|
276
|
+
class: 'shell',
|
|
277
|
+
description: `Click an element by selector in the browser. ${PLAYWRIGHT_INSTALL_HINT}`,
|
|
278
|
+
toolset: 'web',
|
|
279
|
+
stateless: false,
|
|
280
|
+
available: playwrightAvailable,
|
|
281
|
+
parameters: z.object({
|
|
282
|
+
selector: z.string().describe('CSS / Playwright selector for the element to click.'),
|
|
283
|
+
timeoutMs: z
|
|
284
|
+
.number()
|
|
285
|
+
.int()
|
|
286
|
+
.positive()
|
|
287
|
+
.optional()
|
|
288
|
+
.describe('Action timeout in ms (default 15000).'),
|
|
289
|
+
}),
|
|
290
|
+
execute: async (rawArgs) => {
|
|
291
|
+
const state = await browser.click(String(rawArgs.selector), typeof rawArgs.timeoutMs === 'number' ? rawArgs.timeoutMs : undefined);
|
|
292
|
+
return { ...state, action: 'click' };
|
|
293
|
+
},
|
|
294
|
+
});
|
|
295
|
+
registry.register({
|
|
296
|
+
name: 'browser_type',
|
|
297
|
+
class: 'shell',
|
|
298
|
+
description: `Type text into an input element by selector. ${PLAYWRIGHT_INSTALL_HINT}`,
|
|
299
|
+
toolset: 'web',
|
|
300
|
+
stateless: false,
|
|
301
|
+
available: playwrightAvailable,
|
|
302
|
+
parameters: z.object({
|
|
303
|
+
selector: z.string().describe('CSS / Playwright selector for the input element.'),
|
|
304
|
+
text: z.string().describe('Text to type into the element.'),
|
|
305
|
+
clear: z.boolean().optional().describe('Clear the field before typing (default true).'),
|
|
306
|
+
timeoutMs: z
|
|
307
|
+
.number()
|
|
308
|
+
.int()
|
|
309
|
+
.positive()
|
|
310
|
+
.optional()
|
|
311
|
+
.describe('Action timeout in ms (default 15000).'),
|
|
312
|
+
}),
|
|
313
|
+
execute: async (rawArgs) => {
|
|
314
|
+
const state = await browser.type(String(rawArgs.selector), String(rawArgs.text), typeof rawArgs.timeoutMs === 'number' ? rawArgs.timeoutMs : undefined);
|
|
315
|
+
return { ...state, action: 'type' };
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
registry.register({
|
|
319
|
+
name: 'browser_press',
|
|
320
|
+
class: 'shell',
|
|
321
|
+
description: `Press a key or chord (e.g. Enter, Control+A) in the browser. ${PLAYWRIGHT_INSTALL_HINT}`,
|
|
322
|
+
toolset: 'web',
|
|
323
|
+
stateless: false,
|
|
324
|
+
available: playwrightAvailable,
|
|
325
|
+
parameters: z.object({
|
|
326
|
+
key: z.string().describe('Key or chord in Playwright syntax (e.g. Enter, Control+A).'),
|
|
327
|
+
selector: z.string().optional().describe('Optional selector to focus before pressing.'),
|
|
328
|
+
timeoutMs: z
|
|
329
|
+
.number()
|
|
330
|
+
.int()
|
|
331
|
+
.positive()
|
|
332
|
+
.optional()
|
|
333
|
+
.describe('Focus timeout in ms (default 15000).'),
|
|
334
|
+
}),
|
|
335
|
+
execute: async (rawArgs) => {
|
|
336
|
+
const state = await browser.press(String(rawArgs.key), rawArgs.selector === undefined ? undefined : String(rawArgs.selector), typeof rawArgs.timeoutMs === 'number' ? rawArgs.timeoutMs : undefined);
|
|
337
|
+
return { ...state, action: 'press' };
|
|
338
|
+
},
|
|
339
|
+
});
|
|
340
|
+
// --- AC5: browser_snapshot (accessibility tree) -------------------------
|
|
341
|
+
registry.register({
|
|
342
|
+
name: 'browser_snapshot',
|
|
343
|
+
class: 'shell',
|
|
344
|
+
description: `Capture the page's accessibility tree. ${PLAYWRIGHT_INSTALL_HINT}`,
|
|
345
|
+
toolset: 'web',
|
|
346
|
+
stateless: false,
|
|
347
|
+
available: playwrightAvailable,
|
|
348
|
+
parameters: z.object({}),
|
|
349
|
+
execute: async () => browser.snapshot(),
|
|
350
|
+
});
|
|
351
|
+
// --- AC7: browser_scroll (up / down) ------------------------------------
|
|
352
|
+
registry.register({
|
|
353
|
+
name: 'browser_scroll',
|
|
354
|
+
class: 'shell',
|
|
355
|
+
description: `Scroll the page up or down. ${PLAYWRIGHT_INSTALL_HINT}`,
|
|
356
|
+
toolset: 'web',
|
|
357
|
+
stateless: false,
|
|
358
|
+
available: playwrightAvailable,
|
|
359
|
+
parameters: z.object({
|
|
360
|
+
direction: z.enum(['up', 'down']).describe('Scroll direction.'),
|
|
361
|
+
amountPx: z
|
|
362
|
+
.number()
|
|
363
|
+
.int()
|
|
364
|
+
.positive()
|
|
365
|
+
.optional()
|
|
366
|
+
.describe('Pixels to scroll (default ~one viewport).'),
|
|
367
|
+
}),
|
|
368
|
+
execute: async (rawArgs) => {
|
|
369
|
+
const direction = rawArgs.direction === 'up' ? 'up' : 'down';
|
|
370
|
+
const state = await browser.scroll(direction, typeof rawArgs.amountPx === 'number' ? rawArgs.amountPx : undefined);
|
|
371
|
+
return { ...state, direction };
|
|
372
|
+
},
|
|
373
|
+
});
|
|
374
|
+
// --- AC6: browser_vision (screenshot + AI analysis via the E9 chokepoint) -
|
|
375
|
+
registry.register({
|
|
376
|
+
name: 'browser_vision',
|
|
377
|
+
class: 'shell',
|
|
378
|
+
description: 'Screenshot the current page and analyse it with a vision model. ' +
|
|
379
|
+
`The AI call routes through the resolveLLMForSystem chokepoint. ${PLAYWRIGHT_INSTALL_HINT}`,
|
|
380
|
+
toolset: 'web',
|
|
381
|
+
stateless: false,
|
|
382
|
+
available: playwrightAvailable,
|
|
383
|
+
parameters: z.object({
|
|
384
|
+
prompt: z.string().describe('Question / instruction for the vision model about the page.'),
|
|
385
|
+
fullPage: z
|
|
386
|
+
.boolean()
|
|
387
|
+
.optional()
|
|
388
|
+
.describe('Capture the full scrollable page (default false).'),
|
|
389
|
+
}),
|
|
390
|
+
execute: async (rawArgs) => runBrowserVision(browser, String(rawArgs.prompt), rawArgs.fullPage === true, projectRoot),
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=web-agent-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-agent-tools.js","sourceRoot":"","sources":["../../src/tools/web-agent-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pluggable `web_search` backends + HTML→markdown extraction (T1742 · epic
|
|
3
|
+
* T11456 · SG-TOOLS).
|
|
4
|
+
*
|
|
5
|
+
* The `web` toolset's network backend. TWO concerns live here, both built over
|
|
6
|
+
* an INJECTABLE {@link HttpFetch} so unit tests mock the network and CI never
|
|
7
|
+
* makes a real request (AC9):
|
|
8
|
+
*
|
|
9
|
+
* - **web_search backends** — a {@link WebSearchBackend} interface with two
|
|
10
|
+
* keyless builtin implementations ({@link duckDuckGoBackend},
|
|
11
|
+
* {@link searxngBackend}). NO hard paid-API dependency: backends are resolved
|
|
12
|
+
* at call time and the tool degrades gracefully to an `unavailable` result
|
|
13
|
+
* when none answer (AC1). New backends register by satisfying the interface —
|
|
14
|
+
* the search tool is backend-agnostic.
|
|
15
|
+
* - **web_extract** — {@link htmlToMarkdown}, a dependency-free HTML→markdown
|
|
16
|
+
* converter (AC2), plus {@link extractTitle}.
|
|
17
|
+
*
|
|
18
|
+
* The pure helpers (parsers, the markdown converter) are exported for direct unit
|
|
19
|
+
* testing. Import-time side-effect-free.
|
|
20
|
+
*
|
|
21
|
+
* @epic T11456
|
|
22
|
+
* @task T1742
|
|
23
|
+
*/
|
|
24
|
+
import type { WebExtractResult, WebSearchBackendId, WebSearchHit, WebSearchInput } from '@cleocode/contracts/tools/web-tools';
|
|
25
|
+
/**
|
|
26
|
+
* A minimal HTTP-fetch surface the web tools depend on by INJECTION. Structurally
|
|
27
|
+
* a subset of the global `fetch`, declared here so the executables can be driven
|
|
28
|
+
* by a mock in tests (no real network in CI · AC9) and so a future routing of
|
|
29
|
+
* web egress through a guarded `net` primitive is a one-line swap.
|
|
30
|
+
*/
|
|
31
|
+
export type HttpFetch = (url: string, init?: {
|
|
32
|
+
readonly headers?: Record<string, string>;
|
|
33
|
+
readonly signal?: AbortSignal;
|
|
34
|
+
}) => Promise<{
|
|
35
|
+
readonly status: number;
|
|
36
|
+
text(): Promise<string>;
|
|
37
|
+
readonly headers: {
|
|
38
|
+
get(name: string): string | null;
|
|
39
|
+
};
|
|
40
|
+
}>;
|
|
41
|
+
/** The default {@link HttpFetch} — the platform global `fetch`. */
|
|
42
|
+
export declare const defaultHttpFetch: HttpFetch;
|
|
43
|
+
/**
|
|
44
|
+
* One pluggable web-search backend. A backend resolves a query into ranked
|
|
45
|
+
* {@link WebSearchHit}s, or throws (the resolver moves on to the next backend).
|
|
46
|
+
* `isConfigured()` lets a backend that needs a URL/instance opt OUT of the `auto`
|
|
47
|
+
* rotation when it has nothing to talk to — keeping the "graceful when
|
|
48
|
+
* unconfigured" contract (AC1) without a network round-trip.
|
|
49
|
+
*/
|
|
50
|
+
export interface WebSearchBackend {
|
|
51
|
+
/** Canonical backend id. */
|
|
52
|
+
readonly id: WebSearchBackendId;
|
|
53
|
+
/** Whether this backend has everything it needs to run (e.g. an instance URL). */
|
|
54
|
+
isConfigured(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Run the search.
|
|
57
|
+
*
|
|
58
|
+
* @param query - The search query.
|
|
59
|
+
* @param maxResults - Cap on returned hits.
|
|
60
|
+
* @param http - The injected fetch surface.
|
|
61
|
+
* @returns Ranked hits.
|
|
62
|
+
*/
|
|
63
|
+
search(query: string, maxResults: number, http: HttpFetch): Promise<WebSearchHit[]>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Parse DuckDuckGo's keyless HTML endpoint (`html.duckduckgo.com/html/`) into
|
|
67
|
+
* structured hits. Pure helper (AC9) — exported for direct unit testing against
|
|
68
|
+
* a captured fixture, so no network is needed.
|
|
69
|
+
*
|
|
70
|
+
* @param html - The DuckDuckGo HTML response body.
|
|
71
|
+
* @param maxResults - Cap on returned hits.
|
|
72
|
+
* @returns Parsed hits.
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseDuckDuckGoHtml(html: string, maxResults: number): WebSearchHit[];
|
|
75
|
+
/**
|
|
76
|
+
* The DuckDuckGo backend — keyless HTML endpoint, always "configured" (no
|
|
77
|
+
* instance URL needed). The canonical no-API-key default (AC1).
|
|
78
|
+
*/
|
|
79
|
+
export declare const duckDuckGoBackend: WebSearchBackend;
|
|
80
|
+
/**
|
|
81
|
+
* Parse a SearXNG JSON response (`{ results: [{ title, url, content }] }`) into
|
|
82
|
+
* hits. Pure helper (AC9).
|
|
83
|
+
*
|
|
84
|
+
* @param json - The parsed SearXNG JSON body.
|
|
85
|
+
* @param maxResults - Cap on returned hits.
|
|
86
|
+
* @returns Parsed hits.
|
|
87
|
+
*/
|
|
88
|
+
export declare function parseSearxngJson(json: unknown, maxResults: number): WebSearchHit[];
|
|
89
|
+
/**
|
|
90
|
+
* Build a SearXNG backend bound to an instance URL (from `SEARXNG_URL` env or
|
|
91
|
+
* config). When no instance URL is supplied it reports `isConfigured() === false`
|
|
92
|
+
* so the `auto` resolver skips it — preserving the "graceful when unconfigured"
|
|
93
|
+
* contract (AC1) with no paid dependency.
|
|
94
|
+
*
|
|
95
|
+
* @param instanceUrl - The SearXNG instance base URL (or `undefined`/empty).
|
|
96
|
+
* @returns A {@link WebSearchBackend}.
|
|
97
|
+
*/
|
|
98
|
+
export declare function makeSearxngBackend(instanceUrl: string | undefined): WebSearchBackend;
|
|
99
|
+
/**
|
|
100
|
+
* Resolve the candidate backends for a {@link WebSearchInput}, in priority
|
|
101
|
+
* order. A SearXNG instance (when configured) ranks before DuckDuckGo; an
|
|
102
|
+
* explicit `input.backend` pins a single backend. The DuckDuckGo backend is
|
|
103
|
+
* always present (keyless), so the list is never empty — but a pinned backend
|
|
104
|
+
* that is not configured yields an empty list, which the executable surfaces as
|
|
105
|
+
* `unavailable` (AC1).
|
|
106
|
+
*
|
|
107
|
+
* @param input - The search input.
|
|
108
|
+
* @param searxngUrl - Optional SearXNG instance URL (config/env).
|
|
109
|
+
* @returns The ordered candidate backends.
|
|
110
|
+
*/
|
|
111
|
+
export declare function resolveSearchBackends(input: WebSearchInput, searxngUrl: string | undefined): WebSearchBackend[];
|
|
112
|
+
/** Extract the document `<title>` text, or `''` when absent. Pure (AC9). */
|
|
113
|
+
export declare function extractTitle(html: string): string;
|
|
114
|
+
/**
|
|
115
|
+
* Convert an HTML document to markdown. Dependency-free (AC2) — a focused,
|
|
116
|
+
* deterministic transform of the structural tags an agent cares about
|
|
117
|
+
* (headings, links, lists, code, emphasis, paragraphs); `<script>`/`<style>`
|
|
118
|
+
* and remaining tags are dropped. NOT a full HTML5 parser — a pragmatic
|
|
119
|
+
* readability-style extraction that keeps `core` free of a heavy DOM dependency.
|
|
120
|
+
*
|
|
121
|
+
* Pure function of its input (no I/O), so it is unit-testable in isolation (AC9).
|
|
122
|
+
*
|
|
123
|
+
* @param html - The HTML document / fragment.
|
|
124
|
+
* @returns A markdown rendering of the body content.
|
|
125
|
+
*/
|
|
126
|
+
export declare function htmlToMarkdown(html: string): string;
|
|
127
|
+
/**
|
|
128
|
+
* Fetch a URL and convert its HTML body to markdown. The single executable body
|
|
129
|
+
* for the `web_extract` tool — uses the INJECTED {@link HttpFetch} so CI mocks
|
|
130
|
+
* the network (AC9).
|
|
131
|
+
*
|
|
132
|
+
* @param url - The URL to fetch.
|
|
133
|
+
* @param http - The injected fetch surface.
|
|
134
|
+
* @param opts - Timeout + markdown length cap.
|
|
135
|
+
* @returns The {@link WebExtractResult}.
|
|
136
|
+
*/
|
|
137
|
+
export declare function fetchAndExtract(url: string, http: HttpFetch, opts?: {
|
|
138
|
+
timeoutMs?: number;
|
|
139
|
+
maxChars?: number;
|
|
140
|
+
}): Promise<WebExtractResult>;
|
|
141
|
+
/**
|
|
142
|
+
* Run a {@link WebSearchInput} against the resolved backends, first-success-wins.
|
|
143
|
+
* Returns the hits + the answering backend id, or `null` when no backend could
|
|
144
|
+
* answer (every candidate failed or the list was empty) — the executable maps
|
|
145
|
+
* `null` onto a graceful `unavailable` result (AC1).
|
|
146
|
+
*
|
|
147
|
+
* @param input - The search input.
|
|
148
|
+
* @param backends - The ordered candidate backends (from {@link resolveSearchBackends}).
|
|
149
|
+
* @param http - The injected fetch surface.
|
|
150
|
+
* @returns The hits + backend, or `null` when none answered.
|
|
151
|
+
*/
|
|
152
|
+
export declare function runSearch(input: WebSearchInput, backends: readonly WebSearchBackend[], http: HttpFetch): Promise<{
|
|
153
|
+
results: WebSearchHit[];
|
|
154
|
+
backend: WebSearchBackendId;
|
|
155
|
+
} | null>;
|
|
156
|
+
//# sourceMappingURL=web-search-backends.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search-backends.d.ts","sourceRoot":"","sources":["../../src/tools/web-search-backends.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACf,MAAM,qCAAqC,CAAC;AAK7C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAChF,OAAO,CAAC;IACX,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACxD,CAAC,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,EAAE,SACuB,CAAC;AAMvD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAChC,kFAAkF;IAClF,YAAY,IAAI,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACrF;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CA6BpF;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAa/B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAclF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAgBpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,gBAAgB,EAAE,CAQpB;AAMD,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoDnD;AAOD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,EACf,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,OAAO,CAAC,gBAAgB,CAAC,CAoB3B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,GAAG,IAAI,CAAC,CAW1E"}
|