@vellumai/assistant 0.7.0 → 0.7.1
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/ARCHITECTURE.md +6 -7
- package/Dockerfile +1 -0
- package/README.md +2 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +79 -139
- package/bun.lock +3 -0
- package/docs/architecture/security.md +18 -16
- package/knip.json +1 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -5
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
- package/node_modules/@vellumai/slack-text/bun.lock +24 -0
- package/node_modules/@vellumai/slack-text/package.json +18 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
- package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
- package/openapi.yaml +294 -107
- package/package.json +4 -2
- package/scripts/generate-openapi.ts +16 -111
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
- package/src/__tests__/anthropic-provider.test.ts +56 -13
- package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
- package/src/__tests__/app-conversation-ids.test.ts +151 -0
- package/src/__tests__/approval-cascade.test.ts +0 -15
- package/src/__tests__/approval-routes-http.test.ts +6 -17
- package/src/__tests__/assistant-event-hub.test.ts +126 -77
- package/src/__tests__/assistant-event.test.ts +0 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +37 -15
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -29
- package/src/__tests__/background-shell-host-bash.test.ts +34 -43
- package/src/__tests__/call-controller.test.ts +1 -1
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/channel-approval-routes.test.ts +10 -296
- package/src/__tests__/channel-approvals.test.ts +25 -17
- package/src/__tests__/channel-guardian.test.ts +100 -146
- package/src/__tests__/checker.test.ts +20 -34
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/config-schema.test.ts +6 -48
- package/src/__tests__/config-watcher.test.ts +12 -0
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contacts-write.test.ts +2 -64
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-memory-source.test.ts +120 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +49 -0
- package/src/__tests__/context-search-workspace-source.test.ts +9 -22
- package/src/__tests__/context-window-manager.test.ts +46 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
- package/src/__tests__/conversation-agent-loop.test.ts +980 -13
- package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
- package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
- package/src/__tests__/conversation-lifecycle.test.ts +4 -4
- package/src/__tests__/conversation-process-callsite.test.ts +79 -2
- package/src/__tests__/conversation-queue.test.ts +3 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +1 -161
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -32
- package/src/__tests__/conversation-routes-slash-commands.test.ts +75 -66
- package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
- package/src/__tests__/conversation-slash-commands.test.ts +24 -4
- package/src/__tests__/conversation-slash-queue.test.ts +2 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-starter-routes.test.ts +79 -2
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
- package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
- package/src/__tests__/conversation-usage.test.ts +253 -3
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
- package/src/__tests__/credential-health-service.test.ts +68 -0
- package/src/__tests__/credential-security-e2e.test.ts +4 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/cu-unified-flow.test.ts +33 -16
- package/src/__tests__/daemon-assistant-events.test.ts +34 -21
- package/src/__tests__/daemon-credential-client.test.ts +4 -1
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/events-client-registration.test.ts +193 -49
- package/src/__tests__/filing-service.test.ts +58 -7
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-grant-minting.test.ts +7 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +32 -11
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -83
- package/src/__tests__/headless-browser-mode.test.ts +4 -9
- package/src/__tests__/headless-browser-navigate.test.ts +21 -20
- package/src/__tests__/heartbeat-service.test.ts +289 -7
- package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/host-bash-proxy.test.ts +46 -122
- package/src/__tests__/host-browser-e2e-cloud.test.ts +36 -497
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +26 -96
- package/src/__tests__/host-browser-proxy.test.ts +111 -185
- package/src/__tests__/host-browser-routes.test.ts +45 -75
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +26 -30
- package/src/__tests__/host-cu-proxy.test.ts +56 -111
- package/src/__tests__/host-file-proxy.test.ts +44 -98
- package/src/__tests__/host-file-read-tool.test.ts +42 -21
- package/src/__tests__/host-shell-tool.test.ts +33 -68
- package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
- package/src/__tests__/host-transfer-proxy.test.ts +43 -53
- package/src/__tests__/http-user-message-parity.test.ts +0 -6
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/injector-chain.test.ts +10 -5
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -66
- package/src/__tests__/inline-skill-load-permissions.test.ts +0 -2
- package/src/__tests__/install-skill-routing.test.ts +1 -13
- package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
- package/src/__tests__/llm-catalog-parity.test.ts +90 -0
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-resolver.test.ts +80 -12
- package/src/__tests__/llm-usage-store.test.ts +269 -4
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/managed-profile-guard.test.ts +225 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -10
- package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
- package/src/__tests__/migration-export-http.test.ts +33 -26
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
- package/src/__tests__/migration-import-commit-http.test.ts +66 -21
- package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
- package/src/__tests__/migration-import-from-url.test.ts +20 -6
- package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
- package/src/__tests__/migration-parity-persistence.test.ts +62 -25
- package/src/__tests__/migration-transport.test.ts +115 -23
- package/src/__tests__/migration-validate-http.test.ts +105 -80
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/non-member-access-request.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/oauth-store.test.ts +19 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +21 -12
- package/src/__tests__/prechat-onboarding-contract.test.ts +31 -7
- package/src/__tests__/pricing.test.ts +68 -4
- package/src/__tests__/process-message-background-slack.test.ts +331 -0
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/reaction-persistence.test.ts +9 -6
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/recording-handler.test.ts +64 -81
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/relay-server.test.ts +18 -13
- package/src/__tests__/require-fresh-approval.test.ts +13 -22
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +3 -12
- package/src/__tests__/search-skills-unified.test.ts +9 -15
- package/src/__tests__/secret-ingress-cli.test.ts +2 -5
- package/src/__tests__/secret-ingress-http.test.ts +0 -4
- package/src/__tests__/secret-onetime-send.test.ts +4 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
- package/src/__tests__/secret-response-routing.test.ts +29 -15
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +9 -24
- package/src/__tests__/settings-routes.test.ts +1 -1
- package/src/__tests__/shell-credential-ref.test.ts +0 -8
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -56
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -11
- package/src/__tests__/skill-tool-factory.test.ts +97 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-inbound-verification.test.ts +1 -62
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +80 -83
- package/src/__tests__/system-prompt.test.ts +115 -13
- package/src/__tests__/terminal-tools.test.ts +0 -89
- package/src/__tests__/thread-backfill.test.ts +945 -31
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -6
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -16
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -7
- package/src/__tests__/tool-executor.test.ts +12 -19
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-trace-listener.test.ts +0 -17
- package/src/__tests__/transfer-progress-screen.test.ts +63 -26
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
- package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cli.test.ts +143 -0
- package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
- package/src/__tests__/usage-routes.test.ts +150 -0
- package/src/__tests__/validation-results-screen.test.ts +39 -16
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +49 -137
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -7
- package/src/__tests__/voice-session-bridge.test.ts +5 -5
- package/src/__tests__/workspace-migration-062-drop-memory-v2-edges-json.test.ts +103 -0
- package/src/__tests__/workspace-migration-063-release-notes-dynamic-model-context.test.ts +77 -0
- package/src/__tests__/workspace-migration-064-unwind-main-agent-opus-seed.test.ts +225 -0
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
- package/src/acp/index.ts +0 -15
- package/src/acp/session-manager.ts +37 -34
- package/src/agent/loop.ts +16 -1
- package/src/approvals/AGENTS.md +4 -0
- package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
- package/src/approvals/guardian-request-resolvers.ts +10 -2
- package/src/backup/__tests__/backup-worker.test.ts +36 -8
- package/src/backup/__tests__/paths.test.ts +2 -2
- package/src/backup/__tests__/restore.test.ts +45 -28
- package/src/backup/backup-worker.ts +36 -2
- package/src/backup/paths.ts +9 -6
- package/src/browser-session/events.ts +0 -9
- package/src/calls/call-store.ts +1 -34
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/relay-server.ts +0 -24
- package/src/calls/twilio-rest.ts +0 -38
- package/src/calls/twilio-routes.ts +1 -1
- package/src/calls/voice-session-bridge.ts +7 -38
- package/src/channels/types.ts +1 -36
- package/src/cli/commands/__tests__/cache.test.ts +152 -5
- package/src/cli/commands/__tests__/memory-v2.test.ts +14 -28
- package/src/cli/commands/__tests__/trust.test.ts +21 -387
- package/src/cli/commands/backup.ts +4 -4
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +153 -82
- package/src/cli/commands/clients.ts +63 -5
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +231 -76
- package/src/cli/commands/keys.ts +4 -1
- package/src/cli/commands/memory-v2.ts +24 -52
- package/src/cli/commands/oauth/shared.ts +2 -29
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/skills.ts +77 -35
- package/src/cli/commands/trust.ts +70 -430
- package/src/cli/commands/usage.ts +25 -16
- package/src/cli/lib/daemon-credential-client.ts +14 -0
- package/src/cli/program.ts +2 -0
- package/src/cli.ts +0 -21
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -4
- package/src/config/env-registry.ts +12 -2
- package/src/config/env.ts +3 -14
- package/src/config/feature-flag-registry.json +30 -30
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +58 -22
- package/src/config/loader.ts +3 -3
- package/src/config/schema.ts +2 -158
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -0
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -5
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/ingress.ts +1 -1
- package/src/config/schemas/llm.ts +31 -3
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-v2.ts +9 -0
- package/src/config/schemas/security.ts +1 -42
- package/src/config/schemas/services.ts +6 -6
- package/src/config/schemas/skills.ts +5 -5
- package/src/config/schemas/tts.ts +1 -1
- package/src/config/seed-inference-profiles.ts +117 -0
- package/src/config/skills.ts +0 -90
- package/src/config/types.ts +3 -6
- package/src/contacts/contact-store.ts +0 -17
- package/src/contacts/contacts-write.ts +1 -105
- package/src/context/window-manager.ts +44 -5
- package/src/credential-execution/process-manager.ts +34 -10
- package/src/credential-health/credential-health-service.ts +21 -16
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
- package/src/daemon/connection-policy.ts +1 -26
- package/src/daemon/conversation-agent-loop-handlers.ts +53 -4
- package/src/daemon/conversation-agent-loop.ts +277 -36
- package/src/daemon/conversation-history.ts +8 -8
- package/src/daemon/conversation-launch.ts +20 -135
- package/src/daemon/conversation-lifecycle.ts +1 -1
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-process.ts +83 -163
- package/src/daemon/conversation-runtime-assembly.ts +219 -76
- package/src/daemon/conversation-slash.ts +47 -5
- package/src/daemon/conversation-store.ts +7 -31
- package/src/daemon/conversation-surfaces.ts +22 -28
- package/src/daemon/conversation-tool-setup.ts +3 -33
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +117 -233
- package/src/daemon/daemon-control.ts +3 -71
- package/src/daemon/daemon-skill-host.ts +8 -11
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +12 -12
- package/src/daemon/handlers/config-ingress.ts +4 -165
- package/src/daemon/handlers/config-model.ts +1 -1
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +11 -190
- package/src/daemon/handlers/recording.ts +26 -158
- package/src/daemon/handlers/shared.ts +23 -71
- package/src/daemon/handlers/skills.ts +42 -93
- package/src/daemon/host-bash-proxy.ts +67 -45
- package/src/daemon/host-browser-proxy.ts +65 -27
- package/src/daemon/host-cu-proxy.ts +40 -39
- package/src/daemon/host-file-proxy.ts +58 -37
- package/src/daemon/host-transfer-proxy.ts +84 -46
- package/src/daemon/lifecycle.ts +49 -15
- package/src/daemon/message-types/conversations.ts +7 -0
- package/src/daemon/message-types/host-bash.ts +1 -0
- package/src/daemon/message-types/host-cu.ts +1 -0
- package/src/daemon/message-types/host-file.ts +1 -0
- package/src/daemon/message-types/host-transfer.ts +1 -0
- package/src/daemon/message-types/messages.ts +10 -9
- package/src/daemon/message-types/workspace.ts +1 -1
- package/src/daemon/process-message.ts +102 -239
- package/src/daemon/server.ts +13 -462
- package/src/daemon/shutdown-handlers.ts +2 -2
- package/src/daemon/tool-side-effects.ts +125 -107
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +4 -9
- package/src/events/domain-events.ts +0 -8
- package/src/events/tool-audit-listener.ts +3 -1
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +0 -17
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +13 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +6 -2
- package/src/heartbeat/heartbeat-service.ts +23 -5
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/relationship-state-writer.test.ts +30 -0
- package/src/home/feed-writer.ts +1 -2
- package/src/home/relationship-state-writer.ts +16 -3
- package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
- package/src/ipc/assistant-server.ts +3 -10
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
- package/src/ipc/routes/route-adapter.ts +1 -1
- package/src/ipc/routes/trust-rules.test.ts +0 -95
- package/src/ipc/skill-ipc-types.ts +41 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
- package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
- package/src/ipc/skill-routes/events.ts +12 -23
- package/src/ipc/skill-routes/identity.ts +4 -17
- package/src/ipc/skill-routes/index.ts +1 -1
- package/src/ipc/skill-server.ts +6 -39
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
- package/src/live-voice/protocol.ts +4 -13
- package/src/mcp/manager.ts +0 -5
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/app-git-service.ts +0 -32
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +6 -0
- package/src/memory/context-search/sources/memory-v2.ts +578 -0
- package/src/memory/context-search/sources/memory.ts +5 -0
- package/src/memory/context-search/sources/pkb.ts +10 -1
- package/src/memory/context-search/sources/workspace.ts +3 -2
- package/src/memory/conversation-crud.ts +29 -4
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +14 -0
- package/src/memory/embedding-backend.ts +3 -21
- package/src/memory/embedding-gemini.ts +0 -2
- package/src/memory/embedding-local.ts +6 -6
- package/src/memory/embedding-ollama.ts +6 -6
- package/src/memory/embedding-openai.ts +6 -6
- package/src/memory/embedding-types.ts +21 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +3 -7
- package/src/memory/graph/conversation-graph-memory.ts +35 -13
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/guardian-action-store.ts +0 -83
- package/src/memory/guardian-approvals.ts +0 -48
- package/src/memory/indexer.ts +1 -15
- package/src/memory/job-handlers/conversation-starters.ts +36 -53
- package/src/memory/job-utils.ts +0 -6
- package/src/memory/jobs-store.ts +0 -1
- package/src/memory/jobs-worker.ts +2 -16
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +129 -43
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/233-document-conversations.ts +54 -0
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
- package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
- package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
- package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
- package/src/memory/migrations/index.ts +14 -0
- package/src/memory/migrations/registry.ts +24 -0
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/conversations.ts +7 -0
- package/src/memory/schema/infrastructure.ts +25 -0
- package/src/memory/search/semantic.ts +5 -16
- package/src/memory/tool-usage-store.ts +2 -0
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation.test.ts +289 -90
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
- package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +384 -15
- package/src/memory/v2/__tests__/migration.test.ts +64 -36
- package/src/memory/v2/__tests__/page-store.test.ts +191 -8
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
- package/src/memory/v2/__tests__/static-context.test.ts +153 -0
- package/src/memory/v2/activation.ts +168 -97
- package/src/memory/v2/backfill-jobs.ts +15 -100
- package/src/memory/v2/consolidation-job.ts +14 -12
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +182 -58
- package/src/memory/v2/migration.ts +57 -64
- package/src/memory/v2/now-text.ts +2 -3
- package/src/memory/v2/page-store.ts +168 -31
- package/src/memory/v2/prompts/consolidation.ts +118 -42
- package/src/memory/v2/prompts/sweep.ts +3 -3
- package/src/memory/v2/skill-store.ts +55 -7
- package/src/memory/v2/static-context.ts +62 -0
- package/src/memory/v2/types.ts +10 -20
- package/src/memory/validation.ts +0 -11
- package/src/messaging/draft-store.ts +0 -6
- package/src/messaging/provider-types.ts +8 -0
- package/src/messaging/provider.ts +7 -0
- package/src/messaging/providers/gmail/client.ts +1 -121
- package/src/messaging/providers/outlook/client.ts +0 -73
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +226 -0
- package/src/messaging/providers/slack/adapter.ts +122 -21
- package/src/messaging/providers/slack/backfill.test.ts +95 -6
- package/src/messaging/providers/slack/backfill.ts +89 -11
- package/src/messaging/providers/slack/client.ts +10 -124
- package/src/messaging/providers/slack/message-metadata.ts +12 -2
- package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
- package/src/messaging/providers/slack/render-transcript.ts +126 -25
- package/src/messaging/providers/slack/types.ts +1 -0
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +8 -16
- package/src/oauth/credential-token-resolver.ts +97 -0
- package/src/oauth/manual-token-connection.ts +30 -34
- package/src/oauth/oauth-store.ts +6 -4
- package/src/outbound-proxy/certs.ts +0 -7
- package/src/outbound-proxy/config.ts +0 -74
- package/src/outbound-proxy/health.ts +0 -44
- package/src/outbound-proxy/index.ts +0 -22
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.ts +4 -1
- package/src/permissions/gateway-threshold-reader.ts +4 -1
- package/src/permissions/prompter.ts +9 -2
- package/src/permissions/secret-prompter.ts +21 -48
- package/src/permissions/types.ts +33 -0
- package/src/permissions/workspace-policy.ts +0 -5
- package/src/platform/sync-identity.ts +0 -8
- package/src/plugins/defaults/injectors.ts +69 -2
- package/src/plugins/defaults/overflow-reduce.ts +3 -2
- package/src/plugins/types.ts +8 -0
- package/src/prompts/system-prompt.ts +34 -70
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/retry-callsite.test.ts +138 -1
- package/src/providers/anthropic/client.ts +72 -33
- package/src/providers/call-site-routing.ts +42 -3
- package/src/providers/gemini/client.ts +18 -2
- package/src/providers/managed-proxy/context.ts +0 -5
- package/src/providers/model-catalog.ts +105 -19
- package/src/providers/openai/chat-completions-provider.ts +6 -0
- package/src/providers/openai/responses-provider.ts +7 -1
- package/src/providers/provider-send-message.ts +45 -2
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +14 -9
- package/src/providers/retry.ts +96 -8
- package/src/providers/types.ts +13 -0
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +10 -6
- package/src/runtime/__tests__/agent-wake.test.ts +89 -0
- package/src/runtime/agent-wake.ts +39 -2
- package/src/runtime/assistant-event-hub.ts +541 -45
- package/src/runtime/assistant-event.ts +1 -6
- package/src/runtime/auth/context.ts +0 -9
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/route-policy.ts +11 -9
- package/src/runtime/auth/token-service.ts +0 -11
- package/src/runtime/channel-approvals.ts +6 -2
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/http-errors.ts +0 -34
- package/src/runtime/http-router.ts +6 -3
- package/src/runtime/http-server.ts +22 -82
- package/src/runtime/http-types.ts +5 -0
- package/src/runtime/interactive-ui.ts +0 -1
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
- package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +71 -27
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +41 -2
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +143 -79
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +371 -0
- package/src/runtime/migrations/migration-transport.ts +46 -13
- package/src/runtime/migrations/migration-wizard.ts +2 -2
- package/src/runtime/migrations/origin-mode.ts +40 -0
- package/src/runtime/migrations/vbundle-builder.ts +133 -79
- package/src/runtime/migrations/vbundle-import-analyzer.ts +9 -7
- package/src/runtime/migrations/vbundle-importer.ts +7 -7
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +3 -3
- package/src/runtime/migrations/vbundle-streaming-validator.ts +48 -26
- package/src/runtime/migrations/vbundle-validator.ts +214 -41
- package/src/runtime/pending-interactions.ts +13 -4
- package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
- package/src/runtime/routes/__tests__/backup-routes.test.ts +28 -19
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +235 -0
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
- package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/acp-routes.test.ts +0 -3
- package/src/runtime/routes/acp-routes.ts +3 -7
- package/src/runtime/routes/app-management-routes.ts +18 -9
- package/src/runtime/routes/approval-routes.ts +55 -14
- package/src/runtime/routes/avatar-routes.ts +3 -5
- package/src/runtime/routes/browser-routes.ts +1 -15
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +3 -7
- package/src/runtime/routes/channel-route-shared.ts +2 -28
- package/src/runtime/routes/client-routes.ts +45 -12
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/conversation-list-routes.ts +12 -29
- package/src/runtime/routes/conversation-management-routes.ts +14 -51
- package/src/runtime/routes/conversation-query-routes.ts +120 -8
- package/src/runtime/routes/conversation-routes.ts +44 -528
- package/src/runtime/routes/conversation-starter-routes.ts +19 -40
- package/src/runtime/routes/documents-routes.ts +53 -18
- package/src/runtime/routes/events-routes.ts +59 -91
- package/src/runtime/routes/filing-routes.ts +18 -1
- package/src/runtime/routes/guardian-action-routes.ts +4 -9
- package/src/runtime/routes/host-bash-routes.ts +3 -2
- package/src/runtime/routes/host-browser-routes.ts +9 -33
- package/src/runtime/routes/host-cu-routes.ts +6 -1
- package/src/runtime/routes/host-file-routes.ts +3 -2
- package/src/runtime/routes/host-transfer-routes.ts +11 -15
- package/src/runtime/routes/identity-routes.ts +78 -6
- package/src/runtime/routes/inbound-message-handler.ts +580 -137
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -88
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
- package/src/runtime/routes/index.ts +4 -0
- package/src/runtime/routes/integrations/slack/channel.ts +0 -24
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/memory-v2-routes.ts +10 -15
- package/src/runtime/routes/migration-routes.ts +188 -31
- package/src/runtime/routes/playground/guard.ts +1 -1
- package/src/runtime/routes/playground/index.ts +0 -2
- package/src/runtime/routes/recording-routes.ts +4 -24
- package/src/runtime/routes/rename-conversation-routes.ts +2 -6
- package/src/runtime/routes/schedule-routes.ts +3 -6
- package/src/runtime/routes/secret-routes.ts +87 -18
- package/src/runtime/routes/settings-routes.ts +29 -28
- package/src/runtime/routes/skills-routes.ts +12 -31
- package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
- package/src/runtime/routes/task-routes.ts +6 -6
- package/src/runtime/routes/trust-rules-routes.ts +3 -94
- package/src/runtime/routes/types.ts +4 -4
- package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
- package/src/runtime/routes/usage-routes.ts +87 -10
- package/src/runtime/routes/user-routes.ts +17 -31
- package/src/runtime/routes/work-items-routes.ts +1 -4
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
- package/src/runtime/services/analyze-conversation.ts +7 -17
- package/src/runtime/services/conversation-serializer.ts +2 -4
- package/src/runtime/verification-outbound-actions.ts +1 -1
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/schedule/schedule-store.ts +0 -16
- package/src/security/secret-scanner.ts +14 -547
- package/src/security/secure-keys.ts +31 -11
- package/src/security/token-manager.ts +7 -3
- package/src/signals/cancel.ts +16 -25
- package/src/signals/conversation-undo.ts +2 -27
- package/src/signals/emit-event.ts +1 -2
- package/src/signals/user-message.ts +108 -22
- package/src/skills/catalog-install.ts +1 -0
- package/src/skills/clawhub.ts +2 -2
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/subagent/manager.ts +67 -84
- package/src/tasks/task-store.ts +1 -28
- package/src/telemetry/types.ts +6 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +38 -15
- package/src/telemetry/usage-telemetry-reporter.ts +3 -5
- package/src/tools/acp/spawn.test.ts +1 -2
- package/src/tools/acp/steer.test.ts +1 -2
- package/src/tools/browser/__tests__/browser-status.test.ts +44 -127
- package/src/tools/browser/browser-execution.ts +31 -147
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +92 -68
- package/src/tools/browser/cdp-client/factory.ts +48 -76
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/executor.ts +44 -31
- package/src/tools/host-filesystem/edit.ts +3 -2
- package/src/tools/host-filesystem/read.ts +3 -2
- package/src/tools/host-filesystem/transfer.test.ts +45 -42
- package/src/tools/host-filesystem/transfer.ts +4 -3
- package/src/tools/host-filesystem/write.ts +3 -2
- package/src/tools/host-terminal/host-shell.ts +4 -3
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +66 -1
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/terminal/shell.ts +2 -78
- package/src/tools/types.ts +12 -39
- package/src/tts/__tests__/provider-catalog.test.ts +2 -2
- package/src/tts/provider-catalog.ts +1 -1
- package/src/usage/actors.ts +2 -1
- package/src/usage/attribution.ts +185 -0
- package/src/usage/pricing.ts +166 -0
- package/src/usage/types.ts +14 -0
- package/src/util/json.ts +13 -0
- package/src/util/logger.ts +3 -3
- package/src/util/pricing.ts +50 -3
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +4 -3
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
- package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +59 -0
- package/src/workspace/migrations/062-drop-memory-v2-edges-json.ts +27 -0
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +70 -0
- package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +64 -0
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/provider-commit-message-generator.ts +3 -3
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
- package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
- package/src/__tests__/secret-detection-handler.test.ts +0 -67
- package/src/__tests__/secret-scanner-executor.test.ts +0 -450
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
- package/src/memory/v2/__tests__/edges.test.ts +0 -435
- package/src/memory/v2/edges.ts +0 -217
- package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -271
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -254
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
- package/src/tools/secret-detection-handler.ts +0 -269
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
|
@@ -20,6 +20,7 @@ import { isAbsolute } from "node:path";
|
|
|
20
20
|
|
|
21
21
|
import { getConfig } from "../../config/loader.js";
|
|
22
22
|
import { isCesShellLockdownEnabled } from "../../credential-execution/feature-gates.js";
|
|
23
|
+
import { HostBashProxy } from "../../daemon/host-bash-proxy.js";
|
|
23
24
|
import { RiskLevel } from "../../permissions/types.js";
|
|
24
25
|
import type { ToolDefinition } from "../../providers/types.js";
|
|
25
26
|
import { isUntrustedTrustClass } from "../../runtime/actor-trust-resolver.js";
|
|
@@ -191,7 +192,7 @@ class HostShellTool implements Tool {
|
|
|
191
192
|
|
|
192
193
|
// Proxy to connected client for execution on the user's machine
|
|
193
194
|
// when a capable client is available (managed/cloud-hosted mode).
|
|
194
|
-
if (
|
|
195
|
+
if (HostBashProxy.instance.isAvailable()) {
|
|
195
196
|
const rawSec =
|
|
196
197
|
typeof input.timeout_seconds === "number"
|
|
197
198
|
? input.timeout_seconds
|
|
@@ -220,7 +221,7 @@ class HostShellTool implements Tool {
|
|
|
220
221
|
|
|
221
222
|
const bgId = generateBackgroundToolId();
|
|
222
223
|
const abortController = new AbortController();
|
|
223
|
-
const proxyPromise =
|
|
224
|
+
const proxyPromise = HostBashProxy.instance.request(
|
|
224
225
|
{
|
|
225
226
|
command,
|
|
226
227
|
working_dir: rawWorkingDir as string | undefined,
|
|
@@ -266,7 +267,7 @@ class HostShellTool implements Tool {
|
|
|
266
267
|
};
|
|
267
268
|
}
|
|
268
269
|
|
|
269
|
-
return
|
|
270
|
+
return HostBashProxy.instance.request(
|
|
270
271
|
{
|
|
271
272
|
command,
|
|
272
273
|
working_dir: rawWorkingDir as string | undefined,
|
|
@@ -1,10 +1 @@
|
|
|
1
|
-
export {
|
|
2
|
-
createSession,
|
|
3
|
-
getActiveSession,
|
|
4
|
-
getOrStartSession,
|
|
5
|
-
getSessionEnv,
|
|
6
|
-
getSessionsForConversation,
|
|
7
|
-
startSession,
|
|
8
|
-
stopAllSessions,
|
|
9
|
-
stopSession,
|
|
10
|
-
} from "./session-manager.js";
|
|
1
|
+
export { getOrStartSession, getSessionEnv } from "./session-manager.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getIsContainerized } from "../config/env-registry.js";
|
|
2
|
+
import { mapApprovalProvenance } from "../permissions/approval-provenance.js";
|
|
2
3
|
import {
|
|
3
4
|
check,
|
|
4
5
|
classifyRisk,
|
|
@@ -8,6 +9,7 @@ import {
|
|
|
8
9
|
} from "../permissions/checker.js";
|
|
9
10
|
import { getAutoApproveThreshold } from "../permissions/gateway-threshold-reader.js";
|
|
10
11
|
import type { PermissionPrompter } from "../permissions/prompter.js";
|
|
12
|
+
import type { ApprovalMode, ApprovalReason, RiskThreshold } from "../permissions/types.js";
|
|
11
13
|
import { RiskLevel } from "../permissions/types.js";
|
|
12
14
|
import { getLogger } from "../util/logger.js";
|
|
13
15
|
import { buildPolicyContext } from "./policy-context.js";
|
|
@@ -23,6 +25,8 @@ export type PermissionDecision =
|
|
|
23
25
|
decision: string;
|
|
24
26
|
riskLevel: string;
|
|
25
27
|
wasPrompted?: boolean;
|
|
28
|
+
/** ID of the trust rule that matched this invocation (if any). Always set when a rule matched, even for non-classifier tools where riskMeta is absent. */
|
|
29
|
+
matchedTrustRuleId?: string;
|
|
26
30
|
/** Risk metadata from the classifier assessment cache (when available). */
|
|
27
31
|
riskMeta?: {
|
|
28
32
|
riskLevel: string;
|
|
@@ -31,12 +35,17 @@ export type PermissionDecision =
|
|
|
31
35
|
riskDirectoryScopeOptions?: Array<{ scope: string; label: string }>;
|
|
32
36
|
isContainerized?: boolean;
|
|
33
37
|
};
|
|
38
|
+
approvalMode?: ApprovalMode;
|
|
39
|
+
approvalReason?: ApprovalReason;
|
|
40
|
+
riskThreshold?: RiskThreshold;
|
|
34
41
|
}
|
|
35
42
|
| {
|
|
36
43
|
allowed: false;
|
|
37
44
|
decision: string;
|
|
38
45
|
riskLevel: string;
|
|
39
46
|
content: string;
|
|
47
|
+
/** ID of the trust rule that matched this invocation (if any). Always set when a rule matched, even for non-classifier tools where riskMeta is absent. */
|
|
48
|
+
matchedTrustRuleId?: string;
|
|
40
49
|
/** Risk metadata from the classifier assessment cache (when available). */
|
|
41
50
|
riskMeta?: {
|
|
42
51
|
riskLevel: string;
|
|
@@ -45,6 +54,9 @@ export type PermissionDecision =
|
|
|
45
54
|
riskDirectoryScopeOptions?: Array<{ scope: string; label: string }>;
|
|
46
55
|
isContainerized?: boolean;
|
|
47
56
|
};
|
|
57
|
+
approvalMode?: ApprovalMode;
|
|
58
|
+
approvalReason?: ApprovalReason;
|
|
59
|
+
riskThreshold?: RiskThreshold;
|
|
48
60
|
};
|
|
49
61
|
|
|
50
62
|
export class PermissionChecker {
|
|
@@ -120,6 +132,19 @@ export class PermissionChecker {
|
|
|
120
132
|
context.signal,
|
|
121
133
|
);
|
|
122
134
|
|
|
135
|
+
// Extract the matched rule ID for propagation. Returned as a top-level
|
|
136
|
+
// field on PermissionDecision so it reaches the executor even when
|
|
137
|
+
// riskMeta is absent (non-classifier tools like MCP don't populate it).
|
|
138
|
+
const matchedTrustRuleId = result.matchedRule?.id;
|
|
139
|
+
|
|
140
|
+
// Resolved threshold snapshot for provenance. getAutoApproveThreshold
|
|
141
|
+
// returns from cache (populated by check() above), so this is free.
|
|
142
|
+
const conversationThreshold = await getAutoApproveThreshold(
|
|
143
|
+
policyContext.conversationId,
|
|
144
|
+
policyContext.executionContext,
|
|
145
|
+
);
|
|
146
|
+
const riskThreshold = conversationThreshold as RiskThreshold;
|
|
147
|
+
|
|
123
148
|
// Some callers force prompting for side-effect tools even when a
|
|
124
149
|
// trust/allow rule would auto-allow. Deny decisions are preserved -
|
|
125
150
|
// only allow → prompt promotion happens here.
|
|
@@ -155,16 +180,21 @@ export class PermissionChecker {
|
|
|
155
180
|
requestId: context.requestId,
|
|
156
181
|
riskLevel,
|
|
157
182
|
riskReason,
|
|
183
|
+
matchedTrustRuleId,
|
|
158
184
|
decision: "deny",
|
|
159
185
|
reason: result.reason,
|
|
160
186
|
durationMs,
|
|
161
187
|
});
|
|
188
|
+
const provenance = mapApprovalProvenance("denied", { matchedTrustRuleId });
|
|
162
189
|
return {
|
|
163
190
|
allowed: false,
|
|
164
191
|
decision: "denied",
|
|
165
192
|
riskLevel,
|
|
166
193
|
content: result.reason,
|
|
194
|
+
matchedTrustRuleId,
|
|
167
195
|
riskMeta,
|
|
196
|
+
...provenance,
|
|
197
|
+
riskThreshold,
|
|
168
198
|
};
|
|
169
199
|
}
|
|
170
200
|
|
|
@@ -189,7 +219,10 @@ export class PermissionChecker {
|
|
|
189
219
|
allowed: true,
|
|
190
220
|
decision: "platform_auto_approve",
|
|
191
221
|
riskLevel,
|
|
222
|
+
matchedTrustRuleId,
|
|
192
223
|
riskMeta,
|
|
224
|
+
...mapApprovalProvenance("platform_auto_approve", {}),
|
|
225
|
+
riskThreshold,
|
|
193
226
|
};
|
|
194
227
|
}
|
|
195
228
|
|
|
@@ -245,7 +278,10 @@ export class PermissionChecker {
|
|
|
245
278
|
allowed: true,
|
|
246
279
|
decision: "guardian_auto_approve",
|
|
247
280
|
riskLevel,
|
|
281
|
+
matchedTrustRuleId,
|
|
248
282
|
riskMeta,
|
|
283
|
+
...mapApprovalProvenance("guardian_auto_approve", {}),
|
|
284
|
+
riskThreshold: bgThreshold as RiskThreshold,
|
|
249
285
|
};
|
|
250
286
|
}
|
|
251
287
|
}
|
|
@@ -268,6 +304,7 @@ export class PermissionChecker {
|
|
|
268
304
|
requestId: context.requestId,
|
|
269
305
|
riskLevel,
|
|
270
306
|
riskReason,
|
|
307
|
+
matchedTrustRuleId,
|
|
271
308
|
decision: "deny",
|
|
272
309
|
reason: "Non-interactive session: no client to approve prompt",
|
|
273
310
|
durationMs,
|
|
@@ -277,7 +314,13 @@ export class PermissionChecker {
|
|
|
277
314
|
decision: "denied",
|
|
278
315
|
riskLevel,
|
|
279
316
|
content: `Permission denied: tool "${name}" requires user approval but no interactive client is connected. The tool was not executed. To allow this tool in non-interactive sessions, add a trust rule via permission settings.`,
|
|
317
|
+
matchedTrustRuleId,
|
|
280
318
|
riskMeta,
|
|
319
|
+
// Do not pass matchedTrustRuleId here: an ask-rule match put us in
|
|
320
|
+
// the prompt path, but the *reason* for denial is no interactive
|
|
321
|
+
// client, not a deny rule. Always emit no_interactive_client.
|
|
322
|
+
...mapApprovalProvenance("denied", {}),
|
|
323
|
+
riskThreshold,
|
|
281
324
|
};
|
|
282
325
|
}
|
|
283
326
|
|
|
@@ -352,6 +395,7 @@ export class PermissionChecker {
|
|
|
352
395
|
requestId: context.requestId,
|
|
353
396
|
riskLevel,
|
|
354
397
|
riskReason,
|
|
398
|
+
matchedTrustRuleId,
|
|
355
399
|
decision: "deny",
|
|
356
400
|
reason: denialReason,
|
|
357
401
|
durationMs,
|
|
@@ -361,7 +405,14 @@ export class PermissionChecker {
|
|
|
361
405
|
decision,
|
|
362
406
|
riskLevel,
|
|
363
407
|
content: denialMessage,
|
|
408
|
+
matchedTrustRuleId,
|
|
364
409
|
riskMeta,
|
|
410
|
+
...mapApprovalProvenance(decision, {
|
|
411
|
+
wasTimeout: response.wasTimeout,
|
|
412
|
+
wasSystemCancel: response.wasSystemCancel,
|
|
413
|
+
wasAbort: response.wasAbort,
|
|
414
|
+
}),
|
|
415
|
+
riskThreshold,
|
|
365
416
|
};
|
|
366
417
|
}
|
|
367
418
|
|
|
@@ -370,12 +421,26 @@ export class PermissionChecker {
|
|
|
370
421
|
decision,
|
|
371
422
|
riskLevel,
|
|
372
423
|
wasPrompted: true,
|
|
424
|
+
matchedTrustRuleId,
|
|
373
425
|
riskMeta,
|
|
426
|
+
...mapApprovalProvenance(decision, { wasPrompted: true }),
|
|
427
|
+
riskThreshold,
|
|
374
428
|
};
|
|
375
429
|
}
|
|
376
430
|
|
|
377
431
|
// result.decision === 'allow'
|
|
378
|
-
return {
|
|
432
|
+
return {
|
|
433
|
+
allowed: true,
|
|
434
|
+
decision: "allow",
|
|
435
|
+
riskLevel,
|
|
436
|
+
matchedTrustRuleId,
|
|
437
|
+
riskMeta,
|
|
438
|
+
...mapApprovalProvenance("allow", {
|
|
439
|
+
hasSandboxAutoApprove: result.hasSandboxAutoApprove,
|
|
440
|
+
matchedTrustRuleId,
|
|
441
|
+
}),
|
|
442
|
+
riskThreshold,
|
|
443
|
+
};
|
|
379
444
|
} catch (err) {
|
|
380
445
|
if (err instanceof Error) {
|
|
381
446
|
(err as Error & { riskLevel?: string }).riskLevel = riskLevel;
|
|
@@ -6,7 +6,6 @@ import { join, resolve } from "node:path";
|
|
|
6
6
|
import { computeSkillVersionHash } from "../../skills/version-hash.js";
|
|
7
7
|
import { safeStringSlice } from "../../util/unicode.js";
|
|
8
8
|
import { buildSanitizedEnv } from "../terminal/safe-env.js";
|
|
9
|
-
import { wrapCommand } from "../terminal/sandbox.js";
|
|
10
9
|
import type { ToolContext, ToolExecutionResult } from "../types.js";
|
|
11
10
|
|
|
12
11
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
@@ -138,12 +137,8 @@ function spawnRunner(
|
|
|
138
137
|
const stderrChunks: Buffer[] = [];
|
|
139
138
|
let timedOut = false;
|
|
140
139
|
|
|
141
|
-
// The assistant runs exclusively in Docker or platform-managed
|
|
142
|
-
// environments where the container provides isolation.
|
|
143
|
-
const sandboxConfig = { enabled: false } as const;
|
|
144
|
-
|
|
145
140
|
const bunRunCmd = "bun run __skill_runner.ts";
|
|
146
|
-
const wrapped =
|
|
141
|
+
const wrapped = { command: "bash", args: ["-c", "--", bunRunCmd] };
|
|
147
142
|
|
|
148
143
|
const env = buildSanitizedEnv();
|
|
149
144
|
env.__SKILL_INPUT_JSON = JSON.stringify(input);
|
|
@@ -15,6 +15,31 @@ const riskMap: Record<SkillToolEntry["risk"], RiskLevel> = {
|
|
|
15
15
|
high: RiskLevel.High,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Validate that all keys in `input` are declared in the tool's input_schema
|
|
20
|
+
* properties. Returns an error result listing unknown parameters, or undefined
|
|
21
|
+
* if validation passes.
|
|
22
|
+
*/
|
|
23
|
+
function validateNoUnknownParams(
|
|
24
|
+
toolName: string,
|
|
25
|
+
input: Record<string, unknown>,
|
|
26
|
+
schema: SkillToolEntry["input_schema"],
|
|
27
|
+
): ToolExecutionResult | undefined {
|
|
28
|
+
const properties = schema?.properties;
|
|
29
|
+
if (!properties) return undefined;
|
|
30
|
+
|
|
31
|
+
const knownKeys = new Set(Object.keys(properties));
|
|
32
|
+
const unknownKeys = Object.keys(input).filter((k) => !knownKeys.has(k));
|
|
33
|
+
if (unknownKeys.length === 0) return undefined;
|
|
34
|
+
|
|
35
|
+
const listed = unknownKeys.map((k) => `"${k}"`).join(", ");
|
|
36
|
+
const supported = [...knownKeys].map((k) => `"${k}"`).join(", ");
|
|
37
|
+
return {
|
|
38
|
+
content: `Unknown parameter${unknownKeys.length > 1 ? "s" : ""} ${listed} for tool "${toolName}". Supported parameters: ${supported}. Remove unsupported parameters and retry.`,
|
|
39
|
+
isError: true,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
18
43
|
/**
|
|
19
44
|
* Create a runtime Tool object from a manifest entry.
|
|
20
45
|
* Maps SkillToolEntry metadata to the Tool interface and routes execution
|
|
@@ -50,6 +75,13 @@ export function createSkillTool(
|
|
|
50
75
|
input: Record<string, unknown>,
|
|
51
76
|
context: ToolContext,
|
|
52
77
|
): Promise<ToolExecutionResult> {
|
|
78
|
+
const validationError = validateNoUnknownParams(
|
|
79
|
+
entry.name,
|
|
80
|
+
input,
|
|
81
|
+
entry.input_schema,
|
|
82
|
+
);
|
|
83
|
+
if (validationError) return validationError;
|
|
84
|
+
|
|
53
85
|
return runSkillToolScript(skillDir, entry.executor, input, context, {
|
|
54
86
|
target: entry.execution_target,
|
|
55
87
|
expectedSkillVersionHash: versionHash,
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { ChildProcess } from "node:child_process";
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
-
import { homedir } from "node:os";
|
|
4
|
-
import { dirname, join } from "node:path";
|
|
5
3
|
|
|
6
4
|
import { getConfig } from "../../config/loader.js";
|
|
7
5
|
import { isCesShellLockdownEnabled } from "../../credential-execution/feature-gates.js";
|
|
@@ -11,11 +9,7 @@ import { isUntrustedTrustClass } from "../../runtime/actor-trust-resolver.js";
|
|
|
11
9
|
import { wakeAgentForOpportunity } from "../../runtime/agent-wake.js";
|
|
12
10
|
import { redactSecrets } from "../../security/secret-scanner.js";
|
|
13
11
|
import { getLogger } from "../../util/logger.js";
|
|
14
|
-
import {
|
|
15
|
-
getDataDir,
|
|
16
|
-
getProtectedDir,
|
|
17
|
-
getWorkspaceDir,
|
|
18
|
-
} from "../../util/platform.js";
|
|
12
|
+
import { getDataDir } from "../../util/platform.js";
|
|
19
13
|
import {
|
|
20
14
|
generateBackgroundToolId,
|
|
21
15
|
isBackgroundToolLimitReached,
|
|
@@ -37,7 +31,6 @@ import type {
|
|
|
37
31
|
ToolExecutionResult,
|
|
38
32
|
} from "../types.js";
|
|
39
33
|
import { buildSanitizedEnv } from "./safe-env.js";
|
|
40
|
-
import { wrapCommand } from "./sandbox.js";
|
|
41
34
|
|
|
42
35
|
/** Build a credential ref resolution trace for diagnostic logging. */
|
|
43
36
|
function buildCredentialRefTrace(
|
|
@@ -48,62 +41,6 @@ function buildCredentialRefTrace(
|
|
|
48
41
|
return { rawRefs, resolvedIds, unresolvedRefs };
|
|
49
42
|
}
|
|
50
43
|
|
|
51
|
-
/**
|
|
52
|
-
* Build the list of absolute paths that should be blocked from read access
|
|
53
|
-
* inside the sandbox when CES shell lockdown is active.
|
|
54
|
-
*
|
|
55
|
-
* Blocked paths include:
|
|
56
|
-
* - Gateway security directory (credential store secrets, CES data)
|
|
57
|
-
* - ~/.vellum/workspace/data/db/ - database files that may contain credential metadata
|
|
58
|
-
* - CES bootstrap socket directory (/run/ces-bootstrap/ or CES_BOOTSTRAP_SOCKET_DIR)
|
|
59
|
-
* - CES managed-mode data root (CES_DATA_DIR, or /ces-data when CES_MANAGED_MODE is set)
|
|
60
|
-
*/
|
|
61
|
-
function buildCesProtectedPaths(): string[] {
|
|
62
|
-
const protectedDirs = process.env.GATEWAY_SECURITY_DIR
|
|
63
|
-
? [process.env.GATEWAY_SECURITY_DIR]
|
|
64
|
-
: Array.from(
|
|
65
|
-
new Set([join(homedir(), ".vellum", "protected"), getProtectedDir()]),
|
|
66
|
-
);
|
|
67
|
-
const paths = [...protectedDirs, join(getWorkspaceDir(), "data", "db")];
|
|
68
|
-
|
|
69
|
-
// CES bootstrap socket directory - block access to the Unix socket that
|
|
70
|
-
// accepts RPC commands from the assistant process.
|
|
71
|
-
const bootstrapSocketDir =
|
|
72
|
-
process.env["CES_BOOTSTRAP_SOCKET_DIR"] || "/run/ces-bootstrap";
|
|
73
|
-
paths.push(bootstrapSocketDir);
|
|
74
|
-
|
|
75
|
-
// IPC socket directories - block access to the shared emptyDir volumes
|
|
76
|
-
// used for gateway↔daemon IPC in containerized deployments.
|
|
77
|
-
const gatewayIpcSocketDir =
|
|
78
|
-
process.env["GATEWAY_IPC_SOCKET_DIR"] || "/run/gateway-ipc";
|
|
79
|
-
paths.push(gatewayIpcSocketDir);
|
|
80
|
-
|
|
81
|
-
const assistantIpcSocketDir =
|
|
82
|
-
process.env["ASSISTANT_IPC_SOCKET_DIR"] || "/run/assistant-ipc";
|
|
83
|
-
paths.push(assistantIpcSocketDir);
|
|
84
|
-
|
|
85
|
-
// If a full socket path override is set (without the dir env var), block
|
|
86
|
-
// its parent directory as well.
|
|
87
|
-
if (
|
|
88
|
-
!process.env["CES_BOOTSTRAP_SOCKET_DIR"] &&
|
|
89
|
-
process.env["CES_BOOTSTRAP_SOCKET"]
|
|
90
|
-
) {
|
|
91
|
-
paths.push(dirname(process.env["CES_BOOTSTRAP_SOCKET"]));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// CES managed-mode private data root - in managed deployments the CES
|
|
95
|
-
// data lives outside the Vellum root, so it isn't covered by the
|
|
96
|
-
// gateway security directory entry above.
|
|
97
|
-
const cesDataDir = process.env["CES_DATA_DIR"];
|
|
98
|
-
if (cesDataDir) {
|
|
99
|
-
paths.push(cesDataDir);
|
|
100
|
-
} else if (process.env["CES_MANAGED_MODE"]) {
|
|
101
|
-
paths.push("/ces-data");
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return paths;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
44
|
const log = getLogger("shell-tool");
|
|
108
45
|
|
|
109
46
|
class ShellTool implements Tool {
|
|
@@ -292,10 +229,6 @@ class ShellTool implements Tool {
|
|
|
292
229
|
"Executing shell command",
|
|
293
230
|
);
|
|
294
231
|
|
|
295
|
-
// The assistant runs exclusively in Docker or platform-managed
|
|
296
|
-
// environments where the container provides isolation.
|
|
297
|
-
const sandboxConfig = { enabled: false } as const;
|
|
298
|
-
|
|
299
232
|
// Acquire proxy session if proxied mode is requested.
|
|
300
233
|
// `getOrStartSession` serializes per-conversation so concurrent proxied
|
|
301
234
|
// commands share a single session instead of each creating one.
|
|
@@ -337,16 +270,7 @@ class ShellTool implements Tool {
|
|
|
337
270
|
env.VELLUM_UNTRUSTED_SHELL = "1";
|
|
338
271
|
}
|
|
339
272
|
|
|
340
|
-
|
|
341
|
-
// data, the protected dir, and data sub-dirs that contain secrets.
|
|
342
|
-
const denyReadPaths: string[] | undefined = shellLockdownActive
|
|
343
|
-
? buildCesProtectedPaths()
|
|
344
|
-
: undefined;
|
|
345
|
-
|
|
346
|
-
const wrapped = wrapCommand(command, context.workingDir, sandboxConfig, {
|
|
347
|
-
networkMode,
|
|
348
|
-
denyReadPaths,
|
|
349
|
-
});
|
|
273
|
+
const wrapped = { command: "bash", args: ["-c", "--", command] };
|
|
350
274
|
|
|
351
275
|
// -----------------------------------------------------------------------
|
|
352
276
|
// Background mode: spawn and return immediately. The process output is
|
package/src/tools/types.ts
CHANGED
|
@@ -10,15 +10,10 @@ import type {
|
|
|
10
10
|
ToolExecutionStartEvent,
|
|
11
11
|
ToolPermissionDeniedEvent,
|
|
12
12
|
ToolPermissionPromptEvent,
|
|
13
|
-
ToolSecretDetectedEvent,
|
|
14
13
|
} from "@vellumai/skill-host-contracts";
|
|
15
14
|
|
|
16
15
|
import type { InterfaceId } from "../channels/types.js";
|
|
17
16
|
import type { CesClient } from "../credential-execution/client.js";
|
|
18
|
-
import type { HostBashProxy } from "../daemon/host-bash-proxy.js";
|
|
19
|
-
import type { HostBrowserProxy } from "../daemon/host-browser-proxy.js";
|
|
20
|
-
import type { HostFileProxy } from "../daemon/host-file-proxy.js";
|
|
21
|
-
import type { HostTransferProxy } from "../daemon/host-transfer-proxy.js";
|
|
22
17
|
import type { SecretPromptResult } from "../permissions/secret-prompter.js";
|
|
23
18
|
import type { ContentBlock } from "../providers/types.js";
|
|
24
19
|
import type { TrustClass } from "../runtime/actor-trust-resolver.js";
|
|
@@ -59,7 +54,6 @@ export type {
|
|
|
59
54
|
ToolExecutionStartEvent,
|
|
60
55
|
ToolPermissionDeniedEvent,
|
|
61
56
|
ToolPermissionPromptEvent,
|
|
62
|
-
ToolSecretDetectedEvent,
|
|
63
57
|
} from "@vellumai/skill-host-contracts";
|
|
64
58
|
export { RiskLevel } from "@vellumai/skill-host-contracts";
|
|
65
59
|
|
|
@@ -97,6 +91,14 @@ export interface ToolExecutionResult {
|
|
|
97
91
|
riskLevel?: string;
|
|
98
92
|
/** Human-readable reason for the risk classification. */
|
|
99
93
|
riskReason?: string;
|
|
94
|
+
/** ID of the trust rule that matched this invocation (if any). */
|
|
95
|
+
matchedTrustRuleId?: string;
|
|
96
|
+
/** How the decision was reached: prompted, auto, blocked, or unknown (legacy). */
|
|
97
|
+
approvalMode?: string;
|
|
98
|
+
/** Why the decision was reached (stable enum for client display). */
|
|
99
|
+
approvalReason?: string;
|
|
100
|
+
/** Snapshot of the auto-approve threshold at the time of execution. */
|
|
101
|
+
riskThreshold?: string;
|
|
100
102
|
/** Whether the daemon is running in a containerized (Docker) environment. */
|
|
101
103
|
isContainerized?: boolean;
|
|
102
104
|
/** Scope options ladder for the rule editor (narrowest to broadest). */
|
|
@@ -134,6 +136,8 @@ export interface ToolExecutedEvent {
|
|
|
134
136
|
requestId?: string;
|
|
135
137
|
executionTarget?: ExecutionTarget;
|
|
136
138
|
riskLevel: string;
|
|
139
|
+
/** ID of the trust rule that matched this invocation (if any). */
|
|
140
|
+
matchedTrustRuleId?: string;
|
|
137
141
|
decision: string;
|
|
138
142
|
durationMs: number;
|
|
139
143
|
result: ToolExecutionResult;
|
|
@@ -144,8 +148,7 @@ export type ToolLifecycleEvent =
|
|
|
144
148
|
| ToolPermissionPromptEvent
|
|
145
149
|
| ToolPermissionDeniedEvent
|
|
146
150
|
| ToolExecutedEvent
|
|
147
|
-
| ToolExecutionErrorEvent
|
|
148
|
-
| ToolSecretDetectedEvent;
|
|
151
|
+
| ToolExecutionErrorEvent;
|
|
149
152
|
|
|
150
153
|
export type ToolLifecycleEventHandler = (
|
|
151
154
|
event: ToolLifecycleEvent,
|
|
@@ -164,7 +167,7 @@ export interface ToolContext {
|
|
|
164
167
|
onOutput?: (chunk: string) => void;
|
|
165
168
|
/** Abort signal for cooperative cancellation. Tools should check this periodically. */
|
|
166
169
|
signal?: AbortSignal;
|
|
167
|
-
/** Optional callback for tool lifecycle events (start/prompt/deny/execute/error
|
|
170
|
+
/** Optional callback for tool lifecycle events (start/prompt/deny/execute/error). */
|
|
168
171
|
onToolLifecycleEvent?: ToolLifecycleEventHandler;
|
|
169
172
|
/** Optional resolver for proxy tools - delegates execution to an external client. */
|
|
170
173
|
proxyToolResolver?: ProxyToolResolver;
|
|
@@ -239,14 +242,6 @@ export interface ToolContext {
|
|
|
239
242
|
channelPermissionChannelId?: string;
|
|
240
243
|
/** The tool_use block ID from the LLM response, used to correlate confirmation prompts with specific tool invocations. */
|
|
241
244
|
toolUseId?: string;
|
|
242
|
-
/** Optional proxy for delegating host_bash execution to a connected client (managed/cloud-hosted mode). */
|
|
243
|
-
hostBashProxy?: HostBashProxy;
|
|
244
|
-
/** Optional proxy for delegating CDP commands to a connected client (managed/cloud-hosted mode). */
|
|
245
|
-
hostBrowserProxy?: HostBrowserProxy;
|
|
246
|
-
/** Optional proxy for delegating host_file_read/write/edit execution to a connected client (managed/cloud-hosted mode). */
|
|
247
|
-
hostFileProxy?: HostFileProxy;
|
|
248
|
-
/** Optional proxy for delegating bidirectional file transfers between sandbox and host (managed/cloud-hosted mode). */
|
|
249
|
-
hostTransferProxy?: HostTransferProxy;
|
|
250
245
|
/** True when the assistant is running as a platform-managed remote instance. Used to auto-approve sandboxed bash tools. */
|
|
251
246
|
isPlatformHosted?: boolean;
|
|
252
247
|
/** CES RPC client for credential execution operations. When present, the executor can bridge CES approval flows. */
|
|
@@ -259,28 +254,6 @@ export interface ToolContext {
|
|
|
259
254
|
* to cdp-inspect or local Playwright.
|
|
260
255
|
*/
|
|
261
256
|
transportInterface?: InterfaceId;
|
|
262
|
-
/**
|
|
263
|
-
* True when the host browser proxy's sender was overridden by a
|
|
264
|
-
* registry-routed extension connection (ChromeExtensionRegistry WebSocket).
|
|
265
|
-
* The CDP factory uses this to distinguish between an SSE-backed proxy
|
|
266
|
-
* (macOS, no extension) and an extension-backed proxy: only the latter
|
|
267
|
-
* should suppress desktop-auto cdp-inspect when temporarily unavailable,
|
|
268
|
-
* because the extension transport was explicitly expected and the
|
|
269
|
-
* disconnection is transient. An SSE-backed proxy that reports
|
|
270
|
-
* unavailable (e.g. non-interactive turn) should NOT suppress
|
|
271
|
-
* cdp-inspect — the proxy was never expected to service browser requests.
|
|
272
|
-
*/
|
|
273
|
-
hostBrowserRegistryRouted?: boolean;
|
|
274
|
-
/**
|
|
275
|
-
* Connected clients that support the `host_browser` capability, populated
|
|
276
|
-
* from the ClientRegistry. Used by `browser status` to report accurate
|
|
277
|
-
* extension availability even when no proxy is bound to the current
|
|
278
|
-
* conversation (e.g. when called from the CLI without a conversation ID).
|
|
279
|
-
*/
|
|
280
|
-
connectedBrowserClients?: Array<{
|
|
281
|
-
clientId: string;
|
|
282
|
-
interfaceId: string;
|
|
283
|
-
}>;
|
|
284
257
|
/**
|
|
285
258
|
* The per-turn inference-profile override the agent loop is currently
|
|
286
259
|
* running under, propagated through tool context so subagent-spawn tools
|
|
@@ -172,9 +172,9 @@ describe("Deepgram catalog entry", () => {
|
|
|
172
172
|
expect(entry.capabilities.supportedFormats).toContain("opus");
|
|
173
173
|
});
|
|
174
174
|
|
|
175
|
-
test("requires
|
|
175
|
+
test("requires an API key stored under 'credential/deepgram/api_key'", () => {
|
|
176
176
|
const apiKeySecret = entry.secretRequirements.find(
|
|
177
|
-
(s) => s.credentialStoreKey === "deepgram",
|
|
177
|
+
(s) => s.credentialStoreKey === "credential/deepgram/api_key",
|
|
178
178
|
);
|
|
179
179
|
expect(apiKeySecret).toBeDefined();
|
|
180
180
|
expect(apiKeySecret!.displayName).toContain("Deepgram");
|
|
@@ -152,7 +152,7 @@ const CATALOG: readonly TtsProviderCatalogEntry[] = [
|
|
|
152
152
|
},
|
|
153
153
|
secretRequirements: [
|
|
154
154
|
{
|
|
155
|
-
credentialStoreKey: "deepgram",
|
|
155
|
+
credentialStoreKey: "credential/deepgram/api_key",
|
|
156
156
|
displayName: "Deepgram API Key",
|
|
157
157
|
setCommand: "assistant keys set deepgram <key>",
|
|
158
158
|
},
|
package/src/usage/actors.ts
CHANGED