@vellumai/assistant 0.8.5 → 0.8.7
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/AGENTS.md +33 -1
- package/ARCHITECTURE.md +1 -1
- package/Dockerfile +1 -0
- package/bun.lock +11 -2
- package/bunfig.toml +6 -1
- package/docker-entrypoint.sh +8 -6
- package/docs/credential-execution-service.md +6 -6
- package/docs/plugins.md +67 -31
- package/examples/plugins/echo/register.ts +4 -7
- package/knip.json +1 -0
- package/node_modules/@vellumai/environments/bun.lock +24 -0
- package/node_modules/@vellumai/environments/package.json +18 -0
- package/node_modules/@vellumai/environments/src/__tests__/package-boundary.test.ts +95 -0
- package/node_modules/@vellumai/environments/src/index.ts +11 -0
- package/node_modules/@vellumai/environments/src/seeds.ts +73 -0
- package/node_modules/@vellumai/environments/src/types.ts +70 -0
- package/node_modules/@vellumai/environments/tsconfig.json +20 -0
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +11 -0
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +15 -17
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +10 -3
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +16 -14
- package/openapi.yaml +5585 -469
- package/package.json +7 -3
- package/scripts/generate-openapi.ts +20 -13
- package/src/__tests__/actor-token-service.test.ts +3 -2
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +42 -80
- package/src/__tests__/agent-loop-exit-reason.test.ts +336 -42
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +141 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +21 -33
- package/src/__tests__/agent-loop-provider-error-recording.test.ts +6 -4
- package/src/__tests__/agent-loop-thinking.test.ts +17 -12
- package/src/__tests__/agent-loop.test.ts +207 -341
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +5 -2
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -40
- package/src/__tests__/always-loaded-tools-guard.test.ts +2 -2
- package/src/__tests__/annotate-risk-options.test.ts +1 -0
- package/src/__tests__/anthropic-provider.test.ts +201 -55
- package/src/__tests__/app-builder-skill-instructions.test.ts +22 -0
- package/src/__tests__/app-control-flow.test.ts +5 -0
- package/src/__tests__/approval-cascade.test.ts +5 -11
- package/src/__tests__/approval-routes-http.test.ts +13 -15
- package/src/__tests__/assert-not-live-db.ts +79 -0
- package/src/__tests__/assistant-event.test.ts +15 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +11 -27
- package/src/__tests__/audit-log-rotation.test.ts +2 -2
- package/src/__tests__/auto-analysis-end-to-end.test.ts +6 -6
- package/src/__tests__/avatar-e2e.test.ts +7 -37
- package/src/__tests__/avatar-generator.test.ts +12 -42
- package/src/__tests__/avatar-identity-sync.test.ts +28 -3
- package/src/__tests__/background-shell-bash.test.ts +3 -7
- package/src/__tests__/background-workers-disk-pressure.test.ts +5 -8
- package/src/__tests__/browser-skill-endstate.test.ts +3 -3
- package/src/__tests__/btw-routes.test.ts +10 -14
- package/src/__tests__/call-controller.test.ts +3 -2
- package/src/__tests__/call-pointer-messages.test.ts +5 -3
- package/src/__tests__/call-site-routing-provider.test.ts +22 -40
- package/src/__tests__/catalog-files.test.ts +1 -0
- package/src/__tests__/channel-approval-routes.test.ts +51 -22
- package/src/__tests__/channel-approvals.test.ts +3 -1
- package/src/__tests__/channel-guardian.test.ts +3 -2
- package/src/__tests__/channel-invite-transport.test.ts +1 -5
- package/src/__tests__/channel-readiness-routes.test.ts +0 -4
- package/src/__tests__/channel-readiness-slack-remote.test.ts +170 -0
- package/src/__tests__/channel-reply-delivery.test.ts +35 -0
- package/src/__tests__/channel-retry-sweep.test.ts +388 -79
- package/src/__tests__/checker.test.ts +12 -12
- package/src/__tests__/circuit-breaker-pipeline.test.ts +3 -3
- package/src/__tests__/clawhub-files.test.ts +1 -0
- package/src/__tests__/compaction-events.test.ts +6 -17
- package/src/__tests__/compaction-pipeline.test.ts +1 -1
- package/src/__tests__/compaction-timeout-recovery.test.ts +37 -48
- package/src/__tests__/compaction-trail-store.test.ts +186 -0
- package/src/__tests__/compactor-call-site-logging.test.ts +1 -0
- package/src/__tests__/compactor-image-manifest-trust.test.ts +112 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +1 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +7 -5
- package/src/__tests__/computer-use-tools.test.ts +14 -16
- package/src/__tests__/config-loader-backfill.test.ts +13 -28
- package/src/__tests__/config-loader-corrupt.test.ts +5 -5
- package/src/__tests__/config-loader-platform-defaults.test.ts +93 -26
- package/src/__tests__/config-loader-quarantine-bulletin.test.ts +3 -3
- package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -4
- package/src/__tests__/config-schema.test.ts +10 -10
- package/src/__tests__/config-watcher.test.ts +28 -0
- package/src/__tests__/connection-model-compat.test.ts +83 -0
- package/src/__tests__/contacts-tools.test.ts +3 -2
- package/src/__tests__/context-search-agent-runner.test.ts +6 -3
- package/src/__tests__/context-token-estimator.test.ts +56 -0
- package/src/__tests__/context-window-manager-compact-retry.test.ts +291 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +19 -7
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +4 -2
- package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +55 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +13 -27
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +464 -90
- package/src/__tests__/conversation-agent-loop.test.ts +1069 -64
- package/src/__tests__/conversation-analysis-routes.test.ts +2 -3
- package/src/__tests__/conversation-app-control-instantiation.test.ts +29 -19
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +2 -1
- package/src/__tests__/conversation-attention-store.test.ts +101 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +3 -2
- package/src/__tests__/conversation-clear-safety.test.ts +20 -10
- package/src/__tests__/conversation-confirmation-signals.test.ts +16 -45
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-disk-view.test.ts +10 -17
- package/src/__tests__/conversation-error.test.ts +30 -0
- package/src/__tests__/conversation-fork-crud.test.ts +132 -157
- package/src/__tests__/conversation-fork-route.test.ts +19 -16
- package/src/__tests__/conversation-history-web-search.test.ts +1 -0
- package/src/__tests__/conversation-inference-profile-list.test.ts +3 -2
- package/src/__tests__/conversation-inference-profile-route.test.ts +3 -2
- package/src/__tests__/conversation-init.benchmark.test.ts +6 -6
- package/src/__tests__/conversation-lifecycle.test.ts +4 -2
- package/src/__tests__/conversation-list-source.test.ts +3 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +5 -3
- package/src/__tests__/conversation-load-history-stripped.test.ts +2 -1
- package/src/__tests__/conversation-message-sync-tags.test.ts +3 -4
- package/src/__tests__/conversation-pairing.test.ts +87 -4
- package/src/__tests__/conversation-pre-run-repair.test.ts +1 -1
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +30 -7
- package/src/__tests__/conversation-process-callsite.test.ts +28 -30
- package/src/__tests__/conversation-provider-retry-repair.test.ts +58 -44
- package/src/__tests__/conversation-queue.test.ts +603 -455
- package/src/__tests__/conversation-routes-disk-view.test.ts +6 -20
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +35 -10
- package/src/__tests__/conversation-routes-slash-commands.test.ts +35 -4
- package/src/__tests__/conversation-runtime-assembly.test.ts +98 -22
- package/src/__tests__/conversation-runtime-workspace.test.ts +19 -1
- package/src/__tests__/conversation-skill-tools.test.ts +38 -142
- package/src/__tests__/conversation-slash-queue.test.ts +120 -62
- package/src/__tests__/conversation-slash-unknown.test.ts +18 -15
- package/src/__tests__/conversation-speed-override.test.ts +9 -22
- package/src/__tests__/conversation-stream-state.test.ts +484 -0
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +52 -15
- package/src/__tests__/conversation-surfaces-app-control.test.ts +32 -4
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +1 -0
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-state-update.test.ts +8 -5
- package/src/__tests__/conversation-surfaces-table-action.test.ts +13 -32
- package/src/__tests__/conversation-sync-tags.test.ts +128 -12
- package/src/__tests__/conversation-title-service.test.ts +1 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +53 -11
- package/src/__tests__/conversation-unread-route.test.ts +14 -2
- package/src/__tests__/conversation-usage.test.ts +1 -2
- package/src/__tests__/conversation-wipe.test.ts +1 -1
- package/src/__tests__/conversation-workspace-cache-state.test.ts +4 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +53 -22
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +32 -7
- package/src/__tests__/credential-broker-browser-fill.test.ts +3 -3
- package/src/__tests__/credential-broker-server-use.test.ts +5 -5
- package/src/__tests__/credential-execution-client.test.ts +72 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +10 -12
- package/src/__tests__/credential-execution-tools.test.ts +1 -2
- package/src/__tests__/credential-health-service.test.ts +252 -3
- package/src/__tests__/credential-security-invariants.test.ts +5 -6
- package/src/__tests__/credential-vault-unit.test.ts +19 -19
- package/src/__tests__/credential-vault.test.ts +5 -5
- package/src/__tests__/cross-provider-web-search.test.ts +61 -3
- package/src/__tests__/cu-unified-flow.test.ts +26 -1
- package/src/__tests__/db-connection-isolation.test.ts +7 -6
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +8 -10
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +7 -10
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +9 -15
- package/src/__tests__/db-schedule-syntax-migration.test.ts +11 -0
- package/src/__tests__/db-test-helpers.ts +58 -0
- package/src/__tests__/disk-pressure-guard.test.ts +119 -36
- package/src/__tests__/disk-pressure-lifecycle.test.ts +13 -10
- package/src/__tests__/disk-pressure-routes.test.ts +9 -35
- package/src/__tests__/disk-pressure-tools.test.ts +0 -4
- package/src/__tests__/dm-persistence.test.ts +33 -42
- package/src/__tests__/document-create-dedupe.test.ts +189 -0
- package/src/__tests__/document-find-replace.test.ts +3 -2
- package/src/__tests__/document-tool-security.test.ts +81 -2
- package/src/__tests__/dynamic-page-surface.test.ts +68 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +5 -4
- package/src/__tests__/edit-propagation.test.ts +1 -2
- package/src/__tests__/empty-response-pipeline.test.ts +127 -5
- package/src/__tests__/encrypted-store-test-helpers.ts +56 -0
- package/src/__tests__/encrypted-store.test.ts +11 -9
- package/src/__tests__/feature-flag-test-helpers.ts +53 -0
- package/src/__tests__/filing-service.test.ts +3 -2
- package/src/__tests__/first-greeting.test.ts +103 -12
- package/src/__tests__/gateway-flag-listener.test.ts +0 -1
- package/src/__tests__/gemini-inline-media.test.ts +78 -0
- package/src/__tests__/gemini-provider.test.ts +375 -26
- package/src/__tests__/guardian-action-sweep.test.ts +3 -2
- package/src/__tests__/guardian-outbound-http.test.ts +3 -2
- package/src/__tests__/guardian-routing-state.test.ts +60 -71
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +48 -3
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +10 -7
- package/src/__tests__/heartbeat-disk-pressure.test.ts +2 -0
- package/src/__tests__/heartbeat-service.test.ts +3 -1
- package/src/__tests__/helpers/mock-logger.ts +26 -0
- package/src/__tests__/history-repair-hook.test.ts +161 -0
- package/src/__tests__/history-repair-observability.test.ts +1 -1
- package/src/__tests__/history-repair.test.ts +2 -1
- package/src/__tests__/host-app-control-proxy.test.ts +2 -0
- package/src/__tests__/host-bash-routes.test.ts +1 -0
- package/src/__tests__/host-cu-proxy.test.ts +2 -0
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-file-edit-tool.test.ts +4 -2
- package/src/__tests__/host-file-proxy.test.ts +31 -0
- package/src/__tests__/host-file-read-tool.test.ts +4 -2
- package/src/__tests__/host-file-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-file-write-tool.test.ts +9 -3
- package/src/__tests__/host-proxy-preactivation.test.ts +53 -14
- package/src/__tests__/host-shell-tool.test.ts +11 -5
- package/src/__tests__/host-transfer-routes-targeted.test.ts +1 -0
- package/src/__tests__/http-conversation-lineage.test.ts +3 -2
- package/src/__tests__/http-user-message-parity.test.ts +31 -9
- package/src/__tests__/identity-intro-cache.test.ts +154 -22
- package/src/__tests__/inbound-slack-persistence.test.ts +51 -74
- package/src/__tests__/inference-profile-reaper.test.ts +3 -2
- package/src/__tests__/inference-profile-session-ipc.test.ts +3 -2
- package/src/__tests__/injector-background-turn.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-disk-pressure.test.ts +4 -18
- package/src/__tests__/injector-document-comments.test.ts +1 -1
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
- package/src/__tests__/injector-v3-suppression.test.ts +220 -0
- package/src/__tests__/inline-skill-load-permissions.test.ts +4 -4
- package/src/__tests__/list-messages-attachments.test.ts +7 -8
- package/src/__tests__/list-messages-hidden-metadata.test.ts +93 -11
- package/src/__tests__/list-messages-page-latest.test.ts +0 -1
- package/src/__tests__/list-messages-tool-merge.test.ts +36 -6
- package/src/__tests__/llm-call-pipeline.test.ts +21 -15
- package/src/__tests__/llm-context-normalization.test.ts +42 -0
- package/src/__tests__/llm-request-log-turn-query.test.ts +42 -86
- package/src/__tests__/llm-resolver.test.ts +346 -39
- package/src/__tests__/llm-schema.test.ts +1 -1
- package/src/__tests__/llm-usage-store.test.ts +45 -0
- package/src/__tests__/log-export-routes.test.ts +59 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +1 -8
- package/src/__tests__/manual-token-reconciliation.test.ts +76 -1
- package/src/__tests__/mcp-abort-signal.test.ts +14 -0
- package/src/__tests__/mcp-auth-routes.test.ts +15 -10
- package/src/__tests__/mcp-client-auth.test.ts +14 -0
- package/src/__tests__/mcp-health-check.test.ts +18 -13
- package/src/__tests__/memory-retrieval-pipeline.test.ts +1 -1
- package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
- package/src/__tests__/messaging-send-tool.test.ts +9 -4
- package/src/__tests__/migration-export-http.test.ts +12 -12
- package/src/__tests__/migration-import-commit-http.test.ts +8 -8
- package/src/__tests__/migration-import-from-url.test.ts +3 -3
- package/src/__tests__/migration-import-preflight-http.test.ts +7 -7
- package/src/__tests__/migration-validate-http.test.ts +3 -3
- package/src/__tests__/mock-gateway-ipc.ts +18 -2
- package/src/__tests__/model-intents.test.ts +3 -3
- package/src/__tests__/native-web-search.test.ts +44 -22
- package/src/__tests__/notification-decision-identity.test.ts +9 -18
- package/src/__tests__/notification-decision-recipient-context.test.ts +3 -6
- package/src/__tests__/notification-deep-link.test.ts +62 -0
- package/src/__tests__/oauth-commands-routes.test.ts +38 -1
- package/src/__tests__/oauth-provider-visibility.test.ts +8 -8
- package/src/__tests__/oauth-store.test.ts +3 -2
- package/src/__tests__/onboarding-template-contract.test.ts +13 -2
- package/src/__tests__/openai-provider.test.ts +74 -79
- package/src/__tests__/openai-responses-provider.test.ts +90 -86
- package/src/__tests__/openrouter-provider-only.test.ts +27 -5
- package/src/__tests__/outbound-slack-persistence.test.ts +48 -2
- package/src/__tests__/overflow-reduce-pipeline.test.ts +2 -4
- package/src/__tests__/parallel-tool.benchmark.test.ts +24 -36
- package/src/__tests__/persistence-pipeline.test.ts +154 -27
- package/src/__tests__/persistence-secret-redaction.test.ts +85 -13
- package/src/__tests__/pipeline-runner.test.ts +2 -3
- package/src/__tests__/plugin-bootstrap.test.ts +60 -36
- package/src/__tests__/plugin-route-contribution.test.ts +6 -16
- package/src/__tests__/plugin-skill-contribution.test.ts +7 -17
- package/src/__tests__/plugin-tool-contribution.test.ts +51 -64
- package/src/__tests__/plugin-types.test.ts +7 -14
- package/src/__tests__/prechat-onboarding-contract.test.ts +23 -0
- package/src/__tests__/process-message-background-slack.test.ts +38 -32
- package/src/__tests__/process-message-display-content.test.ts +49 -64
- package/src/__tests__/provider-catalog-visibility.test.ts +9 -9
- package/src/__tests__/provider-commit-message-generator.test.ts +19 -14
- package/src/__tests__/provider-error-scenarios.test.ts +7 -6
- package/src/__tests__/provider-platform-proxy-integration.test.ts +215 -8
- package/src/__tests__/provider-registry-ollama.test.ts +45 -22
- package/src/__tests__/provider-send-message-override-profile.test.ts +9 -25
- package/src/__tests__/provider-streaming.benchmark.test.ts +12 -22
- package/src/__tests__/provider-usage-tracking.test.ts +0 -6
- package/src/__tests__/ratelimit.test.ts +9 -4
- package/src/__tests__/recording-handler.test.ts +1 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +82 -76
- package/src/__tests__/relay-server.test.ts +30 -23
- package/src/__tests__/retry-openrouter-only-normalization.test.ts +5 -8
- package/src/__tests__/retry-thinking-tool-choice.test.ts +10 -13
- package/src/__tests__/retry-verbosity-normalization.test.ts +5 -8
- package/src/__tests__/runtime-attachment-metadata.test.ts +3 -2
- package/src/__tests__/runtime-events-sse-reconnect.test.ts +353 -0
- package/src/__tests__/schedule-routes.test.ts +80 -10
- package/src/__tests__/schedule-store.test.ts +83 -1
- package/src/__tests__/schedule-tools.test.ts +125 -0
- package/src/__tests__/scheduler-reuse-conversation.test.ts +48 -3
- package/src/__tests__/secret-ingress-http.test.ts +7 -3
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +11 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +11 -9
- package/src/__tests__/secret-response-routing.test.ts +13 -11
- package/src/__tests__/secure-keys.test.ts +3 -3
- package/src/__tests__/send-endpoint-busy.test.ts +83 -43
- package/src/__tests__/server-history-render.test.ts +4 -1
- package/src/__tests__/shell-observability.test.ts +249 -0
- package/src/__tests__/skill-feature-flags-integration.test.ts +19 -21
- package/src/__tests__/skill-feature-flags.test.ts +20 -22
- package/src/__tests__/skill-load-feature-flag.test.ts +15 -15
- package/src/__tests__/skill-projection-feature-flag.test.ts +44 -30
- package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
- package/src/__tests__/skill-tool-factory.test.ts +96 -95
- package/src/__tests__/skills-files-catalog-fallback.test.ts +10 -0
- package/src/__tests__/skillssh-files.test.ts +1 -0
- package/src/__tests__/slack-channel-config.test.ts +3 -3
- package/src/__tests__/starter-task-flow.test.ts +6 -6
- package/src/__tests__/strip-memory-injections.test.ts +102 -14
- package/src/__tests__/subagent-call-site-routing.test.ts +13 -5
- package/src/__tests__/subagent-disposal.test.ts +27 -8
- package/src/__tests__/subagent-fork-notifications.test.ts +24 -9
- package/src/__tests__/subagent-fork-spawn.test.ts +13 -4
- package/src/__tests__/subagent-manager-notify.test.ts +20 -8
- package/src/__tests__/subagent-notify-parent.test.ts +5 -4
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +58 -0
- package/src/__tests__/subagent-tools.test.ts +2 -1
- package/src/__tests__/suggestion-routes.test.ts +4 -3
- package/src/__tests__/sync-message-contract.test.ts +19 -16
- package/src/__tests__/system-prompt.test.ts +92 -0
- package/src/__tests__/terminal-tools.test.ts +3 -24
- package/src/__tests__/test-preload-verifier.ts +68 -0
- package/src/__tests__/test-preload.ts +32 -39
- package/src/__tests__/thread-backfill.test.ts +4 -9
- package/src/__tests__/title-generate-pipeline.test.ts +1 -1
- package/src/__tests__/token-estimate-pipeline.test.ts +2 -4
- package/src/__tests__/tool-error-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execute-pipeline.test.ts +1 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +20 -7
- package/src/__tests__/tool-executor.test.ts +55 -10
- package/src/__tests__/tool-preview-lifecycle.test.ts +14 -11
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +9 -12
- package/src/__tests__/tool-result-truncation.test.ts +3 -1
- package/src/__tests__/tools-audio-read.test.ts +113 -0
- package/src/__tests__/turn-boundary-resolution.test.ts +44 -84
- package/src/__tests__/turn-events-store.test.ts +11 -7
- package/src/__tests__/twilio-routes.test.ts +3 -2
- package/src/__tests__/validate-input.test.ts +381 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +1 -0
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +10 -7
- package/src/__tests__/voice-session-bridge.test.ts +50 -35
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +326 -0
- package/src/__tests__/workspace-migration-091-retighten-migration-onboarding-thread.test.ts +166 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +143 -31
- package/src/acp/prepare-agent-env.ts +52 -11
- package/src/acp/session-manager.ts +5 -6
- package/src/agent/compaction-circuit.ts +140 -0
- package/src/agent/loop.ts +489 -85
- package/src/api/README.md +126 -2
- package/src/api/constants/call-sites.ts +27 -0
- package/src/api/constants/tool-execution.ts +21 -0
- package/src/api/events/assistant-activity-state.ts +75 -0
- package/src/api/events/assistant-outbound-attachment.ts +49 -0
- package/src/api/events/assistant-text-delta.ts +30 -0
- package/src/api/events/assistant-turn-start.ts +31 -0
- package/src/api/events/avatar-updated.ts +24 -0
- package/src/api/events/compaction-circuit-closed.ts +26 -0
- package/src/api/events/compaction-circuit-open.ts +28 -0
- package/src/api/events/confirmation-request.ts +114 -0
- package/src/api/events/contact-request.ts +33 -0
- package/src/api/events/conversation-error.ts +77 -0
- package/src/api/events/conversation-list-invalidated.ts +38 -0
- package/src/api/events/conversation-title-updated.ts +24 -0
- package/src/api/events/disk-pressure-status-changed.ts +61 -0
- package/src/api/events/document-comment-created.ts +44 -0
- package/src/api/events/document-comment-deleted.ts +22 -0
- package/src/api/events/document-comment-reopened.ts +23 -0
- package/src/api/events/document-comment-resolved.ts +25 -0
- package/src/api/events/document-editor-update.ts +27 -0
- package/src/api/events/error.ts +32 -0
- package/src/api/events/generation-cancelled.ts +22 -0
- package/src/api/events/generation-handoff.ts +39 -0
- package/src/api/events/home-feed-updated.ts +26 -0
- package/src/api/events/identity-changed.ts +32 -0
- package/src/api/events/interaction-resolved.ts +50 -0
- package/src/api/events/message-complete.ts +40 -0
- package/src/api/events/message-dequeued.ts +21 -0
- package/src/api/events/message-queued-deleted.ts +23 -0
- package/src/api/events/message-queued.ts +22 -0
- package/src/api/events/message-request-complete.ts +29 -0
- package/src/api/events/navigate-settings.ts +20 -0
- package/src/api/events/notification-intent.ts +33 -0
- package/src/api/events/open-url.ts +28 -0
- package/src/api/events/question-request.ts +67 -0
- package/src/{events → api/events}/relationship-state-updated.ts +6 -8
- package/src/api/events/secret-request.ts +42 -0
- package/src/api/events/subagent-event.ts +79 -0
- package/src/api/events/subagent-spawned.ts +40 -0
- package/src/api/events/subagent-status-changed.ts +65 -0
- package/src/api/events/sync-changed.ts +29 -0
- package/src/api/events/tool-result.ts +129 -0
- package/src/api/events/tool-use-start.ts +30 -0
- package/src/api/events/turn-profile-auto-routed.ts +28 -0
- package/src/api/events/ui-surface-complete.ts +30 -0
- package/src/api/events/ui-surface-dismiss.ts +22 -0
- package/src/api/events/ui-surface-show.ts +67 -0
- package/src/api/events/ui-surface-update.ts +26 -0
- package/src/api/events/usage-update.ts +34 -0
- package/src/api/events/user-message-echo.ts +35 -0
- package/src/api/index.ts +482 -3
- package/src/api/requests/dictation.ts +45 -0
- package/src/api/responses/disk-pressure-status.ts +26 -0
- package/src/api/responses/home.ts +217 -0
- package/src/api/responses/llm-context-response.ts +41 -0
- package/src/api/responses/llm-request-log-entry.ts +93 -0
- package/src/api/responses/memory-recall-log.ts +65 -0
- package/src/api/responses/memory-v2-activation-log.ts +78 -0
- package/src/api/responses/memory-v3-selection-log.ts +50 -0
- package/src/api/responses/subagent-detail.ts +48 -0
- package/src/approvals/guardian-decision-primitive.ts +7 -15
- package/src/approvals/guardian-request-resolvers.ts +6 -9
- package/src/avatar/__tests__/avatar-manifest.test.ts +236 -0
- package/src/avatar/__tests__/avatar-store.test.ts +193 -0
- package/src/avatar/avatar-manifest.ts +195 -0
- package/src/avatar/avatar-store.ts +113 -0
- package/src/avatar/traits-png-sync.ts +8 -2
- package/src/background-wake/background-wake-routes.test.ts +687 -52
- package/src/background-wake/next-wake.test.ts +31 -1
- package/src/background-wake/next-wake.ts +4 -1
- package/src/background-wake/platform-client.test.ts +308 -0
- package/src/background-wake/platform-client.ts +167 -0
- package/src/background-wake/publisher.ts +91 -0
- package/src/background-wake/runtime-registry.ts +2 -2
- package/src/background-wake/wake-intent-hooks.test.ts +282 -0
- package/src/calls/call-conversation-messages.ts +6 -4
- package/src/calls/guardian-action-sweep.ts +6 -4
- package/src/calls/guardian-dispatch.ts +1 -0
- package/src/calls/relay-server.ts +12 -8
- package/src/calls/voice-session-bridge.ts +17 -31
- package/src/cli/commands/__tests__/conversations-slack.test.ts +16 -0
- package/src/cli/commands/__tests__/memory-v3.test.ts +245 -0
- package/src/cli/commands/__tests__/notifications.test.ts +184 -40
- package/src/cli/commands/avatar.ts +17 -11
- package/src/cli/commands/channels/__tests__/channels.test.ts +143 -0
- package/src/cli/commands/channels/index.ts +229 -0
- package/src/cli/commands/conversations.ts +15 -1
- package/src/cli/commands/db/__tests__/repair.test.ts +540 -0
- package/src/cli/commands/db/__tests__/status.test.ts +253 -0
- package/src/cli/commands/db/format.ts +48 -0
- package/src/cli/commands/db/index.ts +29 -0
- package/src/cli/commands/db/repair-step-conversation-backfill.ts +345 -0
- package/src/cli/commands/db/repair-step-integrity.ts +146 -0
- package/src/cli/commands/db/repair-steps.ts +164 -0
- package/src/cli/commands/db/repair.ts +141 -0
- package/src/cli/commands/db/status.ts +366 -0
- package/src/cli/commands/memory-v3.ts +168 -203
- package/src/cli/commands/notifications.ts +365 -55
- package/src/cli/lib/cli-colors.ts +24 -6
- package/src/cli/lib/open-browser.ts +7 -2
- package/src/cli/program.ts +6 -5
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/assistant-feature-flags.ts +25 -44
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -3
- package/src/config/bundled-skills/document-editor/SKILL.md +5 -1
- package/src/config/bundled-skills/media-processing/services/reduce.ts +6 -9
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +7 -2
- package/src/config/bundled-skills/schedule/SKILL.md +2 -2
- package/src/config/bundled-skills/schedule/TOOLS.json +10 -2
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -0
- package/src/config/call-site-defaults.ts +3 -8
- package/src/config/feature-flag-cache.ts +86 -0
- package/src/config/feature-flag-registry.json +42 -26
- package/src/config/llm-context-resolution.ts +10 -1
- package/src/config/llm-resolver.ts +121 -15
- package/src/config/loader.ts +4 -5
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -211
- package/src/config/schemas/call-site-catalog.ts +8 -15
- package/src/config/schemas/heartbeat.ts +1 -1
- package/src/config/schemas/llm.ts +92 -4
- package/src/config/schemas/memory-lifecycle.ts +24 -0
- package/src/config/schemas/memory-v2.ts +0 -227
- package/src/config/schemas/memory-v3.ts +39 -0
- package/src/config/schemas/memory.ts +6 -1
- package/src/config/schemas/services.ts +6 -2
- package/src/config/schemas/timeouts.ts +3 -1
- package/src/config/seed-inference-profiles.ts +36 -16
- package/src/context/compactor.ts +54 -31
- package/src/context/token-estimator.ts +29 -5
- package/src/context/tool-result-truncation.ts +1 -43
- package/src/context/window-manager.ts +138 -20
- package/src/credential-execution/executable-discovery.ts +40 -0
- package/src/credential-execution/process-manager.ts +6 -2
- package/src/credential-health/credential-health-service.ts +125 -40
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -6
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +15 -17
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -2
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -0
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +25 -12
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +1 -0
- package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +107 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +11 -6
- package/src/daemon/approval-generators.ts +4 -4
- package/src/daemon/config-watcher.ts +7 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +613 -155
- package/src/daemon/conversation-agent-loop.ts +409 -605
- package/src/daemon/conversation-error.ts +40 -12
- package/src/daemon/conversation-history.ts +22 -6
- package/src/daemon/conversation-launch.ts +4 -8
- package/src/daemon/conversation-lifecycle.ts +10 -38
- package/src/daemon/conversation-messaging.ts +83 -44
- package/src/daemon/conversation-notifiers.ts +7 -5
- package/src/daemon/conversation-process.ts +174 -116
- package/src/daemon/conversation-runtime-assembly.ts +76 -30
- package/src/daemon/conversation-skill-tools.ts +14 -30
- package/src/daemon/conversation-store.ts +6 -5
- package/src/daemon/conversation-surfaces.ts +124 -103
- package/src/daemon/conversation-tool-setup.ts +36 -48
- package/src/daemon/conversation.ts +111 -166
- package/src/daemon/daemon-control.ts +1 -1
- package/src/daemon/daemon-skill-host.ts +7 -4
- package/src/daemon/disk-pressure-guard.ts +54 -50
- package/src/daemon/external-plugins-bootstrap.ts +46 -24
- package/src/daemon/first-greeting.ts +53 -13
- package/src/daemon/guardian-action-generators.ts +2 -2
- package/src/daemon/handlers/conversations.ts +6 -22
- package/src/daemon/handlers/shared.ts +10 -1
- package/src/daemon/handlers/skills.ts +15 -14
- package/src/daemon/host-app-control-proxy.ts +54 -1
- package/src/daemon/host-cu-proxy.ts +46 -22
- package/src/daemon/host-file-proxy.ts +25 -1
- package/src/daemon/host-proxy-preactivation.ts +25 -6
- package/src/daemon/lifecycle.ts +40 -67
- package/src/daemon/mcp-reload-service.ts +1 -1
- package/src/daemon/meet-manifest-loader.ts +10 -17
- package/src/daemon/message-protocol.ts +2 -3
- package/src/daemon/message-provenance.ts +49 -0
- package/src/daemon/message-types/contacts.ts +3 -20
- package/src/daemon/message-types/conversations.ts +25 -125
- package/src/daemon/message-types/document-comments.ts +8 -44
- package/src/daemon/message-types/documents.ts +3 -9
- package/src/daemon/message-types/home.ts +5 -18
- package/src/daemon/message-types/integrations.ts +4 -13
- package/src/daemon/message-types/messages.ts +47 -377
- package/src/daemon/message-types/notifications.ts +2 -32
- package/src/daemon/message-types/settings.ts +3 -8
- package/src/daemon/message-types/skills.ts +2 -0
- package/src/daemon/message-types/subagents.ts +6 -0
- package/src/daemon/message-types/surfaces.ts +2 -0
- package/src/daemon/message-types/sync.ts +12 -25
- package/src/daemon/message-types/workspace.ts +3 -11
- package/src/daemon/process-message.ts +58 -55
- package/src/daemon/providers-setup.ts +1 -1
- package/src/daemon/server.ts +28 -0
- package/src/daemon/switch-inference-profile-tool.ts +13 -3
- package/src/daemon/tool-setup-types.ts +0 -6
- package/src/daemon/tool-side-effects.ts +10 -7
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +21 -1
- package/src/documents/document-store.ts +38 -0
- package/src/export/__tests__/transcript-formatter.test.ts +1 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +31 -0
- package/src/heartbeat/heartbeat-run-store.ts +31 -0
- package/src/heartbeat/heartbeat-service.ts +79 -0
- package/src/home/__tests__/feed-writer.test.ts +161 -0
- package/src/home/__tests__/post-connect-feed.test.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +55 -59
- package/src/home/feature-gate.ts +22 -0
- package/src/home/feed-types.ts +36 -221
- package/src/home/feed-writer.ts +146 -7
- package/src/home/suggested-prompts.ts +27 -145
- package/src/ipc/__tests__/cli-ipc.test.ts +1 -0
- package/src/ipc/__tests__/email-ipc.test.ts +0 -9
- package/src/ipc/gateway-client.test.ts +4 -1
- package/src/ipc/routes/__tests__/route-adapter.test.ts +244 -0
- package/src/ipc/routes/route-adapter.ts +45 -6
- package/src/ipc/skill-routes/__tests__/memory.test.ts +19 -9
- package/src/ipc/skill-routes/__tests__/providers.test.ts +10 -10
- package/src/ipc/skill-routes/__tests__/registries.test.ts +59 -20
- package/src/ipc/skill-routes/memory.ts +27 -13
- package/src/ipc/skill-routes/providers.ts +5 -6
- package/src/ipc/skill-routes/registries.ts +39 -88
- package/src/live-voice/__tests__/live-voice-archive.test.ts +24 -11
- package/src/memory/__tests__/conversation-queries.test.ts +192 -8
- package/src/memory/__tests__/db-maintenance.test.ts +128 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +1 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +5 -4
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +26 -5
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +1 -0
- package/src/memory/__tests__/memory-retrospective-job.test.ts +11 -6
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +1 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +31 -0
- package/src/memory/__tests__/memory-v3-selections-migration.test.ts +103 -0
- package/src/memory/context-search/agent-runner.ts +2 -4
- package/src/memory/conversation-attention-store.ts +17 -3
- package/src/memory/conversation-crud.ts +386 -115
- package/src/memory/conversation-queries.ts +78 -22
- package/src/memory/db-connection.ts +29 -19
- package/src/memory/db-init.ts +12 -0
- package/src/memory/db-maintenance.ts +18 -2
- package/src/memory/db-singleton.ts +77 -0
- package/src/memory/delivery-channels.ts +82 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +2 -4
- package/src/memory/graph/consolidation.ts +8 -11
- package/src/memory/graph/conversation-graph-memory.ts +41 -8
- package/src/memory/graph/extraction.ts +6 -9
- package/src/memory/graph/narrative.ts +2 -2
- package/src/memory/graph/pattern-scan.ts +2 -2
- package/src/memory/graph/retriever.test.ts +3 -3
- package/src/memory/graph/retriever.ts +20 -26
- package/src/memory/graph/tools.ts +4 -4
- package/src/memory/job-handlers/conversation-starters.ts +32 -32
- package/src/memory/job-handlers/embedding.test.ts +3 -2
- package/src/memory/job-handlers/summarization.ts +1 -2
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -2
- package/src/memory/jobs-store.ts +3 -1
- package/src/memory/jobs-worker.ts +63 -40
- package/src/memory/llm-request-log-source-clickhouse.ts +55 -1
- package/src/memory/llm-request-log-source-local.ts +13 -0
- package/src/memory/llm-request-log-source.ts +21 -6
- package/src/memory/llm-request-log-store.ts +147 -3
- package/src/memory/llm-usage-store.ts +10 -0
- package/src/memory/memory-marker.ts +17 -0
- package/src/memory/memory-retrospective-job.ts +6 -2
- package/src/memory/memory-v2-activation-log-store.ts +13 -1
- package/src/memory/migrations/265-drop-provider-connection-status.ts +26 -0
- package/src/memory/migrations/266-messages-client-message-id.ts +43 -0
- package/src/memory/migrations/267-llm-usage-events-add-assistant-version.ts +46 -0
- package/src/memory/migrations/268-add-memory-v3-selections.ts +28 -0
- package/src/memory/migrations/269-schedule-script-timeout.ts +11 -0
- package/src/memory/migrations/270-messages-role-created-at-index.ts +18 -0
- package/src/memory/migrations/__tests__/267-llm-usage-events-add-assistant-version.test.ts +117 -0
- package/src/memory/migrations/index.ts +6 -0
- package/src/memory/schema/conversations.ts +9 -1
- package/src/memory/schema/inference.ts +0 -1
- package/src/memory/schema/infrastructure.ts +11 -0
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +5 -2
- package/src/memory/v2/__tests__/consolidation-job.test.ts +124 -0
- package/src/memory/v2/__tests__/harness-metrics.test.ts +9 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +9 -4
- package/src/memory/v2/__tests__/harness-runner.test.ts +26 -0
- package/src/memory/v2/__tests__/migration.test.ts +11 -3
- package/src/memory/v2/__tests__/page-index.test.ts +37 -1
- package/src/memory/v2/__tests__/router.test.ts +14 -4
- package/src/memory/v2/__tests__/sweep-job.test.ts +9 -5
- package/src/memory/v2/backfill-jobs.ts +6 -0
- package/src/memory/v2/consolidation-job.ts +89 -9
- package/src/memory/v2/harness/metrics.ts +5 -1
- package/src/memory/v2/harness/replay-input.ts +19 -3
- package/src/memory/v2/harness/runner.ts +6 -0
- package/src/memory/v2/harness/trace.ts +6 -0
- package/src/memory/v2/migration.ts +5 -3
- package/src/memory/v2/page-index.ts +11 -0
- package/src/memory/v2/router.ts +8 -11
- package/src/memory/v2/sweep-job.ts +8 -11
- package/src/memory/v2/types.ts +1 -0
- package/src/memory/v3/__tests__/assign.test.ts +242 -0
- package/src/memory/v3/__tests__/capabilities.test.ts +118 -0
- package/src/memory/v3/__tests__/core.test.ts +39 -0
- package/src/memory/v3/__tests__/fixtures/eval-turns.json +36 -0
- package/src/memory/v3/__tests__/fixtures/live-turns.json +37 -0
- package/src/memory/v3/__tests__/health.test.ts +203 -0
- package/src/memory/v3/__tests__/live-integration.test.ts +330 -0
- package/src/memory/v3/__tests__/maintain-job.test.ts +288 -0
- package/src/memory/v3/__tests__/needle.test.ts +107 -0
- package/src/memory/v3/__tests__/orchestrate.test.ts +400 -0
- package/src/memory/v3/__tests__/reconcile.test.ts +274 -0
- package/src/memory/v3/__tests__/render-injection.test.ts +61 -0
- package/src/memory/v3/__tests__/router.test.ts +260 -0
- package/src/memory/v3/__tests__/selection-log-store.test.ts +179 -0
- package/src/memory/v3/__tests__/selector.test.ts +404 -0
- package/src/memory/v3/__tests__/shadow-plugin.test.ts +414 -0
- package/src/memory/v3/__tests__/snapshot.test.ts +168 -0
- package/src/memory/v3/__tests__/tree.test.ts +192 -0
- package/src/memory/v3/__tests__/types.test.ts +54 -0
- package/src/memory/v3/__tests__/working-set-eviction.test.ts +106 -0
- package/src/memory/v3/__tests__/working-set-skeleton.test.ts +44 -0
- package/src/memory/v3/assign.ts +268 -0
- package/src/memory/v3/capabilities.ts +124 -0
- package/src/memory/v3/core.ts +26 -0
- package/src/memory/v3/data/README.md +84 -0
- package/src/memory/v3/data/assignments.json +5 -0
- package/src/memory/v3/data/core.json +1 -0
- package/src/memory/v3/data/leaves/domain-a/topic-x.md +9 -0
- package/src/memory/v3/data/leaves/domain-a/topic-y.md +9 -0
- package/src/memory/v3/data/leaves/domain-b/topic-z.md +9 -0
- package/src/memory/v3/health.ts +0 -0
- package/src/memory/v3/maintain-job.ts +314 -0
- package/src/memory/v3/needle.ts +115 -0
- package/src/memory/v3/orchestrate.ts +114 -0
- package/src/memory/v3/page-content.ts +34 -0
- package/src/memory/v3/provider-blocks.ts +16 -0
- package/src/memory/v3/reconcile.ts +523 -0
- package/src/memory/v3/render-injection.ts +32 -0
- package/src/memory/v3/router.ts +184 -0
- package/src/memory/v3/selection-log-store.ts +84 -0
- package/src/memory/v3/selector.ts +211 -0
- package/src/memory/v3/shadow-plugin.ts +379 -0
- package/src/memory/v3/snapshot.ts +209 -0
- package/src/memory/v3/tree.ts +174 -0
- package/src/memory/v3/types.ts +46 -60
- package/src/memory/v3/working-set.ts +88 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +1 -1
- package/src/messaging/providers/slack/render-transcript.ts +2 -2
- package/src/messaging/style-analyzer.ts +8 -11
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +1 -0
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +1 -0
- package/src/notifications/adapters/slack.ts +45 -11
- package/src/notifications/broadcaster.ts +114 -63
- package/src/notifications/conversation-pairing.ts +30 -8
- package/src/notifications/decision-engine.ts +10 -13
- package/src/notifications/decisions-store.ts +32 -1
- package/src/notifications/deliveries-store.ts +45 -0
- package/src/notifications/edit-notification.ts +201 -0
- package/src/notifications/emit-signal.ts +11 -1
- package/src/notifications/preference-extractor.ts +11 -14
- package/src/notifications/signal.ts +10 -0
- package/src/notifications/types.ts +37 -0
- package/src/oauth/byo-connection.test.ts +67 -3
- package/src/oauth/byo-connection.ts +32 -5
- package/src/oauth/connect-orchestrator.ts +9 -0
- package/src/oauth/connection-resolver.test.ts +76 -0
- package/src/oauth/connection-resolver.ts +49 -10
- package/src/oauth/manual-token-connection.ts +51 -3
- package/src/oauth/seed-providers.ts +3 -0
- package/src/permissions/approval-policy.test.ts +19 -5
- package/src/permissions/approval-policy.ts +14 -3
- package/src/permissions/checker.ts +21 -8
- package/src/permissions/prompter.ts +42 -36
- package/src/permissions/question-prompter.test.ts +35 -26
- package/src/permissions/question-prompter.ts +6 -10
- package/src/platform/client.test.ts +24 -1
- package/src/platform/client.ts +8 -0
- package/src/platform/feature-gate.ts +15 -0
- package/src/plugin-api/index.ts +2 -0
- package/src/plugin-api/types.ts +25 -3
- package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +93 -0
- package/src/plugins/defaults/circuit-breaker/package.json +15 -0
- package/src/plugins/defaults/circuit-breaker/register.ts +39 -0
- package/src/plugins/defaults/compaction/middlewares/compaction.ts +25 -0
- package/src/plugins/defaults/compaction/package.json +15 -0
- package/src/plugins/defaults/compaction/register.ts +35 -0
- package/src/plugins/defaults/compaction/terminal.ts +73 -0
- package/src/plugins/defaults/empty-response/middlewares/emptyResponse.ts +22 -0
- package/src/plugins/defaults/empty-response/package.json +15 -0
- package/src/plugins/defaults/empty-response/register.ts +28 -0
- package/src/plugins/defaults/empty-response/terminal.ts +106 -0
- package/src/plugins/defaults/history-repair/hooks/user-prompt-submit.ts +35 -0
- package/src/plugins/defaults/history-repair/package.json +15 -0
- package/src/plugins/defaults/history-repair/register.ts +24 -0
- package/src/{daemon/history-repair.ts → plugins/defaults/history-repair/terminal.ts} +48 -35
- package/src/plugins/defaults/index.ts +29 -40
- package/src/plugins/defaults/injectors/package.json +15 -0
- package/src/plugins/defaults/{injectors.ts → injectors/register.ts} +16 -46
- package/src/plugins/defaults/llm-call/middlewares/llmCall.ts +17 -0
- package/src/plugins/defaults/llm-call/package.json +15 -0
- package/src/plugins/defaults/{llm-call.ts → llm-call/register.ts} +6 -38
- package/src/plugins/defaults/memory-retrieval/middlewares/memoryRetrieval.ts +17 -0
- package/src/plugins/defaults/memory-retrieval/package.json +15 -0
- package/src/plugins/defaults/{memory-retrieval.ts → memory-retrieval/register.ts} +10 -48
- package/src/plugins/defaults/{overflow-reduce.ts → overflow-reduce/middlewares/overflowReduce.ts} +18 -77
- package/src/plugins/defaults/overflow-reduce/package.json +15 -0
- package/src/plugins/defaults/overflow-reduce/register.ts +42 -0
- package/src/plugins/defaults/persistence/middlewares/persistence.ts +19 -0
- package/src/plugins/defaults/persistence/package.json +15 -0
- package/src/plugins/defaults/persistence/register.ts +38 -0
- package/src/plugins/defaults/persistence/terminal.ts +83 -0
- package/src/plugins/defaults/title-generate/package.json +15 -0
- package/src/plugins/defaults/title-generate/register.ts +35 -0
- package/src/plugins/defaults/title-generate/terminal.ts +31 -0
- package/src/plugins/defaults/token-estimate/middlewares/tokenEstimate.ts +23 -0
- package/src/plugins/defaults/token-estimate/package.json +15 -0
- package/src/plugins/defaults/token-estimate/register.ts +34 -0
- package/src/plugins/defaults/token-estimate/terminal.ts +40 -0
- package/src/plugins/defaults/tool-error/middlewares/toolError.ts +21 -0
- package/src/plugins/defaults/tool-error/package.json +15 -0
- package/src/plugins/defaults/tool-error/register.ts +35 -0
- package/src/plugins/defaults/tool-error/terminal.ts +47 -0
- package/src/plugins/defaults/tool-execute/middlewares/toolExecute.ts +23 -0
- package/src/plugins/defaults/tool-execute/package.json +15 -0
- package/src/plugins/defaults/{tool-execute.ts → tool-execute/register.ts} +8 -46
- package/src/plugins/defaults/tool-result-truncate/middlewares/toolResultTruncate.ts +23 -0
- package/src/plugins/defaults/tool-result-truncate/package.json +15 -0
- package/src/plugins/defaults/tool-result-truncate/register.ts +35 -0
- package/src/plugins/defaults/tool-result-truncate/terminal.ts +113 -0
- package/src/plugins/defaults/tool-result-truncate/types.ts +22 -0
- package/src/plugins/external-plugin-loader.ts +2 -2
- package/src/plugins/pipeline.ts +0 -12
- package/src/plugins/types.ts +107 -102
- package/src/plugins/user-loader.ts +4 -3
- package/src/proactive-artifact/aux-message-injector.ts +0 -1
- package/src/proactive-artifact/job.test.ts +21 -8
- package/src/proactive-artifact/job.ts +3 -1
- package/src/prompts/__tests__/system-prompt.test.ts +4 -4
- package/src/prompts/sections.ts +20 -7
- package/src/prompts/system-prompt.ts +38 -40
- package/src/prompts/template-detection.ts +10 -4
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +2 -2
- package/src/prompts/templates/BOOTSTRAP.md +10 -10
- package/src/prompts/templates/IDENTITY.md +0 -2
- package/src/prompts/templates/system-sections.ts +6 -0
- package/src/providers/__tests__/connection-model-compat.test.ts +3 -4
- package/src/providers/__tests__/registry-native-web-search.test.ts +122 -0
- package/src/providers/__tests__/retry-callsite.test.ts +25 -25
- package/src/providers/__tests__/satellite-connection-routing.test.ts +7 -21
- package/src/providers/anthropic/client.ts +24 -5
- package/src/providers/call-site-routing.ts +34 -18
- package/src/providers/connection-model-compat.ts +23 -0
- package/src/providers/connection-resolution.ts +39 -20
- package/src/providers/fireworks/client.ts +1 -0
- package/src/providers/gemini/client.ts +176 -37
- package/src/providers/gemini/inline-media.ts +74 -0
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +0 -2
- package/src/providers/inference/__tests__/base-url-security.test.ts +2 -3
- package/src/providers/inference/__tests__/{connections-status-label.test.ts → connections-label.test.ts} +12 -111
- package/src/providers/inference/auth.ts +0 -8
- package/src/providers/inference/connections.ts +3 -66
- package/src/providers/inference/resolve-auth.ts +2 -3
- package/src/providers/model-catalog.ts +35 -1
- package/src/providers/model-intents.ts +3 -3
- package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +157 -7
- package/src/providers/openai/chat-completions-provider.ts +111 -16
- package/src/providers/openai/codex-models.ts +2 -0
- package/src/providers/openai/responses-provider.ts +54 -57
- package/src/providers/openrouter/client.ts +14 -14
- package/src/providers/provider-send-message.ts +23 -14
- package/src/providers/ratelimit.ts +1 -9
- package/src/providers/registry.ts +48 -8
- package/src/providers/retry.ts +16 -9
- package/src/providers/search-provider-catalog.ts +17 -9
- package/src/providers/types.ts +20 -2
- package/src/providers/usage-tracking.ts +1 -9
- package/src/runtime/__tests__/agent-wake.test.ts +132 -26
- package/src/runtime/__tests__/background-job-runner.test.ts +2 -3
- package/src/runtime/access-request-helper.ts +1 -0
- package/src/runtime/agent-wake.ts +93 -18
- package/src/runtime/assistant-event-hub.ts +2 -2
- package/src/runtime/auth/__tests__/guard-tests.test.ts +75 -109
- package/src/runtime/auth/__tests__/route-policy.test.ts +153 -170
- package/src/runtime/auth/route-policy.ts +42 -1069
- package/src/runtime/background-job-runner.ts +1 -4
- package/src/runtime/btw-sidechain.ts +3 -1
- package/src/runtime/channel-approvals.ts +3 -14
- package/src/runtime/channel-invite-transport.ts +5 -6
- package/src/runtime/channel-readiness-service.ts +70 -5
- package/src/runtime/channel-reply-delivery.ts +23 -0
- package/src/runtime/channel-retry-sweep.ts +59 -30
- package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
- package/src/runtime/conversation-stream-state.ts +294 -0
- package/src/runtime/http-router.ts +19 -22
- package/src/runtime/http-types.ts +12 -6
- package/src/runtime/invite-instruction-generator.ts +3 -3
- package/src/runtime/migrations/vbundle-builder.ts +3 -2
- package/src/runtime/pending-interactions.ts +2 -2
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +565 -0
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -0
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +4 -4
- package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +436 -0
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +237 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +209 -1
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +26 -72
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +58 -5
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +6 -6
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -2
- package/src/runtime/routes/__tests__/stt-routes.test.ts +3 -3
- package/src/runtime/routes/__tests__/suggest-trust-rule-routes.test.ts +5 -2
- package/src/runtime/routes/__tests__/surface-content-routes.test.ts +294 -0
- package/src/runtime/routes/__tests__/task-routes.test.ts +48 -3
- package/src/runtime/routes/__tests__/tts-routes.test.ts +3 -3
- package/src/runtime/routes/acp-routes-list.test.ts +3 -0
- package/src/runtime/routes/acp-routes.test.ts +97 -75
- package/src/runtime/routes/acp-routes.ts +29 -6
- package/src/runtime/routes/app-management-routes.ts +208 -28
- package/src/runtime/routes/app-routes.ts +25 -5
- package/src/runtime/routes/approval-routes.ts +16 -4
- package/src/runtime/routes/attachment-routes.ts +25 -1
- package/src/runtime/routes/audio-routes.ts +1 -0
- package/src/runtime/routes/audit-routes.ts +5 -0
- package/src/runtime/routes/auth-routes.ts +5 -0
- package/src/runtime/routes/avatar-routes.ts +238 -59
- package/src/runtime/routes/background-tool-routes.ts +9 -0
- package/src/runtime/routes/background-wake-routes.ts +201 -23
- package/src/runtime/routes/backup-routes.ts +45 -0
- package/src/runtime/routes/bookmark-routes.ts +13 -0
- package/src/runtime/routes/brain-graph-routes.ts +9 -0
- package/src/runtime/routes/browser-routes.ts +5 -0
- package/src/runtime/routes/browser-tabs-routes.ts +5 -0
- package/src/runtime/routes/btw-routes.ts +9 -5
- package/src/runtime/routes/cache-routes.ts +13 -0
- package/src/runtime/routes/call-routes.ts +21 -10
- package/src/runtime/routes/channel-availability-routes.ts +5 -1
- package/src/runtime/routes/channel-readiness-routes.ts +37 -4
- package/src/runtime/routes/channel-route-definitions.ts +21 -0
- package/src/runtime/routes/channel-verification-routes.ts +21 -0
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +9 -2
- package/src/runtime/routes/client-routes.ts +9 -0
- package/src/runtime/routes/consolidation-routes.ts +13 -5
- package/src/runtime/routes/contact-prompt-routes.ts +9 -0
- package/src/runtime/routes/contact-routes.ts +90 -23
- package/src/runtime/routes/content-source-routes.ts +5 -1
- package/src/runtime/routes/conversation-analysis-routes.ts +11 -1
- package/src/runtime/routes/conversation-attention-routes.ts +5 -0
- package/src/runtime/routes/conversation-cli-routes.ts +54 -7
- package/src/runtime/routes/conversation-compaction-routes.ts +292 -0
- package/src/runtime/routes/conversation-list-routes.ts +225 -9
- package/src/runtime/routes/conversation-management-routes.ts +96 -28
- package/src/runtime/routes/conversation-query-routes.ts +148 -51
- package/src/runtime/routes/conversation-routes.ts +259 -158
- package/src/runtime/routes/conversation-starter-routes.ts +22 -13
- package/src/runtime/routes/conversations-import-routes.ts +25 -7
- package/src/runtime/routes/credential-prompt-routes.ts +5 -0
- package/src/runtime/routes/credential-routes.ts +25 -6
- package/src/runtime/routes/debug-bash-routes.ts +5 -0
- package/src/runtime/routes/debug-routes.ts +11 -2
- package/src/runtime/routes/defer-routes.ts +13 -0
- package/src/runtime/routes/diagnostics-routes.ts +37 -46
- package/src/runtime/routes/disk-pressure-routes.ts +17 -31
- package/src/runtime/routes/document-comments-routes.ts +46 -27
- package/src/runtime/routes/documents-routes.ts +31 -11
- package/src/runtime/routes/domain-routes.ts +61 -28
- package/src/runtime/routes/email-routes.ts +33 -0
- package/src/runtime/routes/events-routes.ts +114 -9
- package/src/runtime/routes/filing-routes.ts +9 -4
- package/src/runtime/routes/gateway-log-routes.ts +5 -0
- package/src/runtime/routes/global-search-routes.ts +53 -50
- package/src/runtime/routes/group-routes.ts +32 -5
- package/src/runtime/routes/guardian-action-routes.ts +9 -0
- package/src/runtime/routes/guardian-approval-interception.ts +0 -31
- package/src/runtime/routes/heartbeat-routes.ts +25 -9
- package/src/runtime/routes/home-feed-routes.ts +149 -16
- package/src/runtime/routes/home-state-routes.ts +8 -40
- package/src/runtime/routes/host-app-control-routes.ts +5 -0
- package/src/runtime/routes/host-bash-routes.ts +5 -0
- package/src/runtime/routes/host-browser-routes.ts +13 -0
- package/src/runtime/routes/host-cu-routes.ts +5 -0
- package/src/runtime/routes/host-file-routes.ts +26 -6
- package/src/runtime/routes/host-transfer-routes.ts +13 -2
- package/src/runtime/routes/http-adapter.ts +1 -2
- package/src/runtime/routes/identity-intro-cache.ts +72 -16
- package/src/runtime/routes/identity-routes.ts +42 -11
- package/src/runtime/routes/image-generation-routes.ts +5 -0
- package/src/runtime/routes/inbound-message-handler.ts +15 -11
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +524 -12
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +72 -27
- package/src/runtime/routes/index.ts +2 -0
- package/src/runtime/routes/inference-profile-session-routes.ts +13 -3
- package/src/runtime/routes/inference-provider-connection-routes.ts +26 -31
- package/src/runtime/routes/inference-send-routes.ts +11 -11
- package/src/runtime/routes/integrations/a2a.ts +30 -7
- package/src/runtime/routes/integrations/slack/channel.ts +19 -3
- package/src/runtime/routes/integrations/slack/share.ts +9 -2
- package/src/runtime/routes/integrations/telegram.ts +28 -9
- package/src/runtime/routes/integrations/twilio.ts +35 -7
- package/src/runtime/routes/integrations/vercel.ts +18 -3
- package/src/runtime/routes/internal-oauth-routes.ts +5 -0
- package/src/runtime/routes/internal-twilio-routes.ts +13 -0
- package/src/runtime/routes/llm-call-sites-routes.ts +39 -4
- package/src/runtime/routes/llm-context-normalization.ts +7 -2
- package/src/runtime/routes/log-export-routes.ts +28 -10
- package/src/runtime/routes/mcp-auth-routes.ts +25 -0
- package/src/runtime/routes/memory-item-routes.ts +21 -10
- package/src/runtime/routes/memory-v2-routes.ts +90 -36
- package/src/runtime/routes/memory-v3-routes.ts +283 -259
- package/src/runtime/routes/migration-rollback-routes.ts +5 -1
- package/src/runtime/routes/migration-routes.ts +49 -13
- package/src/runtime/routes/notification-routes.ts +80 -2
- package/src/runtime/routes/oauth-apps.ts +33 -11
- package/src/runtime/routes/oauth-commands-routes.ts +43 -15
- package/src/runtime/routes/oauth-connect-routes.ts +9 -0
- package/src/runtime/routes/oauth-lifecycle-routes.ts +5 -1
- package/src/runtime/routes/oauth-providers.ts +35 -10
- package/src/runtime/routes/platform-routes.ts +21 -0
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +3 -2
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +37 -16
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +7 -3
- package/src/runtime/routes/playground/__tests__/state.test.ts +10 -3
- package/src/runtime/routes/playground/force-compact.ts +1 -1
- package/src/runtime/routes/playground/helpers.ts +0 -1
- package/src/runtime/routes/playground/inject-failures.ts +13 -8
- package/src/runtime/routes/playground/reset-circuit.ts +14 -9
- package/src/runtime/routes/playground/seed-conversation.ts +1 -1
- package/src/runtime/routes/playground/seeded-conversations.ts +3 -3
- package/src/runtime/routes/playground/state.ts +4 -3
- package/src/runtime/routes/plugins-routes.ts +22 -19
- package/src/runtime/routes/profiler-routes.ts +17 -4
- package/src/runtime/routes/ps-routes.ts +5 -0
- package/src/runtime/routes/publish-routes.ts +13 -3
- package/src/runtime/routes/question-routes.ts +5 -0
- package/src/runtime/routes/recording-routes.ts +25 -12
- package/src/runtime/routes/rename-conversation-routes.ts +5 -0
- package/src/runtime/routes/sanity-routes.ts +9 -2
- package/src/runtime/routes/schedule-routes.ts +137 -47
- package/src/runtime/routes/secret-routes.ts +17 -4
- package/src/runtime/routes/sequence-routes.ts +33 -0
- package/src/runtime/routes/settings-routes.ts +65 -19
- package/src/runtime/routes/skills-routes.ts +133 -69
- package/src/runtime/routes/slack-channel-routes.ts +5 -0
- package/src/runtime/routes/stt-routes.ts +13 -6
- package/src/runtime/routes/subagents-routes.ts +24 -18
- package/src/runtime/routes/suggest-trust-rule-routes.ts +7 -2
- package/src/runtime/routes/surface-action-routes.ts +10 -38
- package/src/runtime/routes/surface-content-routes.ts +21 -6
- package/src/runtime/routes/surface-conversation-resolver.ts +65 -0
- package/src/runtime/routes/task-routes.ts +37 -0
- package/src/runtime/routes/telemetry-routes.ts +9 -0
- package/src/runtime/routes/trace-event-routes.ts +42 -1
- package/src/runtime/routes/trust-rules-routes.ts +5 -0
- package/src/runtime/routes/tts-routes.ts +13 -6
- package/src/runtime/routes/types.ts +17 -8
- package/src/runtime/routes/ui-request-routes.ts +5 -0
- package/src/runtime/routes/upgrade-broadcast-routes.ts +5 -0
- package/src/runtime/routes/usage-routes.ts +71 -3
- package/src/runtime/routes/user-routes-cli.ts +9 -0
- package/src/runtime/routes/user-routes.ts +5 -1
- package/src/runtime/routes/wake-conversation-routes.ts +5 -0
- package/src/runtime/routes/watcher-routes.ts +21 -0
- package/src/runtime/routes/webhook-routes.ts +9 -0
- package/src/runtime/routes/wipe-conversation-routes.ts +8 -0
- package/src/runtime/routes/work-items-routes.ts +47 -19
- package/src/runtime/routes/workspace-commit-routes.ts +5 -0
- package/src/runtime/routes/workspace-routes.test.ts +42 -0
- package/src/runtime/routes/workspace-routes.ts +120 -9
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +4 -4
- package/src/runtime/services/analyze-conversation.ts +3 -6
- package/src/runtime/services/conversation-serializer.ts +24 -2
- package/src/runtime/slack-dm-text-delivery.ts +177 -0
- package/src/runtime/sync/resource-sync-events.ts +17 -3
- package/src/runtime/sync/sync-publisher.ts +2 -2
- package/src/runtime/tool-grant-request-helper.ts +1 -0
- package/src/schedule/run-script.ts +28 -3
- package/src/schedule/schedule-store.ts +16 -1
- package/src/schedule/scheduler.ts +114 -16
- package/src/security/__tests__/provider-key-env-fallback.test.ts +3 -3
- package/src/security/encrypted-store.ts +7 -16
- package/src/security/store-path-override.ts +61 -0
- package/src/signals/user-message.ts +10 -16
- package/src/skills/catalog-files.ts +4 -1
- package/src/skills/clawhub-files.ts +2 -0
- package/src/skills/skillssh-files.ts +2 -0
- package/src/skills/validate-input.ts +177 -0
- package/src/subagent/manager.ts +16 -19
- package/src/subagent/types.ts +6 -0
- package/src/tasks/tool-sanitizer.ts +2 -2
- package/src/telemetry/types.ts +26 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +138 -1
- package/src/telemetry/usage-telemetry-reporter.ts +31 -0
- package/src/tools/acp/spawn.test.ts +88 -38
- package/src/tools/apps/definitions.ts +42 -24
- package/src/tools/ask-question/ask-question-tool.test.ts +120 -105
- package/src/tools/ask-question/ask-question-tool.ts +85 -90
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +2 -8
- package/src/tools/computer-use/definitions.ts +295 -289
- package/src/tools/credential-execution/make-authenticated-request.ts +56 -51
- package/src/tools/credential-execution/manage-secure-command-tool.ts +2 -2
- package/src/tools/credential-execution/run-authenticated-command.ts +82 -77
- package/src/tools/credentials/vault.ts +112 -111
- package/src/tools/document/document-tool.ts +131 -8
- package/src/tools/execution-target.ts +3 -6
- package/src/tools/execution-timeout.ts +3 -4
- package/src/tools/executor.ts +18 -55
- package/src/tools/filesystem/edit.ts +45 -42
- package/src/tools/filesystem/list.ts +33 -30
- package/src/tools/filesystem/read.ts +54 -35
- package/src/tools/filesystem/write.ts +34 -31
- package/src/tools/host-filesystem/edit.test.ts +1 -0
- package/src/tools/host-filesystem/edit.ts +44 -42
- package/src/tools/host-filesystem/read.test.ts +1 -0
- package/src/tools/host-filesystem/read.ts +49 -35
- package/src/tools/host-filesystem/transfer.test.ts +31 -6
- package/src/tools/host-filesystem/transfer.ts +121 -108
- package/src/tools/host-filesystem/write.test.ts +1 -0
- package/src/tools/host-filesystem/write.ts +33 -31
- package/src/tools/host-terminal/host-shell.ts +50 -48
- package/src/tools/mcp/mcp-tool-factory.ts +0 -2
- package/src/tools/memory/register.ts +23 -24
- package/src/tools/network/__tests__/managed-search-proxy.test.ts +282 -0
- package/src/tools/network/__tests__/web-search.test.ts +211 -3
- package/src/tools/network/managed-search-proxy.ts +183 -0
- package/src/tools/network/web-fetch.ts +49 -46
- package/src/tools/network/web-search.ts +215 -57
- package/src/tools/policy-context.ts +3 -1
- package/src/tools/registry.ts +184 -118
- package/src/tools/schedule/create.ts +12 -1
- package/src/tools/schedule/update.ts +16 -0
- package/src/tools/shared/filesystem/audio-read.ts +122 -0
- package/src/tools/shared/filesystem/image-read.ts +1 -1
- package/src/tools/skills/execute.ts +34 -31
- package/src/tools/skills/load.ts +29 -23
- package/src/tools/skills/skill-tool-factory.ts +17 -36
- package/src/tools/subagent/notify-parent.ts +35 -32
- package/src/tools/subagent/spawn.ts +3 -0
- package/src/tools/system/avatar-generator.ts +13 -22
- package/src/tools/system/request-permission.ts +30 -27
- package/src/tools/terminal/shell.ts +190 -61
- package/src/tools/tool-approval-handler.ts +10 -4
- package/src/tools/tool-defaults.ts +20 -9
- package/src/tools/tool-manifest.ts +4 -4
- package/src/tools/tool-name-aliases.ts +72 -14
- package/src/tools/types.ts +86 -33
- package/src/tools/ui-surface/definitions.ts +166 -94
- package/src/types/onboarding-context.ts +6 -0
- package/src/usage/attribution.ts +32 -1
- package/src/usage/types.ts +10 -0
- package/src/util/browser.ts +7 -2
- package/src/util/errors.ts +2 -2
- package/src/util/map-limit.ts +27 -0
- package/src/util/platform.ts +15 -12
- package/src/work-items/work-item-runner.ts +7 -2
- package/src/workspace/migrations/028-recover-conversations-from-disk-view.ts +7 -20
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +109 -0
- package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +41 -0
- package/src/workspace/migrations/092-backfill-v3-leaves.ts +169 -0
- package/src/workspace/migrations/093-backfill-leaf-ids.ts +144 -0
- package/src/workspace/migrations/094-seed-avatar-manifest.ts +155 -0
- package/src/workspace/migrations/__tests__/094-seed-avatar-manifest.test.ts +136 -0
- package/src/workspace/migrations/__tests__/backfill-leaf-ids.test.ts +175 -0
- package/src/workspace/migrations/__tests__/backfill-v3-leaves.test.ts +124 -0
- package/src/workspace/migrations/registry.ts +10 -0
- package/src/workspace/provider-commit-message-generator.ts +15 -17
- package/tsconfig.json +4 -1
- package/src/__tests__/history-repair-pipeline.test.ts +0 -396
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +0 -340
- package/src/cli/commands/memory-v3-render.ts +0 -344
- package/src/daemon/message-types/disk-pressure.ts +0 -9
- package/src/email/feature-gate.ts +0 -23
- package/src/memory/v3/__tests__/coactivation-store.test.ts +0 -422
- package/src/memory/v3/__tests__/consolidation-job.test.ts +0 -468
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +0 -324
- package/src/memory/v3/__tests__/edges.test.ts +0 -563
- package/src/memory/v3/__tests__/filter.test.ts +0 -512
- package/src/memory/v3/__tests__/gate.test.ts +0 -574
- package/src/memory/v3/__tests__/index-composition.test.ts +0 -233
- package/src/memory/v3/__tests__/loop.test.ts +0 -530
- package/src/memory/v3/__tests__/retriever.test.ts +0 -226
- package/src/memory/v3/__tests__/scouts.test.ts +0 -440
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +0 -312
- package/src/memory/v3/__tests__/system-prompts.test.ts +0 -154
- package/src/memory/v3/__tests__/traversal.test.ts +0 -469
- package/src/memory/v3/__tests__/tree-index.test.ts +0 -280
- package/src/memory/v3/__tests__/tree-store.test.ts +0 -529
- package/src/memory/v3/__tests__/tree-walk.test.ts +0 -707
- package/src/memory/v3/__tests__/validate.test.ts +0 -245
- package/src/memory/v3/auto-edges.ts +0 -223
- package/src/memory/v3/coactivation-store.ts +0 -124
- package/src/memory/v3/consolidation-job.ts +0 -323
- package/src/memory/v3/edge-learning-job.ts +0 -160
- package/src/memory/v3/edges.ts +0 -249
- package/src/memory/v3/filter.ts +0 -281
- package/src/memory/v3/gate.ts +0 -334
- package/src/memory/v3/index-composition.ts +0 -113
- package/src/memory/v3/llm-capture.ts +0 -46
- package/src/memory/v3/loop.ts +0 -382
- package/src/memory/v3/maintenance.ts +0 -144
- package/src/memory/v3/prompt-context.ts +0 -33
- package/src/memory/v3/prompts/consolidation.ts +0 -458
- package/src/memory/v3/prompts/system-prompts.ts +0 -196
- package/src/memory/v3/retriever.ts +0 -33
- package/src/memory/v3/scouts.ts +0 -420
- package/src/memory/v3/shadow-middleware.ts +0 -305
- package/src/memory/v3/traversal.ts +0 -206
- package/src/memory/v3/tree-index.ts +0 -237
- package/src/memory/v3/tree-store.ts +0 -394
- package/src/memory/v3/tree-walk.ts +0 -351
- package/src/memory/v3/validate.ts +0 -300
- package/src/plugins/defaults/circuit-breaker.ts +0 -141
- package/src/plugins/defaults/compaction.ts +0 -141
- package/src/plugins/defaults/empty-response.ts +0 -124
- package/src/plugins/defaults/history-repair.ts +0 -83
- package/src/plugins/defaults/persistence.ts +0 -127
- package/src/plugins/defaults/title-generate.ts +0 -90
- package/src/plugins/defaults/token-estimate.ts +0 -101
- package/src/plugins/defaults/tool-error.ts +0 -119
- package/src/plugins/defaults/tool-result-truncate.ts +0 -84
package/src/api/README.md
CHANGED
|
@@ -1,5 +1,129 @@
|
|
|
1
1
|
# @vellumai/assistant-api
|
|
2
2
|
|
|
3
|
-
Public API surface for consumers of the assistant
|
|
4
|
-
evals, future external clients
|
|
3
|
+
Public API surface for consumers of the assistant runtime — web client, gateway,
|
|
4
|
+
evals, future external clients. This directory is the **source of truth** for
|
|
5
5
|
the wire contracts the assistant exposes: schemas, types, and pure helpers.
|
|
6
|
+
|
|
7
|
+
Internal assistant code imports the files in this directory via relative paths
|
|
8
|
+
(e.g. `../../api/events/open-url.js`). External consumers import the
|
|
9
|
+
materialized npm-style package `@vellumai/assistant-api`, regenerated into
|
|
10
|
+
`apps/web/node_modules/` by `apps/web/scripts/postinstall.ts`.
|
|
11
|
+
|
|
12
|
+
## Architecture
|
|
13
|
+
|
|
14
|
+
A single discriminated-union schema, `AssistantEventSchema`, covers every event
|
|
15
|
+
type whose wire contract is canonical. The web parser (`event-parser.ts`) tries
|
|
16
|
+
this schema first; events not yet covered fall through to a hand-rolled legacy
|
|
17
|
+
switch. The migration goal is to drain the switch — each event moved here
|
|
18
|
+
shrinks the legacy surface and makes wire-shape drift a compile error.
|
|
19
|
+
|
|
20
|
+
`AssistantEvent` (re-exported alongside the schema) is `z.infer<typeof
|
|
21
|
+
AssistantEventSchema>`. Consumers reference this single type rather than
|
|
22
|
+
re-listing the individual member types: as new events migrate in, they appear
|
|
23
|
+
in `AssistantEvent` automatically.
|
|
24
|
+
|
|
25
|
+
## Migration recipe
|
|
26
|
+
|
|
27
|
+
Each batch follows the same shape. Group cohesive event families (lifecycle,
|
|
28
|
+
streaming, document-comment, ui-surface, etc.) rather than migrating events
|
|
29
|
+
one at a time — the per-batch overhead is the same regardless of count.
|
|
30
|
+
|
|
31
|
+
### 1. Add the canonical schema
|
|
32
|
+
|
|
33
|
+
One file per event under `./events/`. Schemas use Zod's default strip
|
|
34
|
+
mode — unknown fields are silently discarded during parsing so the
|
|
35
|
+
server can add transport-level metadata (e.g. `seq`) without breaking
|
|
36
|
+
client validation.
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// assistant/src/api/events/my-event.ts
|
|
40
|
+
import { z } from "zod";
|
|
41
|
+
|
|
42
|
+
export const MyEventSchema = z.object({
|
|
43
|
+
type: z.literal("my_event"),
|
|
44
|
+
conversationId: z.string(),
|
|
45
|
+
// …
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export type MyEvent = z.infer<typeof MyEventSchema>;
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Add the type/schema re-export pair to `./index.ts`, alphabetically, and append
|
|
52
|
+
the schema to the `AssistantEventSchema` discriminated union. No other changes
|
|
53
|
+
to the canonical package are needed — `AssistantEvent` picks the new member
|
|
54
|
+
up automatically.
|
|
55
|
+
|
|
56
|
+
### 2. Adopt the canonical type in daemon code
|
|
57
|
+
|
|
58
|
+
In `assistant/src/daemon/message-types/<domain>.ts`, delete the local
|
|
59
|
+
`interface MyEvent { … }` declaration and import the canonical `MyEvent`
|
|
60
|
+
type from `../../api/events/my-event.js`. The domain-level
|
|
61
|
+
`_<Domain>ServerMessages` union alias (consumed by `message-protocol.ts`)
|
|
62
|
+
keeps its existing shape — it just references the canonical types now.
|
|
63
|
+
|
|
64
|
+
**Do not add `export type MyEventLocalName = MyEvent` alias bridges in the
|
|
65
|
+
daemon message-types files.** They shadow the canonical name and create a
|
|
66
|
+
second name for the same thing — exactly the drift this directory exists to
|
|
67
|
+
prevent. Reference the canonical `*Event` name directly inside the
|
|
68
|
+
`_<Domain>ServerMessages` aggregator union, and have downstream daemon
|
|
69
|
+
consumers import the canonical type from `../../api/events/<name>.js` at the
|
|
70
|
+
use site. The only thing that should live in `message-types/<domain>.ts` for
|
|
71
|
+
a migrated event is the import and the union membership.
|
|
72
|
+
|
|
73
|
+
### 3. Cut over web consumers
|
|
74
|
+
|
|
75
|
+
`apps/web/src/domains/chat/api/event-types.ts` no longer needs to list the
|
|
76
|
+
migrated event in its `AssistantEvent` union — `APIAssistantEvent` covers it.
|
|
77
|
+
Drop the per-event member, leaving the union to peel off legacy entries one
|
|
78
|
+
at a time as each event migrates.
|
|
79
|
+
|
|
80
|
+
Local handler modules (e.g. `document-comment-events.ts`) keep their handler
|
|
81
|
+
functions but import the wire types directly from `@vellumai/assistant-api`.
|
|
82
|
+
Do **not** re-export the canonical types from intermediate modules — consumers
|
|
83
|
+
import them straight from the canonical package.
|
|
84
|
+
|
|
85
|
+
### 4. Delete the legacy parser cases
|
|
86
|
+
|
|
87
|
+
Remove the matching `case "my_event":` blocks from
|
|
88
|
+
`apps/web/src/domains/chat/api/event-parser.ts`. Any per-event helper
|
|
89
|
+
(`parseFooBase`, etc.) goes with them.
|
|
90
|
+
|
|
91
|
+
### 5. Tests
|
|
92
|
+
|
|
93
|
+
Add parser tests for each migrated event covering:
|
|
94
|
+
|
|
95
|
+
- happy path with all fields
|
|
96
|
+
- minimal required only
|
|
97
|
+
- missing required field → `UnknownEvent`
|
|
98
|
+
- unknown extra field is silently stripped, event still parses
|
|
99
|
+
|
|
100
|
+
For happy-path tests, inline the discriminator literal in both the input and
|
|
101
|
+
the expected object. `const data = { type: "my_event", … }` widens
|
|
102
|
+
`data.type` to `string`, breaking the discriminated-union match when the
|
|
103
|
+
result is compared with `toEqual(data)`.
|
|
104
|
+
|
|
105
|
+
Handler-level tests in the consuming domain modules typically need no change
|
|
106
|
+
— the canonical types are wire-compatible with the previous local interfaces.
|
|
107
|
+
|
|
108
|
+
### 6. Local greenlight gate
|
|
109
|
+
|
|
110
|
+
Run before push, in order:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# In apps/web — regenerate the @vellumai/assistant-api bundle
|
|
114
|
+
bun run scripts/postinstall.ts
|
|
115
|
+
|
|
116
|
+
# Type-check both packages
|
|
117
|
+
( cd assistant && bunx tsc --noEmit )
|
|
118
|
+
( cd apps/web && bunx tsc --noEmit )
|
|
119
|
+
|
|
120
|
+
# Targeted tests
|
|
121
|
+
( cd apps/web && bun test src/domains/chat/api/event-parser.test.ts )
|
|
122
|
+
|
|
123
|
+
# Lint + format the touched files
|
|
124
|
+
bunx eslint <files>
|
|
125
|
+
bunx prettier --write <files>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
`format:check` is a distinct CI gate from `lint`; format the touched files
|
|
129
|
+
before push.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logical call-site identifiers stamped onto every `llm_request_log` row
|
|
3
|
+
* (column `call_site` — migration 264). The inspector branches on this
|
|
4
|
+
* value alone to distinguish real LLM calls (`mainAgent`,
|
|
5
|
+
* `compactionAgent`, …) from synthetic agent-error-message rows.
|
|
6
|
+
*
|
|
7
|
+
* The constants below are the wire contract; both backend (when writing
|
|
8
|
+
* a row) and frontend (when rendering one) must reference the same
|
|
9
|
+
* literal. Add new call sites here as new emit sites appear.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Marks a synthetic assistant error-message row — one the agent loop
|
|
14
|
+
* emitted because something went wrong (budget yield, out of funds, …)
|
|
15
|
+
* with no underlying LLM call. All such events cause the loop to exit,
|
|
16
|
+
* so a single generic bucket plus the existing `agent_loop_exit_reason`
|
|
17
|
+
* column is enough to discriminate which kind of error fired
|
|
18
|
+
* (`budget_yield_unrecovered`, future out-of-funds, etc.).
|
|
19
|
+
*
|
|
20
|
+
* Intentionally *not* a member of the backend's `LLMCallSite` enum:
|
|
21
|
+
* that enum binds config lookup, not the shape of the `call_site`
|
|
22
|
+
* column. Compaction-route filters that match
|
|
23
|
+
* `call_site = 'compactionAgent'` already treat this value as a
|
|
24
|
+
* non-compaction call, which is the desired floor-lookup behavior.
|
|
25
|
+
*/
|
|
26
|
+
export const CALL_SITE_SYNTHETIC_AGENT_ERROR_MESSAGE =
|
|
27
|
+
"syntheticAgentErrorMessage";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default cap (in seconds) on how long a single tool invocation may run
|
|
3
|
+
* before the assistant aborts it with a synthetic error result. This is
|
|
4
|
+
* the canonical default for the `timeouts.toolExecutionTimeoutSec` config
|
|
5
|
+
* field and the fallback used by `executeWithTimeout` when the config
|
|
6
|
+
* value is missing or invalid.
|
|
7
|
+
*
|
|
8
|
+
* Exposed on the API surface so frontend consumers — chiefly
|
|
9
|
+
* `sanitizeDisplayMessages` in the web client — can recognise tool
|
|
10
|
+
* calls whose live tracking outlives any plausible server-side
|
|
11
|
+
* execution and mark them as failed instead of spinning forever. The
|
|
12
|
+
* canonical case is an assistant restart mid-tool: the daemon never
|
|
13
|
+
* delivers the `tool_result` SSE, the client retains
|
|
14
|
+
* `status: "running"`, and the bubble would otherwise stall the UI
|
|
15
|
+
* across the restart boundary.
|
|
16
|
+
*
|
|
17
|
+
* Treat this as the wire contract for the default. Callers that need a
|
|
18
|
+
* different ceiling should still read the deployed config — this
|
|
19
|
+
* constant is only authoritative when the config doesn't override it.
|
|
20
|
+
*/
|
|
21
|
+
export const DEFAULT_TOOL_EXECUTION_TIMEOUT_SEC = 120;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `assistant_activity_state` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server-side assistant activity lifecycle, used by clients to place
|
|
5
|
+
* the thinking indicator. `activityVersion` is monotonically increasing
|
|
6
|
+
* per conversation; clients must ignore events with a version older
|
|
7
|
+
* than their current known version.
|
|
8
|
+
*
|
|
9
|
+
* `phase`, `anchor`, and `reason` are strict enums because the daemon
|
|
10
|
+
* emits a fixed, known set and clients switch on them. `requestId`
|
|
11
|
+
* marks the active user request when available; `statusText` is a
|
|
12
|
+
* human-readable description of what the assistant is doing.
|
|
13
|
+
*
|
|
14
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
15
|
+
* directly from this file; external consumers import via
|
|
16
|
+
* `@vellumai/assistant-api`.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
|
|
21
|
+
export const AssistantActivityPhaseSchema = z.enum([
|
|
22
|
+
"idle",
|
|
23
|
+
"thinking",
|
|
24
|
+
"streaming",
|
|
25
|
+
"tool_running",
|
|
26
|
+
"awaiting_confirmation",
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
export type AssistantActivityPhase = z.infer<
|
|
30
|
+
typeof AssistantActivityPhaseSchema
|
|
31
|
+
>;
|
|
32
|
+
|
|
33
|
+
export const AssistantActivityAnchorSchema = z.enum([
|
|
34
|
+
"assistant_turn",
|
|
35
|
+
"user_turn",
|
|
36
|
+
"global",
|
|
37
|
+
]);
|
|
38
|
+
|
|
39
|
+
export type AssistantActivityAnchor = z.infer<
|
|
40
|
+
typeof AssistantActivityAnchorSchema
|
|
41
|
+
>;
|
|
42
|
+
|
|
43
|
+
export const AssistantActivityReasonSchema = z.enum([
|
|
44
|
+
"message_dequeued",
|
|
45
|
+
"thinking_delta",
|
|
46
|
+
"first_text_delta",
|
|
47
|
+
"tool_use_start",
|
|
48
|
+
"preview_start",
|
|
49
|
+
"tool_result_received",
|
|
50
|
+
"confirmation_requested",
|
|
51
|
+
"confirmation_resolved",
|
|
52
|
+
"context_compacting",
|
|
53
|
+
"message_complete",
|
|
54
|
+
"generation_cancelled",
|
|
55
|
+
"error_terminal",
|
|
56
|
+
]);
|
|
57
|
+
|
|
58
|
+
export type AssistantActivityReason = z.infer<
|
|
59
|
+
typeof AssistantActivityReasonSchema
|
|
60
|
+
>;
|
|
61
|
+
|
|
62
|
+
export const AssistantActivityStateEventSchema = z.object({
|
|
63
|
+
type: z.literal("assistant_activity_state"),
|
|
64
|
+
conversationId: z.string(),
|
|
65
|
+
activityVersion: z.number(),
|
|
66
|
+
phase: AssistantActivityPhaseSchema,
|
|
67
|
+
anchor: AssistantActivityAnchorSchema,
|
|
68
|
+
reason: AssistantActivityReasonSchema,
|
|
69
|
+
requestId: z.string().optional(),
|
|
70
|
+
statusText: z.string().optional(),
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
export type AssistantActivityStateEvent = z.infer<
|
|
74
|
+
typeof AssistantActivityStateEventSchema
|
|
75
|
+
>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Outbound assistant attachment — the wire shape attached to
|
|
3
|
+
* `message_complete` and `generation_handoff` SSE events when the
|
|
4
|
+
* assistant turn produced files (sandbox writes, host transfers, tool
|
|
5
|
+
* blocks that returned binary content).
|
|
6
|
+
*
|
|
7
|
+
* Shape is the daemon's emit-time projection of `UserMessageAttachment`
|
|
8
|
+
* (see `assistant/src/daemon/message-types/shared.ts`): only the fields
|
|
9
|
+
* built in `conversation-attachments.ts::buildEmittedAttachments` plus
|
|
10
|
+
* fields the daemon explicitly emits to clients (`filePath` for
|
|
11
|
+
* recordings, per #9744) make it onto the wire. Daemon-internal fields
|
|
12
|
+
* not intended for clients (`extractedText`) stay on the daemon side
|
|
13
|
+
* and do not appear here.
|
|
14
|
+
*
|
|
15
|
+
* Canonical wire-contract source. Daemon code imports the type directly
|
|
16
|
+
* from this file; external consumers import via `@vellumai/assistant-api`.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
|
|
21
|
+
export const AssistantOutboundAttachmentSchema = z.object({
|
|
22
|
+
/** Storage id assigned by the daemon's attachment store; absent on
|
|
23
|
+
* in-memory drafts not backed by a stored row. */
|
|
24
|
+
id: z.string().optional(),
|
|
25
|
+
filename: z.string(),
|
|
26
|
+
mimeType: z.string(),
|
|
27
|
+
/** Base64-encoded file bytes. May be empty when `fileBacked` is
|
|
28
|
+
* true and the client should hydrate via the /content endpoint. */
|
|
29
|
+
data: z.string(),
|
|
30
|
+
sourceType: z.enum(["sandbox_file", "host_file", "tool_block"]).optional(),
|
|
31
|
+
/** Original file size in bytes. Present when `data` was omitted to
|
|
32
|
+
* keep payloads small. */
|
|
33
|
+
sizeBytes: z.number().optional(),
|
|
34
|
+
/** Base64-encoded JPEG thumbnail. Generated server-side for video
|
|
35
|
+
* attachments. */
|
|
36
|
+
thumbnailData: z.string().optional(),
|
|
37
|
+
/** True when the attachment is stored on disk and clients should
|
|
38
|
+
* hydrate via the /content endpoint instead of relying on `data`. */
|
|
39
|
+
fileBacked: z.boolean().optional(),
|
|
40
|
+
/** Local on-disk path for file-backed attachments. Used by the
|
|
41
|
+
* macOS client to play recordings and render thumbnails directly
|
|
42
|
+
* from the local file (see #9744 — eliminates the HTTP fetch +
|
|
43
|
+
* ffmpeg dep for video). Web clients ignore this field. */
|
|
44
|
+
filePath: z.string().optional(),
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
export type AssistantOutboundAttachment = z.infer<
|
|
48
|
+
typeof AssistantOutboundAttachmentSchema
|
|
49
|
+
>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `assistant_text_delta` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Streaming text chunk emitted by the daemon as the model produces
|
|
5
|
+
* assistant output. Multiple deltas accumulate into a single assistant
|
|
6
|
+
* message; the matching `message_complete` event marks the turn done.
|
|
7
|
+
*
|
|
8
|
+
* `messageId` is the database row id of the assistant message this
|
|
9
|
+
* delta belongs to — stamped from the pre-allocated turn anchor (see
|
|
10
|
+
* `reserveMessage` / `AssistantTurnStartEvent`). Absent on streams
|
|
11
|
+
* produced by older daemons that pre-date the anchor protocol, or on
|
|
12
|
+
* synthetic deltas (canned greetings, slash-command echoes, live-voice
|
|
13
|
+
* transcript injections) that don't bind to a row.
|
|
14
|
+
*
|
|
15
|
+
* Canonical wire-contract source. Daemon code imports the type directly
|
|
16
|
+
* from this file; external consumers import via `@vellumai/assistant-api`.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
|
|
21
|
+
export const AssistantTextDeltaEventSchema = z.object({
|
|
22
|
+
type: z.literal("assistant_text_delta"),
|
|
23
|
+
text: z.string(),
|
|
24
|
+
messageId: z.string().optional(),
|
|
25
|
+
conversationId: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export type AssistantTextDeltaEvent = z.infer<
|
|
29
|
+
typeof AssistantTextDeltaEventSchema
|
|
30
|
+
>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `assistant_turn_start` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Marks the start of an assistant turn — emitted once by the daemon
|
|
5
|
+
* *before* any `assistant_text_delta`, `tool_use_start`, or
|
|
6
|
+
* `assistant_thinking_delta` event for that turn. The `messageId` is the
|
|
7
|
+
* pre-allocated database row id (see `reserveMessage` in
|
|
8
|
+
* `assistant/src/memory/conversation-crud.ts`) that subsequent streaming
|
|
9
|
+
* events stamp on their `messageId` field. Clients use this id to
|
|
10
|
+
* anchor a UI bubble at turn-start instead of waiting for
|
|
11
|
+
* `message_complete`.
|
|
12
|
+
*
|
|
13
|
+
* Types-only addition at introduction — no daemon emit sites yet. The
|
|
14
|
+
* agent loop will adopt pre-allocation in a follow-up.
|
|
15
|
+
*
|
|
16
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
17
|
+
* directly from this file; external consumers import via
|
|
18
|
+
* `@vellumai/assistant-api`.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { z } from "zod";
|
|
22
|
+
|
|
23
|
+
export const AssistantTurnStartEventSchema = z.object({
|
|
24
|
+
type: z.literal("assistant_turn_start"),
|
|
25
|
+
messageId: z.string(),
|
|
26
|
+
conversationId: z.string().optional(),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export type AssistantTurnStartEvent = z.infer<
|
|
30
|
+
typeof AssistantTurnStartEventSchema
|
|
31
|
+
>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `avatar_updated` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Emitted after the avatar image has been regenerated and saved to disk.
|
|
5
|
+
* Clients bust their avatar cache; the `avatarPath` is the absolute path
|
|
6
|
+
* to the new image file, available to clients that read it directly.
|
|
7
|
+
*
|
|
8
|
+
* Global event (no `conversationId`): the avatar is per-user, not
|
|
9
|
+
* per-conversation, and the daemon fans this out across every active
|
|
10
|
+
* client of the user.
|
|
11
|
+
*
|
|
12
|
+
* Canonical wire-contract source. Daemon code imports the type directly
|
|
13
|
+
* from this file; external consumers import via `@vellumai/assistant-api`.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
|
|
18
|
+
export const AvatarUpdatedEventSchema = z.object({
|
|
19
|
+
type: z.literal("avatar_updated"),
|
|
20
|
+
/** Absolute path to the updated avatar image file. */
|
|
21
|
+
avatarPath: z.string(),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export type AvatarUpdatedEvent = z.infer<typeof AvatarUpdatedEventSchema>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `compaction_circuit_closed` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Emitted when the per-conversation auto-compaction circuit breaker
|
|
5
|
+
* transitions from open → closed because a successful compaction reset
|
|
6
|
+
* `ctx.compactionCircuitOpenUntil`. Clients clear the "auto-compaction
|
|
7
|
+
* paused" banner so it dismisses immediately instead of lingering until
|
|
8
|
+
* the original `openUntil` deadline.
|
|
9
|
+
*
|
|
10
|
+
* Only fires on the open → closed transition — successful compactions
|
|
11
|
+
* while the breaker was already closed would be noise.
|
|
12
|
+
*
|
|
13
|
+
* Canonical wire-contract source. Daemon code imports the type directly
|
|
14
|
+
* from this file; external consumers import via `@vellumai/assistant-api`.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
|
|
19
|
+
export const CompactionCircuitClosedEventSchema = z.object({
|
|
20
|
+
type: z.literal("compaction_circuit_closed"),
|
|
21
|
+
conversationId: z.string(),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export type CompactionCircuitClosedEvent = z.infer<
|
|
25
|
+
typeof CompactionCircuitClosedEventSchema
|
|
26
|
+
>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `compaction_circuit_open` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Emitted when the per-conversation auto-compaction circuit breaker trips
|
|
5
|
+
* (3 consecutive failures). The Swift / web client surfaces a banner
|
|
6
|
+
* indicating auto-compaction is paused until `openUntil` (ms epoch).
|
|
7
|
+
*
|
|
8
|
+
* `reason` is narrowed to the only string the daemon emits today
|
|
9
|
+
* (`"3_consecutive_failures"`). Strict by design — any future trip
|
|
10
|
+
* reason must be added here and on the daemon side together.
|
|
11
|
+
*
|
|
12
|
+
* Canonical wire-contract source. Daemon code imports the type directly
|
|
13
|
+
* from this file; external consumers import via `@vellumai/assistant-api`.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
|
|
18
|
+
export const CompactionCircuitOpenEventSchema = z.object({
|
|
19
|
+
type: z.literal("compaction_circuit_open"),
|
|
20
|
+
conversationId: z.string(),
|
|
21
|
+
reason: z.literal("3_consecutive_failures"),
|
|
22
|
+
/** Timestamp (ms since epoch) when the breaker will allow auto-compaction again. */
|
|
23
|
+
openUntil: z.number(),
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export type CompactionCircuitOpenEvent = z.infer<
|
|
27
|
+
typeof CompactionCircuitOpenEventSchema
|
|
28
|
+
>;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `confirmation_request` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client prompt asking the user to approve or deny a tool
|
|
5
|
+
* invocation that fell outside the auto-approve threshold. Emitted by
|
|
6
|
+
* the confirmation prompter / risk classifier when a tool call needs
|
|
7
|
+
* human review.
|
|
8
|
+
*
|
|
9
|
+
* Resolved by a paired `interaction_resolved` event (`kind:
|
|
10
|
+
* "confirmation"`, `state: "approved" | "rejected" | "cancelled" |
|
|
11
|
+
* "superseded"`) once the user decides, the daemon times out, or a
|
|
12
|
+
* newer user message supersedes the pending request.
|
|
13
|
+
*
|
|
14
|
+
* Required fields are what the prompter always supplies:
|
|
15
|
+
* - `toolName`, `input` — what the tool will run with
|
|
16
|
+
* - `riskLevel` — risk-classifier output, used for display only
|
|
17
|
+
* (kept loose `string` rather than enum — risk grades evolve
|
|
18
|
+
* independently of the wire and the client renders them as text)
|
|
19
|
+
* - `allowlistOptions`, `scopeOptions` — radio choices the rule
|
|
20
|
+
* editor offers when the user picks "always allow"
|
|
21
|
+
*
|
|
22
|
+
* `acpToolKind` and `acpOptions` are present only for ACP (Agent
|
|
23
|
+
* Client Protocol) permission requests forwarded from a sub-agent;
|
|
24
|
+
* `acpOptions.kind` is a strict 4-variant enum because the agent
|
|
25
|
+
* protocol mandates exactly those four shapes.
|
|
26
|
+
*
|
|
27
|
+
* `executionTarget` distinguishes sandbox vs host execution — a strict
|
|
28
|
+
* 2-variant enum because the sandbox switch is binary at the daemon
|
|
29
|
+
* level.
|
|
30
|
+
*
|
|
31
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
32
|
+
* directly from this file; external consumers import via
|
|
33
|
+
* `@vellumai/assistant-api`.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { z } from "zod";
|
|
37
|
+
|
|
38
|
+
export const AllowlistOptionSchema = z.object({
|
|
39
|
+
label: z.string(),
|
|
40
|
+
description: z.string(),
|
|
41
|
+
pattern: z.string(),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export type AllowlistOption = z.infer<typeof AllowlistOptionSchema>;
|
|
45
|
+
|
|
46
|
+
export const ScopeOptionSchema = z.object({
|
|
47
|
+
label: z.string(),
|
|
48
|
+
scope: z.string(),
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export type ScopeOption = z.infer<typeof ScopeOptionSchema>;
|
|
52
|
+
|
|
53
|
+
export const DirectoryScopeOptionSchema = z.object({
|
|
54
|
+
label: z.string(),
|
|
55
|
+
scope: z.string(),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
export type DirectoryScopeOption = z.infer<typeof DirectoryScopeOptionSchema>;
|
|
59
|
+
|
|
60
|
+
export const ConfirmationDiffSchema = z.object({
|
|
61
|
+
filePath: z.string(),
|
|
62
|
+
oldContent: z.string(),
|
|
63
|
+
newContent: z.string(),
|
|
64
|
+
isNewFile: z.boolean(),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
export type ConfirmationDiff = z.infer<typeof ConfirmationDiffSchema>;
|
|
68
|
+
|
|
69
|
+
export const ACPOptionKindSchema = z.enum([
|
|
70
|
+
"allow_once",
|
|
71
|
+
"allow_always",
|
|
72
|
+
"reject_once",
|
|
73
|
+
"reject_always",
|
|
74
|
+
]);
|
|
75
|
+
|
|
76
|
+
export type ACPOptionKind = z.infer<typeof ACPOptionKindSchema>;
|
|
77
|
+
|
|
78
|
+
export const ACPOptionSchema = z.object({
|
|
79
|
+
optionId: z.string(),
|
|
80
|
+
name: z.string(),
|
|
81
|
+
kind: ACPOptionKindSchema,
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
export type ACPOption = z.infer<typeof ACPOptionSchema>;
|
|
85
|
+
|
|
86
|
+
export const ConfirmationExecutionTargetSchema = z.enum(["sandbox", "host"]);
|
|
87
|
+
|
|
88
|
+
export type ConfirmationExecutionTarget = z.infer<
|
|
89
|
+
typeof ConfirmationExecutionTargetSchema
|
|
90
|
+
>;
|
|
91
|
+
|
|
92
|
+
export const ConfirmationRequestEventSchema = z.object({
|
|
93
|
+
type: z.literal("confirmation_request"),
|
|
94
|
+
requestId: z.string(),
|
|
95
|
+
toolName: z.string(),
|
|
96
|
+
input: z.record(z.string(), z.unknown()),
|
|
97
|
+
riskLevel: z.string(),
|
|
98
|
+
riskReason: z.string().optional(),
|
|
99
|
+
isContainerized: z.boolean().optional(),
|
|
100
|
+
executionTarget: ConfirmationExecutionTargetSchema.optional(),
|
|
101
|
+
allowlistOptions: z.array(AllowlistOptionSchema),
|
|
102
|
+
scopeOptions: z.array(ScopeOptionSchema),
|
|
103
|
+
directoryScopeOptions: z.array(DirectoryScopeOptionSchema).optional(),
|
|
104
|
+
diff: ConfirmationDiffSchema.optional(),
|
|
105
|
+
conversationId: z.string().optional(),
|
|
106
|
+
persistentDecisionsAllowed: z.boolean().optional(),
|
|
107
|
+
toolUseId: z.string().optional(),
|
|
108
|
+
acpToolKind: z.string().optional(),
|
|
109
|
+
acpOptions: z.array(ACPOptionSchema).optional(),
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
export type ConfirmationRequestEvent = z.infer<
|
|
113
|
+
typeof ConfirmationRequestEventSchema
|
|
114
|
+
>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `contact_request` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client prompt asking the user to enter a contact channel
|
|
5
|
+
* address (phone, email, etc.). Emitted by the `contacts/prompt` IPC
|
|
6
|
+
* route while a `pendingContactPrompts` entry awaits a reply.
|
|
7
|
+
*
|
|
8
|
+
* Resolved by a paired `interaction_resolved` event (`kind:
|
|
9
|
+
* "contact"`, `state: "answered" | "cancelled"`) once the user
|
|
10
|
+
* responds or the timeout fires.
|
|
11
|
+
*
|
|
12
|
+
* `channel` and `role` are advisory hints, not enforced enums — the
|
|
13
|
+
* client may render any input it likes and post back a structured
|
|
14
|
+
* contact payload.
|
|
15
|
+
*
|
|
16
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
17
|
+
* directly from this file; external consumers import via
|
|
18
|
+
* `@vellumai/assistant-api`.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { z } from "zod";
|
|
22
|
+
|
|
23
|
+
export const ContactRequestEventSchema = z.object({
|
|
24
|
+
type: z.literal("contact_request"),
|
|
25
|
+
requestId: z.string(),
|
|
26
|
+
channel: z.string().optional(),
|
|
27
|
+
placeholder: z.string().optional(),
|
|
28
|
+
label: z.string().optional(),
|
|
29
|
+
description: z.string().optional(),
|
|
30
|
+
role: z.string().optional(),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export type ContactRequestEvent = z.infer<typeof ContactRequestEventSchema>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `conversation_error` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Conversation-scoped error broadcast to every client subscribed to
|
|
5
|
+
* the stream. Unlike the turn-terminal `error` event, this carries a
|
|
6
|
+
* stable `code` enum and a `retryable` flag so the chat banner can
|
|
7
|
+
* offer source-aware recovery (e.g. naming the provider connection or
|
|
8
|
+
* profile that needs fixing).
|
|
9
|
+
*
|
|
10
|
+
* `conversationId` is required and carried on the event itself — the
|
|
11
|
+
* broadcast reaches all subscribers, so without it a breaker trip in
|
|
12
|
+
* one conversation would paint the error banner on every open chat.
|
|
13
|
+
*
|
|
14
|
+
* Canonical wire-contract source. Daemon code imports the type and the
|
|
15
|
+
* `ConversationErrorCode` enum directly from this file; external
|
|
16
|
+
* consumers import via `@vellumai/assistant-api`.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Stable machine-readable classification for conversation-scoped
|
|
23
|
+
* errors. Drives client recovery UI (retry affordances, billing
|
|
24
|
+
* banners, connection/profile callouts). `UNKNOWN` is the catch-all
|
|
25
|
+
* for unclassified failures.
|
|
26
|
+
*/
|
|
27
|
+
export const ConversationErrorCodeSchema = z.enum([
|
|
28
|
+
"PROVIDER_NETWORK",
|
|
29
|
+
"PROVIDER_RATE_LIMIT",
|
|
30
|
+
"MANAGED_USAGE_LIMIT",
|
|
31
|
+
"PROVIDER_OVERLOADED",
|
|
32
|
+
"PROVIDER_API",
|
|
33
|
+
"IMAGE_TOO_LARGE",
|
|
34
|
+
"PROVIDER_BILLING",
|
|
35
|
+
"PROVIDER_ORDERING",
|
|
36
|
+
"PROVIDER_WEB_SEARCH",
|
|
37
|
+
"PROVIDER_NOT_CONFIGURED",
|
|
38
|
+
"PROVIDER_INVALID_KEY",
|
|
39
|
+
"MANAGED_KEY_INVALID",
|
|
40
|
+
"CONTEXT_TOO_LARGE",
|
|
41
|
+
"BUDGET_YIELD_UNRECOVERED",
|
|
42
|
+
"MAX_TOKENS_REACHED",
|
|
43
|
+
"CONVERSATION_ABORTED",
|
|
44
|
+
"CONVERSATION_PROCESSING_FAILED",
|
|
45
|
+
"DISK_SPACE_CRITICAL",
|
|
46
|
+
"REGENERATE_FAILED",
|
|
47
|
+
"UNKNOWN",
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
export type ConversationErrorCode = z.infer<typeof ConversationErrorCodeSchema>;
|
|
51
|
+
|
|
52
|
+
export const ConversationErrorEventSchema = z.object({
|
|
53
|
+
type: z.literal("conversation_error"),
|
|
54
|
+
conversationId: z.string(),
|
|
55
|
+
code: ConversationErrorCodeSchema,
|
|
56
|
+
userMessage: z.string(),
|
|
57
|
+
retryable: z.boolean(),
|
|
58
|
+
debugDetails: z.string().optional(),
|
|
59
|
+
errorCategory: z.string().optional(),
|
|
60
|
+
/**
|
|
61
|
+
* Name of the `provider_connections` row in play when the error
|
|
62
|
+
* occurred. Lets the chat banner point users at the connection to
|
|
63
|
+
* fix (e.g. an invalid API key). Absent when the error fires before
|
|
64
|
+
* a connection is resolved.
|
|
65
|
+
*/
|
|
66
|
+
connectionName: z.string().optional(),
|
|
67
|
+
/**
|
|
68
|
+
* Name of the resolved profile (active or per-call override) in
|
|
69
|
+
* play when the error occurred. Absent when the error fires before
|
|
70
|
+
* a profile is resolved.
|
|
71
|
+
*/
|
|
72
|
+
profileName: z.string().optional(),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export type ConversationErrorEvent = z.infer<
|
|
76
|
+
typeof ConversationErrorEventSchema
|
|
77
|
+
>;
|