@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
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
// User/assistant messages, tool results, confirmations, secrets, errors, and generation lifecycle.
|
|
2
2
|
|
|
3
|
+
import type { AssistantActivityStateEvent } from "../../api/events/assistant-activity-state.js";
|
|
3
4
|
import type { AssistantTextDeltaEvent } from "../../api/events/assistant-text-delta.js";
|
|
4
5
|
import type { AssistantTurnStartEvent } from "../../api/events/assistant-turn-start.js";
|
|
6
|
+
import type { ConfirmationRequestEvent } from "../../api/events/confirmation-request.js";
|
|
7
|
+
import type { ErrorEvent } from "../../api/events/error.js";
|
|
8
|
+
import type { InteractionResolvedEvent } from "../../api/events/interaction-resolved.js";
|
|
5
9
|
import type { MessageCompleteEvent } from "../../api/events/message-complete.js";
|
|
10
|
+
import type { MessageDequeuedEvent } from "../../api/events/message-dequeued.js";
|
|
11
|
+
import type { MessageQueuedEvent } from "../../api/events/message-queued.js";
|
|
12
|
+
import type { MessageQueuedDeletedEvent } from "../../api/events/message-queued-deleted.js";
|
|
13
|
+
import type { MessageRequestCompleteEvent } from "../../api/events/message-request-complete.js";
|
|
14
|
+
import type { QuestionRequestEvent } from "../../api/events/question-request.js";
|
|
15
|
+
import type { SecretRequestEvent } from "../../api/events/secret-request.js";
|
|
16
|
+
import type { ToolResultEvent } from "../../api/events/tool-result.js";
|
|
6
17
|
import type { ToolUseStartEvent } from "../../api/events/tool-use-start.js";
|
|
18
|
+
import type { TurnProfileAutoRoutedEvent } from "../../api/events/turn-profile-auto-routed.js";
|
|
19
|
+
import type { UserMessageEchoEvent } from "../../api/events/user-message-echo.js";
|
|
7
20
|
import type { ChannelId, InterfaceId } from "../../channels/types.js";
|
|
8
21
|
import type { CommandIntent, UserMessageAttachment } from "./shared.js";
|
|
9
|
-
import type { ToolActivityMetadata } from "./web-activity.js";
|
|
10
22
|
|
|
11
23
|
// === Client → Server ===
|
|
12
24
|
|
|
@@ -29,7 +41,7 @@ export interface UserMessage {
|
|
|
29
41
|
/** Structured command intent — bypasses text parsing when present. */
|
|
30
42
|
commandIntent?: CommandIntent;
|
|
31
43
|
/** Client-generated correlation nonce for echo dedup. See
|
|
32
|
-
* `
|
|
44
|
+
* `UserMessageEchoEvent.clientMessageId` — the server echoes this value
|
|
33
45
|
* back on the matching `user_message_echo` event. */
|
|
34
46
|
clientMessageId?: string;
|
|
35
47
|
}
|
|
@@ -58,24 +70,6 @@ export interface SuggestionRequest {
|
|
|
58
70
|
|
|
59
71
|
// === Server → Client ===
|
|
60
72
|
|
|
61
|
-
export interface UserMessageEcho {
|
|
62
|
-
type: "user_message_echo";
|
|
63
|
-
text: string;
|
|
64
|
-
conversationId?: string;
|
|
65
|
-
/** Database ID of the persisted user message, used by the originating
|
|
66
|
-
* client to dedupe its optimistic row. Absent for synthetic echoes
|
|
67
|
-
* (e.g. surface-action prompts) where no distinct user row is persisted. */
|
|
68
|
-
messageId?: string;
|
|
69
|
-
/** Server-generated request ID for the send. Allows correlation with
|
|
70
|
-
* `message_queued` / `message_dequeued` events for the same turn. */
|
|
71
|
-
requestId?: string;
|
|
72
|
-
/** Client-generated correlation nonce from the HTTP POST body. Echoed
|
|
73
|
-
* back so the originating client can dedupe its optimistic row even
|
|
74
|
-
* if the SSE echo beats the 202 response. Absent for synthetic echoes
|
|
75
|
-
* (e.g. surface-action prompts) that did not originate from a client POST. */
|
|
76
|
-
clientMessageId?: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
73
|
export interface AssistantThinkingDelta {
|
|
80
74
|
type: "assistant_thinking_delta";
|
|
81
75
|
thinking: string;
|
|
@@ -122,233 +116,6 @@ export interface ToolInputDelta {
|
|
|
122
116
|
messageId?: string;
|
|
123
117
|
}
|
|
124
118
|
|
|
125
|
-
export interface ToolResult {
|
|
126
|
-
type: "tool_result";
|
|
127
|
-
toolName: string;
|
|
128
|
-
result: string;
|
|
129
|
-
isError?: boolean;
|
|
130
|
-
diff?: {
|
|
131
|
-
filePath: string;
|
|
132
|
-
oldContent: string;
|
|
133
|
-
newContent: string;
|
|
134
|
-
isNewFile: boolean;
|
|
135
|
-
};
|
|
136
|
-
status?: string;
|
|
137
|
-
conversationId?: string;
|
|
138
|
-
/** Base64-encoded image data extracted from contentBlocks (e.g. browser_screenshot). @deprecated Use imageDataList. */
|
|
139
|
-
imageData?: string;
|
|
140
|
-
/** Base64-encoded image data extracted from contentBlocks (e.g. browser_screenshot, image generation). */
|
|
141
|
-
imageDataList?: string[];
|
|
142
|
-
/** The tool_use block ID for client-side correlation. */
|
|
143
|
-
toolUseId?: string;
|
|
144
|
-
/** Database ID of the assistant message that owns the parent tool_use
|
|
145
|
-
* block. Same semantics as `AssistantTextDeltaEvent.messageId`. */
|
|
146
|
-
messageId?: string;
|
|
147
|
-
/** Risk level from the classifier ("low" | "medium" | "high" | "unknown"). */
|
|
148
|
-
riskLevel?: string;
|
|
149
|
-
/** Human-readable reason for the risk classification. */
|
|
150
|
-
riskReason?: string;
|
|
151
|
-
/** ID of the trust rule that matched this invocation (if any). */
|
|
152
|
-
matchedTrustRuleId?: string;
|
|
153
|
-
/** Whether the daemon is running in a containerized (Docker) environment. */
|
|
154
|
-
isContainerized?: boolean;
|
|
155
|
-
/**
|
|
156
|
-
* Display-only ladder of scope option labels for the rule editor
|
|
157
|
-
* (narrowest to broadest). The `pattern` here is regex-style and is
|
|
158
|
-
* NOT a valid trust rule pattern. Clients must use
|
|
159
|
-
* `riskAllowlistOptions` for the pattern that gets saved.
|
|
160
|
-
*/
|
|
161
|
-
riskScopeOptions?: Array<{ pattern: string; label: string }>;
|
|
162
|
-
/**
|
|
163
|
-
* Allowlist options for the rule editor save path (narrowest to
|
|
164
|
-
* broadest). Each `pattern` is a Minimatch-glob compatible string —
|
|
165
|
-
* what the gateway actually matches against. Mirrors the
|
|
166
|
-
* `allowlistOptions` field on `ConfirmationRequest`. May be absent
|
|
167
|
-
* for tools whose classifier does not produce an allowlist (e.g.
|
|
168
|
-
* web-risk classifier, MCP tools without classifier coverage).
|
|
169
|
-
*/
|
|
170
|
-
riskAllowlistOptions?: Array<{
|
|
171
|
-
label: string;
|
|
172
|
-
description: string;
|
|
173
|
-
pattern: string;
|
|
174
|
-
}>;
|
|
175
|
-
/** Directory scope ladder for the rule editor modal (narrowest to broadest). */
|
|
176
|
-
riskDirectoryScopeOptions?: Array<{ scope: string; label: string }>;
|
|
177
|
-
/** How the approval decision was reached: prompted, auto, blocked, or unknown (legacy). */
|
|
178
|
-
approvalMode?: string;
|
|
179
|
-
/** Why the approval decision was reached (stable enum for client display). */
|
|
180
|
-
approvalReason?: string;
|
|
181
|
-
/** Snapshot of the auto-approve threshold at execution time. */
|
|
182
|
-
riskThreshold?: string;
|
|
183
|
-
/** Structured activity metadata for rich client rendering. Optional; old
|
|
184
|
-
* clients that key off `result` continue to work unchanged. */
|
|
185
|
-
activityMetadata?: ToolActivityMetadata;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
export interface ConfirmationRequest {
|
|
189
|
-
type: "confirmation_request";
|
|
190
|
-
requestId: string;
|
|
191
|
-
toolName: string;
|
|
192
|
-
input: Record<string, unknown>;
|
|
193
|
-
riskLevel: string;
|
|
194
|
-
/** Human-readable reason for the risk classification (e.g. "Modifies remote repository state"). */
|
|
195
|
-
riskReason?: string;
|
|
196
|
-
/** Whether the daemon is running in a containerized (Docker) environment. */
|
|
197
|
-
isContainerized?: boolean;
|
|
198
|
-
executionTarget?: "sandbox" | "host";
|
|
199
|
-
allowlistOptions: Array<{
|
|
200
|
-
label: string;
|
|
201
|
-
description: string;
|
|
202
|
-
pattern: string;
|
|
203
|
-
}>;
|
|
204
|
-
scopeOptions: Array<{ label: string; scope: string }>;
|
|
205
|
-
directoryScopeOptions?: Array<{ scope: string; label: string }>;
|
|
206
|
-
diff?: {
|
|
207
|
-
filePath: string;
|
|
208
|
-
oldContent: string;
|
|
209
|
-
newContent: string;
|
|
210
|
-
isNewFile: boolean;
|
|
211
|
-
};
|
|
212
|
-
conversationId?: string;
|
|
213
|
-
/** When false, the client should hide "always allow" / trust-rule persistence affordances. */
|
|
214
|
-
persistentDecisionsAllowed?: boolean;
|
|
215
|
-
/** The tool_use block ID for client-side correlation with specific tool calls. */
|
|
216
|
-
toolUseId?: string;
|
|
217
|
-
/** ACP tool kind from the agent (e.g. "read", "edit", "execute"). Present only for ACP permission requests. */
|
|
218
|
-
acpToolKind?: string;
|
|
219
|
-
/** ACP permission options from the agent. Present only for ACP permission requests. Clients should use these to render the correct buttons. */
|
|
220
|
-
acpOptions?: Array<{
|
|
221
|
-
optionId: string;
|
|
222
|
-
name: string;
|
|
223
|
-
kind: "allow_once" | "allow_always" | "reject_once" | "reject_always";
|
|
224
|
-
}>;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
export interface SecretRequest {
|
|
228
|
-
type: "secret_request";
|
|
229
|
-
requestId: string;
|
|
230
|
-
service: string;
|
|
231
|
-
field: string;
|
|
232
|
-
label: string;
|
|
233
|
-
description?: string;
|
|
234
|
-
placeholder?: string;
|
|
235
|
-
conversationId?: string;
|
|
236
|
-
/** Intended purpose of the credential (displayed to user). */
|
|
237
|
-
purpose?: string;
|
|
238
|
-
/** Tools allowed to use this credential. */
|
|
239
|
-
allowedTools?: string[];
|
|
240
|
-
/** Domains where this credential may be used. */
|
|
241
|
-
allowedDomains?: string[];
|
|
242
|
-
/** Whether one-time send override is available. */
|
|
243
|
-
allowOneTimeSend?: boolean;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
export interface QuestionOption {
|
|
247
|
-
id: string;
|
|
248
|
-
label: string;
|
|
249
|
-
description?: string;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* One entry in a batched ask-question request.
|
|
254
|
-
*
|
|
255
|
-
* `id` is daemon-assigned (e.g. `q1`, `q2`...) — the LLM neither sees nor
|
|
256
|
-
* supplies it. It exists so the client has a stable handle to post the
|
|
257
|
-
* user's answer back against. See `QuestionRequest` for the batching
|
|
258
|
-
* contract.
|
|
259
|
-
*/
|
|
260
|
-
export interface QuestionEntry {
|
|
261
|
-
id: string;
|
|
262
|
-
question: string;
|
|
263
|
-
description?: string;
|
|
264
|
-
/** LLM-supplied options, capped at 4. The client always renders a fixed
|
|
265
|
-
* 5th "Type something else" slot wired to a free-text response — so this
|
|
266
|
-
* array never represents the full choice set the user sees. */
|
|
267
|
-
options: QuestionOption[];
|
|
268
|
-
/** Optional placeholder shown in the free-text input. */
|
|
269
|
-
freeTextPlaceholder?: string;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* A single broadcast that carries either one or a small batch (≤5) of
|
|
274
|
-
* clarifying questions. The whole batch is one card lifecycle on the client:
|
|
275
|
-
* one render, one state machine, one response submission.
|
|
276
|
-
*
|
|
277
|
-
* Wire-compat plan: both shapes are populated on every broadcast.
|
|
278
|
-
* - `questions[]` is the canonical shape new clients should consume.
|
|
279
|
-
* - The flat `question` / `description` / `options` / `freeTextPlaceholder`
|
|
280
|
-
* fields mirror `questions[0]` for backwards compat with the existing
|
|
281
|
-
* web client, which keys off the flat fields. Once that client adopts
|
|
282
|
-
* `questions[]`, the flat fields can be dropped (separate cleanup).
|
|
283
|
-
*
|
|
284
|
-
* Daemon callers that don't supply a batch get a one-element `questions`
|
|
285
|
-
* array synthesized from the flat fields.
|
|
286
|
-
*/
|
|
287
|
-
export interface QuestionRequest {
|
|
288
|
-
type: "question_request";
|
|
289
|
-
requestId: string;
|
|
290
|
-
/** Batched-question payload. Always populated (single questions are sent
|
|
291
|
-
* as a one-element array). Each entry's `id` is daemon-assigned. */
|
|
292
|
-
questions: QuestionEntry[];
|
|
293
|
-
/** Legacy: mirrors `questions[0].question`. Kept populated for clients
|
|
294
|
-
* that haven't adopted the batched `questions[]` shape yet. */
|
|
295
|
-
question: string;
|
|
296
|
-
/** Legacy: mirrors `questions[0].description`. */
|
|
297
|
-
description?: string;
|
|
298
|
-
/** Legacy: mirrors `questions[0].options`. */
|
|
299
|
-
options: QuestionOption[];
|
|
300
|
-
/** Legacy: mirrors `questions[0].freeTextPlaceholder`. */
|
|
301
|
-
freeTextPlaceholder?: string;
|
|
302
|
-
conversationId?: string;
|
|
303
|
-
toolUseId?: string;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
export interface ErrorMessage {
|
|
307
|
-
type: "error";
|
|
308
|
-
conversationId?: string;
|
|
309
|
-
requestId?: string;
|
|
310
|
-
code?: string;
|
|
311
|
-
message: string;
|
|
312
|
-
/** Categorizes the error so the client can offer contextual actions (e.g. "Send Anyway" for secret_blocked). */
|
|
313
|
-
category?: string;
|
|
314
|
-
/** Machine-readable conversation error category for clients that need source-aware recovery UI. */
|
|
315
|
-
errorCategory?: string;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
export interface MessageQueued {
|
|
319
|
-
type: "message_queued";
|
|
320
|
-
conversationId: string;
|
|
321
|
-
requestId: string;
|
|
322
|
-
position: number;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
export interface MessageDequeued {
|
|
326
|
-
type: "message_dequeued";
|
|
327
|
-
conversationId: string;
|
|
328
|
-
requestId: string;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* Request-level terminal signal for a user message lifecycle.
|
|
333
|
-
*
|
|
334
|
-
* Unlike `message_complete`, this does not imply the active assistant turn
|
|
335
|
-
* has completed. It is used for paths that consume a request inline while a
|
|
336
|
-
* separate in-flight turn may still be running.
|
|
337
|
-
*/
|
|
338
|
-
export interface MessageRequestComplete {
|
|
339
|
-
type: "message_request_complete";
|
|
340
|
-
conversationId: string;
|
|
341
|
-
requestId: string;
|
|
342
|
-
/** True when an existing turn is still running after this request is finalized. */
|
|
343
|
-
runStillActive?: boolean;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
export interface MessageQueuedDeleted {
|
|
347
|
-
type: "message_queued_deleted";
|
|
348
|
-
conversationId: string;
|
|
349
|
-
requestId: string;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
119
|
export interface MessageSteered {
|
|
353
120
|
type: "message_steered";
|
|
354
121
|
conversationId: string;
|
|
@@ -382,89 +149,7 @@ export interface ConfirmationStateChanged {
|
|
|
382
149
|
toolUseId?: string;
|
|
383
150
|
}
|
|
384
151
|
|
|
385
|
-
|
|
386
|
-
* Lifecycle states reported by `interaction_resolved`.
|
|
387
|
-
*
|
|
388
|
-
* - `"approved"` / `"rejected"` — user-supplied verdict on a confirmation.
|
|
389
|
-
* - `"answered"` — user/client provided a response (secret value, question
|
|
390
|
-
* answer, host-proxy result).
|
|
391
|
-
* - `"cancelled"` — the interaction was torn down without a user response
|
|
392
|
-
* (timeout, abort, dispose, prompter shutdown).
|
|
393
|
-
* - `"superseded"` — invalidated by a newer event (auto-deny on enqueue, a
|
|
394
|
-
* fresh user message arriving while a confirmation was outstanding).
|
|
395
|
-
*/
|
|
396
|
-
export type InteractionResolutionState =
|
|
397
|
-
| "approved"
|
|
398
|
-
| "rejected"
|
|
399
|
-
| "answered"
|
|
400
|
-
| "cancelled"
|
|
401
|
-
| "superseded";
|
|
402
|
-
|
|
403
|
-
/**
|
|
404
|
-
* Broadcast when a pending interaction (confirmation, secret, question,
|
|
405
|
-
* host-proxy request) transitions to a resolved state. Clients use this to
|
|
406
|
-
* drop attention/processing indicators without polling.
|
|
407
|
-
*/
|
|
408
|
-
export interface InteractionResolved {
|
|
409
|
-
type: "interaction_resolved";
|
|
410
|
-
requestId: string;
|
|
411
|
-
/** Conversation id the interaction belongs to. */
|
|
412
|
-
conversationId: string;
|
|
413
|
-
state: InteractionResolutionState;
|
|
414
|
-
/** Kind of the resolved interaction (e.g. "confirmation", "secret", "host_bash"). */
|
|
415
|
-
kind: string;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* Server-side assistant activity lifecycle for thinking indicator placement.
|
|
420
|
-
*
|
|
421
|
-
* `activityVersion` is monotonically increasing per conversation. Clients must
|
|
422
|
-
* ignore events with a version older than their current known version.
|
|
423
|
-
*/
|
|
424
|
-
export interface AssistantActivityState {
|
|
425
|
-
type: "assistant_activity_state";
|
|
426
|
-
conversationId: string;
|
|
427
|
-
activityVersion: number;
|
|
428
|
-
phase:
|
|
429
|
-
| "idle"
|
|
430
|
-
| "thinking"
|
|
431
|
-
| "streaming"
|
|
432
|
-
| "tool_running"
|
|
433
|
-
| "awaiting_confirmation";
|
|
434
|
-
anchor: "assistant_turn" | "user_turn" | "global";
|
|
435
|
-
/** Active user request when available. */
|
|
436
|
-
requestId?: string;
|
|
437
|
-
reason:
|
|
438
|
-
| "message_dequeued"
|
|
439
|
-
| "thinking_delta"
|
|
440
|
-
| "first_text_delta"
|
|
441
|
-
| "tool_use_start"
|
|
442
|
-
| "preview_start"
|
|
443
|
-
| "tool_result_received"
|
|
444
|
-
| "confirmation_requested"
|
|
445
|
-
| "confirmation_resolved"
|
|
446
|
-
| "context_compacting"
|
|
447
|
-
| "message_complete"
|
|
448
|
-
| "generation_cancelled"
|
|
449
|
-
| "error_terminal";
|
|
450
|
-
/** Human-readable description of what the assistant is currently doing. */
|
|
451
|
-
statusText?: string;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
/**
|
|
455
|
-
* Emitted when the query complexity auto-router selects a non-default
|
|
456
|
-
* profile for the current turn. Clients use this to show an inline
|
|
457
|
-
* notification (e.g. "Using Quality for this response"). Only fires when
|
|
458
|
-
* the router picks a profile — not when the user explicitly pinned one.
|
|
459
|
-
*/
|
|
460
|
-
export interface TurnProfileAutoRouted {
|
|
461
|
-
type: "turn_profile_auto_routed";
|
|
462
|
-
conversationId: string;
|
|
463
|
-
/** Profile key (e.g. "quality-optimized"). */
|
|
464
|
-
profile: string;
|
|
465
|
-
/** Human-readable label (e.g. "Quality"). */
|
|
466
|
-
profileLabel: string;
|
|
467
|
-
}
|
|
152
|
+
export type { TurnProfileAutoRoutedEvent };
|
|
468
153
|
|
|
469
154
|
/**
|
|
470
155
|
* Broadcast to clients when a conversation's inference-profile override
|
|
@@ -520,7 +205,7 @@ export type _MessagesClientMessages =
|
|
|
520
205
|
| SuggestionRequest;
|
|
521
206
|
|
|
522
207
|
export type _MessagesServerMessages =
|
|
523
|
-
|
|
|
208
|
+
| UserMessageEchoEvent
|
|
524
209
|
| AssistantTurnStartEvent
|
|
525
210
|
| AssistantTextDeltaEvent
|
|
526
211
|
| AssistantThinkingDelta
|
|
@@ -528,21 +213,21 @@ export type _MessagesServerMessages =
|
|
|
528
213
|
| ToolUsePreviewStart
|
|
529
214
|
| ToolOutputChunk
|
|
530
215
|
| ToolInputDelta
|
|
531
|
-
|
|
|
532
|
-
|
|
|
533
|
-
|
|
|
534
|
-
|
|
|
216
|
+
| ToolResultEvent
|
|
217
|
+
| ConfirmationRequestEvent
|
|
218
|
+
| SecretRequestEvent
|
|
219
|
+
| QuestionRequestEvent
|
|
535
220
|
| MessageCompleteEvent
|
|
536
|
-
|
|
|
537
|
-
|
|
|
538
|
-
|
|
|
539
|
-
|
|
|
540
|
-
|
|
|
221
|
+
| ErrorEvent
|
|
222
|
+
| MessageQueuedEvent
|
|
223
|
+
| MessageDequeuedEvent
|
|
224
|
+
| MessageRequestCompleteEvent
|
|
225
|
+
| MessageQueuedDeletedEvent
|
|
541
226
|
| MessageSteered
|
|
542
227
|
| SuggestionResponse
|
|
543
228
|
| TraceEvent
|
|
544
229
|
| ConfirmationStateChanged
|
|
545
|
-
|
|
|
546
|
-
|
|
|
230
|
+
| AssistantActivityStateEvent
|
|
231
|
+
| TurnProfileAutoRoutedEvent
|
|
547
232
|
| ConversationInferenceProfileUpdated
|
|
548
|
-
|
|
|
233
|
+
| InteractionResolvedEvent;
|
|
@@ -1,34 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export interface NotificationIntent {
|
|
3
|
-
type: "notification_intent";
|
|
4
|
-
/** Delivery audit record ID so the client can correlate ack messages. */
|
|
5
|
-
deliveryId?: string;
|
|
6
|
-
sourceEventName: string;
|
|
7
|
-
title: string;
|
|
8
|
-
body: string;
|
|
9
|
-
/** Optional deep-link metadata so the client can navigate to the relevant context. */
|
|
10
|
-
deepLinkMetadata?: Record<string, unknown>;
|
|
11
|
-
/**
|
|
12
|
-
* When set, this notification is guardian-sensitive and should only be
|
|
13
|
-
* displayed by clients whose guardian identity matches this principal ID.
|
|
14
|
-
* Clients not bound to this guardian should ignore the notification.
|
|
15
|
-
*/
|
|
16
|
-
targetGuardianPrincipalId?: string;
|
|
17
|
-
/**
|
|
18
|
-
* When true, the client must NOT post this intent to the OS notification
|
|
19
|
-
* surface (`UNUserNotificationCenter` on macOS). Non-banner side effects
|
|
20
|
-
* (guardian filtering, fallback dedup, mark-unseen + history catch-up on
|
|
21
|
-
* the paired conversation) still run. The home-feed inbox entry is
|
|
22
|
-
* written independently by `home-feed-side-effect.ts` and is unaffected
|
|
23
|
-
* by this flag.
|
|
24
|
-
*
|
|
25
|
-
* Set by the server based on `attentionHints.urgency`: true for
|
|
26
|
-
* `low`/`medium`, false for `high`/`critical`. The notification center
|
|
27
|
-
* is the always-on canonical inbox; the OS banner is reserved for
|
|
28
|
-
* signals the user opted into push for (urgency >= high).
|
|
29
|
-
*/
|
|
30
|
-
silent?: boolean;
|
|
31
|
-
}
|
|
1
|
+
import type { NotificationIntentEvent } from "../../api/events/notification-intent.js";
|
|
32
2
|
|
|
33
3
|
/** Server push — broadcast when a notification creates a new vellum conversation. */
|
|
34
4
|
export interface NotificationConversationCreated {
|
|
@@ -105,5 +75,5 @@ export type _NotificationsClientMessages =
|
|
|
105
75
|
| ConversationUnreadSignal;
|
|
106
76
|
|
|
107
77
|
export type _NotificationsServerMessages =
|
|
108
|
-
|
|
|
78
|
+
| NotificationIntentEvent
|
|
109
79
|
| NotificationConversationCreated;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Client settings: daemon-pushed configuration updates to connected clients.
|
|
2
2
|
|
|
3
|
+
import type { AvatarUpdatedEvent } from "../../api/events/avatar-updated.js";
|
|
4
|
+
|
|
3
5
|
// === Client → Server ===
|
|
4
6
|
|
|
5
7
|
/** Request from a conversation or client to change the voice activation key. */
|
|
@@ -27,13 +29,6 @@ export interface ClientSettingsUpdate {
|
|
|
27
29
|
value: string;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
/** Sent by the daemon after the avatar image has been regenerated and saved to disk. */
|
|
31
|
-
export interface AvatarUpdated {
|
|
32
|
-
type: "avatar_updated";
|
|
33
|
-
/** Absolute path to the updated avatar image file. */
|
|
34
|
-
avatarPath: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
32
|
/** Sent by the daemon when workspace config.json changes on disk. */
|
|
38
33
|
export interface ConfigChanged {
|
|
39
34
|
type: "config_changed";
|
|
@@ -60,7 +55,7 @@ export type _SettingsClientMessages =
|
|
|
60
55
|
| GenerateAvatarRequest;
|
|
61
56
|
export type _SettingsServerMessages =
|
|
62
57
|
| ClientSettingsUpdate
|
|
63
|
-
|
|
|
58
|
+
| AvatarUpdatedEvent
|
|
64
59
|
| ConfigChanged
|
|
65
60
|
| SoundsConfigUpdated
|
|
66
61
|
| GenerateAvatarResponse;
|
|
@@ -89,6 +89,7 @@ interface SlimSkillBase {
|
|
|
89
89
|
emoji?: string;
|
|
90
90
|
kind: "bundled" | "installed" | "catalog";
|
|
91
91
|
status: "enabled" | "disabled" | "available";
|
|
92
|
+
category: string;
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
interface VellumSlimSkill extends SlimSkillBase {
|
|
@@ -159,6 +160,7 @@ interface SkillDetailBase {
|
|
|
159
160
|
emoji?: string;
|
|
160
161
|
kind: "bundled" | "installed" | "catalog";
|
|
161
162
|
status: "enabled" | "disabled" | "available";
|
|
163
|
+
category: string;
|
|
162
164
|
}
|
|
163
165
|
|
|
164
166
|
interface VellumSkillDetail extends SkillDetailBase {
|
|
@@ -188,6 +188,8 @@ interface UiSurfaceShowBase {
|
|
|
188
188
|
messageId?: string;
|
|
189
189
|
/** When `true`, clicking an action does not dismiss the surface — the client keeps the card visible and only marks the clicked `actionId` as spent so siblings remain clickable. */
|
|
190
190
|
persistent?: boolean;
|
|
191
|
+
/** Id of the tool call that produced this surface (the `ui_show` proxy tool). Lets the client gate app previews on the tool result's arrival rather than whole-turn streaming state. */
|
|
192
|
+
toolCallId?: string;
|
|
191
193
|
}
|
|
192
194
|
|
|
193
195
|
export interface UiSurfaceShowCard extends UiSurfaceShowBase {
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
+
import {
|
|
4
|
+
type SyncChangedEvent,
|
|
5
|
+
SyncChangedEventSchema,
|
|
6
|
+
} from "../../api/events/sync-changed.js";
|
|
7
|
+
|
|
8
|
+
export { type SyncChangedEvent, SyncChangedEventSchema };
|
|
9
|
+
|
|
3
10
|
export const SYNC_TAGS = {
|
|
4
11
|
assistantAvatar: "assistant:self:avatar",
|
|
5
12
|
assistantIdentity: "assistant:self:identity",
|
|
13
|
+
assistantIdentityIntro: "assistant:self:identity-intro",
|
|
6
14
|
assistantConfig: "assistant:self:config",
|
|
7
15
|
assistantSounds: "assistant:self:sounds",
|
|
8
16
|
assistantSchedules: "assistant:self:schedules",
|
|
17
|
+
appsList: "apps:list",
|
|
9
18
|
conversationsList: "conversations:list",
|
|
10
19
|
featureFlagsClient: "feature-flags:client",
|
|
11
20
|
featureFlagsAssistant: "feature-flags:assistant",
|
|
@@ -23,29 +32,8 @@ export type SyncInvalidationTag =
|
|
|
23
32
|
| ConversationSyncInvalidationTag
|
|
24
33
|
| (string & {});
|
|
25
34
|
|
|
26
|
-
export interface SyncChangedMessage {
|
|
27
|
-
type: "sync_changed";
|
|
28
|
-
tags: SyncInvalidationTag[];
|
|
29
|
-
/**
|
|
30
|
-
* Optional identifier of the client that originated the change. When set,
|
|
31
|
-
* the server fan-out and clients themselves can suppress self-echoes so
|
|
32
|
-
* the originating tab/process doesn't reinvalidate its own cache off its
|
|
33
|
-
* own mutation. Daemon-internal emits (agent loop, FS watcher, cron) leave
|
|
34
|
-
* this unset so the event fans out to every subscriber as before.
|
|
35
|
-
*/
|
|
36
|
-
originClientId?: string;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
35
|
export const SyncInvalidationTagSchema = z.string().min(1);
|
|
40
36
|
|
|
41
|
-
export const SyncChangedMessageSchema = z
|
|
42
|
-
.object({
|
|
43
|
-
type: z.literal("sync_changed"),
|
|
44
|
-
tags: z.array(SyncInvalidationTagSchema).min(1),
|
|
45
|
-
originClientId: z.string().min(1).optional(),
|
|
46
|
-
})
|
|
47
|
-
.strict();
|
|
48
|
-
|
|
49
37
|
export function conversationMessagesSyncTag(
|
|
50
38
|
conversationId: string,
|
|
51
39
|
): ConversationSyncInvalidationTag {
|
|
@@ -61,15 +49,14 @@ export function conversationMetadataSyncTag(
|
|
|
61
49
|
export function buildSyncChangedMessage(
|
|
62
50
|
tags: SyncInvalidationTag[],
|
|
63
51
|
originClientId?: string,
|
|
64
|
-
):
|
|
52
|
+
): SyncChangedEvent {
|
|
65
53
|
const dedupedTags = Array.from(new Set(tags));
|
|
66
54
|
const trimmedOrigin = originClientId?.trim();
|
|
67
|
-
|
|
55
|
+
return SyncChangedEventSchema.parse({
|
|
68
56
|
type: "sync_changed",
|
|
69
57
|
tags: dedupedTags,
|
|
70
58
|
...(trimmedOrigin ? { originClientId: trimmedOrigin } : {}),
|
|
71
59
|
});
|
|
72
|
-
return parsed as SyncChangedMessage;
|
|
73
60
|
}
|
|
74
61
|
|
|
75
|
-
export type _SyncInvalidationServerMessages =
|
|
62
|
+
export type _SyncInvalidationServerMessages = SyncChangedEvent;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Workspace file, identity, and tool permission types.
|
|
2
2
|
|
|
3
|
+
import type { IdentityChangedEvent } from "../../api/events/identity-changed.js";
|
|
4
|
+
|
|
3
5
|
// === Client → Server ===
|
|
4
6
|
|
|
5
7
|
export interface WorkspaceFilesListRequest {
|
|
@@ -117,16 +119,6 @@ export interface ToolNamesListResponse {
|
|
|
117
119
|
schemas?: Record<string, ToolInputSchema>;
|
|
118
120
|
}
|
|
119
121
|
|
|
120
|
-
/** Server push — broadcast when IDENTITY.md changes on disk. */
|
|
121
|
-
export interface IdentityChanged {
|
|
122
|
-
type: "identity_changed";
|
|
123
|
-
name: string;
|
|
124
|
-
role: string;
|
|
125
|
-
personality: string;
|
|
126
|
-
emoji: string;
|
|
127
|
-
home: string;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
122
|
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
131
123
|
|
|
132
124
|
export type _WorkspaceClientMessages =
|
|
@@ -142,4 +134,4 @@ export type _WorkspaceServerMessages =
|
|
|
142
134
|
| IdentityGetResponse
|
|
143
135
|
| ToolPermissionSimulateResponse
|
|
144
136
|
| ToolNamesListResponse
|
|
145
|
-
|
|
|
137
|
+
| IdentityChangedEvent;
|