@vellumai/assistant 0.8.4 → 0.8.5
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 +2 -2
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/knip.json +2 -1
- package/openapi.yaml +809 -11
- package/package.json +1 -1
- package/src/__tests__/anthropic-provider.test.ts +34 -37
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +3 -3
- package/src/__tests__/audit-log-rotation.test.ts +70 -16
- package/src/__tests__/background-workers-disk-pressure.test.ts +3 -3
- package/src/__tests__/btw-routes.test.ts +2 -3
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/channel-guardian.test.ts +3 -3
- package/src/__tests__/checker.test.ts +6 -15
- package/src/__tests__/compaction-events.test.ts +1 -0
- package/src/__tests__/compactor-call-site-logging.test.ts +214 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +5 -11
- package/src/__tests__/computer-use-tools.test.ts +2 -4
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +197 -2
- package/src/__tests__/conversation-agent-loop.test.ts +163 -122
- package/src/__tests__/conversation-app-control-instantiation.test.ts +2 -5
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-error.test.ts +31 -0
- package/src/__tests__/conversation-fork-crud.test.ts +178 -15
- package/src/__tests__/conversation-lifecycle.test.ts +52 -11
- package/src/__tests__/{conversation-load-cleaned-at.test.ts → conversation-load-history-stripped.test.ts} +13 -13
- package/src/__tests__/conversation-provider-retry-repair.test.ts +1 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +109 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +35 -0
- package/src/__tests__/conversation-skill-tools.test.ts +2 -5
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-sync-tags.test.ts +99 -32
- package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +1 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +1 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +9 -7
- package/src/__tests__/credential-execution-tools.test.ts +6 -6
- package/src/__tests__/credential-security-invariants.test.ts +1 -0
- package/src/__tests__/credential-vault-unit.test.ts +2 -2
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/gateway-flag-listener.test.ts +237 -0
- package/src/__tests__/gemini-provider.test.ts +78 -0
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/guardian-outbound-http.test.ts +7 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
- package/src/__tests__/heartbeat-service.test.ts +4 -0
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/list-messages-tool-merge.test.ts +70 -11
- package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
- package/src/__tests__/llm-resolver.test.ts +77 -9
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/logger.test.ts +89 -0
- package/src/__tests__/mcp-abort-signal.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +31 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
- package/src/__tests__/model-intents.test.ts +2 -4
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/onboarding-template-contract.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +46 -0
- package/src/__tests__/openai-responses-provider.test.ts +114 -12
- package/src/__tests__/pending-interactions-resolved-event.test.ts +0 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -2
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +2 -2
- package/src/__tests__/plugin-tool-contribution.test.ts +13 -6
- package/src/__tests__/plugin-types.test.ts +3 -2
- package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
- package/src/__tests__/pricing.test.ts +12 -0
- package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
- package/src/__tests__/registry.test.ts +2 -8
- package/src/__tests__/require-fresh-approval.test.ts +2 -2
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
- package/src/__tests__/skill-feature-flags.test.ts +2 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +4 -7
- package/src/__tests__/skill-projection.benchmark.test.ts +2 -6
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/subagent-notify-parent.test.ts +1 -1
- package/src/__tests__/suggestion-routes.test.ts +1 -0
- package/src/__tests__/sync-message-contract.test.ts +59 -0
- package/src/__tests__/system-prompt.test.ts +145 -131
- package/src/__tests__/terminal-tools.test.ts +1 -1
- package/src/__tests__/tool-approval-handler.test.ts +1 -5
- package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +15 -5
- package/src/__tests__/tool-executor.test.ts +9 -62
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/usage-routes.test.ts +3 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -2
- package/src/__tests__/workspace-git-service.test.ts +6 -5
- package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
- package/src/acp/prepare-agent-env.ts +78 -0
- package/src/acp/session-manager.ts +1 -1
- package/src/agent/loop.ts +8 -0
- package/src/api/README.md +5 -0
- package/src/api/index.ts +4 -0
- package/src/api/package.json +10 -0
- package/src/background-wake/background-wake-routes.test.ts +233 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
- package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
- package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
- package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +1 -0
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/domain.ts +91 -41
- package/src/cli/commands/inference.ts +93 -40
- package/src/cli/commands/memory-v2-compare-render.ts +115 -0
- package/src/cli/commands/memory-v2.ts +176 -1
- package/src/cli/commands/memory-v3-render.ts +344 -0
- package/src/cli/commands/memory-v3.ts +316 -0
- package/src/cli/program.ts +2 -0
- package/src/config/assistant-feature-flags.ts +21 -9
- package/src/config/bundled-skills/document-editor/SKILL.md +11 -2
- package/src/config/bundled-skills/document-editor/TOOLS.json +18 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
- package/src/config/bundled-tool-registry.ts +2 -0
- package/src/config/call-site-defaults.ts +7 -6
- package/src/config/feature-flag-registry.json +16 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +213 -1
- package/src/config/schemas/call-site-catalog.ts +21 -7
- package/src/config/schemas/llm.ts +12 -1
- package/src/config/schemas/memory-v2.ts +246 -0
- package/src/config/schemas/memory.ts +2 -1
- package/src/context/compactor.ts +52 -0
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -1
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +1 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +2 -13
- package/src/daemon/conversation-agent-loop.ts +126 -76
- package/src/daemon/conversation-error.ts +31 -1
- package/src/daemon/conversation-lifecycle.ts +27 -22
- package/src/daemon/conversation-runtime-assembly.ts +10 -9
- package/src/daemon/conversation-tool-setup.ts +63 -3
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +14 -29
- package/src/daemon/disk-pressure-guard.ts +14 -2
- package/src/daemon/handlers/config-model.test.ts +1 -0
- package/src/daemon/handlers/conversations.ts +11 -3
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +4 -4
- package/src/daemon/host-file-proxy.ts +4 -4
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +10 -10
- package/src/daemon/lifecycle.ts +23 -20
- package/src/daemon/meet-manifest-loader.ts +1 -7
- package/src/daemon/message-types/conversations.ts +6 -9
- package/src/daemon/message-types/home.ts +1 -13
- package/src/daemon/message-types/messages.ts +6 -14
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/shutdown-handlers.ts +24 -5
- package/src/daemon/switch-inference-profile-tool.ts +52 -0
- package/src/daemon/tool-setup-types.ts +13 -0
- package/src/events/relationship-state-updated.ts +25 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +1 -1
- package/src/home/home-greeting.ts +0 -9
- package/src/home/suggested-prompts.ts +0 -9
- package/src/ipc/gateway-flag-listener.ts +123 -0
- package/src/ipc/skill-routes/registries.ts +8 -12
- package/src/memory/__tests__/db-async-query.test.ts +165 -0
- package/src/memory/__tests__/db-maintenance.test.ts +115 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +241 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
- package/src/memory/__tests__/memory-retrospective-job.test.ts +7 -0
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-crud.ts +71 -70
- package/src/memory/conversation-starters-cadence.ts +3 -1
- package/src/memory/conversation-title-service.ts +19 -3
- package/src/memory/db-async-query.ts +214 -0
- package/src/memory/db-init.ts +10 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/graph/bootstrap.ts +8 -1
- package/src/memory/graph/capability-seed.ts +7 -3
- package/src/memory/graph/conversation-graph-memory.ts +100 -17
- package/src/memory/graph/extraction.ts +1 -5
- package/src/memory/graph/graph-search.ts +7 -1
- package/src/memory/indexer.ts +28 -18
- package/src/memory/job-handlers/cleanup.ts +76 -18
- package/src/memory/job-handlers/conversation-starters.ts +1 -4
- package/src/memory/jobs/embed-pkb-file.ts +6 -1
- package/src/memory/jobs-store.ts +14 -0
- package/src/memory/jobs-worker.ts +55 -22
- package/src/memory/llm-request-log-source-clickhouse.ts +42 -2
- package/src/memory/llm-request-log-source-local.ts +7 -0
- package/src/memory/llm-request-log-source.ts +9 -2
- package/src/memory/llm-request-log-store.ts +43 -1
- package/src/memory/llm-usage-store.ts +24 -0
- package/src/memory/memory-retrospective-enqueue.ts +8 -1
- package/src/memory/memory-retrospective-job.ts +5 -0
- package/src/memory/memory-v2-activation-log-store.ts +15 -6
- package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
- package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
- package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
- package/src/memory/migrations/index.ts +17 -0
- package/src/memory/migrations/registry.ts +33 -0
- package/src/memory/schema/conversations.ts +1 -1
- package/src/memory/schema/infrastructure.ts +21 -0
- package/src/memory/tool-usage-store.ts +36 -8
- package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
- package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
- package/src/memory/v2/__tests__/harness-metrics.test.ts +74 -0
- package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +225 -0
- package/src/memory/v2/__tests__/harness-runner.test.ts +109 -0
- package/src/memory/v2/__tests__/injection.test.ts +127 -98
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +171 -3
- package/src/memory/v2/harness/compare.ts +57 -0
- package/src/memory/v2/harness/metrics.ts +124 -0
- package/src/memory/v2/harness/oracle.ts +145 -0
- package/src/memory/v2/harness/replay-input.ts +224 -0
- package/src/memory/v2/harness/retriever.ts +74 -0
- package/src/memory/v2/harness/router-retriever.ts +43 -0
- package/src/memory/v2/harness/runner.ts +106 -0
- package/src/memory/v2/harness/trace.ts +58 -0
- package/src/memory/v2/injection.ts +21 -15
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +171 -18
- package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
- package/src/memory/v3/__tests__/consolidation-job.test.ts +468 -0
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
- package/src/memory/v3/__tests__/edges.test.ts +563 -0
- package/src/memory/v3/__tests__/filter.test.ts +512 -0
- package/src/memory/v3/__tests__/gate.test.ts +574 -0
- package/src/memory/v3/__tests__/index-composition.test.ts +233 -0
- package/src/memory/v3/__tests__/loop.test.ts +530 -0
- package/src/memory/v3/__tests__/retriever.test.ts +226 -0
- package/src/memory/v3/__tests__/scouts.test.ts +440 -0
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +312 -0
- package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
- package/src/memory/v3/__tests__/traversal.test.ts +469 -0
- package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
- package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
- package/src/memory/v3/__tests__/tree-walk.test.ts +707 -0
- package/src/memory/v3/__tests__/validate.test.ts +245 -0
- package/src/memory/v3/auto-edges.ts +223 -0
- package/src/memory/v3/coactivation-store.ts +124 -0
- package/src/memory/v3/consolidation-job.ts +323 -0
- package/src/memory/v3/edge-learning-job.ts +160 -0
- package/src/memory/v3/edges.ts +249 -0
- package/src/memory/v3/filter.ts +281 -0
- package/src/memory/v3/gate.ts +334 -0
- package/src/memory/v3/index-composition.ts +113 -0
- package/src/memory/v3/llm-capture.ts +46 -0
- package/src/memory/v3/loop.ts +382 -0
- package/src/memory/v3/maintenance.ts +144 -0
- package/src/memory/v3/prompt-context.ts +33 -0
- package/src/memory/v3/prompts/consolidation.ts +458 -0
- package/src/memory/v3/prompts/system-prompts.ts +196 -0
- package/src/memory/v3/retriever.ts +33 -0
- package/src/memory/v3/scouts.ts +420 -0
- package/src/memory/v3/shadow-middleware.ts +305 -0
- package/src/memory/v3/traversal.ts +206 -0
- package/src/memory/v3/tree-index.ts +237 -0
- package/src/memory/v3/tree-store.ts +394 -0
- package/src/memory/v3/tree-walk.ts +351 -0
- package/src/memory/v3/types.ts +65 -0
- package/src/memory/v3/validate.ts +300 -0
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/emit-signal.ts +29 -49
- package/src/permissions/prompter.ts +3 -3
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +2 -2
- package/src/plugin-api/index.ts +4 -0
- package/src/plugin-api/types.ts +7 -33
- package/src/plugins/defaults/index.ts +6 -0
- package/src/plugins/defaults/injectors.ts +18 -11
- package/src/plugins/external-plugin-loader.ts +5 -68
- package/src/plugins/types.ts +11 -16
- package/src/proactive-artifact/aux-message-injector.ts +17 -4
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +39 -7
- package/src/prompts/system-prompt.ts +50 -185
- package/src/prompts/templates/BOOTSTRAP.md +2 -2
- package/src/prompts/templates/system-sections.ts +230 -8
- package/src/providers/__tests__/connection-model-compat.test.ts +234 -0
- package/src/providers/__tests__/retry-callsite.test.ts +85 -5
- package/src/providers/anthropic/client.ts +32 -66
- package/src/providers/call-site-routing.ts +14 -2
- package/src/providers/connection-model-compat.ts +38 -0
- package/src/providers/connection-resolution.ts +16 -2
- package/src/providers/gemini/client.ts +49 -6
- package/src/providers/inference/adapter-factory.ts +3 -0
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +43 -0
- package/src/providers/model-intents.ts +1 -1
- package/src/providers/openai/chat-completions-provider.ts +6 -3
- package/src/providers/openai/codex-models.ts +18 -0
- package/src/providers/openai/responses-provider.ts +78 -21
- package/src/providers/provider-send-message.ts +7 -1
- package/src/providers/retry.ts +34 -3
- package/src/providers/thinking-config.ts +26 -1
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/agent-wake.ts +1 -0
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +36 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/http-types.ts +0 -2
- package/src/runtime/migrations/vbundle-builder.ts +10 -3
- package/src/runtime/pending-interactions.ts +0 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +106 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +25 -6
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/avatar-routes.ts +10 -10
- package/src/runtime/routes/background-wake-routes.ts +188 -0
- package/src/runtime/routes/browser-tabs-routes.ts +200 -0
- package/src/runtime/routes/btw-routes.ts +0 -6
- package/src/runtime/routes/conversation-cli-routes.ts +1 -1
- package/src/runtime/routes/conversation-list-routes.ts +12 -4
- package/src/runtime/routes/conversation-management-routes.ts +77 -20
- package/src/runtime/routes/conversation-query-routes.ts +142 -36
- package/src/runtime/routes/conversation-routes.ts +252 -410
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/domain-routes.ts +60 -10
- package/src/runtime/routes/email-routes.ts +5 -2
- package/src/runtime/routes/events-routes.ts +54 -10
- package/src/runtime/routes/group-routes.ts +24 -8
- package/src/runtime/routes/host-browser-routes.ts +10 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/index.ts +8 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
- package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +215 -5
- package/src/runtime/routes/memory-v3-routes.ts +316 -0
- package/src/runtime/routes/migration-routes.ts +21 -24
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- package/src/runtime/routes/secret-routes.ts +25 -5
- package/src/runtime/routes/settings-routes.ts +12 -11
- package/src/runtime/routes/slack-channel-routes.ts +5 -4
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/sync/resource-sync-events.ts +106 -38
- package/src/runtime/sync/sync-publisher.test.ts +49 -0
- package/src/runtime/sync/sync-publisher.ts +2 -1
- package/src/runtime/verification-outbound-actions.ts +73 -1
- package/src/telemetry/types.ts +12 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/acp/spawn.test.ts +119 -0
- package/src/tools/acp/spawn.ts +15 -2
- package/src/tools/apps/definitions.ts +2 -8
- package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
- package/src/tools/ask-question/ask-question-tool.ts +38 -45
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +70 -0
- package/src/tools/browser/browser-execution.ts +16 -3
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +3 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +12 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +27 -1
- package/src/tools/browser/cdp-client/factory.ts +100 -17
- package/src/tools/browser/cdp-client/local-cdp-client.ts +12 -0
- package/src/tools/browser/cdp-client/types.ts +65 -0
- package/src/tools/browser/pinned-tabs.ts +96 -40
- package/src/tools/computer-use/definitions.ts +22 -78
- package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
- package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
- package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
- package/src/tools/credentials/vault.ts +3 -9
- package/src/tools/document/document-tool.ts +59 -0
- package/src/tools/execution-target.ts +21 -23
- package/src/tools/executor.ts +6 -1
- package/src/tools/filesystem/edit.ts +3 -9
- package/src/tools/filesystem/list.ts +3 -9
- package/src/tools/filesystem/read.ts +3 -9
- package/src/tools/filesystem/write.ts +3 -9
- package/src/tools/host-filesystem/edit.ts +3 -9
- package/src/tools/host-filesystem/read.ts +3 -9
- package/src/tools/host-filesystem/transfer.ts +3 -9
- package/src/tools/host-filesystem/write.ts +3 -9
- package/src/tools/host-terminal/host-shell.ts +3 -9
- package/src/tools/mcp/mcp-tool-factory.ts +1 -8
- package/src/tools/memory/register.test.ts +1 -1
- package/src/tools/memory/register.ts +4 -9
- package/src/tools/network/web-fetch.ts +3 -9
- package/src/tools/network/web-search.ts +25 -32
- package/src/tools/registry.ts +7 -23
- package/src/tools/schema-transforms.ts +1 -1
- package/src/tools/skills/execute.ts +3 -9
- package/src/tools/skills/load.ts +3 -9
- package/src/tools/skills/skill-tool-factory.ts +1 -8
- package/src/tools/subagent/notify-parent.ts +3 -9
- package/src/tools/system/request-permission.ts +3 -9
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/types.ts +27 -98
- package/src/tools/ui-surface/definitions.ts +6 -22
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -2
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/registry.ts +2 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
- package/src/__tests__/message-complete-display-id.test.ts +0 -175
- package/src/daemon/query-complexity-router.ts +0 -75
- package/src/prompts/cache-boundary.ts +0 -8
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { supportsHostProxy } from "../../channels/types.js";
|
|
2
2
|
import { HostFileProxy } from "../../daemon/host-file-proxy.js";
|
|
3
3
|
import { RiskLevel } from "../../permissions/types.js";
|
|
4
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
5
4
|
import { assistantEventHub } from "../../runtime/assistant-event-hub.js";
|
|
6
5
|
import { FileSystemOps } from "../shared/filesystem/file-ops-service.js";
|
|
7
6
|
import { formatEditDiff } from "../shared/filesystem/format-diff.js";
|
|
@@ -13,13 +12,10 @@ class HostFileEditTool implements Tool {
|
|
|
13
12
|
description =
|
|
14
13
|
"Replace exact text in a file on your guardian's device with new text. For files on your own machine, use file_edit instead.";
|
|
15
14
|
category = "host-filesystem";
|
|
15
|
+
executionTarget = "host" as const;
|
|
16
16
|
defaultRiskLevel = RiskLevel.Medium;
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
return {
|
|
20
|
-
name: this.name,
|
|
21
|
-
description: this.description,
|
|
22
|
-
input_schema: {
|
|
18
|
+
input_schema = {
|
|
23
19
|
type: "object",
|
|
24
20
|
properties: {
|
|
25
21
|
path: {
|
|
@@ -46,9 +42,7 @@ class HostFileEditTool implements Tool {
|
|
|
46
42
|
},
|
|
47
43
|
},
|
|
48
44
|
required: ["path", "old_string", "new_string"],
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
}
|
|
45
|
+
};
|
|
52
46
|
|
|
53
47
|
async execute(
|
|
54
48
|
input: Record<string, unknown>,
|
|
@@ -3,7 +3,6 @@ import { extname } from "node:path";
|
|
|
3
3
|
import { supportsHostProxy } from "../../channels/types.js";
|
|
4
4
|
import { HostFileProxy } from "../../daemon/host-file-proxy.js";
|
|
5
5
|
import { RiskLevel } from "../../permissions/types.js";
|
|
6
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
7
6
|
import { assistantEventHub } from "../../runtime/assistant-event-hub.js";
|
|
8
7
|
import { FileSystemOps } from "../shared/filesystem/file-ops-service.js";
|
|
9
8
|
import {
|
|
@@ -18,13 +17,10 @@ class HostFileReadTool implements Tool {
|
|
|
18
17
|
description =
|
|
19
18
|
"Read the contents of a file on your guardian's device, including images (JPEG, PNG, GIF, WebP). For files on your own machine, use file_read instead.";
|
|
20
19
|
category = "host-filesystem";
|
|
20
|
+
executionTarget = "host" as const;
|
|
21
21
|
defaultRiskLevel = RiskLevel.Medium;
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
name: this.name,
|
|
26
|
-
description: this.description,
|
|
27
|
-
input_schema: {
|
|
23
|
+
input_schema = {
|
|
28
24
|
type: "object",
|
|
29
25
|
properties: {
|
|
30
26
|
path: {
|
|
@@ -46,9 +42,7 @@ class HostFileReadTool implements Tool {
|
|
|
46
42
|
},
|
|
47
43
|
},
|
|
48
44
|
required: ["path"],
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
}
|
|
45
|
+
};
|
|
52
46
|
|
|
53
47
|
async execute(
|
|
54
48
|
input: Record<string, unknown>,
|
|
@@ -5,7 +5,6 @@ import { dirname, isAbsolute } from "node:path";
|
|
|
5
5
|
import { supportsHostProxy } from "../../channels/types.js";
|
|
6
6
|
import { HostTransferProxy } from "../../daemon/host-transfer-proxy.js";
|
|
7
7
|
import { RiskLevel } from "../../permissions/types.js";
|
|
8
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
9
8
|
import { assistantEventHub } from "../../runtime/assistant-event-hub.js";
|
|
10
9
|
import { sandboxPolicy } from "../shared/filesystem/path-policy.js";
|
|
11
10
|
import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
|
|
@@ -15,13 +14,10 @@ class HostFileTransferTool implements Tool {
|
|
|
15
14
|
description =
|
|
16
15
|
"Copy a file between the assistant's workspace and the host machine. Set direction to 'to_host' to send a workspace file to the host, or 'to_sandbox' to pull a host file into the workspace. When multiple clients support host_file, specify which one to use with target_client_id.";
|
|
17
16
|
category = "host-filesystem";
|
|
17
|
+
executionTarget = "host" as const;
|
|
18
18
|
defaultRiskLevel = RiskLevel.Medium;
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
name: this.name,
|
|
23
|
-
description: this.description,
|
|
24
|
-
input_schema: {
|
|
20
|
+
input_schema = {
|
|
25
21
|
type: "object",
|
|
26
22
|
properties: {
|
|
27
23
|
source_path: {
|
|
@@ -57,9 +53,7 @@ class HostFileTransferTool implements Tool {
|
|
|
57
53
|
},
|
|
58
54
|
},
|
|
59
55
|
required: ["source_path", "dest_path", "direction"],
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
56
|
+
};
|
|
63
57
|
|
|
64
58
|
async execute(
|
|
65
59
|
input: Record<string, unknown>,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { supportsHostProxy } from "../../channels/types.js";
|
|
2
2
|
import { HostFileProxy } from "../../daemon/host-file-proxy.js";
|
|
3
3
|
import { RiskLevel } from "../../permissions/types.js";
|
|
4
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
5
4
|
import { assistantEventHub } from "../../runtime/assistant-event-hub.js";
|
|
6
5
|
import { FileSystemOps } from "../shared/filesystem/file-ops-service.js";
|
|
7
6
|
import { formatWriteSummary } from "../shared/filesystem/format-diff.js";
|
|
@@ -13,13 +12,10 @@ class HostFileWriteTool implements Tool {
|
|
|
13
12
|
description =
|
|
14
13
|
"Write content to a file on your guardian's device, creating it if it does not exist. For files on your own machine, use file_write instead.";
|
|
15
14
|
category = "host-filesystem";
|
|
15
|
+
executionTarget = "host" as const;
|
|
16
16
|
defaultRiskLevel = RiskLevel.Medium;
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
return {
|
|
20
|
-
name: this.name,
|
|
21
|
-
description: this.description,
|
|
22
|
-
input_schema: {
|
|
18
|
+
input_schema = {
|
|
23
19
|
type: "object",
|
|
24
20
|
properties: {
|
|
25
21
|
path: {
|
|
@@ -37,9 +33,7 @@ class HostFileWriteTool implements Tool {
|
|
|
37
33
|
},
|
|
38
34
|
},
|
|
39
35
|
required: ["path", "content"],
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
}
|
|
36
|
+
};
|
|
43
37
|
|
|
44
38
|
async execute(
|
|
45
39
|
input: Record<string, unknown>,
|
|
@@ -23,7 +23,6 @@ import { getConfig } from "../../config/loader.js";
|
|
|
23
23
|
import { isCesShellLockdownEnabled } from "../../credential-execution/feature-gates.js";
|
|
24
24
|
import { HostBashProxy } from "../../daemon/host-bash-proxy.js";
|
|
25
25
|
import { RiskLevel } from "../../permissions/types.js";
|
|
26
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
27
26
|
import { isUntrustedTrustClass } from "../../runtime/actor-trust-resolver.js";
|
|
28
27
|
import { wakeAgentForOpportunity } from "../../runtime/agent-wake.js";
|
|
29
28
|
import { assistantEventHub } from "../../runtime/assistant-event-hub.js";
|
|
@@ -97,16 +96,13 @@ class HostShellTool implements Tool {
|
|
|
97
96
|
description =
|
|
98
97
|
"LAST RESORT — Execute a shell command directly on the host machine. You MUST strongly prefer the regular `bash` tool for all commands. Only use `host_bash` when you are absolutely certain the command MUST run on the host machine and CANNOT run in the workspace (e.g., managing host-level system services, accessing host-only peripherals, or interacting with host paths outside the workspace). If in doubt, use `bash` instead. Approval-gated: each invocation must be explicitly approved. Do not use for commands that require injected credentials or secrets.";
|
|
99
98
|
category = "host-terminal";
|
|
99
|
+
executionTarget = "host" as const;
|
|
100
100
|
// host_bash is a weaker-tier escape hatch under CES lockdown. It remains
|
|
101
101
|
// Medium risk by default but persistent approvals are disabled for
|
|
102
102
|
// untrusted sessions (see execute()).
|
|
103
103
|
defaultRiskLevel = RiskLevel.Medium;
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
return {
|
|
107
|
-
name: this.name,
|
|
108
|
-
description: this.description,
|
|
109
|
-
input_schema: {
|
|
105
|
+
input_schema = {
|
|
110
106
|
type: "object",
|
|
111
107
|
properties: {
|
|
112
108
|
command: {
|
|
@@ -140,9 +136,7 @@ class HostShellTool implements Tool {
|
|
|
140
136
|
},
|
|
141
137
|
},
|
|
142
138
|
required: ["command", "activity"],
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
}
|
|
139
|
+
};
|
|
146
140
|
|
|
147
141
|
async execute(
|
|
148
142
|
input: Record<string, unknown>,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { McpServerConfig } from "../../config/schemas/mcp.js";
|
|
2
2
|
import type { McpServerManager } from "../../mcp/manager.js";
|
|
3
3
|
import { RiskLevel } from "../../permissions/types.js";
|
|
4
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
5
4
|
import { toProviderSafeToolName } from "../provider-tool-name.js";
|
|
6
5
|
import { schemaDefinesProperty } from "../schema-transforms.js";
|
|
7
6
|
import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
|
|
@@ -53,13 +52,7 @@ export function createMcpTool(
|
|
|
53
52
|
ownerMcpServerId: serverId,
|
|
54
53
|
executionTarget: "host",
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
return {
|
|
58
|
-
name: namespacedName,
|
|
59
|
-
description: metadata.description,
|
|
60
|
-
input_schema: metadata.inputSchema as ToolDefinition["input_schema"],
|
|
61
|
-
};
|
|
62
|
-
},
|
|
55
|
+
input_schema: metadata.inputSchema as object,
|
|
63
56
|
|
|
64
57
|
async execute(
|
|
65
58
|
input: Record<string, unknown>,
|
|
@@ -100,7 +100,7 @@ function makeContext(overrides: Partial<ToolContext> = {}): ToolContext {
|
|
|
100
100
|
|
|
101
101
|
describe("recallTool definition", () => {
|
|
102
102
|
test("exposes the agentic local search schema", () => {
|
|
103
|
-
const definition = recallTool
|
|
103
|
+
const definition = recallTool;
|
|
104
104
|
|
|
105
105
|
expect(definition.name).toBe("recall");
|
|
106
106
|
expect(definition.description).toContain("Search local information");
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
graphRememberDefinition,
|
|
11
11
|
} from "../../memory/graph/tools.js";
|
|
12
12
|
import { RiskLevel } from "../../permissions/types.js";
|
|
13
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
14
13
|
import { isUntrustedTrustClass } from "../../runtime/actor-trust-resolver.js";
|
|
15
14
|
import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
|
|
16
15
|
|
|
@@ -20,11 +19,9 @@ class RememberTool implements Tool {
|
|
|
20
19
|
name = "remember";
|
|
21
20
|
description = graphRememberDefinition.description;
|
|
22
21
|
category = "memory";
|
|
22
|
+
executionTarget = "sandbox" as const;
|
|
23
23
|
defaultRiskLevel = RiskLevel.Low;
|
|
24
|
-
|
|
25
|
-
getDefinition(): ToolDefinition {
|
|
26
|
-
return graphRememberDefinition;
|
|
27
|
-
}
|
|
24
|
+
input_schema = graphRememberDefinition.input_schema;
|
|
28
25
|
|
|
29
26
|
async execute(
|
|
30
27
|
input: Record<string, unknown>,
|
|
@@ -51,11 +48,9 @@ class RecallTool implements Tool {
|
|
|
51
48
|
name = "recall";
|
|
52
49
|
description = graphRecallDefinition.description;
|
|
53
50
|
category = "memory";
|
|
51
|
+
executionTarget = "sandbox" as const;
|
|
54
52
|
defaultRiskLevel = RiskLevel.Low;
|
|
55
|
-
|
|
56
|
-
getDefinition(): ToolDefinition {
|
|
57
|
-
return graphRecallDefinition;
|
|
58
|
-
}
|
|
53
|
+
input_schema = graphRecallDefinition.input_schema;
|
|
59
54
|
|
|
60
55
|
async execute(
|
|
61
56
|
input: Record<string, unknown>,
|
|
@@ -7,7 +7,6 @@ import { Readable } from "node:stream";
|
|
|
7
7
|
|
|
8
8
|
import type { WebFetchMetadata } from "../../daemon/message-types/web-activity.js";
|
|
9
9
|
import { RiskLevel } from "../../permissions/types.js";
|
|
10
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
11
10
|
import { wrapUntrustedContent } from "../../security/untrusted-content.js";
|
|
12
11
|
import { faviconUrlForDomain } from "../../util/favicon.js";
|
|
13
12
|
import { getLogger } from "../../util/logger.js";
|
|
@@ -990,13 +989,10 @@ class WebFetchTool implements Tool {
|
|
|
990
989
|
description =
|
|
991
990
|
"Fetch a webpage and return LLM-friendly extracted text with metadata. Use this after web_search when you need to read a specific result. To find pages on a site without guessing slugs, fetch /sitemap.xml first — it has ground-truth paths and works even when pages are JS-rendered.";
|
|
992
991
|
category = "network";
|
|
992
|
+
executionTarget = "sandbox" as const;
|
|
993
993
|
defaultRiskLevel = RiskLevel.Low;
|
|
994
994
|
|
|
995
|
-
|
|
996
|
-
return {
|
|
997
|
-
name: this.name,
|
|
998
|
-
description: this.description,
|
|
999
|
-
input_schema: {
|
|
995
|
+
input_schema = {
|
|
1000
996
|
type: "object",
|
|
1001
997
|
properties: {
|
|
1002
998
|
url: {
|
|
@@ -1029,9 +1025,7 @@ class WebFetchTool implements Tool {
|
|
|
1029
1025
|
},
|
|
1030
1026
|
},
|
|
1031
1027
|
required: ["url"],
|
|
1032
|
-
}
|
|
1033
|
-
};
|
|
1034
|
-
}
|
|
1028
|
+
};
|
|
1035
1029
|
|
|
1036
1030
|
async execute(
|
|
1037
1031
|
input: Record<string, unknown>,
|
|
@@ -4,7 +4,6 @@ import type {
|
|
|
4
4
|
WebSearchResultItem,
|
|
5
5
|
} from "../../daemon/message-types/web-activity.js";
|
|
6
6
|
import { RiskLevel } from "../../permissions/types.js";
|
|
7
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
8
7
|
import { getProviderKeyAsync } from "../../security/secure-keys.js";
|
|
9
8
|
import { wrapUntrustedContent } from "../../security/untrusted-content.js";
|
|
10
9
|
import { faviconUrlForDomain } from "../../util/favicon.js";
|
|
@@ -650,39 +649,33 @@ class WebSearchTool implements Tool {
|
|
|
650
649
|
description =
|
|
651
650
|
"Search the web and return results. Useful for looking up current information, documentation, or anything the assistant doesn't know.";
|
|
652
651
|
category = "network";
|
|
652
|
+
executionTarget = "sandbox" as const;
|
|
653
653
|
defaultRiskLevel = RiskLevel.Low;
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
type: "object",
|
|
661
|
-
properties: {
|
|
662
|
-
query: {
|
|
663
|
-
type: "string",
|
|
664
|
-
description: "The search query string",
|
|
665
|
-
},
|
|
666
|
-
count: {
|
|
667
|
-
type: "number",
|
|
668
|
-
description:
|
|
669
|
-
"Number of results to return (1-20, default 10). Used with Brave and Tavily providers.",
|
|
670
|
-
},
|
|
671
|
-
offset: {
|
|
672
|
-
type: "number",
|
|
673
|
-
description:
|
|
674
|
-
"Pagination offset (0-9, default 0). Only used with Brave provider.",
|
|
675
|
-
},
|
|
676
|
-
freshness: {
|
|
677
|
-
type: "string",
|
|
678
|
-
description:
|
|
679
|
-
'Filter by recency: "pd" (past day), "pw" (past week), "pm" (past month), "py" (past year). Used with Brave and Tavily providers.',
|
|
680
|
-
},
|
|
681
|
-
},
|
|
682
|
-
required: ["query"],
|
|
654
|
+
input_schema = {
|
|
655
|
+
type: "object",
|
|
656
|
+
properties: {
|
|
657
|
+
query: {
|
|
658
|
+
type: "string",
|
|
659
|
+
description: "The search query string",
|
|
683
660
|
},
|
|
684
|
-
|
|
685
|
-
|
|
661
|
+
count: {
|
|
662
|
+
type: "number",
|
|
663
|
+
description:
|
|
664
|
+
"Number of results to return (1-20, default 10). Used with Brave and Tavily providers.",
|
|
665
|
+
},
|
|
666
|
+
offset: {
|
|
667
|
+
type: "number",
|
|
668
|
+
description:
|
|
669
|
+
"Pagination offset (0-9, default 0). Only used with Brave provider.",
|
|
670
|
+
},
|
|
671
|
+
freshness: {
|
|
672
|
+
type: "string",
|
|
673
|
+
description:
|
|
674
|
+
'Filter by recency: "pd" (past day), "pw" (past week), "pm" (past month), "py" (past year). Used with Brave and Tavily providers.',
|
|
675
|
+
},
|
|
676
|
+
},
|
|
677
|
+
required: ["query"],
|
|
678
|
+
};
|
|
686
679
|
|
|
687
680
|
async execute(
|
|
688
681
|
input: Record<string, unknown>,
|
package/src/tools/registry.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { hostFileWriteTool } from "./host-filesystem/write.js";
|
|
|
10
10
|
import { hostShellTool } from "./host-terminal/host-shell.js";
|
|
11
11
|
import { toProviderSafeToolName } from "./provider-tool-name.js";
|
|
12
12
|
import { registerSystemTools } from "./system/register.js";
|
|
13
|
-
import type {
|
|
13
|
+
import type { LoadedTool, Tool } from "./types.js";
|
|
14
14
|
import { allUiSurfaceTools } from "./ui-surface/definitions.js";
|
|
15
15
|
import { registerUiSurfaceTools } from "./ui-surface/registry.js";
|
|
16
16
|
|
|
@@ -85,12 +85,6 @@ function withProviderSafeToolName(tool: Tool): Tool {
|
|
|
85
85
|
return {
|
|
86
86
|
...tool,
|
|
87
87
|
name: safeName,
|
|
88
|
-
getDefinition(): ToolDefinition {
|
|
89
|
-
return {
|
|
90
|
-
...tool.getDefinition(),
|
|
91
|
-
name: safeName,
|
|
92
|
-
};
|
|
93
|
-
},
|
|
94
88
|
};
|
|
95
89
|
}
|
|
96
90
|
|
|
@@ -193,12 +187,11 @@ export function registerSkillTools(newTools: Tool[]): Tool[] {
|
|
|
193
187
|
*/
|
|
194
188
|
export function registerPluginTools(
|
|
195
189
|
pluginName: string,
|
|
196
|
-
newTools:
|
|
190
|
+
newTools: LoadedTool[],
|
|
197
191
|
): Tool[] {
|
|
198
192
|
const stamped: Tool[] = newTools.map((pluginTool) => {
|
|
199
|
-
const { input_schema, ...rest } = pluginTool;
|
|
200
193
|
const tool: Tool = {
|
|
201
|
-
...
|
|
194
|
+
...pluginTool,
|
|
202
195
|
category: "plugin",
|
|
203
196
|
origin: "plugin" as const,
|
|
204
197
|
ownerPluginId: pluginName,
|
|
@@ -206,13 +199,6 @@ export function registerPluginTools(
|
|
|
206
199
|
ownerMcpServerId: undefined,
|
|
207
200
|
ownerSkillBundled: undefined,
|
|
208
201
|
ownerSkillVersionHash: undefined,
|
|
209
|
-
getDefinition(): ToolDefinition {
|
|
210
|
-
return {
|
|
211
|
-
name: pluginTool.name,
|
|
212
|
-
description: pluginTool.description,
|
|
213
|
-
input_schema,
|
|
214
|
-
};
|
|
215
|
-
},
|
|
216
202
|
};
|
|
217
203
|
return withProviderSafeToolName(tool);
|
|
218
204
|
});
|
|
@@ -399,9 +385,7 @@ export function unregisterAllMcpTools(): void {
|
|
|
399
385
|
* were registered after session creation (e.g. via `vellum mcp reload`).
|
|
400
386
|
*/
|
|
401
387
|
export function getMcpToolDefinitions(): ToolDefinition[] {
|
|
402
|
-
return Array.from(tools.values())
|
|
403
|
-
.filter((t) => t.origin === "mcp")
|
|
404
|
-
.map((t) => t.getDefinition());
|
|
388
|
+
return Array.from(tools.values()).filter((t) => t.origin === "mcp");
|
|
405
389
|
}
|
|
406
390
|
|
|
407
391
|
/**
|
|
@@ -428,9 +412,9 @@ export function getAllToolDefinitions(): ToolDefinition[] {
|
|
|
428
412
|
// the base tool list, which is shared across sessions via the global
|
|
429
413
|
// registry. Including them here causes "Tool names must be unique"
|
|
430
414
|
// errors when the projection appends the same tools a second time.
|
|
431
|
-
return getAllTools()
|
|
432
|
-
|
|
433
|
-
|
|
415
|
+
return getAllTools().filter(
|
|
416
|
+
(t) => t.executionMode !== "proxy" && t.origin !== "skill",
|
|
417
|
+
);
|
|
434
418
|
}
|
|
435
419
|
|
|
436
420
|
export async function initializeTools(): Promise<void> {
|
|
@@ -12,7 +12,7 @@ export const ACTIVITY_SKIP_SET = new Set<string>();
|
|
|
12
12
|
* or has a non-object schema.
|
|
13
13
|
*
|
|
14
14
|
* CRITICAL: Never mutates the input definitions - always returns deep clones
|
|
15
|
-
* for any modified definition, since `
|
|
15
|
+
* for any modified definition, since `Tool.input_schema` is a shared ref.
|
|
16
16
|
*/
|
|
17
17
|
export function injectActivityField(
|
|
18
18
|
definitions: ToolDefinition[],
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { RiskLevel } from "../../permissions/types.js";
|
|
2
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
3
2
|
import { registerTool } from "../registry.js";
|
|
4
3
|
import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
|
|
5
4
|
|
|
@@ -8,13 +7,10 @@ class SkillExecuteTool implements Tool {
|
|
|
8
7
|
description =
|
|
9
8
|
"Execute a tool provided by a loaded skill. Use this instead of calling skill tools directly. The skill's instructions (from skill_load) describe available tools and their parameters. For browser automation, use the `assistant browser` CLI commands instead.";
|
|
10
9
|
category = "skills";
|
|
10
|
+
executionTarget = "sandbox" as const;
|
|
11
11
|
defaultRiskLevel = RiskLevel.Low;
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
return {
|
|
15
|
-
name: this.name,
|
|
16
|
-
description: this.description,
|
|
17
|
-
input_schema: {
|
|
13
|
+
input_schema = {
|
|
18
14
|
type: "object",
|
|
19
15
|
properties: {
|
|
20
16
|
tool: {
|
|
@@ -34,9 +30,7 @@ class SkillExecuteTool implements Tool {
|
|
|
34
30
|
},
|
|
35
31
|
},
|
|
36
32
|
required: ["tool", "input", "activity"],
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
33
|
+
};
|
|
40
34
|
|
|
41
35
|
async execute(
|
|
42
36
|
_input: Record<string, unknown>,
|
package/src/tools/skills/load.ts
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
loadSkillCatalog,
|
|
12
12
|
} from "../../config/skills.js";
|
|
13
13
|
import { RiskLevel } from "../../permissions/types.js";
|
|
14
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
15
14
|
import {
|
|
16
15
|
autoInstallFromCatalog,
|
|
17
16
|
resolveCatalog,
|
|
@@ -126,13 +125,10 @@ export class SkillLoadTool implements Tool {
|
|
|
126
125
|
description =
|
|
127
126
|
"Load full instructions for a skill. Works for both bundled skills (listed in the catalog) and custom workspace skills.";
|
|
128
127
|
category = "skills";
|
|
128
|
+
executionTarget = "sandbox" as const;
|
|
129
129
|
defaultRiskLevel = RiskLevel.Low;
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
name: this.name,
|
|
134
|
-
description: this.description,
|
|
135
|
-
input_schema: {
|
|
131
|
+
input_schema = {
|
|
136
132
|
type: "object",
|
|
137
133
|
properties: {
|
|
138
134
|
skill: {
|
|
@@ -141,9 +137,7 @@ export class SkillLoadTool implements Tool {
|
|
|
141
137
|
},
|
|
142
138
|
},
|
|
143
139
|
required: ["skill"],
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
}
|
|
140
|
+
};
|
|
147
141
|
|
|
148
142
|
async execute(
|
|
149
143
|
input: Record<string, unknown>,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { SkillToolEntry } from "../../config/skills.js";
|
|
2
2
|
import { RiskLevel } from "../../permissions/types.js";
|
|
3
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
4
3
|
import type {
|
|
5
4
|
ExecutionTarget,
|
|
6
5
|
Tool,
|
|
@@ -63,13 +62,7 @@ export function createSkillTool(
|
|
|
63
62
|
ownerSkillVersionHash: versionHash,
|
|
64
63
|
ownerSkillBundled: bundled,
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
return {
|
|
68
|
-
name: entry.name,
|
|
69
|
-
description: entry.description,
|
|
70
|
-
input_schema: entry.input_schema as ToolDefinition["input_schema"],
|
|
71
|
-
};
|
|
72
|
-
},
|
|
65
|
+
input_schema: entry.input_schema as object,
|
|
73
66
|
|
|
74
67
|
async execute(
|
|
75
68
|
input: Record<string, unknown>,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { RiskLevel } from "../../permissions/types.js";
|
|
2
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
3
2
|
import { getSubagentManager } from "../../subagent/index.js";
|
|
4
3
|
import { registerTool } from "../registry.js";
|
|
5
4
|
import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
|
|
@@ -37,13 +36,10 @@ class NotifyParentTool implements Tool {
|
|
|
37
36
|
description =
|
|
38
37
|
"Send a notification to the parent conversation. Use this for important findings, when you're blocked, or when you have preliminary results the parent should know about. Do not overuse — notify for significant findings, not after every tool call.";
|
|
39
38
|
category = "orchestration";
|
|
39
|
+
executionTarget = "sandbox" as const;
|
|
40
40
|
defaultRiskLevel = RiskLevel.Low;
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
name: this.name,
|
|
45
|
-
description: this.description,
|
|
46
|
-
input_schema: {
|
|
42
|
+
input_schema = {
|
|
47
43
|
type: "object",
|
|
48
44
|
properties: {
|
|
49
45
|
message: {
|
|
@@ -63,9 +59,7 @@ class NotifyParentTool implements Tool {
|
|
|
63
59
|
},
|
|
64
60
|
},
|
|
65
61
|
required: ["message", "activity"],
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
}
|
|
62
|
+
};
|
|
69
63
|
|
|
70
64
|
async execute(
|
|
71
65
|
input: Record<string, unknown>,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { RiskLevel } from "../../permissions/types.js";
|
|
2
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
3
2
|
import { registerTool } from "../registry.js";
|
|
4
3
|
import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
|
|
5
4
|
|
|
@@ -57,13 +56,10 @@ class RequestSystemPermissionTool implements Tool {
|
|
|
57
56
|
"Use when a tool fails with a permission/access error (e.g. 'Operation not permitted', 'EACCES', sandbox denial). " +
|
|
58
57
|
"Do not explain how to open System Settings manually - this tool handles it with a clickable button.";
|
|
59
58
|
category = "system";
|
|
59
|
+
executionTarget = "sandbox" as const;
|
|
60
60
|
defaultRiskLevel = RiskLevel.High;
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
name: this.name,
|
|
65
|
-
description: this.description,
|
|
66
|
-
input_schema: {
|
|
62
|
+
input_schema = {
|
|
67
63
|
type: "object",
|
|
68
64
|
properties: {
|
|
69
65
|
permission_type: {
|
|
@@ -78,9 +74,7 @@ class RequestSystemPermissionTool implements Tool {
|
|
|
78
74
|
},
|
|
79
75
|
},
|
|
80
76
|
required: ["permission_type", "activity"],
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
}
|
|
77
|
+
};
|
|
84
78
|
|
|
85
79
|
async execute(
|
|
86
80
|
input: Record<string, unknown>,
|
|
@@ -4,7 +4,6 @@ import { spawn } from "node:child_process";
|
|
|
4
4
|
import { getConfig } from "../../config/loader.js";
|
|
5
5
|
import { isCesShellLockdownEnabled } from "../../credential-execution/feature-gates.js";
|
|
6
6
|
import { RiskLevel } from "../../permissions/types.js";
|
|
7
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
8
7
|
import { isUntrustedTrustClass } from "../../runtime/actor-trust-resolver.js";
|
|
9
8
|
import { wakeAgentForOpportunity } from "../../runtime/agent-wake.js";
|
|
10
9
|
import { redactSecrets } from "../../security/secret-scanner.js";
|
|
@@ -49,13 +48,10 @@ class ShellTool implements Tool {
|
|
|
49
48
|
name = "bash";
|
|
50
49
|
description = "Execute a shell command on the local machine";
|
|
51
50
|
category = "terminal";
|
|
51
|
+
executionTarget = "sandbox" as const;
|
|
52
52
|
defaultRiskLevel = RiskLevel.Medium;
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
return {
|
|
56
|
-
name: this.name,
|
|
57
|
-
description: this.description,
|
|
58
|
-
input_schema: {
|
|
54
|
+
input_schema = {
|
|
59
55
|
type: "object",
|
|
60
56
|
properties: {
|
|
61
57
|
command: {
|
|
@@ -91,9 +87,7 @@ class ShellTool implements Tool {
|
|
|
91
87
|
},
|
|
92
88
|
},
|
|
93
89
|
required: ["command", "activity"],
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
}
|
|
90
|
+
};
|
|
97
91
|
|
|
98
92
|
async execute(
|
|
99
93
|
input: Record<string, unknown>,
|