@vellumai/assistant 0.6.4 → 0.6.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/.prettierignore +5 -0
- package/ARCHITECTURE.md +32 -36
- package/Dockerfile +12 -0
- package/README.md +3 -4
- package/bun.lock +8 -3
- package/docs/architecture/integrations.md +1 -20
- package/docs/architecture/security.md +16 -16
- package/docs/error-handling.md +111 -0
- package/docs/skills.md +10 -10
- package/docs/stt-provider-onboarding.md +2 -1
- package/knip.json +9 -2
- package/node_modules/@vellumai/ces-contracts/package.json +2 -1
- package/node_modules/@vellumai/ces-contracts/src/__tests__/trust-rules.test.ts +471 -0
- package/node_modules/@vellumai/ces-contracts/src/trust-rules.ts +398 -4
- package/node_modules/@vellumai/credential-storage/bun.lock +2 -2
- package/node_modules/@vellumai/credential-storage/package.json +2 -2
- package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +20 -2
- package/node_modules/@vellumai/egress-proxy/bun.lock +2 -2
- package/node_modules/@vellumai/egress-proxy/package.json +2 -2
- package/openapi.yaml +123 -11
- package/package.json +6 -3
- package/scripts/generate-openapi.ts +50 -11
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +318 -0
- package/src/__tests__/agent-loop-sentry-hygiene.test.ts +137 -0
- package/src/__tests__/agent-loop.test.ts +112 -1
- package/src/__tests__/anthropic-error-formatting.test.ts +98 -0
- package/src/__tests__/anthropic-provider.test.ts +171 -2
- package/src/__tests__/approval-cascade.test.ts +31 -10
- package/src/__tests__/approval-routes-http.test.ts +134 -10
- package/src/__tests__/assistant-attachments.test.ts +44 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +29 -0
- package/src/__tests__/browser-fill-credential.test.ts +1 -1
- package/src/__tests__/browser-identifier-parity-guard.test.ts +53 -0
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +23 -33
- package/src/__tests__/browser-skill-endstate.test.ts +51 -182
- package/src/__tests__/btw-routes.test.ts +47 -1
- package/src/__tests__/call-controller.test.ts +1 -2
- package/src/__tests__/call-site-routing-provider.test.ts +214 -0
- package/src/__tests__/catalog-cache.test.ts +27 -4
- package/src/__tests__/channel-approval-routes.test.ts +4 -4
- package/src/__tests__/channel-reply-delivery.test.ts +300 -2
- package/src/__tests__/checker.test.ts +428 -501
- package/src/__tests__/cli-command-risk-guard.test.ts +30 -33
- package/src/__tests__/compaction-circuit-breaker.test.ts +336 -0
- package/src/__tests__/compaction.benchmark.test.ts +1 -1
- package/src/__tests__/config-analysis.test.ts +11 -28
- package/src/__tests__/config-loader-backfill.test.ts +174 -0
- package/src/__tests__/config-loader-corrupt.test.ts +183 -0
- package/src/__tests__/config-loader-quarantine-bulletin.test.ts +202 -0
- package/src/__tests__/config-schema-cmd.test.ts +11 -5
- package/src/__tests__/config-schema.test.ts +427 -114
- package/src/__tests__/config-watcher.test.ts +2 -2
- package/src/__tests__/contact-store-user-file.test.ts +72 -73
- package/src/__tests__/contacts-write.test.ts +4 -4
- package/src/__tests__/context-token-estimator.test.ts +191 -1
- package/src/__tests__/context-window-manager.test.ts +530 -2
- package/src/__tests__/conversation-abort-tool-results.test.ts +30 -16
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +61 -17
- package/src/__tests__/conversation-agent-loop.test.ts +412 -82
- package/src/__tests__/conversation-attachments.test.ts +1 -1
- package/src/__tests__/conversation-confirmation-signals.test.ts +30 -9
- package/src/__tests__/conversation-error.test.ts +37 -6
- package/src/__tests__/conversation-history-web-search.test.ts +6 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +36 -0
- package/src/__tests__/conversation-lifecycle.test.ts +336 -0
- package/src/__tests__/conversation-load-history-repair.test.ts +27 -10
- package/src/__tests__/conversation-pre-run-repair.test.ts +30 -16
- package/src/__tests__/conversation-process-callsite.test.ts +306 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +30 -16
- package/src/__tests__/conversation-queue.test.ts +41 -26
- package/src/__tests__/conversation-routes-disk-view.test.ts +29 -1
- package/src/__tests__/conversation-routes-slash-commands.test.ts +31 -3
- package/src/__tests__/conversation-runtime-assembly.test.ts +2735 -55
- package/src/__tests__/conversation-runtime-workspace.test.ts +12 -12
- package/src/__tests__/conversation-skill-tools.test.ts +12 -146
- package/src/__tests__/conversation-slash-queue.test.ts +34 -19
- package/src/__tests__/conversation-slash-unknown.test.ts +30 -16
- package/src/__tests__/conversation-speed-override.test.ts +30 -11
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +1035 -0
- package/src/__tests__/conversation-surfaces-standalone.test.ts +630 -0
- package/src/__tests__/conversation-title-service.test.ts +2 -2
- package/src/__tests__/conversation-tool-setup-batch-authorized.test.ts +1 -1
- package/src/__tests__/conversation-unread-route.test.ts +2 -2
- package/src/__tests__/conversation-usage.test.ts +3 -1
- package/src/__tests__/conversation-workspace-cache-state.test.ts +31 -10
- package/src/__tests__/conversation-workspace-injection.test.ts +43 -15
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +44 -16
- package/src/__tests__/credential-broker-browser-fill.test.ts +110 -0
- package/src/__tests__/credential-security-invariants.test.ts +3 -0
- package/src/__tests__/credential-storage-oauth-compat.test.ts +18 -0
- package/src/__tests__/credential-storage-static-compat.test.ts +28 -0
- package/src/__tests__/credential-vault-unit.test.ts +135 -19
- package/src/__tests__/credentials-cli.test.ts +1 -9
- package/src/__tests__/cross-provider-web-search.test.ts +84 -0
- package/src/__tests__/daemon-server-persist-and-process-callsite.test.ts +92 -0
- package/src/__tests__/delete-propagation.test.ts +437 -0
- package/src/__tests__/dm-backfill.test.ts +417 -0
- package/src/__tests__/dm-persistence.test.ts +227 -0
- package/src/__tests__/edit-propagation.test.ts +280 -0
- package/src/__tests__/ephemeral-permissions.test.ts +93 -3
- package/src/__tests__/estimator-calibration-integration.test.ts +208 -0
- package/src/__tests__/estimator-calibration.test.ts +213 -0
- package/src/__tests__/extension-id-sync-guard.test.ts +26 -7
- package/src/__tests__/file-write-tool.test.ts +151 -1
- package/src/__tests__/filing-service.test.ts +255 -0
- package/src/__tests__/gemini-provider.test.ts +0 -3
- package/src/__tests__/guardian-grant-minting.test.ts +8 -0
- package/src/__tests__/headless-browser-interactions.test.ts +1 -1
- package/src/__tests__/heartbeat-service.test.ts +96 -15
- package/src/__tests__/host-shell-tool.test.ts +124 -18
- package/src/__tests__/http-user-message-parity.test.ts +29 -1
- package/src/__tests__/inbound-slack-persistence.test.ts +340 -0
- package/src/__tests__/intent-routing.test.ts +1 -40
- package/src/__tests__/llm-catalog-parity.test.ts +174 -0
- package/src/__tests__/llm-context-normalization.test.ts +121 -0
- package/src/__tests__/llm-resolver.test.ts +214 -0
- package/src/__tests__/llm-schema.test.ts +223 -0
- package/src/__tests__/managed-proxy-context.test.ts +6 -2
- package/src/__tests__/messaging-skill-split.test.ts +3 -34
- package/src/__tests__/migration-import-from-url.test.ts +684 -0
- package/src/__tests__/model-intents.test.ts +9 -83
- package/src/__tests__/notification-decision-fallback.test.ts +0 -10
- package/src/__tests__/notification-decision-identity.test.ts +0 -9
- package/src/__tests__/notification-decision-recipient-context.test.ts +0 -9
- package/src/__tests__/oauth-store.test.ts +10 -7
- package/src/__tests__/oauth2-gateway-transport.test.ts +8 -3
- package/src/__tests__/oauth2-refresh-retry.test.ts +279 -0
- package/src/__tests__/openai-provider.test.ts +7 -0
- package/src/__tests__/openai-responses-provider.test.ts +396 -0
- package/src/__tests__/openrouter-provider-only.test.ts +135 -0
- package/src/__tests__/outbound-slack-persistence.test.ts +293 -0
- package/src/__tests__/permission-checker-host-gate.test.ts +1 -1
- package/src/__tests__/permission-mode.test.ts +16 -0
- package/src/__tests__/permission-types.test.ts +0 -1
- package/src/__tests__/persona-resolver.test.ts +13 -13
- package/src/__tests__/pkb-autoinject.test.ts +37 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +1 -1
- package/src/__tests__/pricing.test.ts +50 -3
- package/src/__tests__/profiler-routes.test.ts +1 -1
- package/src/__tests__/provider-commit-message-generator.test.ts +14 -84
- package/src/__tests__/provider-env-vars-scope.test.ts +52 -0
- package/src/__tests__/provider-error-scenarios.test.ts +135 -6
- package/src/__tests__/provider-managed-proxy-integration.test.ts +42 -11
- package/src/__tests__/provider-registry-ollama.test.ts +1 -2
- package/src/__tests__/proxy-approval-callback.test.ts +0 -1
- package/src/__tests__/reaction-persistence.test.ts +560 -0
- package/src/__tests__/relay-server.test.ts +1 -1
- package/src/__tests__/require-fresh-approval.test.ts +1 -1
- package/src/__tests__/retry-openrouter-only-normalization.test.ts +136 -0
- package/src/__tests__/retry-thinking-tool-choice.test.ts +226 -0
- package/src/__tests__/risk-classifier-parity.test.ts +230 -0
- package/src/__tests__/sanitize-config-for-transfer.test.ts +78 -1
- package/src/__tests__/secret-ingress-http.test.ts +28 -0
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +125 -0
- package/src/__tests__/secret-routes-managed-proxy.test.ts +2 -3
- package/src/__tests__/secret-scanner-executor.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +29 -1
- package/src/__tests__/server-history-render.test.ts +31 -0
- package/src/__tests__/shell-parser-property.test.ts +13 -13
- package/src/__tests__/skill-cache-store.test.ts +182 -0
- package/src/__tests__/skills.test.ts +19 -33
- package/src/__tests__/slack-app-setup-skill-regression.test.ts +3 -1
- package/src/__tests__/slack-skill.test.ts +3 -8
- package/src/__tests__/starter-bundle.test.ts +35 -0
- package/src/__tests__/subagent-call-site-routing.test.ts +280 -0
- package/src/__tests__/suggestion-routes.test.ts +160 -3
- package/src/__tests__/system-prompt.test.ts +22 -35
- package/src/__tests__/task-runner.test.ts +3 -1
- package/src/__tests__/tcc-sandbox-deny.test.ts +198 -0
- package/src/__tests__/terminal-tools.test.ts +8 -0
- package/src/__tests__/test-support/browser-skill-harness.ts +2 -52
- package/src/__tests__/thread-backfill.test.ts +941 -0
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -2
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +2 -2
- package/src/__tests__/tool-executor.test.ts +60 -94
- package/src/__tests__/trust-store.test.ts +442 -109
- package/src/__tests__/update-bulletin-job.test.ts +389 -0
- package/src/__tests__/usage-cache-backfill-migration.test.ts +3 -1
- package/src/__tests__/verification-control-plane-policy.test.ts +1 -22
- package/src/__tests__/voice-session-bridge.test.ts +39 -0
- package/src/__tests__/volume-security-guard.test.ts +3 -2
- package/src/__tests__/web-search-history.test.ts +337 -0
- package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +343 -0
- package/src/__tests__/workspace-migration-043-release-notes-latex-rendering.test.ts +202 -0
- package/src/__tests__/workspace-migration-045-release-notes-meet-avatar.test.ts +210 -0
- package/src/__tests__/workspace-migration-drop-user-md.test.ts +11 -11
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +841 -0
- package/src/__tests__/workspace-policy.test.ts +1 -13
- package/src/acp/client-handler.ts +1 -2
- package/src/agent/loop.ts +209 -17
- package/src/avatar/resvg-lazy.test.ts +136 -0
- package/src/avatar/resvg-lazy.ts +82 -9
- package/src/avatar/traits-png-sync.ts +21 -1
- package/src/browser/__tests__/operations.test.ts +163 -0
- package/src/browser/identifiers.ts +51 -0
- package/src/browser/operations.ts +660 -0
- package/src/browser/types.ts +81 -0
- package/src/calls/guardian-question-copy.ts +2 -2
- package/src/calls/telephony-stt-routing.ts +1 -1
- package/src/calls/voice-session-bridge.ts +1 -0
- package/src/cli/AGENTS.md +1 -1
- package/src/cli/commands/__tests__/attachment.test.ts +438 -0
- package/src/cli/commands/__tests__/browser.test.ts +554 -0
- package/src/cli/commands/__tests__/cache.test.ts +623 -0
- package/src/cli/commands/__tests__/email-list.test.ts +6 -0
- package/src/cli/commands/__tests__/email-send.test.ts +93 -1
- package/src/cli/commands/__tests__/image-generation.test.ts +666 -0
- package/src/cli/commands/__tests__/inference-send.test.ts +451 -0
- package/src/cli/commands/__tests__/stt-transcribe.test.ts +454 -0
- package/src/cli/commands/__tests__/task.test.ts +913 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +594 -0
- package/src/cli/commands/__tests__/ui-confirm.test.ts +650 -0
- package/src/cli/commands/__tests__/ui.test.ts +1215 -0
- package/src/cli/commands/__tests__/watchers.test.ts +716 -0
- package/src/cli/commands/attachment.ts +182 -0
- package/src/cli/commands/browser.ts +350 -0
- package/src/cli/commands/cache.ts +341 -0
- package/src/cli/commands/completions.ts +0 -3
- package/src/cli/commands/config.ts +6 -6
- package/src/cli/commands/conversations-import.ts +347 -0
- package/src/cli/commands/conversations.ts +14 -1
- package/src/cli/commands/email.ts +234 -194
- package/src/cli/commands/image-generation.ts +300 -0
- package/src/cli/commands/inference.ts +200 -0
- package/src/cli/commands/memory.ts +127 -17
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/status.test.ts +0 -1
- package/src/cli/commands/stt.ts +339 -0
- package/src/cli/commands/task.ts +795 -0
- package/src/cli/commands/trust.ts +50 -19
- package/src/cli/commands/tts.ts +273 -0
- package/src/cli/commands/ui.ts +670 -0
- package/src/cli/commands/watchers.ts +509 -0
- package/src/cli/lib/daemon-credential-client.ts +0 -19
- package/src/cli/program.ts +23 -4
- package/src/cli.ts +0 -37
- package/src/config/bundled-skills/conversations/tools/rename-conversation.ts +23 -1
- package/src/config/bundled-skills/media-processing/services/reduce.ts +1 -1
- package/src/config/bundled-skills/messaging/SKILL.md +2 -2
- package/src/config/bundled-skills/messaging/TOOLS.json +4 -0
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +8 -1
- package/src/config/bundled-skills/messaging/tools/messaging-read.ts +15 -1
- package/src/config/bundled-skills/messaging/tools/messaging-search.ts +21 -1
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +11 -12
- package/src/config/bundled-skills/phone-calls/references/CONFIG.md +9 -8
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-tool-registry.ts +0 -175
- package/src/config/env.ts +7 -2
- package/src/config/feature-flag-registry.json +25 -9
- package/src/config/llm-resolver.ts +128 -0
- package/src/config/loader.ts +194 -10
- package/src/config/raw-config-utils.ts +30 -2
- package/src/config/sanitize-for-transfer.ts +35 -0
- package/src/config/schema.ts +30 -41
- package/src/config/schemas/analysis.ts +3 -22
- package/src/config/schemas/calls.ts +0 -4
- package/src/config/schemas/filing.ts +2 -7
- package/src/config/schemas/heartbeat.ts +0 -5
- package/src/config/schemas/inference.ts +3 -23
- package/src/config/schemas/llm.ts +318 -0
- package/src/config/schemas/memory-processing.ts +1 -9
- package/src/config/schemas/notifications.ts +4 -11
- package/src/config/schemas/platform.ts +3 -9
- package/src/config/schemas/security.ts +33 -0
- package/src/config/schemas/services.ts +9 -4
- package/src/config/schemas/stt.ts +1 -0
- package/src/config/schemas/tts.ts +53 -0
- package/src/config/schemas/updates.ts +1 -1
- package/src/config/schemas/workspace-git.ts +3 -40
- package/src/config/skills.ts +2 -2
- package/src/context/__tests__/compact-prompt.test.ts +45 -0
- package/src/context/__tests__/microcompact.test.ts +805 -0
- package/src/context/estimator-calibration.ts +136 -0
- package/src/context/microcompact.ts +443 -0
- package/src/context/prompts/compact.md +12 -0
- package/src/context/token-estimator.ts +61 -3
- package/src/context/window-manager.ts +229 -25
- package/src/credential-execution/approval-bridge.ts +0 -1
- package/src/credential-execution/executable-discovery.ts +19 -8
- package/src/credential-execution/process-manager.test.ts +109 -0
- package/src/credential-execution/process-manager.ts +65 -2
- package/src/daemon/approval-generators.ts +29 -4
- package/src/daemon/assistant-attachments.ts +24 -13
- package/src/daemon/classifier.ts +2 -2
- package/src/daemon/config-watcher.ts +0 -1
- package/src/daemon/context-overflow-reducer.ts +4 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +79 -12
- package/src/daemon/conversation-agent-loop.ts +462 -80
- package/src/daemon/conversation-attachments.ts +2 -6
- package/src/daemon/conversation-error.ts +36 -1
- package/src/daemon/conversation-lifecycle.ts +30 -6
- package/src/daemon/conversation-messaging.ts +73 -4
- package/src/daemon/conversation-process.ts +10 -4
- package/src/daemon/conversation-queue-manager.ts +3 -0
- package/src/daemon/conversation-runtime-assembly.ts +760 -29
- package/src/daemon/conversation-slash.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +389 -1
- package/src/daemon/conversation-tool-setup.ts +10 -5
- package/src/daemon/conversation-usage.ts +1 -1
- package/src/daemon/conversation.ts +118 -30
- package/src/daemon/external-skills-bootstrap.ts +41 -0
- package/src/daemon/guardian-action-generators.ts +34 -14
- package/src/daemon/handlers/config-model.test.ts +86 -0
- package/src/daemon/handlers/config-model.ts +54 -12
- package/src/daemon/handlers/conversations.ts +9 -2
- package/src/daemon/handlers/shared.ts +39 -11
- package/src/daemon/handlers/skills.ts +2 -2
- package/src/daemon/handlers/slack-channel-oauth-install.ts +197 -0
- package/src/daemon/lifecycle.ts +76 -14
- package/src/daemon/message-types/conversations.ts +14 -0
- package/src/daemon/message-types/messages.ts +9 -1
- package/src/daemon/message-types/trust.ts +0 -2
- package/src/daemon/parse-actual-tokens-from-error.test.ts +57 -1
- package/src/daemon/parse-actual-tokens-from-error.ts +66 -0
- package/src/daemon/pkb-context-tracker.test.ts +169 -0
- package/src/daemon/pkb-context-tracker.ts +125 -0
- package/src/daemon/pkb-reminder-builder.test.ts +70 -0
- package/src/daemon/pkb-reminder-builder.ts +31 -0
- package/src/daemon/providers-setup.ts +6 -0
- package/src/daemon/server.ts +117 -9
- package/src/daemon/tool-side-effects.ts +0 -9
- package/src/daemon/watch-handler.ts +4 -4
- package/src/daemon/web-search-history.ts +126 -0
- package/src/events/domain-events.ts +0 -1
- package/src/filing/filing-service.ts +9 -10
- package/src/heartbeat/heartbeat-service.ts +76 -28
- package/src/home/__tests__/feed-scheduler.test.ts +39 -11
- package/src/home/__tests__/rollup-producer.test.ts +44 -0
- package/src/home/assistant-feed-authoring.ts +4 -0
- package/src/home/emit-feed-event.ts +4 -0
- package/src/home/feed-scheduler.ts +20 -4
- package/src/home/feed-types.ts +56 -2
- package/src/home/relationship-state-writer.ts +2 -2
- package/src/home/rollup-producer.ts +34 -5
- package/src/home/suggested-prompts.ts +101 -0
- package/src/ipc/__tests__/attachment-ipc.test.ts +213 -0
- package/src/ipc/__tests__/browser-ipc.test.ts +339 -0
- package/src/ipc/__tests__/cache-ipc.test.ts +266 -0
- package/src/ipc/__tests__/socket-path.test.ts +73 -0
- package/src/ipc/__tests__/task-ipc.test.ts +577 -0
- package/src/ipc/__tests__/ui-request-route.test.ts +495 -0
- package/src/ipc/__tests__/watcher-ipc.test.ts +295 -0
- package/src/ipc/cli-client.ts +2 -1
- package/src/ipc/cli-server.ts +26 -8
- package/src/ipc/gateway-client.ts +4 -4
- package/src/ipc/routes/attachment.ts +114 -0
- package/src/ipc/routes/browser-context.ts +61 -0
- package/src/ipc/routes/browser.ts +96 -0
- package/src/ipc/routes/cache.ts +96 -0
- package/src/ipc/routes/index.ts +17 -1
- package/src/ipc/routes/task-queue.ts +226 -0
- package/src/ipc/routes/task.ts +173 -0
- package/src/ipc/routes/ui-request.ts +50 -0
- package/src/ipc/routes/watcher.ts +203 -0
- package/src/ipc/socket-path.ts +100 -0
- package/src/memory/__tests__/conversation-analyze-job.test.ts +9 -8
- package/src/memory/__tests__/conversation-group-migration.test.ts +99 -0
- package/src/memory/admin.ts +18 -0
- package/src/memory/conversation-analyze-job.ts +14 -13
- package/src/memory/conversation-attention-store.ts +13 -6
- package/src/memory/conversation-crud.ts +103 -3
- package/src/memory/conversation-group-migration.ts +38 -6
- package/src/memory/conversation-title-service.ts +7 -4
- package/src/memory/db-init.ts +2 -0
- package/src/memory/embedding-backend.ts +1 -1
- package/src/memory/graph/compaction.ts +299 -0
- package/src/memory/graph/consolidation.ts +4 -4
- package/src/memory/graph/conversation-graph-memory.ts +89 -29
- package/src/memory/graph/extraction.test.ts +272 -2
- package/src/memory/graph/extraction.ts +173 -51
- package/src/memory/graph/graph-search.test.ts +92 -0
- package/src/memory/graph/graph-search.ts +4 -1
- package/src/memory/graph/narrative.ts +2 -2
- package/src/memory/graph/pattern-scan.ts +2 -2
- package/src/memory/graph/retriever.test.ts +459 -0
- package/src/memory/graph/retriever.ts +230 -48
- package/src/memory/graph/store.ts +41 -0
- package/src/memory/graph/tool-handlers.ts +27 -0
- package/src/memory/graph/tools.ts +6 -1
- package/src/memory/indexer.ts +5 -5
- package/src/memory/job-handlers/conversation-starters.ts +23 -20
- package/src/memory/job-handlers/summarization.ts +2 -2
- package/src/memory/job-utils.ts +7 -1
- package/src/memory/jobs/embed-pkb-file.test.ts +168 -0
- package/src/memory/jobs/embed-pkb-file.ts +54 -0
- package/src/memory/jobs-store.ts +44 -3
- package/src/memory/jobs-worker.ts +4 -0
- package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +1 -1
- package/src/memory/migrations/220-normalize-user-file-by-principal.ts +2 -2
- package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +82 -0
- package/src/memory/migrations/index.ts +1 -0
- package/src/memory/pkb/pkb-index.test.ts +368 -0
- package/src/memory/pkb/pkb-index.ts +255 -0
- package/src/memory/pkb/pkb-reconcile.test.ts +251 -0
- package/src/memory/pkb/pkb-reconcile.ts +148 -0
- package/src/memory/pkb/pkb-search.test.ts +438 -0
- package/src/memory/pkb/pkb-search.ts +137 -0
- package/src/memory/pkb/types.ts +53 -0
- package/src/memory/qdrant-client.ts +122 -1
- package/src/memory/slack-thread-store.ts +37 -0
- package/src/messaging/providers/gmail/adapter.ts +6 -16
- package/src/messaging/providers/gmail/client.ts +22 -0
- package/src/messaging/providers/gmail/types.ts +7 -0
- package/src/messaging/providers/slack/adapter.ts +14 -2
- package/src/messaging/providers/slack/backfill.test.ts +257 -0
- package/src/messaging/providers/slack/backfill.ts +101 -0
- package/src/messaging/providers/slack/message-metadata.test.ts +316 -0
- package/src/messaging/providers/slack/message-metadata.ts +123 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +1373 -0
- package/src/messaging/providers/slack/render-transcript.ts +443 -0
- package/src/messaging/style-analyzer.ts +5 -2
- package/src/notifications/README.md +9 -5
- package/src/notifications/decision-engine.ts +3 -9
- package/src/notifications/preference-extractor.ts +2 -6
- package/src/oauth/oauth-store.ts +1 -0
- package/src/oauth/platform-connection.test.ts +47 -0
- package/src/oauth/platform-connection.ts +15 -5
- package/src/oauth/seed-providers.ts +4 -2
- package/src/permissions/approval-policy.test.ts +948 -0
- package/src/permissions/approval-policy.ts +257 -0
- package/src/permissions/bash-risk-classifier.test.ts +1208 -0
- package/src/permissions/bash-risk-classifier.ts +707 -0
- package/src/permissions/checker.ts +217 -708
- package/src/permissions/command-registry.test.ts +535 -0
- package/src/permissions/command-registry.ts +825 -0
- package/src/permissions/defaults.ts +26 -78
- package/src/permissions/file-risk-classifier.test.ts +535 -0
- package/src/permissions/file-risk-classifier.ts +274 -0
- package/src/permissions/risk-types.ts +205 -0
- package/src/permissions/secret-prompter.ts +53 -2
- package/src/permissions/skill-risk-classifier.test.ts +311 -0
- package/src/permissions/skill-risk-classifier.ts +214 -0
- package/src/permissions/trust-client.ts +52 -25
- package/src/permissions/trust-store-interface.ts +1 -6
- package/src/permissions/trust-store.ts +161 -62
- package/src/permissions/types.ts +23 -14
- package/src/permissions/web-risk-classifier.test.ts +170 -0
- package/src/permissions/web-risk-classifier.ts +89 -0
- package/src/permissions/workspace-policy.ts +1 -16
- package/src/platform/client.ts +19 -1
- package/src/prompts/persona-resolver.ts +3 -3
- package/src/prompts/system-prompt.ts +19 -20
- package/src/prompts/templates/SOUL.md +2 -2
- package/src/prompts/update-bulletin-job.ts +190 -0
- package/src/providers/__tests__/context-overflow-error.test.ts +328 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +102 -0
- package/src/providers/__tests__/retry-callsite.test.ts +424 -0
- package/src/providers/anthropic/client.ts +183 -14
- package/src/providers/call-site-routing.ts +71 -0
- package/src/providers/gemini/client.ts +65 -2
- package/src/providers/managed-proxy/constants.ts +2 -1
- package/src/providers/model-catalog.ts +501 -33
- package/src/providers/model-intents.ts +4 -4
- package/src/providers/openai/chat-completions-provider.ts +57 -1
- package/src/providers/openai/responses-provider.ts +86 -9
- package/src/providers/openrouter/client.ts +76 -9
- package/src/providers/provider-env-vars.ts +56 -0
- package/src/providers/provider-send-message.ts +22 -5
- package/src/providers/ratelimit.ts +4 -0
- package/src/providers/registry.ts +19 -8
- package/src/providers/retry.ts +174 -39
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +55 -0
- package/src/providers/speech-to-text/google-gemini-live-stream.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +17 -0
- package/src/providers/speech-to-text/resolve.ts +7 -0
- package/src/providers/speech-to-text/xai-realtime.test.ts +578 -0
- package/src/providers/speech-to-text/xai-realtime.ts +796 -0
- package/src/providers/speech-to-text/xai.test.ts +155 -0
- package/src/providers/speech-to-text/xai.ts +97 -0
- package/src/providers/types.ts +93 -3
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +43 -2
- package/src/runtime/__tests__/interactive-ui.test.ts +673 -0
- package/src/runtime/agent-wake.ts +63 -22
- package/src/runtime/auth/route-policy.ts +4 -0
- package/src/runtime/btw-sidechain.ts +13 -3
- package/src/runtime/channel-reply-delivery.ts +106 -2
- package/src/runtime/decision-token.ts +116 -0
- package/src/runtime/gateway-client.ts +2 -2
- package/src/runtime/http-router.ts +32 -0
- package/src/runtime/http-server.ts +52 -1
- package/src/runtime/http-types.ts +23 -1
- package/src/runtime/interactive-ui.ts +362 -0
- package/src/runtime/invite-instruction-generator.ts +2 -2
- package/src/runtime/migrations/__tests__/gcs-signed-url.test.ts +176 -0
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +390 -0
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +221 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +1540 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +453 -0
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +222 -0
- package/src/runtime/migrations/gcs-signed-url.ts +162 -0
- package/src/runtime/migrations/vbundle-importer.ts +154 -9
- package/src/runtime/migrations/vbundle-metadata-merge.ts +124 -0
- package/src/runtime/migrations/vbundle-streaming-importer.ts +2522 -0
- package/src/runtime/migrations/vbundle-streaming-validator.ts +244 -0
- package/src/runtime/migrations/vbundle-tar-stream.ts +217 -0
- package/src/runtime/migrations/vbundle-validator.ts +15 -6
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +111 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +114 -75
- package/src/runtime/routes/__tests__/migration-vellum-metadata-reconcile.test.ts +246 -0
- package/src/runtime/routes/approval-prompt-ts-tracker.ts +58 -0
- package/src/runtime/routes/approval-routes.ts +12 -17
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +9 -0
- package/src/runtime/routes/avatar-routes.ts +20 -4
- package/src/runtime/routes/btw-routes.ts +1 -4
- package/src/runtime/routes/conversation-management-routes.ts +20 -2
- package/src/runtime/routes/conversation-routes.ts +133 -27
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/diagnostics-routes.ts +6 -4
- package/src/runtime/routes/events-routes.ts +16 -0
- package/src/runtime/routes/guardian-approval-interception.ts +33 -3
- package/src/runtime/routes/guardian-approval-prompt.ts +13 -3
- package/src/runtime/routes/home-feed-routes.ts +120 -2
- package/src/runtime/routes/inbound-message-handler.ts +912 -2
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +113 -2
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +61 -3
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +129 -6
- package/src/runtime/routes/integrations/slack/channel.ts +25 -3
- package/src/runtime/routes/llm-context-normalization.ts +23 -1
- package/src/runtime/routes/migration-routes.ts +720 -124
- package/src/runtime/routes/settings-routes.ts +4 -2
- package/src/runtime/routes/trust-rules-routes.ts +30 -14
- package/src/runtime/routes/work-items-routes.test.ts +1 -1
- package/src/runtime/routes/work-items-routes.ts +3 -2
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +25 -43
- package/src/runtime/services/analyze-conversation.ts +12 -16
- package/src/runtime/skill-route-registry.ts +28 -6
- package/src/schedule/scheduler.ts +8 -0
- package/src/security/__tests__/provider-key-env-fallback.test.ts +119 -0
- package/src/security/__tests__/untrusted-content.test.ts +109 -0
- package/src/security/oauth2.ts +98 -35
- package/src/security/secure-keys.ts +7 -8
- package/src/security/token-manager.ts +27 -13
- package/src/security/untrusted-content.ts +102 -0
- package/src/skills/catalog-cache.ts +26 -7
- package/src/skills/catalog-install.ts +31 -3
- package/src/skills/skill-cache-store.ts +97 -0
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +76 -0
- package/src/stt/daemon-batch-transcriber.ts +33 -0
- package/src/stt/stt-stream-session.ts +8 -1
- package/src/stt/types.ts +5 -1
- package/src/subagent/manager.ts +41 -13
- package/src/tasks/ephemeral-permissions.ts +9 -4
- package/src/telemetry/usage-telemetry-reporter.ts +27 -5
- package/src/tools/browser/__tests__/browser-status.test.ts +45 -2
- package/src/tools/browser/browser-execution.ts +65 -38
- package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +22 -0
- package/src/tools/credentials/tool-policy.ts +39 -5
- package/src/tools/credentials/vault.ts +9 -4
- package/src/tools/executor.ts +4 -0
- package/src/tools/filesystem/write.ts +52 -0
- package/src/tools/host-terminal/host-shell.ts +45 -5
- package/src/tools/memory/register.test.ts +185 -0
- package/src/tools/memory/register.ts +3 -1
- package/src/tools/network/web-fetch.ts +20 -10
- package/src/tools/network/web-search.ts +19 -4
- package/src/tools/permission-checker.ts +36 -15
- package/src/tools/policy-context.ts +25 -8
- package/src/tools/registry.ts +55 -3
- package/src/tools/side-effects.ts +0 -11
- package/src/tools/skills/execute.ts +2 -2
- package/src/tools/skills/sandbox-runner.ts +5 -2
- package/src/tools/terminal/backends/native.ts +51 -2
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +1 -0
- package/src/tools/tool-manifest.ts +6 -21
- package/src/tools/types.ts +12 -3
- package/src/tools/verification-control-plane-policy.ts +1 -1
- package/src/tts/__tests__/provider-adapters.test.ts +240 -13
- package/src/tts/provider-catalog.ts +18 -0
- package/src/tts/providers/index.ts +2 -0
- package/src/tts/providers/xai-provider.ts +224 -0
- package/src/tts/types.ts +46 -0
- package/src/types/tar-stream.d.ts +66 -0
- package/src/util/json.ts +17 -0
- package/src/util/platform.ts +2 -2
- package/src/util/pricing.ts +15 -5
- package/src/watcher/engine.ts +1 -1
- package/src/watcher/providers/google-calendar.ts +134 -8
- package/src/watcher/providers/outlook-calendar.ts +42 -2
- package/src/workspace/git-service.ts +23 -4
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +516 -0
- package/src/workspace/migrations/039-drop-legacy-llm-keys.ts +171 -0
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +154 -0
- package/src/workspace/migrations/041-backfill-google-gmail-settings-scope.ts +57 -0
- package/src/workspace/migrations/042-fix-backfill-google-gmail-settings-scope.ts +70 -0
- package/src/workspace/migrations/043-release-notes-latex-rendering.ts +75 -0
- package/src/workspace/migrations/044-bump-stale-provider-stream-timeout.ts +51 -0
- package/src/workspace/migrations/045-release-notes-meet-avatar.ts +130 -0
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/registry.ts +16 -0
- package/src/workspace/provider-commit-message-generator.ts +19 -38
- package/src/__tests__/gmail-archive-fallback.test.ts +0 -193
- package/src/__tests__/gmail-archive-gate.test.ts +0 -246
- package/src/__tests__/gmail-preferences.test.ts +0 -117
- package/src/__tests__/outlook-attachments.test.ts +0 -301
- package/src/__tests__/outlook-automation-tools.test.ts +0 -425
- package/src/__tests__/outlook-categories.test.ts +0 -212
- package/src/__tests__/outlook-compose-tools.test.ts +0 -325
- package/src/__tests__/outlook-declutter-tools.test.ts +0 -585
- package/src/__tests__/outlook-follow-up.test.ts +0 -196
- package/src/__tests__/outlook-trash.test.ts +0 -77
- package/src/__tests__/outlook-unsubscribe.test.ts +0 -279
- package/src/__tests__/update-bulletin-format.test.ts +0 -181
- package/src/__tests__/update-bulletin-state.test.ts +0 -135
- package/src/__tests__/update-bulletin.test.ts +0 -478
- package/src/__tests__/update-template-contract.test.ts +0 -29
- package/src/cli/commands/doctor.ts +0 -341
- package/src/config/bundled-skills/browser/SKILL.md +0 -88
- package/src/config/bundled-skills/browser/TOOLS.json +0 -516
- package/src/config/bundled-skills/browser/tools/browser-attach.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-click.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-close.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-detach.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-extract.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-fill-credential.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-hover.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-navigate.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-press-key.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-screenshot.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-scroll.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-select-option.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-snapshot.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-status.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-type.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +0 -49
- package/src/config/bundled-skills/browser/tools/browser-wait-for.ts +0 -12
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +0 -27
- package/src/config/bundled-skills/chatgpt-import/TOOLS.json +0 -27
- package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +0 -378
- package/src/config/bundled-skills/gmail/SKILL.md +0 -221
- package/src/config/bundled-skills/gmail/TOOLS.json +0 -588
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +0 -256
- package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +0 -112
- package/src/config/bundled-skills/gmail/tools/gmail-draft.ts +0 -44
- package/src/config/bundled-skills/gmail/tools/gmail-filters.ts +0 -81
- package/src/config/bundled-skills/gmail/tools/gmail-follow-up.ts +0 -108
- package/src/config/bundled-skills/gmail/tools/gmail-forward.ts +0 -146
- package/src/config/bundled-skills/gmail/tools/gmail-label.ts +0 -53
- package/src/config/bundled-skills/gmail/tools/gmail-outreach-scan.ts +0 -347
- package/src/config/bundled-skills/gmail/tools/gmail-preferences-tool.ts +0 -59
- package/src/config/bundled-skills/gmail/tools/gmail-preferences.ts +0 -82
- package/src/config/bundled-skills/gmail/tools/gmail-send-draft.ts +0 -26
- package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +0 -347
- package/src/config/bundled-skills/gmail/tools/gmail-trash.ts +0 -29
- package/src/config/bundled-skills/gmail/tools/gmail-unsubscribe.ts +0 -122
- package/src/config/bundled-skills/gmail/tools/gmail-vacation.ts +0 -67
- package/src/config/bundled-skills/gmail/tools/scan-result-store.ts +0 -100
- package/src/config/bundled-skills/gmail/tools/shared.ts +0 -47
- package/src/config/bundled-skills/google-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/google-calendar/TOOLS.json +0 -226
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +0 -223
- package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +0 -27
- package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +0 -48
- package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +0 -19
- package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +0 -36
- package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +0 -58
- package/src/config/bundled-skills/google-calendar/tools/shared.ts +0 -17
- package/src/config/bundled-skills/google-calendar/types.ts +0 -97
- package/src/config/bundled-skills/outlook/SKILL.md +0 -196
- package/src/config/bundled-skills/outlook/TOOLS.json +0 -530
- package/src/config/bundled-skills/outlook/tools/outlook-attachments.ts +0 -85
- package/src/config/bundled-skills/outlook/tools/outlook-categories.ts +0 -77
- package/src/config/bundled-skills/outlook/tools/outlook-draft.ts +0 -84
- package/src/config/bundled-skills/outlook/tools/outlook-follow-up.ts +0 -94
- package/src/config/bundled-skills/outlook/tools/outlook-forward.ts +0 -49
- package/src/config/bundled-skills/outlook/tools/outlook-outreach-scan.ts +0 -237
- package/src/config/bundled-skills/outlook/tools/outlook-rules.ts +0 -161
- package/src/config/bundled-skills/outlook/tools/outlook-send-draft.ts +0 -32
- package/src/config/bundled-skills/outlook/tools/outlook-sender-digest.ts +0 -272
- package/src/config/bundled-skills/outlook/tools/outlook-trash.ts +0 -29
- package/src/config/bundled-skills/outlook/tools/outlook-unsubscribe.ts +0 -129
- package/src/config/bundled-skills/outlook/tools/outlook-vacation.ts +0 -87
- package/src/config/bundled-skills/outlook/tools/shared.ts +0 -20
- package/src/config/bundled-skills/outlook-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/outlook-calendar/TOOLS.json +0 -221
- package/src/config/bundled-skills/outlook-calendar/calendar-client.ts +0 -252
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-check-availability.ts +0 -53
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-create-event.ts +0 -74
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-get-event.ts +0 -18
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-list-events.ts +0 -46
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-rsvp.ts +0 -36
- package/src/config/bundled-skills/outlook-calendar/tools/shared.ts +0 -17
- package/src/config/bundled-skills/outlook-calendar/types.ts +0 -120
- package/src/config/bundled-skills/slack/SKILL.md +0 -108
- package/src/config/bundled-skills/tasks/SKILL.md +0 -37
- package/src/config/bundled-skills/tasks/TOOLS.json +0 -353
- package/src/config/bundled-skills/tasks/icon.svg +0 -34
- package/src/config/bundled-skills/tasks/tools/task-delete.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-add.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-show.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-update.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-queue-run.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-run.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-save.ts +0 -12
- package/src/config/bundled-skills/watcher/SKILL.md +0 -31
- package/src/config/bundled-skills/watcher/TOOLS.json +0 -167
- package/src/config/bundled-skills/watcher/tools/watcher-create.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-list.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-update.ts +0 -12
- package/src/prompts/templates/UPDATES.md +0 -50
- package/src/prompts/update-bulletin-format.ts +0 -85
- package/src/prompts/update-bulletin-state.ts +0 -58
- package/src/prompts/update-bulletin-template-path.ts +0 -13
- package/src/prompts/update-bulletin.ts +0 -139
- package/src/shared/provider-env-vars.ts +0 -19
- package/src/tools/watcher/create.ts +0 -86
- package/src/tools/watcher/delete.ts +0 -36
- package/src/tools/watcher/digest.ts +0 -54
- package/src/tools/watcher/list.ts +0 -83
- package/src/tools/watcher/update.ts +0 -71
|
@@ -39,7 +39,12 @@ export async function run(
|
|
|
39
39
|
// Persist with isAutoTitle = 0 so auto-generation won't overwrite it
|
|
40
40
|
updateConversationTitle(conversationId, trimmedTitle, 0);
|
|
41
41
|
|
|
42
|
-
// Notify
|
|
42
|
+
// Notify the client currently viewing this conversation so the header
|
|
43
|
+
// updates in-place. Scoped to this conversation so foreign
|
|
44
|
+
// `conversationId` values don't leak to other subscribers' speculative
|
|
45
|
+
// ID-resolution paths. Other clients learn about the rename via the
|
|
46
|
+
// unscoped `conversation_list_invalidated` published below, which
|
|
47
|
+
// triggers their sidebars to refetch and pick up the new title.
|
|
43
48
|
const assistantId = context.assistantId ?? DAEMON_INTERNAL_ASSISTANT_ID;
|
|
44
49
|
assistantEventHub
|
|
45
50
|
.publish(
|
|
@@ -57,6 +62,23 @@ export async function run(
|
|
|
57
62
|
log.warn({ err }, "Failed to publish conversation_title_updated event");
|
|
58
63
|
});
|
|
59
64
|
|
|
65
|
+
// Broadcast `conversation_list_invalidated` unscoped so every connected
|
|
66
|
+
// client's sidebar refetches and picks up the renamed title. Mirrors
|
|
67
|
+
// the HTTP rename route in `conversation-management-routes.ts`.
|
|
68
|
+
assistantEventHub
|
|
69
|
+
.publish(
|
|
70
|
+
buildAssistantEvent(assistantId, {
|
|
71
|
+
type: "conversation_list_invalidated",
|
|
72
|
+
reason: "renamed",
|
|
73
|
+
}),
|
|
74
|
+
)
|
|
75
|
+
.catch((err) => {
|
|
76
|
+
log.warn(
|
|
77
|
+
{ err },
|
|
78
|
+
"Failed to publish conversation_list_invalidated for rename",
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
60
82
|
log.info({ conversationId, title: trimmedTitle }, "Conversation renamed");
|
|
61
83
|
|
|
62
84
|
return {
|
|
@@ -179,7 +179,7 @@ async function sendToClaude(
|
|
|
179
179
|
model?: string,
|
|
180
180
|
onProgress?: (msg: string) => void,
|
|
181
181
|
): Promise<ReduceResult> {
|
|
182
|
-
const provider = await getConfiguredProvider();
|
|
182
|
+
const provider = await getConfiguredProvider("mainAgent");
|
|
183
183
|
if (!provider) {
|
|
184
184
|
throw new Error("No LLM provider available. Please configure an API key.");
|
|
185
185
|
}
|
|
@@ -177,7 +177,7 @@ Medium and high risk tools require a confidence score between 0 and 1:
|
|
|
177
177
|
|
|
178
178
|
When a user asks to declutter, clean up, or organize their email:
|
|
179
179
|
|
|
180
|
-
- **Gmail connected**: Load the **gmail** skill, which has the full decluttering workflow with
|
|
180
|
+
- **Gmail connected**: Load the **gmail** skill, which has the full decluttering workflow with sender-digest scanning, batch archiving, unsubscribe support, and filter management.
|
|
181
181
|
- **Non-Gmail email connected**: Use the generic tools (`messaging_sender_digest`, `messaging_archive_by_sender`) - they work with any provider that supports these operations. Skip unsubscribe and filter offers since they are Gmail-specific.
|
|
182
182
|
- **Nothing connected**: Ask which email provider they use. If it's Gmail, go straight into the Gmail connection flow. For other providers, let the user know only Gmail is supported right now and offer to set up Gmail instead. Don't present a menu of options or explain what OAuth is.
|
|
183
183
|
|
|
@@ -195,4 +195,4 @@ When a user asks to declutter, clean up, or organize their email:
|
|
|
195
195
|
|
|
196
196
|
### Query-Based Archiving
|
|
197
197
|
|
|
198
|
-
Unlike Gmail's
|
|
198
|
+
Unlike the Gmail skill's archive script (which supports `cache_key` + sender emails), `messaging_archive_by_sender` is query-based. Build `from:<email>` queries from the sender digest results to target specific senders. Include the same date/category filters used in the original scan to keep the scope consistent.
|
|
@@ -374,6 +374,10 @@
|
|
|
374
374
|
"activity": {
|
|
375
375
|
"type": "string",
|
|
376
376
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
377
|
+
},
|
|
378
|
+
"user_approved": {
|
|
379
|
+
"type": "boolean",
|
|
380
|
+
"description": "Set to true ONLY when the user's most recent message contains explicit approval language for this specific action (e.g. 'archive these', 'yes do it', 'go ahead'). Do NOT set this when the user merely described what they want without confirming, or when acting on prior instructions without fresh confirmation in this turn."
|
|
377
381
|
}
|
|
378
382
|
},
|
|
379
383
|
"required": ["query", "confidence"]
|
|
@@ -8,7 +8,14 @@ export async function run(
|
|
|
8
8
|
input: Record<string, unknown>,
|
|
9
9
|
context: ToolContext,
|
|
10
10
|
): Promise<ToolExecutionResult> {
|
|
11
|
-
|
|
11
|
+
const userApproved =
|
|
12
|
+
input.user_approved === true && context.trustClass === "guardian";
|
|
13
|
+
if (
|
|
14
|
+
!context.triggeredBySurfaceAction &&
|
|
15
|
+
!context.batchAuthorizedByTask &&
|
|
16
|
+
!context.approvedViaPrompt &&
|
|
17
|
+
!userApproved
|
|
18
|
+
) {
|
|
12
19
|
return err(
|
|
13
20
|
"This tool requires either a surface action or a scheduled task run with this tool in required_tools. Present results in a selection table with action buttons and wait for the user to click before proceeding.",
|
|
14
21
|
);
|
|
@@ -1,9 +1,23 @@
|
|
|
1
|
+
import type { Message } from "../../../../messaging/provider-types.js";
|
|
2
|
+
import { wrapUntrustedContent } from "../../../../security/untrusted-content.js";
|
|
1
3
|
import type {
|
|
2
4
|
ToolContext,
|
|
3
5
|
ToolExecutionResult,
|
|
4
6
|
} from "../../../../tools/types.js";
|
|
5
7
|
import { err, getProviderConnection, ok, resolveProvider } from "./shared.js";
|
|
6
8
|
|
|
9
|
+
function wrapMessageContent(msg: Message): Message {
|
|
10
|
+
const source =
|
|
11
|
+
msg.platform === "gmail" || msg.platform === "outlook" ? "email" : "slack";
|
|
12
|
+
return {
|
|
13
|
+
...msg,
|
|
14
|
+
text: wrapUntrustedContent(msg.text, {
|
|
15
|
+
source,
|
|
16
|
+
sourceDetail: msg.sender.email ?? msg.sender.name,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
7
21
|
export async function run(
|
|
8
22
|
input: Record<string, unknown>,
|
|
9
23
|
_context: ToolContext,
|
|
@@ -32,7 +46,7 @@ export async function run(
|
|
|
32
46
|
} else {
|
|
33
47
|
messages = await provider.getHistory(conn, conversationId, { limit });
|
|
34
48
|
}
|
|
35
|
-
return ok(JSON.stringify(messages, null, 2));
|
|
49
|
+
return ok(JSON.stringify(messages.map(wrapMessageContent), null, 2));
|
|
36
50
|
} catch (e) {
|
|
37
51
|
return err(e instanceof Error ? e.message : String(e));
|
|
38
52
|
}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
|
+
import type { Message } from "../../../../messaging/provider-types.js";
|
|
2
|
+
import { wrapUntrustedContent } from "../../../../security/untrusted-content.js";
|
|
1
3
|
import type {
|
|
2
4
|
ToolContext,
|
|
3
5
|
ToolExecutionResult,
|
|
4
6
|
} from "../../../../tools/types.js";
|
|
5
7
|
import { err, getProviderConnection, ok, resolveProvider } from "./shared.js";
|
|
6
8
|
|
|
9
|
+
function wrapMessageContent(msg: Message): Message {
|
|
10
|
+
const source =
|
|
11
|
+
msg.platform === "gmail" || msg.platform === "outlook" ? "email" : "slack";
|
|
12
|
+
return {
|
|
13
|
+
...msg,
|
|
14
|
+
text: wrapUntrustedContent(msg.text, {
|
|
15
|
+
source,
|
|
16
|
+
sourceDetail: msg.sender.email ?? msg.sender.name,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
7
21
|
export async function run(
|
|
8
22
|
input: Record<string, unknown>,
|
|
9
23
|
_context: ToolContext,
|
|
@@ -21,7 +35,13 @@ export async function run(
|
|
|
21
35
|
const account = input.account as string | undefined;
|
|
22
36
|
const conn = await getProviderConnection(provider, account);
|
|
23
37
|
const result = await provider.search(conn, query, { count: maxResults });
|
|
24
|
-
return ok(
|
|
38
|
+
return ok(
|
|
39
|
+
JSON.stringify(
|
|
40
|
+
{ ...result, messages: result.messages.map(wrapMessageContent) },
|
|
41
|
+
null,
|
|
42
|
+
2,
|
|
43
|
+
),
|
|
44
|
+
);
|
|
25
45
|
} catch (e) {
|
|
26
46
|
return err(e instanceof Error ? e.message : String(e));
|
|
27
47
|
}
|
|
@@ -8,11 +8,10 @@ import {
|
|
|
8
8
|
import { syncMessageToDisk } from "../../../../memory/conversation-disk-view.js";
|
|
9
9
|
import { getBindingByChannelChat } from "../../../../memory/external-conversation-store.js";
|
|
10
10
|
import {
|
|
11
|
-
batchGetMessages,
|
|
12
11
|
createDraft,
|
|
13
12
|
createDraftRaw,
|
|
14
13
|
getProfile,
|
|
15
|
-
|
|
14
|
+
getThread,
|
|
16
15
|
} from "../../../../messaging/providers/gmail/client.js";
|
|
17
16
|
import { buildMultipartMime } from "../../../../messaging/providers/gmail/mime-builder.js";
|
|
18
17
|
import type {
|
|
@@ -72,19 +71,19 @@ export async function run(
|
|
|
72
71
|
const gmailConn = conn;
|
|
73
72
|
// Reply mode: thread_id provided - create a threaded draft with reply-all recipients
|
|
74
73
|
if (threadId) {
|
|
75
|
-
// Fetch thread messages
|
|
76
|
-
const
|
|
77
|
-
|
|
74
|
+
// Fetch thread messages directly via Threads API
|
|
75
|
+
const thread = await getThread(gmailConn, threadId, "metadata", [
|
|
76
|
+
"From",
|
|
77
|
+
"To",
|
|
78
|
+
"Cc",
|
|
79
|
+
"Message-ID",
|
|
80
|
+
"Subject",
|
|
81
|
+
]);
|
|
82
|
+
const messages = thread.messages ?? [];
|
|
83
|
+
if (!messages.length) {
|
|
78
84
|
return err("No messages found in this thread.");
|
|
79
85
|
}
|
|
80
86
|
|
|
81
|
-
const messages = await batchGetMessages(
|
|
82
|
-
gmailConn,
|
|
83
|
-
list.messages.map((m) => m.id),
|
|
84
|
-
"metadata",
|
|
85
|
-
["From", "To", "Cc", "Message-ID", "Subject"],
|
|
86
|
-
);
|
|
87
|
-
|
|
88
87
|
// Use the latest message for threading and recipient extraction
|
|
89
88
|
const latest = messages[messages.length - 1];
|
|
90
89
|
const latestHeaders = latest.payload?.headers ?? [];
|
|
@@ -10,23 +10,24 @@ All call-related settings can be managed via `assistant config`:
|
|
|
10
10
|
| `calls.userConsultTimeoutSeconds` | How long to wait for user answers | `120` (2 min) |
|
|
11
11
|
| `calls.disclosure.enabled` | Whether the AI announces itself at call start | `true` |
|
|
12
12
|
| `calls.disclosure.text` | The disclosure message spoken at call start | `"At the very beginning of the call, introduce yourself as an assistant calling on behalf of my human."` |
|
|
13
|
-
| `
|
|
13
|
+
| `llm.callSites.callAgent.model` | Override LLM model for call orchestration | _(unset — falls back to `llm.default.model`)_ |
|
|
14
14
|
| `calls.callerIdentity.allowPerCallOverride` | Allow per-call caller identity selection | `true` |
|
|
15
15
|
| `calls.callerIdentity.userNumber` | E.164 phone number for user-number mode | _(empty)_ |
|
|
16
16
|
| `calls.voice.language` | Language code for TTS and transcription | `en-US` |
|
|
17
|
-
| `services.stt.provider` | STT provider for transcription and telephony. Determines the Twilio integration path at call setup time (Deepgram/Google use native ConversationRelay; OpenAI Whisper
|
|
18
|
-
| `services.tts.provider` | Active TTS provider for speech synthesis. Must be a provider ID from the catalog (`elevenlabs`, `fish-audio`, `deepgram`). New providers can be added via the catalog without code changes to call routing.
|
|
17
|
+
| `services.stt.provider` | STT provider for transcription and telephony. Determines the Twilio integration path at call setup time (Deepgram/Google use native ConversationRelay; OpenAI Whisper and xAI use media-stream). | `deepgram` |
|
|
18
|
+
| `services.tts.provider` | Active TTS provider for speech synthesis. Must be a provider ID from the catalog (`elevenlabs`, `fish-audio`, `deepgram`, `xai`). New providers can be added via the catalog without code changes to call routing. | `elevenlabs` |
|
|
19
19
|
| `services.tts.providers.<id>.*` | Provider-specific settings block. Each catalog provider has its own settings namespace under `services.tts.providers.<id>`. See voice settings in the desktop/iOS app or run `assistant config list` for available settings per provider. | _(per-provider defaults)_ |
|
|
20
20
|
|
|
21
21
|
## TTS provider call-path behavior
|
|
22
22
|
|
|
23
23
|
Each TTS provider uses one of two call-path modes during phone calls:
|
|
24
24
|
|
|
25
|
-
| Provider | Call mode | Description
|
|
26
|
-
| ------------ | ------------------ |
|
|
27
|
-
| `elevenlabs` | `native-twilio` | Text tokens are forwarded to Twilio's ConversationRelay, which synthesizes audio via its built-in ElevenLabs integration.
|
|
28
|
-
| `fish-audio` | `synthesized-play` | The assistant synthesizes audio server-side via Fish Audio's HTTP API and streams chunks to Twilio via play messages.
|
|
29
|
-
| `deepgram` | `synthesized-play` | The assistant synthesizes audio server-side via Deepgram's HTTP API and streams chunks to Twilio via play messages. Uses the same API key as Deepgram speech-to-text.
|
|
25
|
+
| Provider | Call mode | Description |
|
|
26
|
+
| ------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
27
|
+
| `elevenlabs` | `native-twilio` | Text tokens are forwarded to Twilio's ConversationRelay, which synthesizes audio via its built-in ElevenLabs integration. |
|
|
28
|
+
| `fish-audio` | `synthesized-play` | The assistant synthesizes audio server-side via Fish Audio's HTTP API and streams chunks to Twilio via play messages. |
|
|
29
|
+
| `deepgram` | `synthesized-play` | The assistant synthesizes audio server-side via Deepgram's HTTP API and streams chunks to Twilio via play messages. Uses the same API key as Deepgram speech-to-text. |
|
|
30
|
+
| `xai` | `synthesized-play` | The assistant synthesizes audio server-side via xAI's HTTP API and streams chunks to Twilio via play messages. No native Twilio fallback (`allowNativeFallback: false`). |
|
|
30
31
|
|
|
31
32
|
Providers using `synthesized-play` add a small amount of latency compared to `native-twilio` because audio must be synthesized server-side before playback. The assistant handles chunk buffering and streaming automatically.
|
|
32
33
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "voice_config_update",
|
|
6
|
-
"description": "Update a voice configuration setting. Use tts_provider to switch the global TTS provider (valid providers: elevenlabs, fish-audio, deepgram — defined by the provider catalog). Use tts_voice_id to set the ElevenLabs voice ID, fish_audio_reference_id for Fish Audio voice reference. Deepgram uses the same API key as speech-to-text and requires no additional voice config. Changes persist to services.tts config and take effect immediately.",
|
|
6
|
+
"description": "Update a voice configuration setting. Use tts_provider to switch the global TTS provider (valid providers: elevenlabs, fish-audio, deepgram, xai — defined by the provider catalog). Use tts_voice_id to set the ElevenLabs voice ID, fish_audio_reference_id for Fish Audio voice reference. Deepgram uses the same API key as speech-to-text and requires no additional voice config. Changes persist to services.tts config and take effect immediately.",
|
|
7
7
|
"category": "system",
|
|
8
8
|
"risk": "low",
|
|
9
9
|
"input_schema": {
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"tts_provider",
|
|
19
19
|
"tts_voice_id"
|
|
20
20
|
],
|
|
21
|
-
"description": "The voice setting to change. tts_provider selects the global TTS provider from the provider catalog (elevenlabs, fish-audio, deepgram). tts_voice_id sets the ElevenLabs voice. fish_audio_reference_id sets the Fish Audio voice reference. Deepgram uses its default model and shares the STT API key."
|
|
21
|
+
"description": "The voice setting to change. tts_provider selects the global TTS provider from the provider catalog (valid providers: elevenlabs, fish-audio, deepgram, xai). tts_voice_id sets the ElevenLabs voice. fish_audio_reference_id sets the Fish Audio voice reference. Deepgram uses its default model and shares the STT API key."
|
|
22
22
|
},
|
|
23
23
|
"value": {
|
|
24
|
-
"description": "The new value for the setting. For tts_provider:
|
|
24
|
+
"description": "The new value for the setting. For tts_provider: one of elevenlabs, fish-audio, deepgram, xai. For tts_voice_id: an alphanumeric ElevenLabs voice ID. For fish_audio_reference_id: a Fish Audio voice reference ID. For conversation_timeout: seconds (5, 10, 15, 30, or 60). For activation_key: key identifier string."
|
|
25
25
|
},
|
|
26
26
|
"activity": {
|
|
27
27
|
"type": "string",
|
|
@@ -22,26 +22,6 @@ import * as appCreate from "./bundled-skills/app-builder/tools/app-create.js";
|
|
|
22
22
|
import * as appDelete from "./bundled-skills/app-builder/tools/app-delete.js";
|
|
23
23
|
import * as appGenerateIcon from "./bundled-skills/app-builder/tools/app-generate-icon.js";
|
|
24
24
|
import * as appRefresh from "./bundled-skills/app-builder/tools/app-refresh.js";
|
|
25
|
-
// ── browser ────────────────────────────────────────────────────────────────────
|
|
26
|
-
import * as browserAttach from "./bundled-skills/browser/tools/browser-attach.js";
|
|
27
|
-
import * as browserClick from "./bundled-skills/browser/tools/browser-click.js";
|
|
28
|
-
import * as browserClose from "./bundled-skills/browser/tools/browser-close.js";
|
|
29
|
-
import * as browserDetach from "./bundled-skills/browser/tools/browser-detach.js";
|
|
30
|
-
import * as browserExtract from "./bundled-skills/browser/tools/browser-extract.js";
|
|
31
|
-
import * as browserFillCredential from "./bundled-skills/browser/tools/browser-fill-credential.js";
|
|
32
|
-
import * as browserHover from "./bundled-skills/browser/tools/browser-hover.js";
|
|
33
|
-
import * as browserNavigate from "./bundled-skills/browser/tools/browser-navigate.js";
|
|
34
|
-
import * as browserPressKey from "./bundled-skills/browser/tools/browser-press-key.js";
|
|
35
|
-
import * as browserScreenshot from "./bundled-skills/browser/tools/browser-screenshot.js";
|
|
36
|
-
import * as browserScroll from "./bundled-skills/browser/tools/browser-scroll.js";
|
|
37
|
-
import * as browserSelectOption from "./bundled-skills/browser/tools/browser-select-option.js";
|
|
38
|
-
import * as browserSnapshot from "./bundled-skills/browser/tools/browser-snapshot.js";
|
|
39
|
-
import * as browserStatus from "./bundled-skills/browser/tools/browser-status.js";
|
|
40
|
-
import * as browserType from "./bundled-skills/browser/tools/browser-type.js";
|
|
41
|
-
import * as browserWaitFor from "./bundled-skills/browser/tools/browser-wait-for.js";
|
|
42
|
-
import * as browserWaitForDownload from "./bundled-skills/browser/tools/browser-wait-for-download.js";
|
|
43
|
-
// ── chatgpt-import ─────────────────────────────────────────────────────────────
|
|
44
|
-
import * as chatgptImport from "./bundled-skills/chatgpt-import/tools/chatgpt-import.js";
|
|
45
25
|
// ── computer-use ───────────────────────────────────────────────────────────────
|
|
46
26
|
import * as computerUseClick from "./bundled-skills/computer-use/tools/computer-use-click.js";
|
|
47
27
|
import * as computerUseDone from "./bundled-skills/computer-use/tools/computer-use-done.js";
|
|
@@ -68,27 +48,6 @@ import * as documentUpdate from "./bundled-skills/document/tools/document-update
|
|
|
68
48
|
import * as followupCreate from "./bundled-skills/followups/tools/followup-create.js";
|
|
69
49
|
import * as followupList from "./bundled-skills/followups/tools/followup-list.js";
|
|
70
50
|
import * as followupResolve from "./bundled-skills/followups/tools/followup-resolve.js";
|
|
71
|
-
// ── gmail ──────────────────────────────────────────────────────────────────────
|
|
72
|
-
import * as gmailArchive from "./bundled-skills/gmail/tools/gmail-archive.js";
|
|
73
|
-
import * as gmailAttachments from "./bundled-skills/gmail/tools/gmail-attachments.js";
|
|
74
|
-
import * as gmailDraft from "./bundled-skills/gmail/tools/gmail-draft.js";
|
|
75
|
-
import * as gmailFilters from "./bundled-skills/gmail/tools/gmail-filters.js";
|
|
76
|
-
import * as gmailFollowUp from "./bundled-skills/gmail/tools/gmail-follow-up.js";
|
|
77
|
-
import * as gmailForward from "./bundled-skills/gmail/tools/gmail-forward.js";
|
|
78
|
-
import * as gmailLabel from "./bundled-skills/gmail/tools/gmail-label.js";
|
|
79
|
-
import * as gmailOutreachScan from "./bundled-skills/gmail/tools/gmail-outreach-scan.js";
|
|
80
|
-
import * as gmailPreferencesTool from "./bundled-skills/gmail/tools/gmail-preferences-tool.js";
|
|
81
|
-
import * as gmailSendDraft from "./bundled-skills/gmail/tools/gmail-send-draft.js";
|
|
82
|
-
import * as gmailSenderDigest from "./bundled-skills/gmail/tools/gmail-sender-digest.js";
|
|
83
|
-
import * as gmailTrash from "./bundled-skills/gmail/tools/gmail-trash.js";
|
|
84
|
-
import * as gmailUnsubscribe from "./bundled-skills/gmail/tools/gmail-unsubscribe.js";
|
|
85
|
-
import * as gmailVacation from "./bundled-skills/gmail/tools/gmail-vacation.js";
|
|
86
|
-
// ── google-calendar ────────────────────────────────────────────────────────────
|
|
87
|
-
import * as calendarCheckAvailability from "./bundled-skills/google-calendar/tools/calendar-check-availability.js";
|
|
88
|
-
import * as calendarCreateEvent from "./bundled-skills/google-calendar/tools/calendar-create-event.js";
|
|
89
|
-
import * as calendarGetEvent from "./bundled-skills/google-calendar/tools/calendar-get-event.js";
|
|
90
|
-
import * as calendarListEvents from "./bundled-skills/google-calendar/tools/calendar-list-events.js";
|
|
91
|
-
import * as calendarRsvp from "./bundled-skills/google-calendar/tools/calendar-rsvp.js";
|
|
92
51
|
// ── image-studio ───────────────────────────────────────────────────────────────
|
|
93
52
|
import * as mediaGenerateImage from "./bundled-skills/image-studio/tools/media-generate-image.js";
|
|
94
53
|
// ── media-processing ───────────────────────────────────────────────────────────
|
|
@@ -111,25 +70,6 @@ import * as messagingSend from "./bundled-skills/messaging/tools/messaging-send.
|
|
|
111
70
|
import * as messagingSenderDigest from "./bundled-skills/messaging/tools/messaging-sender-digest.js";
|
|
112
71
|
// ── notifications ──────────────────────────────────────────────────────────────
|
|
113
72
|
import * as sendNotification from "./bundled-skills/notifications/tools/send-notification.js";
|
|
114
|
-
// ── outlook ────────────────────────────────────────────────────────────────────
|
|
115
|
-
import * as outlookAttachments from "./bundled-skills/outlook/tools/outlook-attachments.js";
|
|
116
|
-
import * as outlookCategories from "./bundled-skills/outlook/tools/outlook-categories.js";
|
|
117
|
-
import * as outlookDraft from "./bundled-skills/outlook/tools/outlook-draft.js";
|
|
118
|
-
import * as outlookFollowUp from "./bundled-skills/outlook/tools/outlook-follow-up.js";
|
|
119
|
-
import * as outlookForward from "./bundled-skills/outlook/tools/outlook-forward.js";
|
|
120
|
-
import * as outlookOutreachScan from "./bundled-skills/outlook/tools/outlook-outreach-scan.js";
|
|
121
|
-
import * as outlookRules from "./bundled-skills/outlook/tools/outlook-rules.js";
|
|
122
|
-
import * as outlookSendDraft from "./bundled-skills/outlook/tools/outlook-send-draft.js";
|
|
123
|
-
import * as outlookSenderDigest from "./bundled-skills/outlook/tools/outlook-sender-digest.js";
|
|
124
|
-
import * as outlookTrash from "./bundled-skills/outlook/tools/outlook-trash.js";
|
|
125
|
-
import * as outlookUnsubscribe from "./bundled-skills/outlook/tools/outlook-unsubscribe.js";
|
|
126
|
-
import * as outlookVacation from "./bundled-skills/outlook/tools/outlook-vacation.js";
|
|
127
|
-
// ── outlook-calendar ───────────────────────────────────────────────────────────
|
|
128
|
-
import * as outlookCalendarCheckAvailability from "./bundled-skills/outlook-calendar/tools/outlook-calendar-check-availability.js";
|
|
129
|
-
import * as outlookCalendarCreateEvent from "./bundled-skills/outlook-calendar/tools/outlook-calendar-create-event.js";
|
|
130
|
-
import * as outlookCalendarGetEvent from "./bundled-skills/outlook-calendar/tools/outlook-calendar-get-event.js";
|
|
131
|
-
import * as outlookCalendarListEvents from "./bundled-skills/outlook-calendar/tools/outlook-calendar-list-events.js";
|
|
132
|
-
import * as outlookCalendarRsvp from "./bundled-skills/outlook-calendar/tools/outlook-calendar-rsvp.js";
|
|
133
73
|
// ── phone-calls ────────────────────────────────────────────────────────────────
|
|
134
74
|
import * as callEnd from "./bundled-skills/phone-calls/tools/call-end.js";
|
|
135
75
|
import * as callStart from "./bundled-skills/phone-calls/tools/call-start.js";
|
|
@@ -172,24 +112,8 @@ import * as subagentMessage from "./bundled-skills/subagent/tools/subagent-messa
|
|
|
172
112
|
import * as subagentRead from "./bundled-skills/subagent/tools/subagent-read.js";
|
|
173
113
|
import * as subagentSpawn from "./bundled-skills/subagent/tools/subagent-spawn.js";
|
|
174
114
|
import * as subagentStatus from "./bundled-skills/subagent/tools/subagent-status.js";
|
|
175
|
-
// ── tasks ──────────────────────────────────────────────────────────────────────
|
|
176
|
-
import * as taskDelete from "./bundled-skills/tasks/tools/task-delete.js";
|
|
177
|
-
import * as taskList from "./bundled-skills/tasks/tools/task-list.js";
|
|
178
|
-
import * as taskListAdd from "./bundled-skills/tasks/tools/task-list-add.js";
|
|
179
|
-
import * as taskListRemove from "./bundled-skills/tasks/tools/task-list-remove.js";
|
|
180
|
-
import * as taskListShow from "./bundled-skills/tasks/tools/task-list-show.js";
|
|
181
|
-
import * as taskListUpdate from "./bundled-skills/tasks/tools/task-list-update.js";
|
|
182
|
-
import * as taskQueueRun from "./bundled-skills/tasks/tools/task-queue-run.js";
|
|
183
|
-
import * as taskRun from "./bundled-skills/tasks/tools/task-run.js";
|
|
184
|
-
import * as taskSave from "./bundled-skills/tasks/tools/task-save.js";
|
|
185
115
|
// ── transcribe ─────────────────────────────────────────────────────────────────
|
|
186
116
|
import * as transcribeMedia from "./bundled-skills/transcribe/tools/transcribe-media.js";
|
|
187
|
-
// ── watcher ────────────────────────────────────────────────────────────────────
|
|
188
|
-
import * as watcherCreate from "./bundled-skills/watcher/tools/watcher-create.js";
|
|
189
|
-
import * as watcherDelete from "./bundled-skills/watcher/tools/watcher-delete.js";
|
|
190
|
-
import * as watcherDigest from "./bundled-skills/watcher/tools/watcher-digest.js";
|
|
191
|
-
import * as watcherList from "./bundled-skills/watcher/tools/watcher-list.js";
|
|
192
|
-
import * as watcherUpdate from "./bundled-skills/watcher/tools/watcher-update.js";
|
|
193
117
|
|
|
194
118
|
// ─── Registry ────────────────────────────────────────────────────────────────
|
|
195
119
|
|
|
@@ -206,28 +130,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
|
|
|
206
130
|
["app-builder:tools/app-refresh.ts", appRefresh],
|
|
207
131
|
["app-builder:tools/app-generate-icon.ts", appGenerateIcon],
|
|
208
132
|
|
|
209
|
-
// browser
|
|
210
|
-
["browser:tools/browser-navigate.ts", browserNavigate],
|
|
211
|
-
["browser:tools/browser-snapshot.ts", browserSnapshot],
|
|
212
|
-
["browser:tools/browser-screenshot.ts", browserScreenshot],
|
|
213
|
-
["browser:tools/browser-close.ts", browserClose],
|
|
214
|
-
["browser:tools/browser-attach.ts", browserAttach],
|
|
215
|
-
["browser:tools/browser-detach.ts", browserDetach],
|
|
216
|
-
["browser:tools/browser-click.ts", browserClick],
|
|
217
|
-
["browser:tools/browser-type.ts", browserType],
|
|
218
|
-
["browser:tools/browser-press-key.ts", browserPressKey],
|
|
219
|
-
["browser:tools/browser-scroll.ts", browserScroll],
|
|
220
|
-
["browser:tools/browser-select-option.ts", browserSelectOption],
|
|
221
|
-
["browser:tools/browser-hover.ts", browserHover],
|
|
222
|
-
["browser:tools/browser-wait-for.ts", browserWaitFor],
|
|
223
|
-
["browser:tools/browser-extract.ts", browserExtract],
|
|
224
|
-
["browser:tools/browser-wait-for-download.ts", browserWaitForDownload],
|
|
225
|
-
["browser:tools/browser-fill-credential.ts", browserFillCredential],
|
|
226
|
-
["browser:tools/browser-status.ts", browserStatus],
|
|
227
|
-
|
|
228
|
-
// chatgpt-import
|
|
229
|
-
["chatgpt-import:tools/chatgpt-import.ts", chatgptImport],
|
|
230
|
-
|
|
231
133
|
// computer-use
|
|
232
134
|
["computer-use:tools/computer-use-observe.ts", computerUseObserve],
|
|
233
135
|
["computer-use:tools/computer-use-click.ts", computerUseClick],
|
|
@@ -262,32 +164,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
|
|
|
262
164
|
["followups:tools/followup-list.ts", followupList],
|
|
263
165
|
["followups:tools/followup-resolve.ts", followupResolve],
|
|
264
166
|
|
|
265
|
-
// gmail
|
|
266
|
-
["gmail:tools/gmail-archive.ts", gmailArchive],
|
|
267
|
-
["gmail:tools/gmail-label.ts", gmailLabel],
|
|
268
|
-
["gmail:tools/gmail-trash.ts", gmailTrash],
|
|
269
|
-
["gmail:tools/gmail-unsubscribe.ts", gmailUnsubscribe],
|
|
270
|
-
["gmail:tools/gmail-draft.ts", gmailDraft],
|
|
271
|
-
["gmail:tools/gmail-send-draft.ts", gmailSendDraft],
|
|
272
|
-
["gmail:tools/gmail-attachments.ts", gmailAttachments],
|
|
273
|
-
["gmail:tools/gmail-forward.ts", gmailForward],
|
|
274
|
-
["gmail:tools/gmail-follow-up.ts", gmailFollowUp],
|
|
275
|
-
["gmail:tools/gmail-filters.ts", gmailFilters],
|
|
276
|
-
["gmail:tools/gmail-vacation.ts", gmailVacation],
|
|
277
|
-
["gmail:tools/gmail-sender-digest.ts", gmailSenderDigest],
|
|
278
|
-
["gmail:tools/gmail-outreach-scan.ts", gmailOutreachScan],
|
|
279
|
-
["gmail:tools/gmail-preferences-tool.ts", gmailPreferencesTool],
|
|
280
|
-
|
|
281
|
-
// google-calendar
|
|
282
|
-
["google-calendar:tools/calendar-list-events.ts", calendarListEvents],
|
|
283
|
-
["google-calendar:tools/calendar-get-event.ts", calendarGetEvent],
|
|
284
|
-
["google-calendar:tools/calendar-create-event.ts", calendarCreateEvent],
|
|
285
|
-
[
|
|
286
|
-
"google-calendar:tools/calendar-check-availability.ts",
|
|
287
|
-
calendarCheckAvailability,
|
|
288
|
-
],
|
|
289
|
-
["google-calendar:tools/calendar-rsvp.ts", calendarRsvp],
|
|
290
|
-
|
|
291
167
|
// image-studio
|
|
292
168
|
["image-studio:tools/media-generate-image.ts", mediaGenerateImage],
|
|
293
169
|
|
|
@@ -317,39 +193,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
|
|
|
317
193
|
// notifications
|
|
318
194
|
["notifications:tools/send-notification.ts", sendNotification],
|
|
319
195
|
|
|
320
|
-
// outlook
|
|
321
|
-
["outlook:tools/outlook-rules.ts", outlookRules],
|
|
322
|
-
["outlook:tools/outlook-vacation.ts", outlookVacation],
|
|
323
|
-
["outlook:tools/outlook-sender-digest.ts", outlookSenderDigest],
|
|
324
|
-
["outlook:tools/outlook-outreach-scan.ts", outlookOutreachScan],
|
|
325
|
-
["outlook:tools/outlook-draft.ts", outlookDraft],
|
|
326
|
-
["outlook:tools/outlook-send-draft.ts", outlookSendDraft],
|
|
327
|
-
["outlook:tools/outlook-forward.ts", outlookForward],
|
|
328
|
-
["outlook:tools/outlook-trash.ts", outlookTrash],
|
|
329
|
-
["outlook:tools/outlook-categories.ts", outlookCategories],
|
|
330
|
-
["outlook:tools/outlook-follow-up.ts", outlookFollowUp],
|
|
331
|
-
["outlook:tools/outlook-unsubscribe.ts", outlookUnsubscribe],
|
|
332
|
-
["outlook:tools/outlook-attachments.ts", outlookAttachments],
|
|
333
|
-
|
|
334
|
-
// outlook-calendar
|
|
335
|
-
[
|
|
336
|
-
"outlook-calendar:tools/outlook-calendar-list-events.ts",
|
|
337
|
-
outlookCalendarListEvents,
|
|
338
|
-
],
|
|
339
|
-
[
|
|
340
|
-
"outlook-calendar:tools/outlook-calendar-get-event.ts",
|
|
341
|
-
outlookCalendarGetEvent,
|
|
342
|
-
],
|
|
343
|
-
[
|
|
344
|
-
"outlook-calendar:tools/outlook-calendar-create-event.ts",
|
|
345
|
-
outlookCalendarCreateEvent,
|
|
346
|
-
],
|
|
347
|
-
[
|
|
348
|
-
"outlook-calendar:tools/outlook-calendar-check-availability.ts",
|
|
349
|
-
outlookCalendarCheckAvailability,
|
|
350
|
-
],
|
|
351
|
-
["outlook-calendar:tools/outlook-calendar-rsvp.ts", outlookCalendarRsvp],
|
|
352
|
-
|
|
353
196
|
// phone-calls
|
|
354
197
|
["phone-calls:tools/call-start.ts", callStart],
|
|
355
198
|
["phone-calls:tools/call-status.ts", callStatus],
|
|
@@ -400,24 +243,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
|
|
|
400
243
|
["subagent:tools/subagent-message.ts", subagentMessage],
|
|
401
244
|
["subagent:tools/subagent-read.ts", subagentRead],
|
|
402
245
|
|
|
403
|
-
// tasks
|
|
404
|
-
["tasks:tools/task-save.ts", taskSave],
|
|
405
|
-
["tasks:tools/task-run.ts", taskRun],
|
|
406
|
-
["tasks:tools/task-list.ts", taskList],
|
|
407
|
-
["tasks:tools/task-delete.ts", taskDelete],
|
|
408
|
-
["tasks:tools/task-list-show.ts", taskListShow],
|
|
409
|
-
["tasks:tools/task-list-add.ts", taskListAdd],
|
|
410
|
-
["tasks:tools/task-list-update.ts", taskListUpdate],
|
|
411
|
-
["tasks:tools/task-list-remove.ts", taskListRemove],
|
|
412
|
-
["tasks:tools/task-queue-run.ts", taskQueueRun],
|
|
413
|
-
|
|
414
246
|
// transcribe
|
|
415
247
|
["transcribe:tools/transcribe-media.ts", transcribeMedia],
|
|
416
|
-
|
|
417
|
-
// watcher
|
|
418
|
-
["watcher:tools/watcher-create.ts", watcherCreate],
|
|
419
|
-
["watcher:tools/watcher-list.ts", watcherList],
|
|
420
|
-
["watcher:tools/watcher-update.ts", watcherUpdate],
|
|
421
|
-
["watcher:tools/watcher-delete.ts", watcherDelete],
|
|
422
|
-
["watcher:tools/watcher-digest.ts", watcherDigest],
|
|
423
248
|
]);
|
package/src/config/env.ts
CHANGED
|
@@ -153,14 +153,19 @@ export function getPlatformBaseUrl(): string {
|
|
|
153
153
|
// Config not yet available (early bootstrap) — fall through
|
|
154
154
|
}
|
|
155
155
|
// Resolve the default platform URL from VELLUM_ENVIRONMENT.
|
|
156
|
-
//
|
|
157
|
-
//
|
|
156
|
+
// `production`, `staging`, and `test` map to their respective hosted
|
|
157
|
+
// platforms, `local` points at a developer's locally running platform,
|
|
158
|
+
// and everything else (including unset) falls back to dev-platform.
|
|
158
159
|
const env = str("VELLUM_ENVIRONMENT")?.trim();
|
|
159
160
|
let defaultUrl: string;
|
|
160
161
|
if (env === "production") {
|
|
161
162
|
defaultUrl = "https://platform.vellum.ai";
|
|
162
163
|
} else if (env === "staging") {
|
|
163
164
|
defaultUrl = "https://staging-platform.vellum.ai";
|
|
165
|
+
} else if (env === "test") {
|
|
166
|
+
defaultUrl = "https://test-platform.vellum.ai";
|
|
167
|
+
} else if (env === "local") {
|
|
168
|
+
defaultUrl = "http://localhost:8000";
|
|
164
169
|
} else {
|
|
165
170
|
defaultUrl = "https://dev-platform.vellum.ai";
|
|
166
171
|
}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"scope": "assistant",
|
|
39
39
|
"key": "email-channel",
|
|
40
40
|
"label": "Email Channel",
|
|
41
|
-
"description": "Enable the entire email integration: email CLI commands, email channel, sequences, email readiness probes, invite adapters, and the email-setup skill",
|
|
41
|
+
"description": "Enable the entire email integration: email CLI commands, email channel, domain registration, sequences, email readiness probes, invite adapters, and the email-setup skill",
|
|
42
42
|
"defaultEnabled": false
|
|
43
43
|
},
|
|
44
44
|
{
|
|
@@ -321,14 +321,6 @@
|
|
|
321
321
|
"description": "Show the 'Fork from here' option in message overflow menus",
|
|
322
322
|
"defaultEnabled": false
|
|
323
323
|
},
|
|
324
|
-
{
|
|
325
|
-
"id": "managed-x-oauth-integration",
|
|
326
|
-
"scope": "assistant",
|
|
327
|
-
"key": "managed-x-oauth-integration",
|
|
328
|
-
"label": "Managed X/Twitter OAuth",
|
|
329
|
-
"description": "Enable platform-managed X/Twitter OAuth integration in Models & Services settings",
|
|
330
|
-
"defaultEnabled": false
|
|
331
|
-
},
|
|
332
324
|
{
|
|
333
325
|
"id": "onboarding-pre-chat",
|
|
334
326
|
"scope": "macos",
|
|
@@ -360,6 +352,30 @@
|
|
|
360
352
|
"label": "Google Meet",
|
|
361
353
|
"description": "Enables the Google Meet joining bot and the meet-join skill.",
|
|
362
354
|
"defaultEnabled": false
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"id": "compaction-v2",
|
|
358
|
+
"scope": "assistant",
|
|
359
|
+
"key": "compaction-v2",
|
|
360
|
+
"label": "Compaction v2",
|
|
361
|
+
"description": "Boundary-message-based compaction pipeline with forked prompt-cache-shared summarization and microcompact pre-pass. Replaces the four-tier overflow reducer and cursor-based storage.",
|
|
362
|
+
"defaultEnabled": false
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"id": "scroll-debug-overlay",
|
|
366
|
+
"scope": "macos",
|
|
367
|
+
"key": "scroll-debug-overlay",
|
|
368
|
+
"label": "Scroll Debug Overlay",
|
|
369
|
+
"description": "Show a live HUD in the top-right of the conversation with scroll geometry, velocity, update rate, and anchor-preserver activity. Developer diagnostic for investigating scroll jank.",
|
|
370
|
+
"defaultEnabled": false
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"id": "message-height-cache",
|
|
374
|
+
"scope": "macos",
|
|
375
|
+
"key": "message-height-cache",
|
|
376
|
+
"label": "Message Height Cache",
|
|
377
|
+
"description": "Swap the transcript's LazyVStack for a plain VStack so scrollContentHeight is the true sum of row heights (no LazyVStack estimator drift). Row frames are not pinned — the earlier frame-pinning approach was removed because it caused overlap when rows grew past their first measurement (streaming, expanding thinking blocks). Tradeoff: eager layout — every row measures up-front, which can stall for many seconds to minutes on very long conversations.",
|
|
378
|
+
"defaultEnabled": true
|
|
363
379
|
}
|
|
364
380
|
]
|
|
365
381
|
}
|