@vellumai/assistant 0.8.3 → 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/docker-entrypoint.sh +0 -1
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/knip.json +2 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +2 -0
- package/openapi.yaml +1492 -100
- package/package.json +1 -1
- package/src/__tests__/agent-loop-exit-reason.test.ts +4 -5
- package/src/__tests__/agent-loop-override-profile.test.ts +1 -1
- package/src/__tests__/agent-loop.test.ts +88 -3
- package/src/__tests__/anthropic-provider.test.ts +302 -33
- package/src/__tests__/approval-cascade.test.ts +1 -1
- 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 +4 -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-delivery-store.test.ts +193 -0
- package/src/__tests__/channel-guardian.test.ts +3 -3
- package/src/__tests__/channel-reply-delivery.test.ts +284 -5
- package/src/__tests__/channel-retry-sweep.test.ts +274 -1
- package/src/__tests__/checker.test.ts +6 -15
- package/src/__tests__/compaction-events.test.ts +2 -1
- package/src/__tests__/compactor-call-site-logging.test.ts +214 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +110 -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__/config-watcher.test.ts +1 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/context-token-estimator.test.ts +91 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +55 -4
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +228 -8
- package/src/__tests__/conversation-agent-loop.test.ts +188 -129
- package/src/__tests__/conversation-app-control-instantiation.test.ts +2 -5
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-clean-command.test.ts +137 -0
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -1
- 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 +324 -0
- package/src/__tests__/conversation-lifecycle.test.ts +53 -12
- package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
- package/src/__tests__/conversation-load-history-stripped.test.ts +279 -0
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-process-callsite.test.ts +1 -1
- package/src/__tests__/conversation-provider-retry-repair.test.ts +2 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- 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-runtime-assembly.test.ts +264 -81
- package/src/__tests__/conversation-seed-composer.test.ts +66 -4
- package/src/__tests__/conversation-skill-tools.test.ts +2 -5
- package/src/__tests__/conversation-slash-commands.test.ts +36 -8
- package/src/__tests__/conversation-slash-queue.test.ts +1 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +1 -1
- package/src/__tests__/conversation-speed-override.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +220 -0
- package/src/__tests__/conversation-sync-tags.test.ts +99 -32
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -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 +7 -0
- package/src/__tests__/credential-vault-unit.test.ts +2 -2
- package/src/__tests__/cu-unified-flow.test.ts +10 -1
- package/src/__tests__/dm-backfill.test.ts +64 -0
- package/src/__tests__/dm-persistence.test.ts +33 -0
- package/src/__tests__/document-find-replace.test.ts +501 -0
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/first-greeting.test.ts +23 -2
- 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__/headless-browser-navigate.test.ts +172 -0
- package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
- package/src/__tests__/heartbeat-service.test.ts +4 -0
- package/src/__tests__/host-bash-proxy.test.ts +6 -0
- package/src/__tests__/host-browser-proxy.test.ts +10 -0
- package/src/__tests__/host-cu-proxy.test.ts +8 -1
- package/src/__tests__/host-file-proxy.test.ts +8 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/host-transfer-proxy.test.ts +8 -1
- package/src/__tests__/identity-routes.test.ts +57 -0
- package/src/__tests__/inbound-slack-persistence.test.ts +3 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/injector-chain.test.ts +2 -0
- package/src/__tests__/injector-document-comments.test.ts +378 -0
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +4 -25
- package/src/__tests__/list-messages-attachments.test.ts +21 -17
- package/src/__tests__/list-messages-hidden-metadata.test.ts +217 -0
- package/src/__tests__/list-messages-page-latest.test.ts +130 -14
- package/src/__tests__/list-messages-tool-merge.test.ts +77 -17
- package/src/__tests__/llm-context-normalization.test.ts +0 -2
- 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 +161 -9
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/log-export-routes.test.ts +99 -2
- 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__/message-queue-steer.test.ts +114 -0
- 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 +151 -0
- package/src/__tests__/openai-responses-provider.test.ts +118 -16
- package/src/__tests__/outbound-slack-persistence.test.ts +187 -20
- package/src/__tests__/pending-interactions-resolved-event.test.ts +189 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -5
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +2 -2
- package/src/__tests__/plugin-source-watcher.test.ts +302 -0
- 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__/process-message-background-slack.test.ts +1 -51
- package/src/__tests__/process-message-display-content.test.ts +21 -16
- 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__/server-history-render.test.ts +83 -4
- 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__/steer-tool-repair.test.ts +249 -0
- 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 +161 -124
- package/src/__tests__/terminal-tools.test.ts +12 -2
- package/src/__tests__/thinking-block-replay.test.ts +113 -0
- package/src/__tests__/thread-backfill.test.ts +370 -22
- 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 +89 -53
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +167 -0
- 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__/twilio-routes.test.ts +1 -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__/web-fetch.test.ts +2 -2
- package/src/__tests__/workspace-git-service.test.ts +94 -10
- package/src/__tests__/workspace-migration-088-deprecate-background-conversation-override.test.ts +158 -0
- 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/attachments.ts +1 -0
- package/src/agent/loop.ts +65 -20
- 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/next-wake.test.ts +289 -0
- package/src/background-wake/next-wake.ts +172 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/browser/operations.ts +15 -0
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/conversations-slack.test.ts +572 -0
- 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 +10 -12
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/conversations.ts +128 -1
- package/src/cli/commands/domain.ts +91 -41
- package/src/cli/commands/inference-providers.ts +147 -1
- 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 +483 -0
- package/src/cli/commands/memory-v3-render.ts +344 -0
- package/src/cli/commands/memory-v3.ts +316 -0
- package/src/cli/commands/notifications.ts +24 -2
- package/src/cli/program.ts +2 -0
- package/src/cli/utils/conversation-id.ts +17 -5
- package/src/config/assistant-feature-flags.ts +21 -9
- package/src/config/bundled-skills/app-builder/SKILL.md +2 -2
- package/src/config/bundled-skills/document-editor/SKILL.md +124 -0
- package/src/config/bundled-skills/document-editor/TOOLS.json +258 -0
- package/src/config/bundled-skills/document-editor/tools/comment-list.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-reply.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-resolve.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-find.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-replace-text.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/SKILL.md +8 -0
- 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-skills/schedule/SKILL.md +8 -0
- package/src/config/bundled-tool-registry.ts +24 -12
- package/src/config/call-site-defaults.ts +20 -0
- package/src/config/feature-flag-registry.json +115 -3
- package/src/config/llm-resolver.ts +16 -2
- package/src/config/schemas/__tests__/memory-v2.test.ts +217 -1
- package/src/config/schemas/call-site-catalog.ts +35 -0
- package/src/config/schemas/llm.ts +14 -0
- package/src/config/schemas/memory-v2.ts +294 -1
- package/src/config/schemas/memory.ts +2 -1
- package/src/context/compactor.ts +60 -1
- package/src/context/token-estimator.ts +47 -4
- package/src/context/window-manager.ts +25 -0
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/credential-health/credential-health-service.ts +34 -19
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +66 -6
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +1 -1
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +357 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +287 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +155 -36
- package/src/daemon/conversation-agent-loop.ts +307 -88
- package/src/daemon/conversation-error.ts +31 -1
- package/src/daemon/conversation-lifecycle.ts +149 -118
- package/src/daemon/conversation-messaging.ts +3 -0
- package/src/daemon/conversation-process.ts +273 -0
- package/src/daemon/conversation-queue-manager.ts +14 -0
- package/src/daemon/conversation-runtime-assembly.ts +145 -84
- package/src/daemon/conversation-slash.ts +37 -5
- package/src/daemon/conversation-surfaces.ts +45 -2
- package/src/daemon/conversation-tool-setup.ts +70 -3
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +54 -32
- package/src/daemon/disk-pressure-guard.ts +14 -2
- package/src/daemon/first-greeting.ts +10 -0
- package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +498 -0
- package/src/daemon/handlers/config-a2a.ts +160 -0
- package/src/daemon/handlers/config-model.test.ts +2 -0
- package/src/daemon/handlers/conversations.ts +90 -3
- package/src/daemon/handlers/shared.ts +92 -29
- package/src/daemon/host-bash-proxy.ts +1 -1
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +5 -5
- package/src/daemon/host-file-proxy.ts +5 -5
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +11 -11
- package/src/daemon/lifecycle.ts +40 -23
- package/src/daemon/meet-manifest-loader.ts +1 -7
- package/src/daemon/message-protocol.ts +4 -0
- package/src/daemon/message-types/conversations.ts +14 -9
- package/src/daemon/message-types/document-comments.ts +50 -0
- package/src/daemon/message-types/home.ts +1 -13
- package/src/daemon/message-types/messages.ts +66 -7
- package/src/daemon/message-types/surfaces.ts +3 -1
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/message-types/web-activity.ts +57 -0
- package/src/daemon/plugin-source-watcher.ts +135 -3
- package/src/daemon/process-message.ts +69 -12
- 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/daemon/trust-context.ts +6 -0
- package/src/documents/document-comments-store.test.ts +338 -0
- package/src/documents/document-comments-store.ts +237 -0
- package/src/documents/document-store.ts +202 -0
- package/src/events/relationship-state-updated.ts +25 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +1 -2
- package/src/heartbeat/heartbeat-service.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +33 -2
- package/src/home/feed-types.ts +6 -1
- package/src/home/home-content-refresh.ts +52 -0
- package/src/home/home-greeting-cache.ts +69 -0
- package/src/home/home-greeting.ts +85 -0
- package/src/home/suggested-prompts.ts +168 -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__/jobs-worker-v2-schedule.test.ts +135 -2
- package/src/memory/__tests__/memory-retrospective-job.test.ts +327 -6
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-crud.ts +191 -100
- 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 +26 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/delivery-crud.ts +41 -0
- package/src/memory/delivery-status.ts +141 -15
- package/src/memory/external-conversation-store.ts +32 -1
- 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 +68 -15
- 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-constants.ts +28 -0
- package/src/memory/memory-retrospective-enqueue.ts +11 -3
- package/src/memory/memory-retrospective-job.ts +413 -18
- package/src/memory/memory-retrospective-startup-cleanup.ts +3 -3
- package/src/memory/memory-v2-activation-log-store.ts +41 -14
- package/src/memory/migrations/100-core-tables.ts +1 -0
- package/src/memory/migrations/109-external-conversation-bindings.ts +1 -0
- package/src/memory/migrations/253-conversation-last-notified-profile.ts +15 -0
- package/src/memory/migrations/253-document-comments.ts +47 -0
- package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +43 -0
- package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +24 -0
- package/src/memory/migrations/256-memory-v2-injection-events.ts +113 -0
- package/src/memory/migrations/257-strip-base-url-non-openai-compatible.ts +22 -0
- package/src/memory/migrations/258-onboarding-events-prior-assistants.ts +13 -0
- package/src/memory/migrations/259-conversation-cleaned-at.ts +33 -0
- 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 +34 -0
- package/src/memory/migrations/registry.ts +58 -0
- package/src/memory/onboarding-events-store.ts +7 -0
- package/src/memory/schema/calls.ts +1 -0
- package/src/memory/schema/conversations.ts +3 -0
- package/src/memory/schema/infrastructure.ts +22 -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-events.test.ts +318 -0
- package/src/memory/v2/__tests__/injection.test.ts +158 -112
- package/src/memory/v2/__tests__/page-index.test.ts +365 -1
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +660 -4
- package/src/memory/v2/consolidation-job.ts +14 -0
- 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-events.ts +101 -0
- package/src/memory/v2/injection.ts +42 -25
- package/src/memory/v2/page-index.ts +209 -7
- package/src/memory/v2/page-store.ts +18 -0
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +369 -62
- 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/messaging/providers/index.ts +7 -1
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +329 -3
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +34 -1
- package/src/messaging/providers/slack/adapter.ts +178 -25
- package/src/messaging/providers/slack/api.test.ts +54 -0
- package/src/messaging/providers/slack/api.ts +119 -3
- package/src/messaging/providers/slack/client.ts +12 -0
- package/src/messaging/providers/slack/deep-link.ts +20 -1
- package/src/messaging/providers/slack/message-metadata.test.ts +48 -0
- package/src/messaging/providers/slack/message-metadata.ts +156 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +107 -75
- package/src/messaging/providers/slack/render-transcript.ts +176 -49
- package/src/messaging/providers/slack/send.test.ts +77 -0
- package/src/messaging/providers/slack/send.ts +8 -2
- package/src/messaging/providers/slack/types.ts +14 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +4 -1
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +116 -54
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/conversation-seed-composer.ts +14 -2
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/deferred-emit.ts +135 -0
- package/src/notifications/emit-signal.ts +38 -50
- package/src/notifications/home-feed-side-effect.ts +60 -30
- package/src/oauth/connect-orchestrator.ts +3 -0
- package/src/oauth/credential-token-resolver.ts +2 -0
- package/src/oauth/manual-token-connection.ts +19 -0
- package/src/oauth/oauth-store.ts +12 -0
- package/src/oauth/seed-providers.ts +22 -0
- package/src/permissions/prompter.ts +8 -5
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +6 -3
- 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 +100 -20
- 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__/system-prompt.test.ts +46 -2
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/normalize-onboarding.ts +40 -0
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +69 -19
- package/src/prompts/system-prompt.ts +118 -216
- package/src/prompts/template-detection.ts +37 -0
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +141 -0
- package/src/prompts/templates/BOOTSTRAP.md +10 -2
- package/src/prompts/templates/VOICE.md +3 -0
- package/src/prompts/templates/system-sections.ts +281 -9
- 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 +159 -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/fireworks/client.ts +20 -2
- package/src/providers/gemini/client.ts +49 -6
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +342 -0
- package/src/providers/inference/__tests__/base-url-security.test.ts +189 -0
- package/src/providers/inference/__tests__/codex-token-refresh.test.ts +254 -0
- package/src/providers/inference/adapter-factory.ts +18 -1
- package/src/providers/inference/auth.ts +3 -3
- package/src/providers/inference/codex-token-refresh.ts +128 -0
- package/src/providers/inference/resolve-auth.ts +49 -6
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +91 -1
- package/src/providers/model-intents.ts +1 -1
- package/src/providers/openai/chat-completions-provider.ts +63 -23
- package/src/providers/openai/codex-models.ts +18 -0
- package/src/providers/openai/responses-provider.ts +86 -23
- package/src/providers/openrouter/client.ts +5 -1
- 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/types.ts +25 -0
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +214 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +128 -0
- package/src/runtime/agent-wake.ts +152 -56
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +43 -3
- package/src/runtime/background-job-runner.ts +26 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/channel-reply-delivery.ts +182 -47
- package/src/runtime/channel-retry-sweep.ts +141 -16
- package/src/runtime/http-types.ts +7 -6
- package/src/runtime/migrations/vbundle-builder.ts +10 -3
- package/src/runtime/pending-interactions.ts +50 -8
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +162 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +161 -1
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +14 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +290 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +280 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +266 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/approval-routes.ts +4 -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/chatgpt-subscription-auth-routes.ts +246 -0
- package/src/runtime/routes/content-source-routes.ts +78 -0
- package/src/runtime/routes/conversation-cli-routes.ts +147 -2
- 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 +196 -31
- package/src/runtime/routes/conversation-routes.ts +472 -425
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/document-comments-routes.ts +287 -0
- package/src/runtime/routes/documents-routes.ts +33 -0
- 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/home-feed-routes.ts +6 -3
- package/src/runtime/routes/host-app-control-routes.ts +1 -1
- package/src/runtime/routes/host-browser-routes.ts +17 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/identity-routes.ts +21 -0
- package/src/runtime/routes/inbound-message-handler.ts +288 -58
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +365 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +283 -82
- package/src/runtime/routes/index.ts +20 -4
- 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/inference-provider-connection-routes.ts +63 -7
- package/src/runtime/routes/integrations/a2a.ts +60 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/log-export-routes.ts +39 -0
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +427 -0
- package/src/runtime/routes/memory-v3-routes.ts +316 -0
- package/src/runtime/routes/migration-routes.ts +21 -24
- package/src/runtime/routes/notification-routes.ts +19 -2
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/question-routes.ts +4 -1
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- package/src/runtime/routes/sanity-routes.ts +159 -0
- 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 +188 -0
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/services/conversation-serializer.ts +30 -4
- 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/schedule/integration-status.ts +3 -1
- package/src/security/__tests__/oauth2-device-code.test.ts +479 -0
- package/src/security/oauth2-device-code.ts +307 -0
- package/src/security/oauth2.ts +26 -9
- package/src/security/secure-keys.ts +5 -0
- package/src/skills/catalog-install.ts +6 -2
- 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 +150 -0
- package/src/tools/browser/browser-execution.ts +106 -0
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +28 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +4 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +22 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +42 -2
- package/src/tools/browser/cdp-client/factory.ts +171 -4
- package/src/tools/browser/cdp-client/local-cdp-client.ts +21 -0
- package/src/tools/browser/cdp-client/types.ts +101 -0
- package/src/tools/browser/pinned-tabs.ts +146 -0
- 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-comment-tool.test.ts +379 -0
- package/src/tools/document/document-comment-tool.ts +156 -0
- package/src/tools/document/document-tool.ts +187 -2
- 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/__tests__/web-fetch-metadata.test.ts +229 -0
- package/src/tools/network/__tests__/web-search-metadata.test.ts +346 -0
- package/src/tools/network/domain-normalize.ts +17 -0
- package/src/tools/network/web-fetch.ts +216 -73
- package/src/tools/network/web-search.ts +216 -98
- 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/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-approval-handler.ts +19 -12
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/types.ts +31 -98
- package/src/tools/ui-surface/definitions.ts +9 -23
- package/src/types/onboarding-context.ts +4 -0
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/__tests__/favicon.test.ts +84 -0
- package/src/util/favicon.ts +40 -0
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -7
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/git-service.ts +75 -4
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/088-deprecate-background-conversation-override.ts +103 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/registry.ts +4 -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/config/bundled-skills/document/SKILL.md +0 -54
- package/src/config/bundled-skills/document/TOOLS.json +0 -106
- package/src/daemon/seed-files.ts +0 -18
- package/src/prompts/cache-boundary.ts +0 -8
- package/src/runtime/routes/interface-routes.ts +0 -43
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-create.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-delete.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-list.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-read.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-update.ts +0 -0
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { getConfig } from "../../config/loader.js";
|
|
2
|
+
import type {
|
|
3
|
+
WebSearchMetadata,
|
|
4
|
+
WebSearchResultItem,
|
|
5
|
+
} from "../../daemon/message-types/web-activity.js";
|
|
2
6
|
import { RiskLevel } from "../../permissions/types.js";
|
|
3
|
-
import type { ToolDefinition } from "../../providers/types.js";
|
|
4
7
|
import { getProviderKeyAsync } from "../../security/secure-keys.js";
|
|
5
8
|
import { wrapUntrustedContent } from "../../security/untrusted-content.js";
|
|
9
|
+
import { faviconUrlForDomain } from "../../util/favicon.js";
|
|
6
10
|
import { getLogger } from "../../util/logger.js";
|
|
7
11
|
import {
|
|
8
12
|
DEFAULT_BASE_DELAY_MS,
|
|
@@ -12,6 +16,7 @@ import {
|
|
|
12
16
|
} from "../../util/retry.js";
|
|
13
17
|
import { registerTool } from "../registry.js";
|
|
14
18
|
import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
|
|
19
|
+
import { extractDomain } from "./domain-normalize.js";
|
|
15
20
|
|
|
16
21
|
const log = getLogger("web-search");
|
|
17
22
|
|
|
@@ -201,6 +206,85 @@ function formatTavilyResults(
|
|
|
201
206
|
return lines.join("\n");
|
|
202
207
|
}
|
|
203
208
|
|
|
209
|
+
function buildBraveMetadata(
|
|
210
|
+
results: BraveSearchResult[],
|
|
211
|
+
query: string,
|
|
212
|
+
durationMs: number,
|
|
213
|
+
): WebSearchMetadata {
|
|
214
|
+
const items: WebSearchResultItem[] = results.map((r, i) => {
|
|
215
|
+
const domain = extractDomain(r.url);
|
|
216
|
+
return {
|
|
217
|
+
rank: i + 1,
|
|
218
|
+
title: r.title,
|
|
219
|
+
url: r.url,
|
|
220
|
+
domain,
|
|
221
|
+
faviconUrl: faviconUrlForDomain(domain),
|
|
222
|
+
snippet: r.description,
|
|
223
|
+
age: r.age,
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
return {
|
|
227
|
+
query,
|
|
228
|
+
provider: "brave",
|
|
229
|
+
resultCount: items.length,
|
|
230
|
+
durationMs,
|
|
231
|
+
results: items,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function buildPerplexityMetadata(
|
|
236
|
+
data: PerplexityResponse,
|
|
237
|
+
query: string,
|
|
238
|
+
durationMs: number,
|
|
239
|
+
): WebSearchMetadata {
|
|
240
|
+
const citations = data.citations ?? [];
|
|
241
|
+
const items: WebSearchResultItem[] = citations.map((url, i) => {
|
|
242
|
+
const domain = extractDomain(url);
|
|
243
|
+
return {
|
|
244
|
+
rank: i + 1,
|
|
245
|
+
title: "",
|
|
246
|
+
url,
|
|
247
|
+
domain,
|
|
248
|
+
faviconUrl: faviconUrlForDomain(domain),
|
|
249
|
+
};
|
|
250
|
+
});
|
|
251
|
+
return {
|
|
252
|
+
query,
|
|
253
|
+
provider: "perplexity",
|
|
254
|
+
resultCount: items.length,
|
|
255
|
+
durationMs,
|
|
256
|
+
results: items,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function buildTavilyMetadata(
|
|
261
|
+
data: TavilySearchResponse,
|
|
262
|
+
query: string,
|
|
263
|
+
durationMs: number,
|
|
264
|
+
): WebSearchMetadata {
|
|
265
|
+
const results = data.results ?? [];
|
|
266
|
+
const items: WebSearchResultItem[] = results.map((r, i) => {
|
|
267
|
+
const url = r.url ?? "";
|
|
268
|
+
const domain = extractDomain(url);
|
|
269
|
+
return {
|
|
270
|
+
rank: i + 1,
|
|
271
|
+
title: r.title?.trim() || url.trim() || "Untitled result",
|
|
272
|
+
url,
|
|
273
|
+
domain,
|
|
274
|
+
faviconUrl: r.favicon ?? faviconUrlForDomain(domain),
|
|
275
|
+
snippet: r.content,
|
|
276
|
+
score: r.score,
|
|
277
|
+
};
|
|
278
|
+
});
|
|
279
|
+
return {
|
|
280
|
+
query,
|
|
281
|
+
provider: "tavily",
|
|
282
|
+
resultCount: items.length,
|
|
283
|
+
durationMs,
|
|
284
|
+
results: items,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
|
|
204
288
|
function tavilyTimeRangeForFreshness(
|
|
205
289
|
freshness: string | undefined,
|
|
206
290
|
): "day" | "week" | "month" | "year" | undefined {
|
|
@@ -218,6 +302,28 @@ function tavilyTimeRangeForFreshness(
|
|
|
218
302
|
}
|
|
219
303
|
}
|
|
220
304
|
|
|
305
|
+
function errorResult(
|
|
306
|
+
query: string,
|
|
307
|
+
provider: WebSearchProvider,
|
|
308
|
+
startedAt: number,
|
|
309
|
+
errorMessage: string,
|
|
310
|
+
): ToolExecutionResult {
|
|
311
|
+
return {
|
|
312
|
+
content: `Error: ${errorMessage}`,
|
|
313
|
+
isError: true,
|
|
314
|
+
activityMetadata: {
|
|
315
|
+
webSearch: {
|
|
316
|
+
query,
|
|
317
|
+
provider,
|
|
318
|
+
resultCount: 0,
|
|
319
|
+
durationMs: Date.now() - startedAt,
|
|
320
|
+
results: [],
|
|
321
|
+
errorMessage,
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
|
|
221
327
|
async function executeBraveSearch(
|
|
222
328
|
query: string,
|
|
223
329
|
count: number,
|
|
@@ -238,6 +344,7 @@ async function executeBraveSearch(
|
|
|
238
344
|
}
|
|
239
345
|
|
|
240
346
|
const url = `${BRAVE_API_URL}?${params.toString()}`;
|
|
347
|
+
const startedAt = Date.now();
|
|
241
348
|
|
|
242
349
|
for (let attempt = 0; attempt <= DEFAULT_MAX_RETRIES; attempt++) {
|
|
243
350
|
const response = await fetch(url, {
|
|
@@ -252,6 +359,7 @@ async function executeBraveSearch(
|
|
|
252
359
|
if (response.ok) {
|
|
253
360
|
const data = (await response.json()) as BraveSearchResponse;
|
|
254
361
|
const results = data.web?.results ?? [];
|
|
362
|
+
const durationMs = Date.now() - startedAt;
|
|
255
363
|
return {
|
|
256
364
|
content:
|
|
257
365
|
wrapUntrustedContent(formatBraveResults(results, query), {
|
|
@@ -259,16 +367,21 @@ async function executeBraveSearch(
|
|
|
259
367
|
sourceDetail: "brave",
|
|
260
368
|
}) + CITATION_INSTRUCTION,
|
|
261
369
|
isError: false,
|
|
370
|
+
activityMetadata: {
|
|
371
|
+
webSearch: buildBraveMetadata(results, query, durationMs),
|
|
372
|
+
},
|
|
262
373
|
};
|
|
263
374
|
}
|
|
264
375
|
|
|
265
376
|
await response.text();
|
|
266
377
|
|
|
267
378
|
if (response.status === 401 || response.status === 403) {
|
|
268
|
-
return
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
379
|
+
return errorResult(
|
|
380
|
+
query,
|
|
381
|
+
"brave",
|
|
382
|
+
startedAt,
|
|
383
|
+
"Invalid or expired Brave Search API key",
|
|
384
|
+
);
|
|
272
385
|
}
|
|
273
386
|
|
|
274
387
|
if (response.status === 429 && attempt < DEFAULT_MAX_RETRIES) {
|
|
@@ -286,24 +399,22 @@ async function executeBraveSearch(
|
|
|
286
399
|
}
|
|
287
400
|
|
|
288
401
|
log.warn({ status: response.status }, "Brave Search API error");
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
content: `Error: Brave Search API returned status ${response.status}`,
|
|
298
|
-
isError: true,
|
|
299
|
-
};
|
|
402
|
+
return errorResult(
|
|
403
|
+
query,
|
|
404
|
+
"brave",
|
|
405
|
+
startedAt,
|
|
406
|
+
response.status === 429
|
|
407
|
+
? "Brave Search rate limit exceeded after retries. Try again shortly."
|
|
408
|
+
: `Brave Search API returned status ${response.status}`,
|
|
409
|
+
);
|
|
300
410
|
}
|
|
301
411
|
|
|
302
|
-
return
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
412
|
+
return errorResult(
|
|
413
|
+
query,
|
|
414
|
+
"brave",
|
|
415
|
+
startedAt,
|
|
416
|
+
"Brave Search rate limit exceeded after retries. Try again shortly.",
|
|
417
|
+
);
|
|
307
418
|
}
|
|
308
419
|
|
|
309
420
|
async function executePerplexitySearch(
|
|
@@ -311,6 +422,7 @@ async function executePerplexitySearch(
|
|
|
311
422
|
apiKey: string,
|
|
312
423
|
signal?: AbortSignal,
|
|
313
424
|
): Promise<ToolExecutionResult> {
|
|
425
|
+
const startedAt = Date.now();
|
|
314
426
|
for (let attempt = 0; attempt <= DEFAULT_MAX_RETRIES; attempt++) {
|
|
315
427
|
const response = await fetch(PERPLEXITY_API_URL, {
|
|
316
428
|
method: "POST",
|
|
@@ -327,6 +439,7 @@ async function executePerplexitySearch(
|
|
|
327
439
|
|
|
328
440
|
if (response.ok) {
|
|
329
441
|
const data = (await response.json()) as PerplexityResponse;
|
|
442
|
+
const durationMs = Date.now() - startedAt;
|
|
330
443
|
return {
|
|
331
444
|
content:
|
|
332
445
|
wrapUntrustedContent(formatPerplexityResults(data, query), {
|
|
@@ -334,16 +447,21 @@ async function executePerplexitySearch(
|
|
|
334
447
|
sourceDetail: "perplexity",
|
|
335
448
|
}) + CITATION_INSTRUCTION,
|
|
336
449
|
isError: false,
|
|
450
|
+
activityMetadata: {
|
|
451
|
+
webSearch: buildPerplexityMetadata(data, query, durationMs),
|
|
452
|
+
},
|
|
337
453
|
};
|
|
338
454
|
}
|
|
339
455
|
|
|
340
456
|
await response.text();
|
|
341
457
|
|
|
342
458
|
if (response.status === 401 || response.status === 403) {
|
|
343
|
-
return
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
459
|
+
return errorResult(
|
|
460
|
+
query,
|
|
461
|
+
"perplexity",
|
|
462
|
+
startedAt,
|
|
463
|
+
"Invalid or expired Perplexity API key",
|
|
464
|
+
);
|
|
347
465
|
}
|
|
348
466
|
|
|
349
467
|
if (response.status === 429 && attempt < DEFAULT_MAX_RETRIES) {
|
|
@@ -361,24 +479,22 @@ async function executePerplexitySearch(
|
|
|
361
479
|
}
|
|
362
480
|
|
|
363
481
|
log.warn({ status: response.status }, "Perplexity API error");
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
content: `Error: Perplexity API returned status ${response.status}`,
|
|
373
|
-
isError: true,
|
|
374
|
-
};
|
|
482
|
+
return errorResult(
|
|
483
|
+
query,
|
|
484
|
+
"perplexity",
|
|
485
|
+
startedAt,
|
|
486
|
+
response.status === 429
|
|
487
|
+
? "Perplexity rate limit exceeded after retries. Try again shortly."
|
|
488
|
+
: `Perplexity API returned status ${response.status}`,
|
|
489
|
+
);
|
|
375
490
|
}
|
|
376
491
|
|
|
377
|
-
return
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
492
|
+
return errorResult(
|
|
493
|
+
query,
|
|
494
|
+
"perplexity",
|
|
495
|
+
startedAt,
|
|
496
|
+
"Perplexity rate limit exceeded after retries. Try again shortly.",
|
|
497
|
+
);
|
|
382
498
|
}
|
|
383
499
|
|
|
384
500
|
async function executeTavilySearch(
|
|
@@ -398,6 +514,8 @@ async function executeTavilySearch(
|
|
|
398
514
|
body.time_range = timeRange;
|
|
399
515
|
}
|
|
400
516
|
|
|
517
|
+
const startedAt = Date.now();
|
|
518
|
+
|
|
401
519
|
for (let attempt = 0; attempt <= DEFAULT_MAX_RETRIES; attempt++) {
|
|
402
520
|
const response = await fetch(TAVILY_API_URL, {
|
|
403
521
|
method: "POST",
|
|
@@ -412,6 +530,7 @@ async function executeTavilySearch(
|
|
|
412
530
|
|
|
413
531
|
if (response.ok) {
|
|
414
532
|
const data = (await response.json()) as TavilySearchResponse;
|
|
533
|
+
const durationMs = Date.now() - startedAt;
|
|
415
534
|
return {
|
|
416
535
|
content:
|
|
417
536
|
wrapUntrustedContent(formatTavilyResults(data, query), {
|
|
@@ -419,16 +538,21 @@ async function executeTavilySearch(
|
|
|
419
538
|
sourceDetail: "tavily",
|
|
420
539
|
}) + CITATION_INSTRUCTION,
|
|
421
540
|
isError: false,
|
|
541
|
+
activityMetadata: {
|
|
542
|
+
webSearch: buildTavilyMetadata(data, query, durationMs),
|
|
543
|
+
},
|
|
422
544
|
};
|
|
423
545
|
}
|
|
424
546
|
|
|
425
547
|
await response.text();
|
|
426
548
|
|
|
427
549
|
if (response.status === 401 || response.status === 403) {
|
|
428
|
-
return
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
550
|
+
return errorResult(
|
|
551
|
+
query,
|
|
552
|
+
"tavily",
|
|
553
|
+
startedAt,
|
|
554
|
+
"Invalid or expired Tavily API key",
|
|
555
|
+
);
|
|
432
556
|
}
|
|
433
557
|
|
|
434
558
|
if (response.status === 429 && attempt < DEFAULT_MAX_RETRIES) {
|
|
@@ -446,24 +570,22 @@ async function executeTavilySearch(
|
|
|
446
570
|
}
|
|
447
571
|
|
|
448
572
|
log.warn({ status: response.status }, "Tavily Search API error");
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
content: `Error: Tavily Search API returned status ${response.status}`,
|
|
458
|
-
isError: true,
|
|
459
|
-
};
|
|
573
|
+
return errorResult(
|
|
574
|
+
query,
|
|
575
|
+
"tavily",
|
|
576
|
+
startedAt,
|
|
577
|
+
response.status === 429
|
|
578
|
+
? "Tavily Search rate limit exceeded after retries. Try again shortly."
|
|
579
|
+
: `Tavily Search API returned status ${response.status}`,
|
|
580
|
+
);
|
|
460
581
|
}
|
|
461
582
|
|
|
462
|
-
return
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
583
|
+
return errorResult(
|
|
584
|
+
query,
|
|
585
|
+
"tavily",
|
|
586
|
+
startedAt,
|
|
587
|
+
"Tavily Search rate limit exceeded after retries. Try again shortly.",
|
|
588
|
+
);
|
|
467
589
|
}
|
|
468
590
|
|
|
469
591
|
// ----------------------------------------------------------------------------
|
|
@@ -527,39 +649,33 @@ class WebSearchTool implements Tool {
|
|
|
527
649
|
description =
|
|
528
650
|
"Search the web and return results. Useful for looking up current information, documentation, or anything the assistant doesn't know.";
|
|
529
651
|
category = "network";
|
|
652
|
+
executionTarget = "sandbox" as const;
|
|
530
653
|
defaultRiskLevel = RiskLevel.Low;
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
type: "object",
|
|
538
|
-
properties: {
|
|
539
|
-
query: {
|
|
540
|
-
type: "string",
|
|
541
|
-
description: "The search query string",
|
|
542
|
-
},
|
|
543
|
-
count: {
|
|
544
|
-
type: "number",
|
|
545
|
-
description:
|
|
546
|
-
"Number of results to return (1-20, default 10). Used with Brave and Tavily providers.",
|
|
547
|
-
},
|
|
548
|
-
offset: {
|
|
549
|
-
type: "number",
|
|
550
|
-
description:
|
|
551
|
-
"Pagination offset (0-9, default 0). Only used with Brave provider.",
|
|
552
|
-
},
|
|
553
|
-
freshness: {
|
|
554
|
-
type: "string",
|
|
555
|
-
description:
|
|
556
|
-
'Filter by recency: "pd" (past day), "pw" (past week), "pm" (past month), "py" (past year). Used with Brave and Tavily providers.',
|
|
557
|
-
},
|
|
558
|
-
},
|
|
559
|
-
required: ["query"],
|
|
654
|
+
input_schema = {
|
|
655
|
+
type: "object",
|
|
656
|
+
properties: {
|
|
657
|
+
query: {
|
|
658
|
+
type: "string",
|
|
659
|
+
description: "The search query string",
|
|
560
660
|
},
|
|
561
|
-
|
|
562
|
-
|
|
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
|
+
};
|
|
563
679
|
|
|
564
680
|
async execute(
|
|
565
681
|
input: Record<string, unknown>,
|
|
@@ -573,6 +689,7 @@ class WebSearchTool implements Tool {
|
|
|
573
689
|
};
|
|
574
690
|
}
|
|
575
691
|
|
|
692
|
+
const startedAt = Date.now();
|
|
576
693
|
let provider = getWebSearchProvider();
|
|
577
694
|
let apiKey = await getApiKey(provider);
|
|
578
695
|
|
|
@@ -594,11 +711,12 @@ class WebSearchTool implements Tool {
|
|
|
594
711
|
}
|
|
595
712
|
|
|
596
713
|
if (!apiKey) {
|
|
597
|
-
return
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
714
|
+
return errorResult(
|
|
715
|
+
query,
|
|
716
|
+
provider,
|
|
717
|
+
startedAt,
|
|
718
|
+
"No web search API key configured. Set it via `keys set perplexity <key>`, `keys set brave <key>`, or `keys set tavily <key>`, or configure it from the Settings page under API Keys.",
|
|
719
|
+
);
|
|
602
720
|
}
|
|
603
721
|
}
|
|
604
722
|
|
|
@@ -627,7 +745,7 @@ class WebSearchTool implements Tool {
|
|
|
627
745
|
} catch (err) {
|
|
628
746
|
const msg = err instanceof Error ? err.message : String(err);
|
|
629
747
|
log.error({ err }, "Web search failed");
|
|
630
|
-
return
|
|
748
|
+
return errorResult(query, provider, startedAt, `Web search failed: ${msg}`);
|
|
631
749
|
}
|
|
632
750
|
}
|
|
633
751
|
}
|
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>,
|