@vellumai/assistant 0.8.6 → 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 +4 -4
- package/Dockerfile +1 -0
- package/bun.lock +11 -2
- package/docker-entrypoint.sh +8 -6
- package/docs/plugins.md +63 -28
- 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 +3 -4
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +6 -2
- package/openapi.yaml +3735 -353
- package/package.json +7 -3
- package/scripts/generate-openapi.ts +20 -13
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +42 -80
- package/src/__tests__/agent-loop-exit-reason.test.ts +240 -39
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +141 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +19 -32
- 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 +4 -2
- package/src/__tests__/agent-wake-override-profile.test.ts +22 -40
- 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 +4 -11
- package/src/__tests__/approval-routes-http.test.ts +4 -2
- package/src/__tests__/assistant-event.test.ts +15 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +2 -2
- 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__/btw-routes.test.ts +7 -12
- 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 +48 -20
- package/src/__tests__/channel-approvals.test.ts +3 -1
- 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 +2 -7
- package/src/__tests__/channel-retry-sweep.test.ts +71 -79
- 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 +5 -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 +1 -79
- package/src/__tests__/compactor-image-manifest-trust.test.ts +112 -0
- package/src/__tests__/computer-use-tools.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +28 -0
- package/src/__tests__/context-search-agent-runner.test.ts +6 -3
- package/src/__tests__/context-token-estimator.test.ts +34 -0
- package/src/__tests__/context-window-manager-compact-retry.test.ts +291 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +14 -7
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +3 -2
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +12 -27
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +430 -90
- package/src/__tests__/conversation-agent-loop.test.ts +581 -62
- package/src/__tests__/conversation-analysis-routes.test.ts +1 -3
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-clear-safety.test.ts +20 -10
- package/src/__tests__/conversation-confirmation-signals.test.ts +15 -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-fork-crud.test.ts +86 -172
- package/src/__tests__/conversation-fork-route.test.ts +16 -14
- package/src/__tests__/conversation-init.benchmark.test.ts +6 -6
- package/src/__tests__/conversation-lifecycle.test.ts +3 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +3 -2
- package/src/__tests__/conversation-load-history-stripped.test.ts +1 -1
- package/src/__tests__/conversation-message-sync-tags.test.ts +3 -4
- package/src/__tests__/conversation-pairing.test.ts +34 -4
- package/src/__tests__/conversation-pre-run-repair.test.ts +1 -1
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +4 -0
- package/src/__tests__/conversation-process-callsite.test.ts +27 -30
- package/src/__tests__/conversation-provider-retry-repair.test.ts +53 -44
- package/src/__tests__/conversation-queue.test.ts +270 -164
- package/src/__tests__/conversation-routes-disk-view.test.ts +3 -2
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +2 -2
- package/src/__tests__/conversation-routes-slash-commands.test.ts +2 -2
- package/src/__tests__/conversation-runtime-assembly.test.ts +20 -22
- package/src/__tests__/conversation-runtime-workspace.test.ts +19 -1
- package/src/__tests__/conversation-slash-queue.test.ts +37 -31
- package/src/__tests__/conversation-slash-unknown.test.ts +13 -15
- package/src/__tests__/conversation-speed-override.test.ts +8 -22
- package/src/__tests__/conversation-stream-state.test.ts +484 -0
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +6 -15
- package/src/__tests__/conversation-surfaces-app-control.test.ts +32 -4
- package/src/__tests__/conversation-surfaces-state-update.test.ts +5 -2
- package/src/__tests__/conversation-surfaces-table-action.test.ts +6 -15
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +23 -11
- package/src/__tests__/conversation-unread-route.test.ts +14 -2
- package/src/__tests__/conversation-usage.test.ts +0 -2
- package/src/__tests__/conversation-wipe.test.ts +1 -1
- package/src/__tests__/conversation-workspace-cache-state.test.ts +3 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +48 -22
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +27 -7
- package/src/__tests__/credential-execution-tools.test.ts +1 -2
- package/src/__tests__/credential-security-invariants.test.ts +0 -1
- package/src/__tests__/cross-provider-web-search.test.ts +6 -2
- package/src/__tests__/cu-unified-flow.test.ts +26 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +11 -0
- package/src/__tests__/disk-pressure-guard.test.ts +66 -0
- package/src/__tests__/disk-pressure-routes.test.ts +9 -2
- package/src/__tests__/dm-persistence.test.ts +7 -2
- package/src/__tests__/dynamic-page-surface.test.ts +68 -0
- package/src/__tests__/edit-propagation.test.ts +1 -2
- package/src/__tests__/empty-response-pipeline.test.ts +127 -5
- package/src/__tests__/filing-service.test.ts +2 -2
- package/src/__tests__/first-greeting.test.ts +55 -14
- package/src/__tests__/gemini-inline-media.test.ts +78 -0
- package/src/__tests__/gemini-provider.test.ts +351 -28
- package/src/__tests__/guardian-routing-state.test.ts +60 -71
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +9 -7
- package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
- package/src/__tests__/heartbeat-service.test.ts +2 -1
- 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-cu-proxy.test.ts +2 -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-write-tool.test.ts +9 -3
- package/src/__tests__/host-proxy-preactivation.test.ts +53 -14
- package/src/__tests__/host-shell-tool.test.ts +9 -4
- package/src/__tests__/http-user-message-parity.test.ts +2 -2
- package/src/__tests__/identity-intro-cache.test.ts +35 -14
- package/src/__tests__/inbound-slack-persistence.test.ts +7 -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 +1 -1
- 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__/list-messages-attachments.test.ts +7 -8
- package/src/__tests__/list-messages-hidden-metadata.test.ts +17 -15
- 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-request-log-turn-query.test.ts +42 -86
- package/src/__tests__/llm-resolver.test.ts +23 -47
- 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__/mcp-auth-routes.test.ts +15 -10
- 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 +8 -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-preflight-http.test.ts +7 -7
- package/src/__tests__/migration-validate-http.test.ts +3 -3
- package/src/__tests__/native-web-search.test.ts +14 -20
- package/src/__tests__/notification-decision-identity.test.ts +9 -18
- package/src/__tests__/notification-decision-recipient-context.test.ts +3 -6
- package/src/__tests__/oauth-commands-routes.test.ts +1 -1
- package/src/__tests__/onboarding-template-contract.test.ts +10 -0
- package/src/__tests__/openai-provider.test.ts +66 -70
- package/src/__tests__/openai-responses-provider.test.ts +21 -77
- package/src/__tests__/outbound-slack-persistence.test.ts +2 -1
- 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 +15 -26
- package/src/__tests__/persistence-secret-redaction.test.ts +2 -1
- package/src/__tests__/pipeline-runner.test.ts +2 -3
- package/src/__tests__/plugin-bootstrap.test.ts +51 -25
- 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 +10 -26
- 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 +17 -16
- package/src/__tests__/process-message-display-content.test.ts +30 -42
- 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 +3 -8
- 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__/relay-server.test.ts +20 -13
- 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-events-sse-reconnect.test.ts +353 -0
- package/src/__tests__/schedule-routes.test.ts +80 -10
- package/src/__tests__/schedule-store.test.ts +67 -0
- package/src/__tests__/schedule-tools.test.ts +125 -0
- package/src/__tests__/secret-ingress-http.test.ts +2 -2
- 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__/send-endpoint-busy.test.ts +2 -1
- package/src/__tests__/shell-observability.test.ts +249 -0
- package/src/__tests__/skill-feature-flags-integration.test.ts +11 -11
- package/src/__tests__/skill-feature-flags.test.ts +6 -6
- package/src/__tests__/skill-load-feature-flag.test.ts +10 -10
- package/src/__tests__/skills-files-catalog-fallback.test.ts +10 -0
- package/src/__tests__/skillssh-files.test.ts +1 -0
- 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 +2 -2
- package/src/__tests__/suggestion-routes.test.ts +3 -3
- package/src/__tests__/sync-message-contract.test.ts +19 -16
- package/src/__tests__/system-prompt.test.ts +54 -0
- package/src/__tests__/terminal-tools.test.ts +3 -24
- 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-preview-lifecycle.test.ts +13 -11
- 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__/voice-scoped-grant-consumer.test.ts +8 -6
- package/src/__tests__/voice-session-bridge.test.ts +13 -7
- package/src/acp/__tests__/prepare-agent-env.test.ts +143 -31
- package/src/acp/prepare-agent-env.ts +52 -11
- package/src/agent/compaction-circuit.ts +140 -0
- package/src/agent/loop.ts +409 -85
- package/src/api/README.md +19 -17
- 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 +25 -27
- package/src/api/events/assistant-text-delta.ts +6 -8
- package/src/api/events/assistant-turn-start.ts +5 -7
- 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 +24 -28
- package/src/api/events/document-comment-deleted.ts +6 -8
- package/src/api/events/document-comment-reopened.ts +6 -8
- package/src/api/events/document-comment-resolved.ts +8 -10
- 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 +4 -6
- package/src/api/events/generation-handoff.ts +13 -15
- 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 +10 -12
- 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 +6 -8
- package/src/api/events/question-request.ts +67 -0
- package/src/api/events/relationship-state-updated.ts +4 -6
- 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 +8 -10
- 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 +354 -0
- 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 +2 -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/next-wake.test.ts +31 -1
- package/src/background-wake/next-wake.ts +4 -1
- package/src/calls/call-conversation-messages.ts +6 -4
- package/src/calls/guardian-action-sweep.ts +6 -4
- package/src/calls/relay-server.ts +12 -8
- package/src/calls/voice-session-bridge.ts +13 -27
- package/src/cli/commands/__tests__/memory-v3.test.ts +245 -0
- package/src/cli/commands/avatar.ts +17 -11
- 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 +159 -445
- package/src/cli/lib/cli-colors.ts +24 -6
- package/src/cli/program.ts +4 -5
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/assistant-feature-flags.ts +2 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -3
- 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 +1 -1
- package/src/config/bundled-skills/schedule/TOOLS.json +8 -0
- package/src/config/call-site-defaults.ts +2 -7
- package/src/config/feature-flag-registry.json +25 -9
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -226
- package/src/config/schemas/call-site-catalog.ts +8 -15
- package/src/config/schemas/llm.ts +2 -3
- package/src/config/schemas/memory-lifecycle.ts +24 -0
- package/src/config/schemas/memory-v2.ts +0 -253
- package/src/config/schemas/memory-v3.ts +39 -0
- package/src/config/schemas/memory.ts +6 -1
- package/src/config/schemas/timeouts.ts +3 -1
- package/src/context/compactor.ts +54 -31
- package/src/context/token-estimator.ts +19 -0
- package/src/context/tool-result-truncation.ts +1 -43
- package/src/context/window-manager.ts +138 -20
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +2 -2
- package/src/daemon/__tests__/web-search-status-text.test.ts +10 -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 +225 -88
- package/src/daemon/conversation-agent-loop.ts +284 -584
- package/src/daemon/conversation-error.ts +7 -7
- 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 +1 -3
- package/src/daemon/conversation-notifiers.ts +7 -5
- package/src/daemon/conversation-process.ts +100 -79
- package/src/daemon/conversation-runtime-assembly.ts +47 -21
- package/src/daemon/conversation-store.ts +6 -5
- package/src/daemon/conversation-surfaces.ts +55 -69
- package/src/daemon/conversation-tool-setup.ts +3 -0
- package/src/daemon/conversation.ts +91 -126
- package/src/daemon/daemon-skill-host.ts +2 -6
- package/src/daemon/disk-pressure-guard.ts +35 -29
- package/src/daemon/external-plugins-bootstrap.ts +46 -24
- package/src/daemon/first-greeting.ts +26 -4
- package/src/daemon/guardian-action-generators.ts +2 -2
- package/src/daemon/handlers/conversations.ts +6 -22
- package/src/daemon/handlers/shared.ts +4 -0
- 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 +28 -55
- 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 +13 -111
- package/src/daemon/message-types/documents.ts +3 -9
- package/src/daemon/message-types/home.ts +4 -17
- package/src/daemon/message-types/integrations.ts +2 -6
- package/src/daemon/message-types/messages.ts +28 -343
- 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/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 +49 -46
- package/src/daemon/server.ts +12 -0
- package/src/daemon/tool-side-effects.ts +10 -7
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +11 -1
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +3 -1
- package/src/heartbeat/heartbeat-run-store.ts +31 -0
- package/src/heartbeat/heartbeat-service.ts +16 -0
- package/src/home/feature-gate.ts +22 -0
- package/src/home/feed-types.ts +36 -221
- package/src/ipc/__tests__/email-ipc.test.ts +0 -9
- 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 +18 -9
- package/src/ipc/skill-routes/__tests__/providers.test.ts +10 -10
- package/src/ipc/skill-routes/__tests__/registries.test.ts +28 -18
- package/src/ipc/skill-routes/memory.ts +26 -13
- package/src/ipc/skill-routes/providers.ts +5 -6
- package/src/ipc/skill-routes/registries.ts +13 -61
- 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-job-classes.test.ts +5 -4
- package/src/memory/__tests__/memory-retrospective-job.test.ts +10 -6
- 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-crud.ts +39 -8
- package/src/memory/conversation-queries.ts +78 -22
- package/src/memory/db-init.ts +8 -0
- package/src/memory/db-maintenance.ts +18 -2
- 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.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/summarization.ts +1 -2
- package/src/memory/jobs-store.ts +3 -1
- package/src/memory/jobs-worker.ts +51 -39
- package/src/memory/llm-request-log-source-clickhouse.ts +5 -31
- package/src/memory/llm-request-log-source-local.ts +0 -11
- package/src/memory/llm-request-log-source.ts +9 -25
- package/src/memory/llm-request-log-store.ts +0 -41
- 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 +1 -83
- 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 +4 -0
- package/src/memory/schema/infrastructure.ts +11 -0
- package/src/memory/v2/__tests__/consolidation-job.test.ts +124 -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 +6 -5
- package/src/memory/v2/backfill-jobs.ts +6 -0
- package/src/memory/v2/consolidation-job.ts +89 -9
- 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/conversation-pairing.ts +8 -6
- package/src/notifications/decision-engine.ts +10 -13
- package/src/notifications/preference-extractor.ts +11 -14
- 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/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} +14 -38
- 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 +51 -90
- 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 +20 -8
- package/src/proactive-artifact/job.ts +3 -1
- package/src/prompts/sections.ts +20 -7
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +2 -2
- package/src/prompts/templates/BOOTSTRAP.md +5 -1
- package/src/prompts/templates/system-sections.ts +6 -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 +1 -9
- package/src/providers/gemini/client.ts +152 -34
- package/src/providers/gemini/inline-media.ts +74 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +0 -2
- package/src/providers/openai/chat-completions-provider.ts +1 -4
- package/src/providers/openai/responses-provider.ts +1 -4
- package/src/providers/openrouter/client.ts +1 -6
- package/src/providers/provider-send-message.ts +6 -6
- package/src/providers/ratelimit.ts +1 -9
- package/src/providers/retry.ts +0 -5
- package/src/providers/types.ts +11 -2
- package/src/providers/usage-tracking.ts +1 -9
- package/src/runtime/__tests__/agent-wake.test.ts +131 -26
- package/src/runtime/__tests__/background-job-runner.test.ts +1 -3
- 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 -1079
- 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 +2 -5
- package/src/runtime/channel-retry-sweep.ts +12 -16
- 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/pending-interactions.ts +2 -2
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +565 -0
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +4 -4
- package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +62 -32
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +237 -0
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -22
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +7 -2
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +6 -6
- 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__/tts-routes.test.ts +3 -3
- 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 +97 -24
- 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 +13 -3
- 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 +5 -1
- 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 +5 -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 +54 -25
- package/src/runtime/routes/conversation-list-routes.ts +81 -12
- package/src/runtime/routes/conversation-management-routes.ts +57 -14
- package/src/runtime/routes/conversation-query-routes.ts +88 -41
- package/src/runtime/routes/conversation-routes.ts +74 -19
- package/src/runtime/routes/conversation-starter-routes.ts +22 -13
- package/src/runtime/routes/conversations-import-routes.ts +6 -1
- 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 +21 -10
- 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 +21 -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 +23 -19
- 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 +17 -6
- package/src/runtime/routes/identity-routes.ts +12 -2
- 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 +0 -12
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +15 -19
- package/src/runtime/routes/inference-profile-session-routes.ts +13 -3
- package/src/runtime/routes/inference-provider-connection-routes.ts +21 -5
- 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 +3 -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/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 +273 -407
- package/src/runtime/routes/migration-rollback-routes.ts +5 -1
- package/src/runtime/routes/migration-routes.ts +29 -0
- package/src/runtime/routes/notification-routes.ts +17 -1
- package/src/runtime/routes/oauth-apps.ts +33 -11
- package/src/runtime/routes/oauth-commands-routes.ts +37 -14
- 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 +9 -0
- package/src/runtime/routes/surface-content-routes.ts +10 -2
- 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 +5 -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 +2 -4
- package/src/runtime/services/analyze-conversation.ts +3 -6
- package/src/runtime/services/conversation-serializer.ts +24 -2
- package/src/runtime/sync/resource-sync-events.ts +16 -2
- package/src/runtime/sync/sync-publisher.ts +2 -2
- package/src/schedule/run-script.ts +28 -3
- package/src/schedule/schedule-store.ts +8 -0
- package/src/schedule/scheduler.ts +3 -1
- package/src/signals/user-message.ts +5 -8
- 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/subagent/manager.ts +3 -6
- 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 +8 -4
- 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/computer-use/definitions.ts +28 -24
- 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/execution-target.ts +1 -1
- package/src/tools/execution-timeout.ts +3 -4
- 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.ts +44 -42
- package/src/tools/host-filesystem/read.ts +49 -35
- package/src/tools/host-filesystem/transfer.ts +121 -108
- package/src/tools/host-filesystem/write.ts +33 -31
- package/src/tools/host-terminal/host-shell.ts +50 -48
- package/src/tools/memory/register.ts +23 -24
- package/src/tools/network/web-fetch.ts +49 -46
- package/src/tools/network/web-search.ts +16 -13
- package/src/tools/registry.ts +39 -16
- package/src/tools/schedule/create.ts +11 -0
- 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/subagent/notify-parent.ts +35 -32
- 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-defaults.ts +20 -9
- package/src/tools/tool-manifest.ts +4 -4
- package/src/tools/types.ts +74 -23
- package/src/tools/ui-surface/definitions.ts +69 -9
- package/src/usage/types.ts +10 -0
- 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/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 +6 -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 -491
- 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 -466
- package/src/memory/v3/__tests__/coretrieval-seed.test.ts +0 -270
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +0 -324
- package/src/memory/v3/__tests__/edges.test.ts +0 -706
- package/src/memory/v3/__tests__/filter.test.ts +0 -560
- package/src/memory/v3/__tests__/gate.test.ts +0 -637
- package/src/memory/v3/__tests__/index-composition.test.ts +0 -291
- package/src/memory/v3/__tests__/loop.test.ts +0 -775
- package/src/memory/v3/__tests__/retriever.test.ts +0 -226
- package/src/memory/v3/__tests__/scouts.test.ts +0 -489
- package/src/memory/v3/__tests__/shadow-diff.test.ts +0 -225
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +0 -398
- package/src/memory/v3/__tests__/system-prompts.test.ts +0 -154
- package/src/memory/v3/__tests__/traversal.test.ts +0 -508
- 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 -784
- package/src/memory/v3/__tests__/validate.test.ts +0 -277
- 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/coretrieval-seed.ts +0 -240
- package/src/memory/v3/edge-learning-job.ts +0 -160
- package/src/memory/v3/edges.ts +0 -286
- package/src/memory/v3/filter.ts +0 -286
- package/src/memory/v3/gate.ts +0 -349
- package/src/memory/v3/index-composition.ts +0 -126
- package/src/memory/v3/llm-capture.ts +0 -46
- package/src/memory/v3/loop.ts +0 -430
- 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 -431
- package/src/memory/v3/shadow-diff.ts +0 -287
- package/src/memory/v3/shadow-middleware.ts +0 -347
- package/src/memory/v3/traversal.ts +0 -211
- 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 -356
- package/src/memory/v3/validate.ts +0 -323
- 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 -146
- 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/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +0 -35
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `question_request` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client prompt asking the user one or a small batch (≤5) of
|
|
5
|
+
* clarifying questions during a turn. Emitted by the question
|
|
6
|
+
* prompter when the LLM calls `ask_question` (or its batched
|
|
7
|
+
* equivalent).
|
|
8
|
+
*
|
|
9
|
+
* Resolved by a paired `interaction_resolved` event (`kind:
|
|
10
|
+
* "question"`, `state: "answered" | "cancelled" | "superseded"`) once
|
|
11
|
+
* the user submits answers, the daemon times out, or a newer user
|
|
12
|
+
* message supersedes the pending request.
|
|
13
|
+
*
|
|
14
|
+
* Wire-compat:
|
|
15
|
+
*
|
|
16
|
+
* - `questions[]` is the canonical batched shape new clients should
|
|
17
|
+
* consume. The whole batch is one card lifecycle on the client:
|
|
18
|
+
* one render, one state machine, one response submission. `id` on
|
|
19
|
+
* each entry is daemon-assigned (`q1`, `q2`, …) so the client has
|
|
20
|
+
* a stable handle to post the user's answer against.
|
|
21
|
+
*
|
|
22
|
+
* - The flat `question` / `description` / `options` /
|
|
23
|
+
* `freeTextPlaceholder` fields mirror `questions[0]` for older
|
|
24
|
+
* clients that key off the flat shape. Daemon callers that don't
|
|
25
|
+
* supply a batch get a one-element `questions` array synthesized
|
|
26
|
+
* from the flat fields, so both shapes are populated on every
|
|
27
|
+
* broadcast. Once all clients consume `questions[]`, the flat
|
|
28
|
+
* fields can be dropped (separate cleanup).
|
|
29
|
+
*
|
|
30
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
31
|
+
* directly from this file; external consumers import via
|
|
32
|
+
* `@vellumai/assistant-api`.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
import { z } from "zod";
|
|
36
|
+
|
|
37
|
+
export const QuestionOptionSchema = z.object({
|
|
38
|
+
id: z.string(),
|
|
39
|
+
label: z.string(),
|
|
40
|
+
description: z.string().optional(),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export type QuestionOption = z.infer<typeof QuestionOptionSchema>;
|
|
44
|
+
|
|
45
|
+
export const QuestionEntrySchema = z.object({
|
|
46
|
+
id: z.string(),
|
|
47
|
+
question: z.string(),
|
|
48
|
+
description: z.string().optional(),
|
|
49
|
+
options: z.array(QuestionOptionSchema),
|
|
50
|
+
freeTextPlaceholder: z.string().optional(),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export type QuestionEntry = z.infer<typeof QuestionEntrySchema>;
|
|
54
|
+
|
|
55
|
+
export const QuestionRequestEventSchema = z.object({
|
|
56
|
+
type: z.literal("question_request"),
|
|
57
|
+
requestId: z.string(),
|
|
58
|
+
questions: z.array(QuestionEntrySchema),
|
|
59
|
+
question: z.string(),
|
|
60
|
+
description: z.string().optional(),
|
|
61
|
+
options: z.array(QuestionOptionSchema),
|
|
62
|
+
freeTextPlaceholder: z.string().optional(),
|
|
63
|
+
conversationId: z.string().optional(),
|
|
64
|
+
toolUseId: z.string().optional(),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
export type QuestionRequestEvent = z.infer<typeof QuestionRequestEventSchema>;
|
|
@@ -13,12 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
import { z } from "zod";
|
|
15
15
|
|
|
16
|
-
export const RelationshipStateUpdatedEventSchema = z
|
|
17
|
-
.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
})
|
|
21
|
-
.strict();
|
|
16
|
+
export const RelationshipStateUpdatedEventSchema = z.object({
|
|
17
|
+
type: z.literal("relationship_state_updated"),
|
|
18
|
+
updatedAt: z.string(),
|
|
19
|
+
});
|
|
22
20
|
|
|
23
21
|
export type RelationshipStateUpdatedEvent = z.infer<
|
|
24
22
|
typeof RelationshipStateUpdatedEventSchema
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `secret_request` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client prompt asking the user to supply a credential value
|
|
5
|
+
* (API key, password, etc.). Emitted by the credential prompter when
|
|
6
|
+
* a tool call needs a missing secret and the daemon delegates
|
|
7
|
+
* collection to the active client.
|
|
8
|
+
*
|
|
9
|
+
* Resolved by a paired `interaction_resolved` event (`kind: "secret"`,
|
|
10
|
+
* `state: "answered" | "cancelled"`) once the client posts the secret
|
|
11
|
+
* back via the credential-store route or cancels.
|
|
12
|
+
*
|
|
13
|
+
* `service`, `field`, and `label` are required because the prompter
|
|
14
|
+
* always supplies them — they identify which credential the daemon is
|
|
15
|
+
* asking for and how to label the input. Optional fields are scope
|
|
16
|
+
* hints (`allowedTools`, `allowedDomains`), display affordances
|
|
17
|
+
* (`description`, `placeholder`), and the `allowOneTimeSend` override
|
|
18
|
+
* used by clients that support a "send without saving" path.
|
|
19
|
+
*
|
|
20
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
21
|
+
* directly from this file; external consumers import via
|
|
22
|
+
* `@vellumai/assistant-api`.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { z } from "zod";
|
|
26
|
+
|
|
27
|
+
export const SecretRequestEventSchema = z.object({
|
|
28
|
+
type: z.literal("secret_request"),
|
|
29
|
+
requestId: z.string(),
|
|
30
|
+
service: z.string(),
|
|
31
|
+
field: z.string(),
|
|
32
|
+
label: z.string(),
|
|
33
|
+
description: z.string().optional(),
|
|
34
|
+
placeholder: z.string().optional(),
|
|
35
|
+
conversationId: z.string().optional(),
|
|
36
|
+
purpose: z.string().optional(),
|
|
37
|
+
allowedTools: z.array(z.string()).optional(),
|
|
38
|
+
allowedDomains: z.array(z.string()).optional(),
|
|
39
|
+
allowOneTimeSend: z.boolean().optional(),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
export type SecretRequestEvent = z.infer<typeof SecretRequestEventSchema>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `subagent_event` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client envelope wrapping any inner `ServerMessage`
|
|
5
|
+
* emitted by a subagent's conversation. The daemon's subagent
|
|
6
|
+
* manager rebroadcasts the subagent's own stream through the
|
|
7
|
+
* parent conversation's `sendToClient`, tagged with the subagent's
|
|
8
|
+
* id and the parent's `conversationId`. Clients use this envelope
|
|
9
|
+
* to route inner events to the appropriate inline subagent surface.
|
|
10
|
+
*
|
|
11
|
+
* The inner `event` is opaque on the wire — it is itself a fully
|
|
12
|
+
* structured `ServerMessage` (any member of the canonical event
|
|
13
|
+
* union) and re-validating it here would duplicate work and
|
|
14
|
+
* tightly couple subagent canonicalization to every other event
|
|
15
|
+
* schema. Clients re-parse `event` through the same event parser
|
|
16
|
+
* they use for top-level stream events. The canonical contract
|
|
17
|
+
* requires only that `event.type` exists.
|
|
18
|
+
*
|
|
19
|
+
* `conversationId` IS present on this event — unlike `spawned` /
|
|
20
|
+
* `status_changed`, the daemon explicitly stamps it with the
|
|
21
|
+
* parent conversation id at the envelope layer
|
|
22
|
+
* (`subagent/manager.ts: wrappedSendToClient`).
|
|
23
|
+
*
|
|
24
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
25
|
+
* directly from this file; external consumers import via
|
|
26
|
+
* `@vellumai/assistant-api`.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import { z } from "zod";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Inner event payload wrapped by `subagent_event`. Modeled as a
|
|
33
|
+
* passthrough envelope keyed on `type` plus a curated set of
|
|
34
|
+
* convenience fields that client surfaces (timeline, status badge,
|
|
35
|
+
* inline cards) read directly without re-parsing the inner event
|
|
36
|
+
* through the top-level event parser.
|
|
37
|
+
*
|
|
38
|
+
* The full canonical shape of any inner event is whatever the
|
|
39
|
+
* top-level `AssistantEventSchema` says it is for that `type`;
|
|
40
|
+
* extra fields pass through untouched. The fields below are not
|
|
41
|
+
* required by the wire contract — they are hints for downstream
|
|
42
|
+
* clients to avoid drilling into discriminated unions for common
|
|
43
|
+
* read paths.
|
|
44
|
+
*/
|
|
45
|
+
export const SubagentInnerEventSchema = z
|
|
46
|
+
.object({
|
|
47
|
+
type: z.string(),
|
|
48
|
+
content: z.string().optional(),
|
|
49
|
+
/** `assistant_text_delta` events carry text in `text`, not `content`. */
|
|
50
|
+
text: z.string().optional(),
|
|
51
|
+
/** `tool_result` events carry output in `result`, not `content`. */
|
|
52
|
+
result: z.string().optional(),
|
|
53
|
+
/** `tool_use_start` events carry a JSON object with tool arguments. */
|
|
54
|
+
input: z.record(z.string(), z.unknown()).optional(),
|
|
55
|
+
toolName: z.string().optional(),
|
|
56
|
+
isError: z.boolean().optional(),
|
|
57
|
+
/**
|
|
58
|
+
* Tool-use block ID for client-side correlation. Present on
|
|
59
|
+
* `tool_use_start` and `tool_result` envelopes; used to pair a
|
|
60
|
+
* result with its originating call when a subagent emits parallel
|
|
61
|
+
* calls to the same tool (e.g. two `bash` calls) which `toolName`
|
|
62
|
+
* alone cannot disambiguate.
|
|
63
|
+
*/
|
|
64
|
+
toolUseId: z.string().optional(),
|
|
65
|
+
})
|
|
66
|
+
.passthrough();
|
|
67
|
+
|
|
68
|
+
export type SubagentInnerEvent = z.infer<typeof SubagentInnerEventSchema>;
|
|
69
|
+
|
|
70
|
+
export const SubagentEventEventSchema = z
|
|
71
|
+
.object({
|
|
72
|
+
type: z.literal("subagent_event"),
|
|
73
|
+
conversationId: z.string(),
|
|
74
|
+
subagentId: z.string(),
|
|
75
|
+
event: SubagentInnerEventSchema,
|
|
76
|
+
})
|
|
77
|
+
.strict();
|
|
78
|
+
|
|
79
|
+
export type SubagentEventEvent = z.infer<typeof SubagentEventEventSchema>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `subagent_spawned` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client notification that a new subagent has been spawned
|
|
5
|
+
* by the parent conversation. Carries identity (`subagentId`),
|
|
6
|
+
* scoping (`parentConversationId`), human-readable display fields
|
|
7
|
+
* (`label`, `objective`), and optional spawn-context (`isFork`,
|
|
8
|
+
* `parentToolUseId` for tool-use anchoring).
|
|
9
|
+
*
|
|
10
|
+
* NOTE: no `conversationId` field. Subagent lifecycle events route
|
|
11
|
+
* to the parent conversation's SSE stream via the parent's
|
|
12
|
+
* `sendToClient` closure (`parentSendToClient`), not via the
|
|
13
|
+
* conversation-scoped seq stamping path. The parent conversation is
|
|
14
|
+
* identified explicitly by `parentConversationId`.
|
|
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 SubagentSpawnedEventSchema = z
|
|
24
|
+
.object({
|
|
25
|
+
type: z.literal("subagent_spawned"),
|
|
26
|
+
subagentId: z.string(),
|
|
27
|
+
parentConversationId: z.string(),
|
|
28
|
+
label: z.string(),
|
|
29
|
+
objective: z.string(),
|
|
30
|
+
isFork: z.boolean().optional(),
|
|
31
|
+
/**
|
|
32
|
+
* Tool-use id of the `skill_execute` call that spawned this subagent.
|
|
33
|
+
* Lets the client anchor the inline subagent card to the exact spawn
|
|
34
|
+
* tool call, independent of the (reconcile-volatile) parent message id.
|
|
35
|
+
*/
|
|
36
|
+
parentToolUseId: z.string().optional(),
|
|
37
|
+
})
|
|
38
|
+
.strict();
|
|
39
|
+
|
|
40
|
+
export type SubagentSpawnedEvent = z.infer<typeof SubagentSpawnedEventSchema>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `subagent_status_changed` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client notification that a subagent's status has
|
|
5
|
+
* transitioned. Carries `subagentId`, the new `status`, an optional
|
|
6
|
+
* `error` message (typically present when transitioning into
|
|
7
|
+
* `failed`), and an optional rolling `usage` snapshot.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: no `conversationId` field. Like `subagent_spawned`, status
|
|
10
|
+
* transitions route to the parent conversation's SSE stream via
|
|
11
|
+
* `parentSendToClient` closure, not via conversation-scoped seq
|
|
12
|
+
* stamping. The subagent is identified by `subagentId`; clients
|
|
13
|
+
* already know the parent association from the prior `spawned` event.
|
|
14
|
+
*
|
|
15
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
16
|
+
* directly from this file; external consumers import via
|
|
17
|
+
* `@vellumai/assistant-api`.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { z } from "zod";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Subagent lifecycle status. Mirrors `SubagentStatus` in
|
|
24
|
+
* `assistant/src/subagent/types.ts`. `aborted` is a terminal state
|
|
25
|
+
* reached via explicit `subagent_abort` request.
|
|
26
|
+
*/
|
|
27
|
+
export const SubagentStatusSchema = z.enum([
|
|
28
|
+
"pending",
|
|
29
|
+
"running",
|
|
30
|
+
"awaiting_input",
|
|
31
|
+
"completed",
|
|
32
|
+
"failed",
|
|
33
|
+
"aborted",
|
|
34
|
+
]);
|
|
35
|
+
|
|
36
|
+
export type SubagentStatus = z.infer<typeof SubagentStatusSchema>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Rolling usage snapshot for a subagent. Field names mirror the
|
|
40
|
+
* daemon's `UsageStats` interface (`shared.ts`) — in particular,
|
|
41
|
+
* `estimatedCost` is the canonical wire field, not `totalCost`.
|
|
42
|
+
*/
|
|
43
|
+
export const SubagentUsageStatsSchema = z
|
|
44
|
+
.object({
|
|
45
|
+
inputTokens: z.number(),
|
|
46
|
+
outputTokens: z.number(),
|
|
47
|
+
estimatedCost: z.number(),
|
|
48
|
+
})
|
|
49
|
+
.strict();
|
|
50
|
+
|
|
51
|
+
export type SubagentUsageStats = z.infer<typeof SubagentUsageStatsSchema>;
|
|
52
|
+
|
|
53
|
+
export const SubagentStatusChangedEventSchema = z
|
|
54
|
+
.object({
|
|
55
|
+
type: z.literal("subagent_status_changed"),
|
|
56
|
+
subagentId: z.string(),
|
|
57
|
+
status: SubagentStatusSchema,
|
|
58
|
+
error: z.string().optional(),
|
|
59
|
+
usage: SubagentUsageStatsSchema.optional(),
|
|
60
|
+
})
|
|
61
|
+
.strict();
|
|
62
|
+
|
|
63
|
+
export type SubagentStatusChangedEvent = z.infer<
|
|
64
|
+
typeof SubagentStatusChangedEventSchema
|
|
65
|
+
>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sync_changed` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* The generic multi-client cache-invalidation contract. The daemon
|
|
5
|
+
* broadcasts it after a persisted-state write succeeds; `tags` name
|
|
6
|
+
* which cached resources are now stale (not their new values) so each
|
|
7
|
+
* client refetches the affected endpoints. This is a global broadcast —
|
|
8
|
+
* it carries no `conversationId`.
|
|
9
|
+
*
|
|
10
|
+
* `originClientId` is the opaque identifier of the client whose mutation
|
|
11
|
+
* triggered the emission, when known. Consumers may use it to suppress
|
|
12
|
+
* self-echoes (the originating tab already applied the change
|
|
13
|
+
* optimistically). It is absent for daemon-internal emissions (agent
|
|
14
|
+
* loop, FS watcher, schedules).
|
|
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 SyncChangedEventSchema = z.object({
|
|
24
|
+
type: z.literal("sync_changed"),
|
|
25
|
+
tags: z.array(z.string().min(1)).min(1),
|
|
26
|
+
originClientId: z.string().min(1).optional(),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export type SyncChangedEvent = z.infer<typeof SyncChangedEventSchema>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tool_result` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Emitted by the daemon's agent loop when a tool invocation finishes —
|
|
5
|
+
* carries the textual result, optional risk metadata for trust-rule
|
|
6
|
+
* evaluation, and correlation ids for the conversation, the message,
|
|
7
|
+
* and the tool_use block.
|
|
8
|
+
*
|
|
9
|
+
* The three risk-option arrays are distinct contracts:
|
|
10
|
+
* - `riskAllowlistOptions` — Minimatch-glob save-path patterns; what
|
|
11
|
+
* the rule editor's "Apply to" radio group persists as a trust
|
|
12
|
+
* rule's `pattern`. Mirrors `ConfirmationRequestEvent.allowlistOptions`.
|
|
13
|
+
* - `riskScopeOptions` — display-only ladder whose `pattern` is
|
|
14
|
+
* regex-flavored and NOT a valid trust rule pattern; clients must
|
|
15
|
+
* not feed it into the save path. Shape differs from the canonical
|
|
16
|
+
* `ScopeOption` (`{ pattern, label }` vs `{ label, scope }`), so it
|
|
17
|
+
* has its own schema here.
|
|
18
|
+
* - `riskDirectoryScopeOptions` — directory scope ladder for the rule
|
|
19
|
+
* editor modal.
|
|
20
|
+
*
|
|
21
|
+
* `activityMetadata` is structured live activity for rich client
|
|
22
|
+
* rendering (web_search / web_fetch); clients that key off `result`
|
|
23
|
+
* continue to work unchanged.
|
|
24
|
+
*
|
|
25
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
26
|
+
* directly from this file; external consumers import via
|
|
27
|
+
* `@vellumai/assistant-api`.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { z } from "zod";
|
|
31
|
+
|
|
32
|
+
import {
|
|
33
|
+
AllowlistOptionSchema,
|
|
34
|
+
ConfirmationDiffSchema,
|
|
35
|
+
DirectoryScopeOptionSchema,
|
|
36
|
+
} from "./confirmation-request.js";
|
|
37
|
+
|
|
38
|
+
export const RiskScopeOptionSchema = z.object({
|
|
39
|
+
pattern: z.string(),
|
|
40
|
+
label: z.string(),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export type RiskScopeOption = z.infer<typeof RiskScopeOptionSchema>;
|
|
44
|
+
|
|
45
|
+
export const WebSearchProviderIdSchema = z.enum([
|
|
46
|
+
"anthropic-native",
|
|
47
|
+
"brave",
|
|
48
|
+
"perplexity",
|
|
49
|
+
"tavily",
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
export type WebSearchProviderId = z.infer<typeof WebSearchProviderIdSchema>;
|
|
53
|
+
|
|
54
|
+
export const WebSearchResultItemSchema = z.object({
|
|
55
|
+
rank: z.number(),
|
|
56
|
+
title: z.string(),
|
|
57
|
+
url: z.string(),
|
|
58
|
+
domain: z.string(),
|
|
59
|
+
faviconUrl: z.string().optional(),
|
|
60
|
+
snippet: z.string().optional(),
|
|
61
|
+
age: z.string().optional(),
|
|
62
|
+
score: z.number().optional(),
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
export type WebSearchResultItem = z.infer<typeof WebSearchResultItemSchema>;
|
|
66
|
+
|
|
67
|
+
export const WebSearchMetadataSchema = z.object({
|
|
68
|
+
query: z.string(),
|
|
69
|
+
provider: WebSearchProviderIdSchema,
|
|
70
|
+
resultCount: z.number(),
|
|
71
|
+
durationMs: z.number(),
|
|
72
|
+
results: z.array(WebSearchResultItemSchema),
|
|
73
|
+
errorMessage: z.string().optional(),
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
export type WebSearchMetadata = z.infer<typeof WebSearchMetadataSchema>;
|
|
77
|
+
|
|
78
|
+
export const WebFetchMetadataSchema = z.object({
|
|
79
|
+
url: z.string(),
|
|
80
|
+
finalUrl: z.string(),
|
|
81
|
+
status: z.number(),
|
|
82
|
+
contentType: z.string().optional(),
|
|
83
|
+
byteCount: z.number(),
|
|
84
|
+
charCount: z.number(),
|
|
85
|
+
truncated: z.boolean(),
|
|
86
|
+
title: z.string().optional(),
|
|
87
|
+
domain: z.string(),
|
|
88
|
+
faviconUrl: z.string().optional(),
|
|
89
|
+
redirectCount: z.number(),
|
|
90
|
+
durationMs: z.number(),
|
|
91
|
+
errorMessage: z.string().optional(),
|
|
92
|
+
mayRequireJavaScript: z.boolean().optional(),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
export type WebFetchMetadata = z.infer<typeof WebFetchMetadataSchema>;
|
|
96
|
+
|
|
97
|
+
export const ToolActivityMetadataSchema = z.object({
|
|
98
|
+
webSearch: WebSearchMetadataSchema.optional(),
|
|
99
|
+
webFetch: WebFetchMetadataSchema.optional(),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
export type ToolActivityMetadata = z.infer<typeof ToolActivityMetadataSchema>;
|
|
103
|
+
|
|
104
|
+
export const ToolResultEventSchema = z.object({
|
|
105
|
+
type: z.literal("tool_result"),
|
|
106
|
+
toolName: z.string(),
|
|
107
|
+
result: z.string(),
|
|
108
|
+
isError: z.boolean().optional(),
|
|
109
|
+
diff: ConfirmationDiffSchema.optional(),
|
|
110
|
+
status: z.string().optional(),
|
|
111
|
+
conversationId: z.string().optional(),
|
|
112
|
+
imageData: z.string().optional(),
|
|
113
|
+
imageDataList: z.array(z.string()).optional(),
|
|
114
|
+
toolUseId: z.string().optional(),
|
|
115
|
+
messageId: z.string().optional(),
|
|
116
|
+
riskLevel: z.string().optional(),
|
|
117
|
+
riskReason: z.string().optional(),
|
|
118
|
+
matchedTrustRuleId: z.string().optional(),
|
|
119
|
+
isContainerized: z.boolean().optional(),
|
|
120
|
+
riskScopeOptions: z.array(RiskScopeOptionSchema).optional(),
|
|
121
|
+
riskAllowlistOptions: z.array(AllowlistOptionSchema).optional(),
|
|
122
|
+
riskDirectoryScopeOptions: z.array(DirectoryScopeOptionSchema).optional(),
|
|
123
|
+
approvalMode: z.string().optional(),
|
|
124
|
+
approvalReason: z.string().optional(),
|
|
125
|
+
riskThreshold: z.string().optional(),
|
|
126
|
+
activityMetadata: ToolActivityMetadataSchema.optional(),
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
export type ToolResultEvent = z.infer<typeof ToolResultEventSchema>;
|
|
@@ -18,15 +18,13 @@
|
|
|
18
18
|
|
|
19
19
|
import { z } from "zod";
|
|
20
20
|
|
|
21
|
-
export const ToolUseStartEventSchema = z
|
|
22
|
-
.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
})
|
|
30
|
-
.strict();
|
|
21
|
+
export const ToolUseStartEventSchema = z.object({
|
|
22
|
+
type: z.literal("tool_use_start"),
|
|
23
|
+
toolName: z.string(),
|
|
24
|
+
input: z.record(z.string(), z.unknown()),
|
|
25
|
+
toolUseId: z.string().optional(),
|
|
26
|
+
messageId: z.string().optional(),
|
|
27
|
+
conversationId: z.string().optional(),
|
|
28
|
+
});
|
|
31
29
|
|
|
32
30
|
export type ToolUseStartEvent = z.infer<typeof ToolUseStartEventSchema>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `turn_profile_auto_routed` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Emitted when the query-complexity auto-router selects a non-default
|
|
5
|
+
* inference profile for the current turn. Clients render a subtle
|
|
6
|
+
* inline notification (e.g. "Using Quality for this response"). Only
|
|
7
|
+
* fires when the router picks a profile — not when the user explicitly
|
|
8
|
+
* pinned one.
|
|
9
|
+
*
|
|
10
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
11
|
+
* directly from this file; external consumers import via
|
|
12
|
+
* `@vellumai/assistant-api`.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
|
|
17
|
+
export const TurnProfileAutoRoutedEventSchema = z.object({
|
|
18
|
+
type: z.literal("turn_profile_auto_routed"),
|
|
19
|
+
conversationId: z.string(),
|
|
20
|
+
/** Profile key (e.g. "quality-optimized"). */
|
|
21
|
+
profile: z.string(),
|
|
22
|
+
/** Human-readable label (e.g. "Quality"). */
|
|
23
|
+
profileLabel: z.string(),
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export type TurnProfileAutoRoutedEvent = z.infer<
|
|
27
|
+
typeof TurnProfileAutoRoutedEventSchema
|
|
28
|
+
>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ui_surface_complete` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client signal that a surface's lifecycle has ended with a
|
|
5
|
+
* resolution — distinct from `ui_surface_dismiss`, which is used
|
|
6
|
+
* when the surface is cancelled with no result. Carries a
|
|
7
|
+
* human-readable `summary` and an optional structured
|
|
8
|
+
* `submittedData` payload (e.g. the form values the user submitted).
|
|
9
|
+
*
|
|
10
|
+
* `submittedData` is opaque on the wire — its shape depends on the
|
|
11
|
+
* original `surfaceType` and lives in the surface-data subsystem.
|
|
12
|
+
*
|
|
13
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
14
|
+
* directly from this file; external consumers import via
|
|
15
|
+
* `@vellumai/assistant-api`.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { z } from "zod";
|
|
19
|
+
|
|
20
|
+
export const UISurfaceCompleteEventSchema = z.object({
|
|
21
|
+
type: z.literal("ui_surface_complete"),
|
|
22
|
+
conversationId: z.string(),
|
|
23
|
+
surfaceId: z.string(),
|
|
24
|
+
summary: z.string(),
|
|
25
|
+
submittedData: z.record(z.string(), z.unknown()).optional(),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export type UISurfaceCompleteEvent = z.infer<
|
|
29
|
+
typeof UISurfaceCompleteEventSchema
|
|
30
|
+
>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ui_surface_dismiss` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client request to remove a previously-shown surface
|
|
5
|
+
* without a completion payload. Used when the surface is cancelled,
|
|
6
|
+
* superseded, or the daemon has determined the user input is no
|
|
7
|
+
* longer needed. Identified by `surfaceId`.
|
|
8
|
+
*
|
|
9
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
10
|
+
* directly from this file; external consumers import via
|
|
11
|
+
* `@vellumai/assistant-api`.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
|
|
16
|
+
export const UISurfaceDismissEventSchema = z.object({
|
|
17
|
+
type: z.literal("ui_surface_dismiss"),
|
|
18
|
+
conversationId: z.string(),
|
|
19
|
+
surfaceId: z.string(),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export type UISurfaceDismissEvent = z.infer<typeof UISurfaceDismissEventSchema>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ui_surface_show` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client request to render an ephemeral UI surface (card,
|
|
5
|
+
* form, list, table, confirmation, dynamic_page, file_upload,
|
|
6
|
+
* document_preview, task_preferences) inside the chat view. The
|
|
7
|
+
* concrete `data` shape depends on `surfaceType` and is owned by the
|
|
8
|
+
* surface-data subsystem in `daemon/message-types/surfaces.ts`; the
|
|
9
|
+
* canonical schema treats `data` as opaque on the wire so this file
|
|
10
|
+
* doesn't have to mirror eight nested-payload schemas.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle: a surface progresses `show` → (zero or more `update`s) →
|
|
13
|
+
* (`dismiss` for cancellation OR `complete` with a `summary` /
|
|
14
|
+
* `submittedData` payload). `surfaceId` is the shared correlation key
|
|
15
|
+
* across all four lifecycle events.
|
|
16
|
+
*
|
|
17
|
+
* `actions` is the array of clickable choices rendered alongside the
|
|
18
|
+
* surface. Each action's `style` is a strict 3-variant enum because
|
|
19
|
+
* the daemon-side `SurfaceAction.style` is the same enum — the wire
|
|
20
|
+
* contract is stricter than the legacy parser, which accepted any
|
|
21
|
+
* string.
|
|
22
|
+
*
|
|
23
|
+
* `persistent` defaults to false. When true, clicking an action does
|
|
24
|
+
* not dismiss the surface — the client keeps it visible and only
|
|
25
|
+
* marks the clicked action as spent (used for launcher / menu
|
|
26
|
+
* cards). The legacy web `UISurfaceShowEvent` interface was missing
|
|
27
|
+
* this field entirely — adding it via the canonical schema fixes a
|
|
28
|
+
* silent wire-shape drift.
|
|
29
|
+
*
|
|
30
|
+
* `toolCallId` is the id of the tool call that produced the surface
|
|
31
|
+
* (the `ui_show` proxy tool). The client uses it to gate display-only
|
|
32
|
+
* app previews on whether that tool call's result has arrived, rather
|
|
33
|
+
* than on whole-turn streaming state. Optional: surfaces emitted
|
|
34
|
+
* outside a tool call (or by older daemons) omit it, and the client
|
|
35
|
+
* treats a missing link as already complete.
|
|
36
|
+
*
|
|
37
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
38
|
+
* directly from this file; external consumers import via
|
|
39
|
+
* `@vellumai/assistant-api`.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
import { z } from "zod";
|
|
43
|
+
|
|
44
|
+
export const SurfaceActionSchema = z.object({
|
|
45
|
+
id: z.string(),
|
|
46
|
+
label: z.string(),
|
|
47
|
+
style: z.enum(["primary", "secondary", "destructive"]).optional(),
|
|
48
|
+
data: z.record(z.string(), z.unknown()).optional(),
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export type SurfaceAction = z.infer<typeof SurfaceActionSchema>;
|
|
52
|
+
|
|
53
|
+
export const UISurfaceShowEventSchema = z.object({
|
|
54
|
+
type: z.literal("ui_surface_show"),
|
|
55
|
+
conversationId: z.string(),
|
|
56
|
+
surfaceId: z.string(),
|
|
57
|
+
surfaceType: z.string(),
|
|
58
|
+
title: z.string().optional(),
|
|
59
|
+
data: z.record(z.string(), z.unknown()),
|
|
60
|
+
actions: z.array(SurfaceActionSchema).optional(),
|
|
61
|
+
display: z.enum(["inline", "panel"]).optional(),
|
|
62
|
+
messageId: z.string().optional(),
|
|
63
|
+
persistent: z.boolean().optional(),
|
|
64
|
+
toolCallId: z.string().optional(),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
export type UISurfaceShowEvent = z.infer<typeof UISurfaceShowEventSchema>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ui_surface_update` SSE event.
|
|
3
|
+
*
|
|
4
|
+
* Server → client incremental update to a previously-shown surface.
|
|
5
|
+
* Identified by the `surfaceId` returned in the original
|
|
6
|
+
* `ui_surface_show`. The client merges `data` into the rendered
|
|
7
|
+
* surface's state. `data` is opaque at the wire level for the same
|
|
8
|
+
* reason as `ui_surface_show.data` — the concrete shape depends on
|
|
9
|
+
* the surface's original `surfaceType` and lives in the
|
|
10
|
+
* surface-data subsystem.
|
|
11
|
+
*
|
|
12
|
+
* Canonical wire-contract source. Daemon code imports the type
|
|
13
|
+
* directly from this file; external consumers import via
|
|
14
|
+
* `@vellumai/assistant-api`.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
|
|
19
|
+
export const UISurfaceUpdateEventSchema = z.object({
|
|
20
|
+
type: z.literal("ui_surface_update"),
|
|
21
|
+
conversationId: z.string(),
|
|
22
|
+
surfaceId: z.string(),
|
|
23
|
+
data: z.record(z.string(), z.unknown()),
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export type UISurfaceUpdateEvent = z.infer<typeof UISurfaceUpdateEventSchema>;
|