@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
package/.prettierignore
CHANGED
|
@@ -5,3 +5,8 @@
|
|
|
5
5
|
# Prompt template files use _ as a comment marker prefix. Prettier escapes
|
|
6
6
|
# these to \_ which breaks the comment-stripping preprocessor.
|
|
7
7
|
src/prompts/templates/**/*.md
|
|
8
|
+
|
|
9
|
+
# Compaction prompt assets are consumed verbatim as the LLM system prompt.
|
|
10
|
+
# Prettier's markdown formatting (blank lines between headers, trailing
|
|
11
|
+
# newlines) would change the prompt content, so we skip formatting here.
|
|
12
|
+
src/context/prompts/**/*.md
|
package/ARCHITECTURE.md
CHANGED
|
@@ -595,13 +595,13 @@ Audio-to-text conversion occurs in five distinct runtime boundaries, each with i
|
|
|
595
595
|
|
|
596
596
|
**Boundary overview:**
|
|
597
597
|
|
|
598
|
-
| Boundary | Runtime | Provider (current)
|
|
599
|
-
| ---------------------------- | ----------------------------------------------------------------------------- |
|
|
600
|
-
| **Telephony (hybrid)** | Twilio-native ConversationRelay or daemon media-stream (provider-conditional) | Configured STT provider (via `services.stt`)
|
|
601
|
-
| **Daemon batch** | Daemon process (REST API to provider) | Configured STT provider (via `services.stt`)
|
|
602
|
-
| **Conversation streaming** | Daemon process (WebSocket-based) |
|
|
603
|
-
| **Client service-first** | macOS / iOS via gateway → daemon | Configured STT provider (via `services.stt`)
|
|
604
|
-
| **Client-native (fallback)** | macOS / iOS on-device | Apple Speech (`SFSpeechRecognizer`)
|
|
598
|
+
| Boundary | Runtime | Provider (current) | Adapter module | Caller |
|
|
599
|
+
| ---------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
600
|
+
| **Telephony (hybrid)** | Twilio-native ConversationRelay or daemon media-stream (provider-conditional) | Configured STT provider (via `services.stt`) | `src/calls/telephony-stt-routing.ts` | `src/calls/twilio-routes.ts` |
|
|
601
|
+
| **Daemon batch** | Daemon process (REST API to provider) | Configured STT provider (via `services.stt`) | `src/stt/daemon-batch-transcriber.ts` | `src/runtime/routes/inbound-stages/transcribe-audio.ts` |
|
|
602
|
+
| **Conversation streaming** | Daemon process (WebSocket-based) | Configured STT provider (via `services.stt`) | `src/stt/stt-stream-session.ts`, `src/providers/speech-to-text/deepgram-realtime.ts`, `src/providers/speech-to-text/google-gemini-live-stream.ts`, `src/providers/speech-to-text/openai-whisper-stream.ts`, `src/providers/speech-to-text/xai-realtime.ts` | `VoiceInputManager` (macOS conversation), `InputBarView` (iOS conversation) via gateway WS proxy |
|
|
603
|
+
| **Client service-first** | macOS / iOS via gateway → daemon | Configured STT provider (via `services.stt`) | `src/runtime/routes/stt-routes.ts`, `clients/shared/Network/STTClient.swift` | `VoiceInputManager` (macOS dictation), `InputBarView` (iOS), `OpenAIVoiceService` (macOS voice mode) |
|
|
604
|
+
| **Client-native (fallback)** | macOS / iOS on-device | Apple Speech (`SFSpeechRecognizer`) | `clients/macos/.../SpeechRecognizerAdapter.swift`, `clients/ios/.../SpeechRecognizerAdapter.swift` | Fallback when STT service is unconfigured or fails |
|
|
605
605
|
|
|
606
606
|
**Telephony boundary (hybrid routing):**
|
|
607
607
|
|
|
@@ -750,32 +750,28 @@ These differences are intentional — the adapters were designed for their respe
|
|
|
750
750
|
|
|
751
751
|
### Update Bulletin System
|
|
752
752
|
|
|
753
|
-
Release-driven update notification system that
|
|
753
|
+
Release-driven update notification system that dispatches a background conversation to process release notes when a release lands.
|
|
754
754
|
|
|
755
755
|
**Data flow:**
|
|
756
756
|
|
|
757
|
-
1. **
|
|
758
|
-
2. **
|
|
759
|
-
3. **
|
|
760
|
-
4. **Completion by deletion** — the assistant deletes `UPDATES.md` when it has actioned all updates. Next startup detects the deletion and marks those releases as completed in checkpoint state.
|
|
761
|
-
5. **Cross-release merge** — if pending updates from a prior release exist when a new release lands, both release blocks coexist in the same file.
|
|
757
|
+
1. **Storage** — Release notes live at `<workspace>/UPDATES.md`. The file is written by workspace migrations; each release that needs to surface notes ships a dedicated migration in `src/workspace/migrations/` that appends a release-notes block to the file. The workspace-migration runner is the authoritative idempotency mechanism: `runWorkspaceMigrations()` records each migration's `WorkspaceMigration.id` in `<workspace>/data/.workspace-migrations.json` and never re-runs an ID that is already in the `applied` set.
|
|
758
|
+
2. **Dispatch** — At daemon startup (after `runWorkspaceMigrations()`), `runUpdateBulletinJobIfNeeded()` is invoked fire-and-forget. It hashes the current `UPDATES.md` content and compares against the `updates:last_processed_hash` checkpoint. When the hashes differ, it bootstraps a `conversationType: "background"` conversation and calls `wakeAgentForOpportunity()` so the agent processes the bulletin without any interactive session.
|
|
759
|
+
3. **Completion** — The agent acts on the contents and deletes `UPDATES.md` when done. The job persists the new hash to `updates:last_processed_hash` post-wake, so subsequent startups short-circuit until the file is repopulated by a future migration.
|
|
762
760
|
|
|
763
761
|
**Checkpoint keys** (in `memory_checkpoints` table):
|
|
764
762
|
|
|
765
|
-
- `updates:
|
|
766
|
-
- `updates:completed_releases` — JSON array of version strings already completed.
|
|
763
|
+
- `updates:last_processed_hash` — content hash of the `UPDATES.md` payload most recently dispatched to the background job.
|
|
767
764
|
|
|
768
765
|
**Key source files:**
|
|
769
766
|
|
|
770
|
-
| File | Purpose
|
|
771
|
-
| -------------------------------------- |
|
|
772
|
-
| `src/
|
|
773
|
-
| `src/
|
|
774
|
-
| `src/
|
|
775
|
-
| `src/
|
|
776
|
-
| `src/
|
|
777
|
-
| `src/
|
|
778
|
-
| `src/permissions/defaults.ts` | Auto-allow rules for file_read/write/edit + rm UPDATES.md |
|
|
767
|
+
| File | Purpose |
|
|
768
|
+
| -------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
769
|
+
| `src/workspace/migrations/` | Per-release migrations that append release notes to `UPDATES.md` |
|
|
770
|
+
| `src/workspace/migrations/registry.ts` | Append-only `WORKSPACE_MIGRATIONS` registry |
|
|
771
|
+
| `src/prompts/update-bulletin-job.ts` | `runUpdateBulletinJobIfNeeded()` — hash check, background dispatch, and checkpoint update |
|
|
772
|
+
| `src/daemon/lifecycle.ts` | Fire-and-forget dispatch of `runUpdateBulletinJobIfNeeded()` after DB init at startup |
|
|
773
|
+
| `src/config/schemas/updates.ts` | `updates.enabled` config toggle (defaults to `true`; disables the background dispatch) |
|
|
774
|
+
| `src/permissions/defaults.ts` | Auto-allow rules for file_read/write/edit + bare-filename `rm UPDATES.md` |
|
|
779
775
|
|
|
780
776
|
---
|
|
781
777
|
|
|
@@ -1570,18 +1566,19 @@ graph TB
|
|
|
1570
1566
|
FIND_RULE -->|"No match"| NO_MATCH{"Fallback logic"}
|
|
1571
1567
|
|
|
1572
1568
|
RISK_CHECK -->|"Low / Medium"| AUTO_ALLOW["decision: allow<br/>Auto-allowed by rule"]
|
|
1573
|
-
RISK_CHECK -->|"High"| HIGH_CHECK{"
|
|
1574
|
-
HIGH_CHECK -->|"
|
|
1575
|
-
HIGH_CHECK -->|"
|
|
1569
|
+
RISK_CHECK -->|"High"| HIGH_CHECK{"shouldAutoAllowHighRisk()<br/>(containerized bash?)"}
|
|
1570
|
+
HIGH_CHECK -->|"yes"| AUTO_ALLOW
|
|
1571
|
+
HIGH_CHECK -->|"no"| RISK_THRESHOLD{"Risk-based<br/>threshold fallback"}
|
|
1576
1572
|
|
|
1577
1573
|
NO_MATCH -->|"tool.origin === 'skill'"| PROMPT_SKILL["decision: prompt<br/>Skill tools always ask"]
|
|
1578
1574
|
NO_MATCH -->|"strict mode"| PROMPT_STRICT["decision: prompt<br/>No implicit auto-allow"]
|
|
1579
|
-
NO_MATCH -->|"workspace mode (default)"| WS_CHECK{"Workspace-scoped<br
|
|
1575
|
+
NO_MATCH -->|"workspace mode (default)"| WS_CHECK{"Workspace-scoped<br/>+ Low risk?"}
|
|
1580
1576
|
WS_CHECK -->|"yes"| AUTO_WS["decision: allow<br/>Workspace-scoped auto-allow"]
|
|
1581
|
-
WS_CHECK -->|"no"|
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1577
|
+
WS_CHECK -->|"no"| RISK_THRESHOLD
|
|
1578
|
+
|
|
1579
|
+
RISK_THRESHOLD{"risk ≤ autoApproveUpTo<br/>threshold?"}
|
|
1580
|
+
RISK_THRESHOLD -->|"yes"| AUTO_THRESHOLD["decision: allow<br/>within auto-approve threshold"]
|
|
1581
|
+
RISK_THRESHOLD -->|"no"| PROMPT_THRESHOLD["decision: prompt<br/>above auto-approve threshold"]
|
|
1585
1582
|
```
|
|
1586
1583
|
|
|
1587
1584
|
### Permission Modes: Workspace and Strict
|
|
@@ -1599,7 +1596,7 @@ The `permissions.mode` config option (`workspace` or `strict`) controls the defa
|
|
|
1599
1596
|
| `browser_*` skill tools with system default rules | Auto-allowed (priority 100 allow rules) | Auto-allowed (priority 100 allow rules) |
|
|
1600
1597
|
| Skill-origin tools with no matching rule | Prompted | Prompted |
|
|
1601
1598
|
| Allow rules for non-high-risk tools | Auto-allowed | Auto-allowed |
|
|
1602
|
-
| Allow rules
|
|
1599
|
+
| Allow rules + containerized bash (high risk) | Auto-allowed (runtime check) | Auto-allowed (runtime check) |
|
|
1603
1600
|
| Deny rules | Blocked | Blocked |
|
|
1604
1601
|
|
|
1605
1602
|
**Workspace mode** (default) auto-allows operations scoped to the workspace (file reads/writes/edits within the workspace directory, sandboxed bash) without prompting. Host operations, network requests, and operations outside the workspace still follow the normal approval flow. Explicit deny and ask rules override auto-allow.
|
|
@@ -1621,7 +1618,6 @@ Rules are stored in `~/.vellum/protected/trust.json` with version `3`. Each rule
|
|
|
1621
1618
|
| `decision` | `allow \| deny \| ask` | What to do when the rule matches |
|
|
1622
1619
|
| `priority` | `number` | Higher priority wins; deny wins ties at equal priority |
|
|
1623
1620
|
| `executionTarget` | `string?` | `sandbox` or `host` — restricts by execution context |
|
|
1624
|
-
| `allowHighRisk` | `boolean?` | When true, auto-allows even high-risk invocations |
|
|
1625
1621
|
|
|
1626
1622
|
Missing optional fields act as wildcards. A rule with no `executionTarget` matches any target.
|
|
1627
1623
|
|
|
@@ -1715,7 +1711,7 @@ When a permission prompt is sent to the client (via `confirmation_request` SSE e
|
|
|
1715
1711
|
| `allowlistOptions` | Suggested patterns for "always allow" rules |
|
|
1716
1712
|
| `scopeOptions` | Suggested scopes for rule persistence |
|
|
1717
1713
|
|
|
1718
|
-
The user can respond with: `allow` (one-time), `always_allow` (create allow rule), `
|
|
1714
|
+
The user can respond with: `allow` (one-time), `always_allow` (create allow rule), `deny` (one-time), or `always_deny` (create deny rule). High-risk operations with an allow rule in containerized environments are auto-allowed at runtime by `DefaultApprovalPolicy.shouldAutoAllowHighRisk()` without requiring persisted state. All other risk-based decisions use the `autoApproveUpTo` threshold (default: `"low"`) -- tools at or below the threshold are auto-allowed, those above are prompted.
|
|
1719
1715
|
|
|
1720
1716
|
### Canonical Paths
|
|
1721
1717
|
|
|
@@ -2094,7 +2090,7 @@ Connected channels are resolved at signal emission time: vellum is always includ
|
|
|
2094
2090
|
|
|
2095
2091
|
**Audit trail (SQLite):** `notification_events` → `notification_decisions` (with `conversationActions` in validation results) → `notification_deliveries` (with `conversation_id`, `message_id`, `conversation_strategy`, `conversation_action`, `conversation_target_id`, `conversation_fallback_used`)
|
|
2096
2092
|
|
|
2097
|
-
**Configuration:** `
|
|
2093
|
+
**Configuration:** `llm.callSites.notificationDecision` (decision engine) and `llm.callSites.preferenceExtraction` (preference extractor) in `config.json`. Both fall back to `llm.default` when unset.
|
|
2098
2094
|
|
|
2099
2095
|
---
|
|
2100
2096
|
|
package/Dockerfile
CHANGED
|
@@ -24,6 +24,18 @@ COPY packages/egress-proxy ./packages/egress-proxy
|
|
|
24
24
|
COPY assistant/package.json assistant/bun.lock ./assistant/
|
|
25
25
|
RUN cd /app/assistant && bun install --frozen-lockfile
|
|
26
26
|
|
|
27
|
+
# Copy bundled first-party skills and install their deps. The repo-root
|
|
28
|
+
# .dockerignore is the single source of truth for which skills (and which
|
|
29
|
+
# files within them) ship in the assistant image -- adding or removing a
|
|
30
|
+
# bundled skill is a .dockerignore edit, not a Dockerfile edit.
|
|
31
|
+
COPY skills ./skills
|
|
32
|
+
RUN set -eu; for pkg in /app/skills/*/package.json; do \
|
|
33
|
+
[ -e "$pkg" ] || continue; \
|
|
34
|
+
dir="$(dirname "$pkg")"; \
|
|
35
|
+
echo "Installing dependencies for $dir"; \
|
|
36
|
+
(cd "$dir" && (bun install --frozen-lockfile 2>/dev/null || bun install)); \
|
|
37
|
+
done
|
|
38
|
+
|
|
27
39
|
# Copy source
|
|
28
40
|
COPY assistant ./assistant
|
|
29
41
|
|
package/README.md
CHANGED
|
@@ -47,9 +47,9 @@ cp .env.example .env
|
|
|
47
47
|
|
|
48
48
|
## Update Bulletin
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
Release notes are surfaced via a background conversation dispatched at daemon startup. Workspace migrations write release notes to `<workspace>/UPDATES.md`; `runUpdateBulletinJobIfNeeded()` then spawns a `conversationType: "background"` conversation (via `wakeAgentForOpportunity()`) whenever the file's content hash changes. The agent uses judgment to surface updates to the user when relevant, and deletes the file when done.
|
|
51
51
|
|
|
52
|
-
**For release maintainers:**
|
|
52
|
+
**For release maintainers:** Add a new migration under `assistant/src/workspace/migrations/0XX-release-notes-<slug>.ts` with the release notes inline as a string literal, and append the export to `WORKSPACE_MIGRATIONS` in `assistant/src/workspace/migrations/registry.ts`. Migrations are append-only. Idempotency is handled by the workspace-migration runner — `runWorkspaceMigrations()` records each migration's `WorkspaceMigration.id` in `<workspace>/data/.workspace-migrations.json` and never re-runs an ID that is already in the `applied` set, so release-notes migrations do not need an in-file guard. Skip the migration entirely for releases with no user/assistant-facing changes.
|
|
53
53
|
|
|
54
54
|
## Usage
|
|
55
55
|
|
|
@@ -86,7 +86,6 @@ bun run src/index.ts # interactive CLI session
|
|
|
86
86
|
| `assistant config set\|get\|list` | Manage configuration |
|
|
87
87
|
| `assistant keys set\|list\|delete` | Manage API keys in secure storage |
|
|
88
88
|
| `assistant trust list\|remove\|clear` | Manage trust rules |
|
|
89
|
-
| `assistant doctor` | Run diagnostic checks |
|
|
90
89
|
|
|
91
90
|
## Project Structure
|
|
92
91
|
|
|
@@ -204,7 +203,7 @@ The runtime exposes a RESTful HTTP API for Twilio configuration, credential mana
|
|
|
204
203
|
| Method | Path | Description |
|
|
205
204
|
| ------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
206
205
|
| GET | `/v1/integrations/twilio/config` | Returns current state: `hasCredentials` (boolean) and `phoneNumber` (if assigned) |
|
|
207
|
-
| POST | `/v1/integrations/twilio/credentials` | Validates and stores Account SID and Auth Token in secure storage (CES / encrypted file store)
|
|
206
|
+
| POST | `/v1/integrations/twilio/credentials` | Validates and stores Account SID and Auth Token in secure storage (CES / encrypted file store) |
|
|
208
207
|
| DELETE | `/v1/integrations/twilio/credentials` | Removes stored credentials. Preserves the phone number in config so re-entering credentials resumes working without reassigning the number. |
|
|
209
208
|
| GET | `/v1/integrations/twilio/numbers` | Lists all incoming phone numbers on the Twilio account with their capabilities |
|
|
210
209
|
| POST | `/v1/integrations/twilio/numbers/provision` | Purchases a new phone number. Accepts optional `areaCode` and `country`. Auto-assigns and configures webhooks when ingress is available. |
|
package/bun.lock
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
"@modelcontextprotocol/sdk": "1.27.1",
|
|
12
12
|
"@qdrant/js-client-rest": "1.17.0",
|
|
13
13
|
"@resvg/resvg-js": "2.6.2",
|
|
14
|
+
"@resvg/resvg-js-darwin-arm64": "2.6.2",
|
|
15
|
+
"@resvg/resvg-js-darwin-x64": "2.6.2",
|
|
14
16
|
"@sentry/node": "10.43.0",
|
|
15
17
|
"@vellumai/ces-contracts": "file:../packages/ces-contracts",
|
|
16
18
|
"@vellumai/credential-storage": "file:../packages/credential-storage",
|
|
@@ -30,6 +32,7 @@
|
|
|
30
32
|
"postgres": "3.4.8",
|
|
31
33
|
"qrcode": "1.5.4",
|
|
32
34
|
"rrule": "2.8.1",
|
|
35
|
+
"tar-stream": "3.1.7",
|
|
33
36
|
"tldts": "7.0.25",
|
|
34
37
|
"tree-sitter-bash": "0.25.1",
|
|
35
38
|
"uuid": "11.1.0",
|
|
@@ -54,8 +57,8 @@
|
|
|
54
57
|
},
|
|
55
58
|
},
|
|
56
59
|
"overrides": {
|
|
57
|
-
"lodash": "
|
|
58
|
-
"path-to-regexp": "
|
|
60
|
+
"lodash": "4.18.1",
|
|
61
|
+
"path-to-regexp": "8.4.2",
|
|
59
62
|
},
|
|
60
63
|
"packages": {
|
|
61
64
|
"@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.16.1", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-1ad+Sc/0sCtZGHthxxvgEUo5Wsbw16I+aF+YwdiLnPwkZG8KAGUEAPK6LM6Pf69lCyJPt1Aomk1d+8oE3C4ZEw=="],
|
|
@@ -986,7 +989,7 @@
|
|
|
986
989
|
|
|
987
990
|
"strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="],
|
|
988
991
|
|
|
989
|
-
"tar-stream": ["tar-stream@3.1.
|
|
992
|
+
"tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="],
|
|
990
993
|
|
|
991
994
|
"teex": ["teex@1.0.1", "", { "dependencies": { "streamx": "^2.12.5" } }, "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg=="],
|
|
992
995
|
|
|
@@ -1096,6 +1099,8 @@
|
|
|
1096
1099
|
|
|
1097
1100
|
"ajv-formats/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="],
|
|
1098
1101
|
|
|
1102
|
+
"archiver/tar-stream": ["tar-stream@3.1.8", "", { "dependencies": { "b4a": "^1.6.4", "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ=="],
|
|
1103
|
+
|
|
1099
1104
|
"cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
|
1100
1105
|
|
|
1101
1106
|
"ecdsa-sig-formatter/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
|
@@ -31,24 +31,7 @@ graph TB
|
|
|
31
31
|
SHARED["shared.ts<br/>resolveProvider + getProviderConnection"]
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
subgraph "
|
|
35
|
-
GMAIL_SKILL_MD["SKILL.md<br/>agent instructions"]
|
|
36
|
-
GMAIL_ARCHIVE["gmail_archive"]
|
|
37
|
-
GMAIL_LABEL["gmail_label"]
|
|
38
|
-
GMAIL_TRASH["gmail_trash"]
|
|
39
|
-
GMAIL_UNSUB["gmail_unsubscribe"]
|
|
40
|
-
GMAIL_DRAFT["gmail_draft"]
|
|
41
|
-
GMAIL_SEND_DRAFT["gmail_send_draft"]
|
|
42
|
-
GMAIL_ATTACHMENTS["gmail_attachments"]
|
|
43
|
-
GMAIL_FORWARD["gmail_forward"]
|
|
44
|
-
GMAIL_FOLLOW_UP["gmail_follow_up"]
|
|
45
|
-
GMAIL_FILTERS["gmail_filters"]
|
|
46
|
-
GMAIL_VACATION["gmail_vacation"]
|
|
47
|
-
GMAIL_SENDER_DIGEST["gmail_sender_digest"]
|
|
48
|
-
GMAIL_OUTREACH["gmail_outreach_scan"]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
subgraph "Slack Skill (bundled-skills/slack/)"
|
|
34
|
+
subgraph "Slack Skill (skills/slack/)"
|
|
52
35
|
SLACK_SKILL_MD["SKILL.md<br/>agent instructions"]
|
|
53
36
|
SLACK_WEB_API["Web API via bash<br/>(network_mode: proxied)"]
|
|
54
37
|
end
|
|
@@ -99,7 +82,6 @@ graph TB
|
|
|
99
82
|
SEARCH --> SHARED
|
|
100
83
|
SEND --> SHARED
|
|
101
84
|
STYLE --> STYLE_ANALYZER
|
|
102
|
-
GMAIL_ARCHIVE --> GMAIL_ADAPTER
|
|
103
85
|
SLACK_WEB_API --> SLACK_API
|
|
104
86
|
```
|
|
105
87
|
|
|
@@ -191,7 +173,6 @@ sequenceDiagram
|
|
|
191
173
|
| `assistant/src/messaging/providers/slack/` | Slack adapter, client, types |
|
|
192
174
|
| `assistant/src/messaging/providers/gmail/` | Gmail adapter, client, types |
|
|
193
175
|
| `assistant/src/config/bundled-skills/messaging/` | Core messaging skill (send, read, search, reply across platforms) |
|
|
194
|
-
| `assistant/src/config/bundled-skills/gmail/` | Gmail management skill (archive, label, triage, declutter) |
|
|
195
176
|
| `assistant/src/config/bundled-skills/sequences/` | Email sequence management skill (drip campaigns, enrollment, analytics) |
|
|
196
177
|
| `assistant/src/watcher/providers/gmail.ts` | Gmail watcher using History API |
|
|
197
178
|
| `assistant/src/watcher/providers/github.ts` | GitHub watcher for PRs, issues, review requests, and mentions |
|
|
@@ -20,18 +20,19 @@ graph TB
|
|
|
20
20
|
FIND_RULE -->|"No match"| NO_MATCH{"Fallback logic"}
|
|
21
21
|
|
|
22
22
|
RISK_CHECK -->|"Low / Medium"| AUTO_ALLOW["decision: allow<br/>Auto-allowed by rule"]
|
|
23
|
-
RISK_CHECK -->|"High"| HIGH_CHECK{"
|
|
24
|
-
HIGH_CHECK -->|"
|
|
25
|
-
HIGH_CHECK -->|"
|
|
23
|
+
RISK_CHECK -->|"High"| HIGH_CHECK{"shouldAutoAllowHighRisk()<br/>(containerized bash?)"}
|
|
24
|
+
HIGH_CHECK -->|"yes"| AUTO_ALLOW
|
|
25
|
+
HIGH_CHECK -->|"no"| RISK_THRESHOLD{"Risk-based<br/>threshold fallback"}
|
|
26
26
|
|
|
27
27
|
NO_MATCH -->|"tool.origin === 'skill'"| PROMPT_SKILL["decision: prompt<br/>Skill tools always ask"]
|
|
28
28
|
NO_MATCH -->|"strict mode"| PROMPT_STRICT["decision: prompt<br/>No implicit auto-allow"]
|
|
29
|
-
NO_MATCH -->|"workspace mode (default)"| WS_CHECK{"Workspace-scoped<br
|
|
29
|
+
NO_MATCH -->|"workspace mode (default)"| WS_CHECK{"Workspace-scoped<br/>+ Low risk?"}
|
|
30
30
|
WS_CHECK -->|"yes"| AUTO_WS["decision: allow<br/>Workspace-scoped auto-allow"]
|
|
31
|
-
WS_CHECK -->|"no"|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
WS_CHECK -->|"no"| RISK_THRESHOLD
|
|
32
|
+
|
|
33
|
+
RISK_THRESHOLD{"risk ≤ autoApproveUpTo<br/>threshold?"}
|
|
34
|
+
RISK_THRESHOLD -->|"yes"| AUTO_THRESHOLD["decision: allow<br/>within auto-approve threshold"]
|
|
35
|
+
RISK_THRESHOLD -->|"no"| PROMPT_THRESHOLD["decision: prompt<br/>above auto-approve threshold"]
|
|
35
36
|
```
|
|
36
37
|
|
|
37
38
|
### Permission Modes: Workspace and Strict
|
|
@@ -49,7 +50,7 @@ The `permissions.mode` config option (`workspace` or `strict`) controls the defa
|
|
|
49
50
|
| `browser_*` skill tools with system default rules | Auto-allowed (priority 100 allow rules) | Auto-allowed (priority 100 allow rules) |
|
|
50
51
|
| Skill-origin tools with no matching rule | Prompted | Prompted |
|
|
51
52
|
| Allow rules for non-high-risk tools | Auto-allowed | Auto-allowed |
|
|
52
|
-
| Allow rules
|
|
53
|
+
| Allow rules + containerized bash (high risk) | Auto-allowed (runtime check) | Auto-allowed (runtime check) |
|
|
53
54
|
| Deny rules | Blocked | Blocked |
|
|
54
55
|
|
|
55
56
|
**Workspace mode** (default) auto-allows operations scoped to the workspace (file reads/writes/edits within the workspace directory, sandboxed bash) without prompting. Host operations, network requests, and operations outside the workspace still follow the normal approval flow. Explicit deny and ask rules override auto-allow.
|
|
@@ -71,7 +72,6 @@ Rules are stored in `~/.vellum/protected/trust.json` with version `3`. Each rule
|
|
|
71
72
|
| `decision` | `allow \| deny \| ask` | What to do when the rule matches |
|
|
72
73
|
| `priority` | `number` | Higher priority wins; deny wins ties at equal priority |
|
|
73
74
|
| `executionTarget` | `string?` | `sandbox` or `host` — restricts by execution context |
|
|
74
|
-
| `allowHighRisk` | `boolean?` | When true, auto-allows even high-risk invocations |
|
|
75
75
|
|
|
76
76
|
Missing optional fields act as wildcards. A rule with no `executionTarget` matches any target.
|
|
77
77
|
|
|
@@ -165,7 +165,7 @@ When a permission prompt is sent to the client (via `confirmation_request` SSE e
|
|
|
165
165
|
| `allowlistOptions` | Suggested patterns for "always allow" rules |
|
|
166
166
|
| `scopeOptions` | Suggested scopes for rule persistence |
|
|
167
167
|
|
|
168
|
-
The user can respond with: `allow` (one-time), `always_allow` (create allow rule), `
|
|
168
|
+
The user can respond with: `allow` (one-time), `always_allow` (create allow rule), `deny` (one-time), or `always_deny` (create deny rule). High-risk operations with an allow rule in containerized environments are auto-allowed at runtime by `DefaultApprovalPolicy.shouldAutoAllowHighRisk()` without requiring persisted state. All other risk-based decisions use the `autoApproveUpTo` threshold (default: `"low"`) -- tools at or below the threshold are auto-allowed, those above are prompted.
|
|
169
169
|
|
|
170
170
|
### Canonical Paths
|
|
171
171
|
|
|
@@ -272,18 +272,18 @@ The `allowOneTimeSend` config gate (default: `false`) enables a secondary "Send
|
|
|
272
272
|
|
|
273
273
|
### Storage Layout
|
|
274
274
|
|
|
275
|
-
| Component | Location | What it stores
|
|
276
|
-
| ------------------- | ---------------------------------------------------- |
|
|
275
|
+
| Component | Location | What it stores |
|
|
276
|
+
| ------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
277
277
|
| Secret values | CES credential store or encrypted file store | Encrypted credential values keyed as `credential/{service}/{field}`. Stored via CES RPC (primary), CES HTTP (containerized), or encrypted file store (fallback). |
|
|
278
|
-
| Credential metadata | `~/.vellum/workspace/data/credentials/metadata.json` | Service, field, label, policy (allowedTools, allowedDomains), timestamps
|
|
279
|
-
| Config | `~/.vellum/workspace/config.*` | `secretDetection` settings: enabled, action, entropyThreshold, allowOneTimeSend
|
|
278
|
+
| Credential metadata | `~/.vellum/workspace/data/credentials/metadata.json` | Service, field, label, policy (allowedTools, allowedDomains), timestamps |
|
|
279
|
+
| Config | `~/.vellum/workspace/config.*` | `secretDetection` settings: enabled, action, entropyThreshold, allowOneTimeSend |
|
|
280
280
|
|
|
281
281
|
### Key Files
|
|
282
282
|
|
|
283
283
|
| File | Role |
|
|
284
284
|
| ---------------------------------------------------- | --------------------------------------------------------------------- |
|
|
285
285
|
| `assistant/src/tools/credentials/vault.ts` | `credential_store` tool — store, list, delete, prompt actions |
|
|
286
|
-
| `assistant/src/security/secure-keys.ts` | Async secure key CRUD via CES and encrypted file store
|
|
286
|
+
| `assistant/src/security/secure-keys.ts` | Async secure key CRUD via CES and encrypted file store |
|
|
287
287
|
| `assistant/src/tools/credentials/metadata-store.ts` | JSON file metadata CRUD for credential records |
|
|
288
288
|
| `assistant/src/tools/credentials/broker.ts` | Brokered credential access with policy enforcement and transient send |
|
|
289
289
|
| `assistant/src/tools/credentials/policy-validate.ts` | Policy input validation (allowedTools, allowedDomains) |
|
package/docs/error-handling.md
CHANGED
|
@@ -69,3 +69,114 @@ Returning `undefined` is acceptable only for **lookup functions** where "not fou
|
|
|
69
69
|
| Memory retriever (`memory/retriever.ts`) | Result object (`MemoryRecallResult`) with degraded/reason fields | Graceful degradation — embedding failures, search failures degrade quality without crashing |
|
|
70
70
|
| Filesystem tools (`path-policy.ts`, `edit-engine.ts`) | Discriminated union (`{ ok, reason }`) | Validation outcomes that the caller must handle (out of bounds, not found, ambiguous) |
|
|
71
71
|
| Subagent manager (`subagent/manager.ts`) | Throws for precondition violations, string literal unions for expected outcomes | Depth limit exceeded is a bug; `sendMessage` returns `'not_found' \| 'terminal' \| 'queue_full'` as expected states |
|
|
72
|
+
| Interactive UI (`cli/commands/ui.ts`) | Result object (`InteractiveUiResult`) with `status` + exit codes | User cancel and timeout are expected operational outcomes, not errors. IPC failures are exceptional. |
|
|
73
|
+
|
|
74
|
+
## 4. Interactive UI interactions (`assistant ui confirm` / `assistant ui request`)
|
|
75
|
+
|
|
76
|
+
The `assistant ui` commands present blocking interactive surfaces (confirmations, forms) to the user and wait for a response. Their error model distinguishes three categories:
|
|
77
|
+
|
|
78
|
+
### Expected outcomes (not errors)
|
|
79
|
+
|
|
80
|
+
User decisions — including declining — are normal operational results:
|
|
81
|
+
|
|
82
|
+
**`assistant ui confirm`** maps outcomes to exit codes for simple shell branching:
|
|
83
|
+
|
|
84
|
+
| Status | Exit code | Meaning |
|
|
85
|
+
| ----------------------------------- | --------- | ------------------------------------------------------------------------ |
|
|
86
|
+
| `submitted` (confirmed) | 0 | User completed the interaction. Proceed with the gated action. |
|
|
87
|
+
| `submitted` (denied via `actionId`) | 1 | User explicitly chose the deny/secondary action. Abort gracefully. |
|
|
88
|
+
| `cancelled` | 1 | User dismissed the surface without choosing an action. Abort gracefully. |
|
|
89
|
+
| `timed_out` | 1 | No user response within the timeout window. Abort safely. |
|
|
90
|
+
|
|
91
|
+
**`assistant ui request`** always exits 0 on successful IPC (regardless of user action). Use `--json` and check the `status` field to branch on user decisions.
|
|
92
|
+
|
|
93
|
+
Scripts must handle all three non-confirmation outcomes. A `cancelled` status means the user deliberately chose not to proceed — log it as a normal flow, not an error. A `timed_out` status means the user was unresponsive — abort without side effects.
|
|
94
|
+
|
|
95
|
+
### Cancellation reasons (`ui request` only)
|
|
96
|
+
|
|
97
|
+
When using `assistant ui request --json`, a `cancelled` result includes a `cancellationReason` field that distinguishes **user-driven** cancellations from **operational fail-closed** cancellations. This allows scripts to choose different recovery strategies depending on why the surface was cancelled.
|
|
98
|
+
|
|
99
|
+
> **Note:** `assistant ui confirm --json` does not include `cancellationReason`. For confirmations, use the exit code (0 = confirmed, non-zero = denied/cancelled) or check the `status` field.
|
|
100
|
+
|
|
101
|
+
#### User-driven cancellation
|
|
102
|
+
|
|
103
|
+
| `cancellationReason` | Meaning |
|
|
104
|
+
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
105
|
+
| `user_dismissed` | The user explicitly closed or dismissed the surface (e.g. clicked the close button, pressed Escape). This is a deliberate user choice — handle it the same as a deny action. |
|
|
106
|
+
|
|
107
|
+
#### Operational (fail-closed) cancellations
|
|
108
|
+
|
|
109
|
+
These indicate the surface could not be shown or could not complete due to infrastructure/environment conditions. The runtime fails closed to `{ status: "cancelled" }` (a normal `ok: true` result) rather than raising an IPC error, so scripts must inspect `cancellationReason` to distinguish them from user dismissals.
|
|
110
|
+
|
|
111
|
+
| `cancellationReason` | Meaning |
|
|
112
|
+
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
113
|
+
| `no_interactive_surface` | No UI resolver is registered — the channel is headless, API-only, or does not support interactive surfaces. |
|
|
114
|
+
| `conversation_not_found` | The target conversation could not be located (not in memory and not restorable from storage). |
|
|
115
|
+
| `resolver_unavailable` | A UI resolver is registered but the surface transport is disconnected (e.g. the desktop client dropped its connection). |
|
|
116
|
+
| `resolver_error` | The UI resolver threw an unexpected error while attempting to show the surface. |
|
|
117
|
+
|
|
118
|
+
**Why this matters**: A `user_dismissed` cancellation requires no special handling — the user made a conscious choice. An operational cancellation (`no_interactive_surface`, `conversation_not_found`, etc.) may warrant retry logic, a fallback path, or logging for investigation. Scripts that only check `status === "cancelled"` continue to work but cannot differentiate the two categories.
|
|
119
|
+
|
|
120
|
+
### Operational errors (exceptional)
|
|
121
|
+
|
|
122
|
+
These indicate infrastructure or configuration problems, not user decisions:
|
|
123
|
+
|
|
124
|
+
- **IPC unavailable**: The daemon is not running or the socket is unreachable. The CLI exits non-zero with an error message.
|
|
125
|
+
- **No conversation context**: Neither `--conversation-id` nor `__SKILL_CONTEXT_JSON` provided a valid conversation ID.
|
|
126
|
+
- **Invalid payload**: Malformed JSON in `--payload` or stdin.
|
|
127
|
+
|
|
128
|
+
In `--json` mode, operational errors return `{ "ok": false, "error": "<message>" }`. Without `--json`, they print to stderr and exit non-zero.
|
|
129
|
+
|
|
130
|
+
### Branching pattern for `ui confirm`
|
|
131
|
+
|
|
132
|
+
The `ui confirm --json` output includes `ok`, `confirmed`, `status`, `actionId`, `surfaceId`, and optional `decisionToken`/`summary` — but does **not** include `cancellationReason`. Branch on `status` and `confirmed`:
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
const proc = Bun.spawn(
|
|
136
|
+
[
|
|
137
|
+
"assistant",
|
|
138
|
+
"ui",
|
|
139
|
+
"confirm",
|
|
140
|
+
"--title",
|
|
141
|
+
"Send email",
|
|
142
|
+
"--message",
|
|
143
|
+
`Send to ${recipient}?`,
|
|
144
|
+
"--confirm-label",
|
|
145
|
+
"Send",
|
|
146
|
+
"--deny-label",
|
|
147
|
+
"Cancel",
|
|
148
|
+
"--json",
|
|
149
|
+
],
|
|
150
|
+
{ stdout: "pipe" },
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
const raw = await new Response(proc.stdout).text();
|
|
154
|
+
const result = JSON.parse(raw);
|
|
155
|
+
|
|
156
|
+
if (!result.ok) {
|
|
157
|
+
// Operational error — IPC failure, no conversation, etc.
|
|
158
|
+
throw new Error(`UI confirm failed: ${result.error}`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
switch (result.status) {
|
|
162
|
+
case "submitted":
|
|
163
|
+
if (result.confirmed) {
|
|
164
|
+
// User confirmed — proceed with the action
|
|
165
|
+
await sendEmail(draftId);
|
|
166
|
+
} else {
|
|
167
|
+
// User denied — abort gracefully
|
|
168
|
+
return { sent: false, reason: "User declined" };
|
|
169
|
+
}
|
|
170
|
+
break;
|
|
171
|
+
case "cancelled":
|
|
172
|
+
// User dismissed the surface — treat like a deny
|
|
173
|
+
return { sent: false, reason: "User dismissed" };
|
|
174
|
+
case "timed_out":
|
|
175
|
+
// No response — abort safely
|
|
176
|
+
return { sent: false, reason: "Timed out" };
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
For `ui request --json`, the output additionally includes a `cancellationReason` field when `status` is `"cancelled"`, allowing scripts to distinguish user dismissal (`user_dismissed`) from operational failures (`no_interactive_surface`, `conversation_not_found`, etc.). See the [cancellation reasons](#cancellation-reasons-ui-request-only) section above and `skills/AGENTS.md` for the `ui request` branching pattern.
|
|
181
|
+
|
|
182
|
+
The key distinction: **cancellation and denial are user decisions** (handle gracefully, no error logging). **IPC failures and missing context are bugs** (throw or log as errors).
|
package/docs/skills.md
CHANGED
|
@@ -12,14 +12,14 @@ Because skills can introduce arbitrary tool behavior, they are subject to strict
|
|
|
12
12
|
|
|
13
13
|
Skill-origin tools follow a stricter default permission policy than core tools:
|
|
14
14
|
|
|
15
|
-
| Scenario
|
|
16
|
-
|
|
|
17
|
-
| Low risk, no matching rule
|
|
18
|
-
| Medium risk, no matching rule
|
|
19
|
-
| High risk, no matching rule
|
|
20
|
-
| Allow rule matches, non-high risk
|
|
21
|
-
| Allow rule matches, high risk,
|
|
22
|
-
| Allow rule matches, high risk,
|
|
15
|
+
| Scenario | Core tool behavior | Skill tool behavior |
|
|
16
|
+
| ------------------------------------------------- | ----------------------------- | ------------------- |
|
|
17
|
+
| Low risk, no matching rule | Auto-allowed (workspace mode) | **Prompted** |
|
|
18
|
+
| Medium risk, no matching rule | Prompted | Prompted |
|
|
19
|
+
| High risk, no matching rule | Prompted | Prompted |
|
|
20
|
+
| Allow rule matches, non-high risk | Auto-allowed | Auto-allowed |
|
|
21
|
+
| Allow rule matches, high risk, containerized bash | Auto-allowed (runtime check) | Auto-allowed |
|
|
22
|
+
| Allow rule matches, high risk, other | Prompted | Prompted |
|
|
23
23
|
|
|
24
24
|
Even if a skill's `TOOLS.json` declares `"risk": "low"` for one of its tools, the permission checker will prompt the user unless an explicit trust rule in `~/.vellum/protected/trust.json` allows it. This prevents third-party skill tools from silently auto-executing.
|
|
25
25
|
|
|
@@ -73,7 +73,7 @@ Writing to skill source files is treated as a **high-risk** operation by the ris
|
|
|
73
73
|
- **Workspace skills**: Project-local skill directories
|
|
74
74
|
- **Extra skills**: Additional roots configured by the user
|
|
75
75
|
|
|
76
|
-
When `file_write`, `file_edit`, `host_file_write`, or `host_file_edit` targets a path inside any of these directories, the risk level is escalated from its normal level (typically Medium) to **High**. High-risk operations always require user approval
|
|
76
|
+
When `file_write`, `file_edit`, `host_file_write`, or `host_file_edit` targets a path inside any of these directories, the risk level is escalated from its normal level (typically Medium) to **High**. High-risk operations always require user approval (only containerized bash is auto-allowed at runtime for high-risk operations).
|
|
77
77
|
|
|
78
78
|
This escalation prevents the agent from modifying skill code without explicit user consent. Since modifying a skill's source could grant the agent new capabilities or alter existing tool behavior, such mutations are treated as a privilege-escalation vector.
|
|
79
79
|
|
|
@@ -135,7 +135,7 @@ When you modify any file in a skill's directory, the version hash changes. If yo
|
|
|
135
135
|
|
|
136
136
|
Writing to skill source paths is classified as high risk because it could alter the agent's capabilities. This is a deliberate security measure.
|
|
137
137
|
|
|
138
|
-
**Fix**: If you trust the operation, approve it. To permanently allow it, select "Always allow"
|
|
138
|
+
**Fix**: If you trust the operation, approve it. To permanently allow it, select "Always allow". Note that high-risk file operations will still prompt for each invocation since runtime auto-allow only applies to containerized bash.
|
|
139
139
|
|
|
140
140
|
### "Why is strict mode prompting for everything?"
|
|
141
141
|
|
|
@@ -39,7 +39,7 @@ The `services.stt.providers` map uses a sparse `z.record(z.string(), ...)` schem
|
|
|
39
39
|
2. Implement the `transcribe(request)` method using a lazy-imported provider module (follow the pattern in the existing adapters).
|
|
40
40
|
3. Add a `case` branch in `createDaemonBatchTranscriber()` for the new `SttProviderId`. The exhaustive `never` check at the bottom of the switch ensures a compile error if this step is skipped.
|
|
41
41
|
|
|
42
|
-
If the provider needs a new REST client module, add it under `src/providers/speech-to-text/` following the pattern of `openai-whisper.ts`, `deepgram.ts`,
|
|
42
|
+
If the provider needs a new REST client module, add it under `src/providers/speech-to-text/` following the pattern of `openai-whisper.ts`, `deepgram.ts`, `google-gemini.ts`, and `xai.ts`.
|
|
43
43
|
|
|
44
44
|
## 5. Credential plumbing
|
|
45
45
|
|
|
@@ -72,6 +72,7 @@ Add a new entry to the `providers` array with the following fields:
|
|
|
72
72
|
| `openai-whisper` | `openai` | shared |
|
|
73
73
|
| `deepgram` | `deepgram` | exclusive |
|
|
74
74
|
| `google-gemini` | `gemini` | shared |
|
|
75
|
+
| `xai` | `xai` | exclusive |
|
|
75
76
|
|
|
76
77
|
When the provider ID differs from the credential provider name (e.g. `google-gemini` maps to `gemini`), the key is **shared** with other services that use the same credential. The `sttKeyIsExclusive` / `sttKeyIsShared` helpers in the macOS settings layer derive this automatically from the catalog.
|
|
77
78
|
|
package/knip.json
CHANGED
|
@@ -10,7 +10,12 @@
|
|
|
10
10
|
"../skills/meet-join/**/*.test.ts",
|
|
11
11
|
"../skills/meet-join/**/__tests__/**/*.ts",
|
|
12
12
|
"!../skills/meet-join/bot/**",
|
|
13
|
-
"../skills/meet-join/contracts/**/__tests__/**/*.ts"
|
|
13
|
+
"../skills/meet-join/contracts/**/__tests__/**/*.ts",
|
|
14
|
+
"../skills/meet-join/meet-controller-ext/scripts/build.ts",
|
|
15
|
+
"../skills/meet-join/meet-controller-ext/src/background.ts",
|
|
16
|
+
"../skills/meet-join/meet-controller-ext/src/content.ts",
|
|
17
|
+
"../skills/meet-join/meet-controller-ext/src/avatar/avatar.ts",
|
|
18
|
+
"../skills/meet-join/meet-controller-ext/src/messaging/content-bridge.ts"
|
|
14
19
|
],
|
|
15
20
|
"project": [
|
|
16
21
|
"src/**/*.ts",
|
|
@@ -22,6 +27,8 @@
|
|
|
22
27
|
"ignoreDependencies": [
|
|
23
28
|
"@vellumai/ces-contracts",
|
|
24
29
|
"@vellumai/credential-storage",
|
|
25
|
-
"@vellumai/egress-proxy"
|
|
30
|
+
"@vellumai/egress-proxy",
|
|
31
|
+
"@resvg/resvg-js-darwin-arm64",
|
|
32
|
+
"@resvg/resvg-js-darwin-x64"
|
|
26
33
|
]
|
|
27
34
|
}
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"./handles": "./src/handles.ts",
|
|
10
10
|
"./grants": "./src/grants.ts",
|
|
11
11
|
"./rpc": "./src/rpc.ts",
|
|
12
|
-
"./rendering": "./src/rendering.ts"
|
|
12
|
+
"./rendering": "./src/rendering.ts",
|
|
13
|
+
"./trust-rules": "./src/trust-rules.ts"
|
|
13
14
|
},
|
|
14
15
|
"scripts": {
|
|
15
16
|
"typecheck": "bunx tsc --noEmit",
|