@vellumai/assistant 0.8.3 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +2 -2
- package/docker-entrypoint.sh +0 -1
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/knip.json +2 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +2 -0
- package/openapi.yaml +1492 -100
- package/package.json +1 -1
- package/src/__tests__/agent-loop-exit-reason.test.ts +4 -5
- package/src/__tests__/agent-loop-override-profile.test.ts +1 -1
- package/src/__tests__/agent-loop.test.ts +88 -3
- package/src/__tests__/anthropic-provider.test.ts +302 -33
- package/src/__tests__/approval-cascade.test.ts +1 -1
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +3 -3
- package/src/__tests__/audit-log-rotation.test.ts +70 -16
- package/src/__tests__/background-workers-disk-pressure.test.ts +4 -3
- package/src/__tests__/btw-routes.test.ts +2 -3
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/channel-delivery-store.test.ts +193 -0
- package/src/__tests__/channel-guardian.test.ts +3 -3
- package/src/__tests__/channel-reply-delivery.test.ts +284 -5
- package/src/__tests__/channel-retry-sweep.test.ts +274 -1
- package/src/__tests__/checker.test.ts +6 -15
- package/src/__tests__/compaction-events.test.ts +2 -1
- package/src/__tests__/compactor-call-site-logging.test.ts +214 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +110 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +5 -11
- package/src/__tests__/computer-use-tools.test.ts +2 -4
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/context-token-estimator.test.ts +91 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +55 -4
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +228 -8
- package/src/__tests__/conversation-agent-loop.test.ts +188 -129
- package/src/__tests__/conversation-app-control-instantiation.test.ts +2 -5
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-clean-command.test.ts +137 -0
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -1
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-error.test.ts +31 -0
- package/src/__tests__/conversation-fork-crud.test.ts +324 -0
- package/src/__tests__/conversation-lifecycle.test.ts +53 -12
- package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
- package/src/__tests__/conversation-load-history-stripped.test.ts +279 -0
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-process-callsite.test.ts +1 -1
- package/src/__tests__/conversation-provider-retry-repair.test.ts +2 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-routes-disk-view.test.ts +109 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +35 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +264 -81
- package/src/__tests__/conversation-seed-composer.test.ts +66 -4
- package/src/__tests__/conversation-skill-tools.test.ts +2 -5
- package/src/__tests__/conversation-slash-commands.test.ts +36 -8
- package/src/__tests__/conversation-slash-queue.test.ts +1 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +1 -1
- package/src/__tests__/conversation-speed-override.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +220 -0
- package/src/__tests__/conversation-sync-tags.test.ts +99 -32
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +9 -7
- package/src/__tests__/credential-execution-tools.test.ts +6 -6
- package/src/__tests__/credential-security-invariants.test.ts +7 -0
- package/src/__tests__/credential-vault-unit.test.ts +2 -2
- package/src/__tests__/cu-unified-flow.test.ts +10 -1
- package/src/__tests__/dm-backfill.test.ts +64 -0
- package/src/__tests__/dm-persistence.test.ts +33 -0
- package/src/__tests__/document-find-replace.test.ts +501 -0
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/first-greeting.test.ts +23 -2
- package/src/__tests__/gateway-flag-listener.test.ts +237 -0
- package/src/__tests__/gemini-provider.test.ts +78 -0
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/guardian-outbound-http.test.ts +7 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
- package/src/__tests__/headless-browser-navigate.test.ts +172 -0
- package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
- package/src/__tests__/heartbeat-service.test.ts +4 -0
- package/src/__tests__/host-bash-proxy.test.ts +6 -0
- package/src/__tests__/host-browser-proxy.test.ts +10 -0
- package/src/__tests__/host-cu-proxy.test.ts +8 -1
- package/src/__tests__/host-file-proxy.test.ts +8 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/host-transfer-proxy.test.ts +8 -1
- package/src/__tests__/identity-routes.test.ts +57 -0
- package/src/__tests__/inbound-slack-persistence.test.ts +3 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/injector-chain.test.ts +2 -0
- package/src/__tests__/injector-document-comments.test.ts +378 -0
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +4 -25
- package/src/__tests__/list-messages-attachments.test.ts +21 -17
- package/src/__tests__/list-messages-hidden-metadata.test.ts +217 -0
- package/src/__tests__/list-messages-page-latest.test.ts +130 -14
- package/src/__tests__/list-messages-tool-merge.test.ts +77 -17
- package/src/__tests__/llm-context-normalization.test.ts +0 -2
- package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
- package/src/__tests__/llm-resolver.test.ts +161 -9
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/log-export-routes.test.ts +99 -2
- package/src/__tests__/logger.test.ts +89 -0
- package/src/__tests__/mcp-abort-signal.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +31 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
- package/src/__tests__/message-queue-steer.test.ts +114 -0
- package/src/__tests__/model-intents.test.ts +2 -4
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/onboarding-template-contract.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +151 -0
- package/src/__tests__/openai-responses-provider.test.ts +118 -16
- package/src/__tests__/outbound-slack-persistence.test.ts +187 -20
- package/src/__tests__/pending-interactions-resolved-event.test.ts +189 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -5
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +2 -2
- package/src/__tests__/plugin-source-watcher.test.ts +302 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +13 -6
- package/src/__tests__/plugin-types.test.ts +3 -2
- package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
- package/src/__tests__/pricing.test.ts +12 -0
- package/src/__tests__/process-message-background-slack.test.ts +1 -51
- package/src/__tests__/process-message-display-content.test.ts +21 -16
- package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
- package/src/__tests__/registry.test.ts +2 -8
- package/src/__tests__/require-fresh-approval.test.ts +2 -2
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
- package/src/__tests__/server-history-render.test.ts +83 -4
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
- package/src/__tests__/skill-feature-flags.test.ts +2 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +4 -7
- package/src/__tests__/skill-projection.benchmark.test.ts +2 -6
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/steer-tool-repair.test.ts +249 -0
- package/src/__tests__/subagent-notify-parent.test.ts +1 -1
- package/src/__tests__/suggestion-routes.test.ts +1 -0
- package/src/__tests__/sync-message-contract.test.ts +59 -0
- package/src/__tests__/system-prompt.test.ts +161 -124
- package/src/__tests__/terminal-tools.test.ts +12 -2
- package/src/__tests__/thinking-block-replay.test.ts +113 -0
- package/src/__tests__/thread-backfill.test.ts +370 -22
- package/src/__tests__/tool-approval-handler.test.ts +1 -5
- package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +15 -5
- package/src/__tests__/tool-executor.test.ts +89 -53
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +167 -0
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +1 -1
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/usage-routes.test.ts +3 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -2
- package/src/__tests__/web-fetch.test.ts +2 -2
- package/src/__tests__/workspace-git-service.test.ts +94 -10
- package/src/__tests__/workspace-migration-088-deprecate-background-conversation-override.test.ts +158 -0
- package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
- package/src/acp/prepare-agent-env.ts +78 -0
- package/src/acp/session-manager.ts +1 -1
- package/src/agent/attachments.ts +1 -0
- package/src/agent/loop.ts +65 -20
- package/src/api/README.md +5 -0
- package/src/api/index.ts +4 -0
- package/src/api/package.json +10 -0
- package/src/background-wake/background-wake-routes.test.ts +233 -0
- package/src/background-wake/next-wake.test.ts +289 -0
- package/src/background-wake/next-wake.ts +172 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/browser/operations.ts +15 -0
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/conversations-slack.test.ts +572 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
- package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
- package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
- package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +10 -12
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/conversations.ts +128 -1
- package/src/cli/commands/domain.ts +91 -41
- package/src/cli/commands/inference-providers.ts +147 -1
- package/src/cli/commands/inference.ts +93 -40
- package/src/cli/commands/memory-v2-compare-render.ts +115 -0
- package/src/cli/commands/memory-v2.ts +483 -0
- package/src/cli/commands/memory-v3-render.ts +344 -0
- package/src/cli/commands/memory-v3.ts +316 -0
- package/src/cli/commands/notifications.ts +24 -2
- package/src/cli/program.ts +2 -0
- package/src/cli/utils/conversation-id.ts +17 -5
- package/src/config/assistant-feature-flags.ts +21 -9
- package/src/config/bundled-skills/app-builder/SKILL.md +2 -2
- package/src/config/bundled-skills/document-editor/SKILL.md +124 -0
- package/src/config/bundled-skills/document-editor/TOOLS.json +258 -0
- package/src/config/bundled-skills/document-editor/tools/comment-list.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-reply.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-resolve.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-find.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-replace-text.ts +12 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
- package/src/config/bundled-skills/media-processing/SKILL.md +8 -0
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
- package/src/config/bundled-skills/schedule/SKILL.md +8 -0
- package/src/config/bundled-tool-registry.ts +24 -12
- package/src/config/call-site-defaults.ts +20 -0
- package/src/config/feature-flag-registry.json +115 -3
- package/src/config/llm-resolver.ts +16 -2
- package/src/config/schemas/__tests__/memory-v2.test.ts +217 -1
- package/src/config/schemas/call-site-catalog.ts +35 -0
- package/src/config/schemas/llm.ts +14 -0
- package/src/config/schemas/memory-v2.ts +294 -1
- package/src/config/schemas/memory.ts +2 -1
- package/src/context/compactor.ts +60 -1
- package/src/context/token-estimator.ts +47 -4
- package/src/context/window-manager.ts +25 -0
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/credential-health/credential-health-service.ts +34 -19
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +66 -6
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +1 -1
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +357 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +287 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +155 -36
- package/src/daemon/conversation-agent-loop.ts +307 -88
- package/src/daemon/conversation-error.ts +31 -1
- package/src/daemon/conversation-lifecycle.ts +149 -118
- package/src/daemon/conversation-messaging.ts +3 -0
- package/src/daemon/conversation-process.ts +273 -0
- package/src/daemon/conversation-queue-manager.ts +14 -0
- package/src/daemon/conversation-runtime-assembly.ts +145 -84
- package/src/daemon/conversation-slash.ts +37 -5
- package/src/daemon/conversation-surfaces.ts +45 -2
- package/src/daemon/conversation-tool-setup.ts +70 -3
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +54 -32
- package/src/daemon/disk-pressure-guard.ts +14 -2
- package/src/daemon/first-greeting.ts +10 -0
- package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +498 -0
- package/src/daemon/handlers/config-a2a.ts +160 -0
- package/src/daemon/handlers/config-model.test.ts +2 -0
- package/src/daemon/handlers/conversations.ts +90 -3
- package/src/daemon/handlers/shared.ts +92 -29
- package/src/daemon/host-bash-proxy.ts +1 -1
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +5 -5
- package/src/daemon/host-file-proxy.ts +5 -5
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +11 -11
- package/src/daemon/lifecycle.ts +40 -23
- package/src/daemon/meet-manifest-loader.ts +1 -7
- package/src/daemon/message-protocol.ts +4 -0
- package/src/daemon/message-types/conversations.ts +14 -9
- package/src/daemon/message-types/document-comments.ts +50 -0
- package/src/daemon/message-types/home.ts +1 -13
- package/src/daemon/message-types/messages.ts +66 -7
- package/src/daemon/message-types/surfaces.ts +3 -1
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/message-types/web-activity.ts +57 -0
- package/src/daemon/plugin-source-watcher.ts +135 -3
- package/src/daemon/process-message.ts +69 -12
- package/src/daemon/shutdown-handlers.ts +24 -5
- package/src/daemon/switch-inference-profile-tool.ts +52 -0
- package/src/daemon/tool-setup-types.ts +13 -0
- package/src/daemon/trust-context.ts +6 -0
- package/src/documents/document-comments-store.test.ts +338 -0
- package/src/documents/document-comments-store.ts +237 -0
- package/src/documents/document-store.ts +202 -0
- package/src/events/relationship-state-updated.ts +25 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +1 -2
- package/src/heartbeat/heartbeat-service.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +33 -2
- package/src/home/feed-types.ts +6 -1
- package/src/home/home-content-refresh.ts +52 -0
- package/src/home/home-greeting-cache.ts +69 -0
- package/src/home/home-greeting.ts +85 -0
- package/src/home/suggested-prompts.ts +168 -9
- package/src/ipc/gateway-flag-listener.ts +123 -0
- package/src/ipc/skill-routes/registries.ts +8 -12
- package/src/memory/__tests__/db-async-query.test.ts +165 -0
- package/src/memory/__tests__/db-maintenance.test.ts +115 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +241 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +135 -2
- package/src/memory/__tests__/memory-retrospective-job.test.ts +327 -6
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-crud.ts +191 -100
- package/src/memory/conversation-starters-cadence.ts +3 -1
- package/src/memory/conversation-title-service.ts +19 -3
- package/src/memory/db-async-query.ts +214 -0
- package/src/memory/db-init.ts +26 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/delivery-crud.ts +41 -0
- package/src/memory/delivery-status.ts +141 -15
- package/src/memory/external-conversation-store.ts +32 -1
- package/src/memory/graph/bootstrap.ts +8 -1
- package/src/memory/graph/capability-seed.ts +7 -3
- package/src/memory/graph/conversation-graph-memory.ts +100 -17
- package/src/memory/graph/extraction.ts +1 -5
- package/src/memory/graph/graph-search.ts +7 -1
- package/src/memory/indexer.ts +28 -18
- package/src/memory/job-handlers/cleanup.ts +76 -18
- package/src/memory/job-handlers/conversation-starters.ts +1 -4
- package/src/memory/jobs/embed-pkb-file.ts +6 -1
- package/src/memory/jobs-store.ts +14 -0
- package/src/memory/jobs-worker.ts +68 -15
- package/src/memory/llm-request-log-source-clickhouse.ts +42 -2
- package/src/memory/llm-request-log-source-local.ts +7 -0
- package/src/memory/llm-request-log-source.ts +9 -2
- package/src/memory/llm-request-log-store.ts +43 -1
- package/src/memory/llm-usage-store.ts +24 -0
- package/src/memory/memory-retrospective-constants.ts +28 -0
- package/src/memory/memory-retrospective-enqueue.ts +11 -3
- package/src/memory/memory-retrospective-job.ts +413 -18
- package/src/memory/memory-retrospective-startup-cleanup.ts +3 -3
- package/src/memory/memory-v2-activation-log-store.ts +41 -14
- package/src/memory/migrations/100-core-tables.ts +1 -0
- package/src/memory/migrations/109-external-conversation-bindings.ts +1 -0
- package/src/memory/migrations/253-conversation-last-notified-profile.ts +15 -0
- package/src/memory/migrations/253-document-comments.ts +47 -0
- package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +43 -0
- package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +24 -0
- package/src/memory/migrations/256-memory-v2-injection-events.ts +113 -0
- package/src/memory/migrations/257-strip-base-url-non-openai-compatible.ts +22 -0
- package/src/memory/migrations/258-onboarding-events-prior-assistants.ts +13 -0
- package/src/memory/migrations/259-conversation-cleaned-at.ts +33 -0
- package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
- package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
- package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
- package/src/memory/migrations/index.ts +34 -0
- package/src/memory/migrations/registry.ts +58 -0
- package/src/memory/onboarding-events-store.ts +7 -0
- package/src/memory/schema/calls.ts +1 -0
- package/src/memory/schema/conversations.ts +3 -0
- package/src/memory/schema/infrastructure.ts +22 -0
- package/src/memory/tool-usage-store.ts +36 -8
- package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
- package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
- package/src/memory/v2/__tests__/harness-metrics.test.ts +74 -0
- package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +225 -0
- package/src/memory/v2/__tests__/harness-runner.test.ts +109 -0
- package/src/memory/v2/__tests__/injection-events.test.ts +318 -0
- package/src/memory/v2/__tests__/injection.test.ts +158 -112
- package/src/memory/v2/__tests__/page-index.test.ts +365 -1
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +660 -4
- package/src/memory/v2/consolidation-job.ts +14 -0
- package/src/memory/v2/harness/compare.ts +57 -0
- package/src/memory/v2/harness/metrics.ts +124 -0
- package/src/memory/v2/harness/oracle.ts +145 -0
- package/src/memory/v2/harness/replay-input.ts +224 -0
- package/src/memory/v2/harness/retriever.ts +74 -0
- package/src/memory/v2/harness/router-retriever.ts +43 -0
- package/src/memory/v2/harness/runner.ts +106 -0
- package/src/memory/v2/harness/trace.ts +58 -0
- package/src/memory/v2/injection-events.ts +101 -0
- package/src/memory/v2/injection.ts +42 -25
- package/src/memory/v2/page-index.ts +209 -7
- package/src/memory/v2/page-store.ts +18 -0
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +369 -62
- package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
- package/src/memory/v3/__tests__/consolidation-job.test.ts +468 -0
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
- package/src/memory/v3/__tests__/edges.test.ts +563 -0
- package/src/memory/v3/__tests__/filter.test.ts +512 -0
- package/src/memory/v3/__tests__/gate.test.ts +574 -0
- package/src/memory/v3/__tests__/index-composition.test.ts +233 -0
- package/src/memory/v3/__tests__/loop.test.ts +530 -0
- package/src/memory/v3/__tests__/retriever.test.ts +226 -0
- package/src/memory/v3/__tests__/scouts.test.ts +440 -0
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +312 -0
- package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
- package/src/memory/v3/__tests__/traversal.test.ts +469 -0
- package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
- package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
- package/src/memory/v3/__tests__/tree-walk.test.ts +707 -0
- package/src/memory/v3/__tests__/validate.test.ts +245 -0
- package/src/memory/v3/auto-edges.ts +223 -0
- package/src/memory/v3/coactivation-store.ts +124 -0
- package/src/memory/v3/consolidation-job.ts +323 -0
- package/src/memory/v3/edge-learning-job.ts +160 -0
- package/src/memory/v3/edges.ts +249 -0
- package/src/memory/v3/filter.ts +281 -0
- package/src/memory/v3/gate.ts +334 -0
- package/src/memory/v3/index-composition.ts +113 -0
- package/src/memory/v3/llm-capture.ts +46 -0
- package/src/memory/v3/loop.ts +382 -0
- package/src/memory/v3/maintenance.ts +144 -0
- package/src/memory/v3/prompt-context.ts +33 -0
- package/src/memory/v3/prompts/consolidation.ts +458 -0
- package/src/memory/v3/prompts/system-prompts.ts +196 -0
- package/src/memory/v3/retriever.ts +33 -0
- package/src/memory/v3/scouts.ts +420 -0
- package/src/memory/v3/shadow-middleware.ts +305 -0
- package/src/memory/v3/traversal.ts +206 -0
- package/src/memory/v3/tree-index.ts +237 -0
- package/src/memory/v3/tree-store.ts +394 -0
- package/src/memory/v3/tree-walk.ts +351 -0
- package/src/memory/v3/types.ts +65 -0
- package/src/memory/v3/validate.ts +300 -0
- package/src/messaging/providers/index.ts +7 -1
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +329 -3
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +34 -1
- package/src/messaging/providers/slack/adapter.ts +178 -25
- package/src/messaging/providers/slack/api.test.ts +54 -0
- package/src/messaging/providers/slack/api.ts +119 -3
- package/src/messaging/providers/slack/client.ts +12 -0
- package/src/messaging/providers/slack/deep-link.ts +20 -1
- package/src/messaging/providers/slack/message-metadata.test.ts +48 -0
- package/src/messaging/providers/slack/message-metadata.ts +156 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +107 -75
- package/src/messaging/providers/slack/render-transcript.ts +176 -49
- package/src/messaging/providers/slack/send.test.ts +77 -0
- package/src/messaging/providers/slack/send.ts +8 -2
- package/src/messaging/providers/slack/types.ts +14 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +4 -1
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +116 -54
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/conversation-seed-composer.ts +14 -2
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/deferred-emit.ts +135 -0
- package/src/notifications/emit-signal.ts +38 -50
- package/src/notifications/home-feed-side-effect.ts +60 -30
- package/src/oauth/connect-orchestrator.ts +3 -0
- package/src/oauth/credential-token-resolver.ts +2 -0
- package/src/oauth/manual-token-connection.ts +19 -0
- package/src/oauth/oauth-store.ts +12 -0
- package/src/oauth/seed-providers.ts +22 -0
- package/src/permissions/prompter.ts +8 -5
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +6 -3
- package/src/plugin-api/index.ts +4 -0
- package/src/plugin-api/types.ts +7 -33
- package/src/plugins/defaults/index.ts +6 -0
- package/src/plugins/defaults/injectors.ts +100 -20
- package/src/plugins/external-plugin-loader.ts +5 -68
- package/src/plugins/types.ts +11 -16
- package/src/proactive-artifact/aux-message-injector.ts +17 -4
- package/src/prompts/__tests__/system-prompt.test.ts +46 -2
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/normalize-onboarding.ts +40 -0
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +69 -19
- package/src/prompts/system-prompt.ts +118 -216
- package/src/prompts/template-detection.ts +37 -0
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +141 -0
- package/src/prompts/templates/BOOTSTRAP.md +10 -2
- package/src/prompts/templates/VOICE.md +3 -0
- package/src/prompts/templates/system-sections.ts +281 -9
- package/src/providers/__tests__/connection-model-compat.test.ts +234 -0
- package/src/providers/__tests__/retry-callsite.test.ts +85 -5
- package/src/providers/anthropic/client.ts +159 -66
- package/src/providers/call-site-routing.ts +14 -2
- package/src/providers/connection-model-compat.ts +38 -0
- package/src/providers/connection-resolution.ts +16 -2
- package/src/providers/fireworks/client.ts +20 -2
- package/src/providers/gemini/client.ts +49 -6
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +342 -0
- package/src/providers/inference/__tests__/base-url-security.test.ts +189 -0
- package/src/providers/inference/__tests__/codex-token-refresh.test.ts +254 -0
- package/src/providers/inference/adapter-factory.ts +18 -1
- package/src/providers/inference/auth.ts +3 -3
- package/src/providers/inference/codex-token-refresh.ts +128 -0
- package/src/providers/inference/resolve-auth.ts +49 -6
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +91 -1
- package/src/providers/model-intents.ts +1 -1
- package/src/providers/openai/chat-completions-provider.ts +63 -23
- package/src/providers/openai/codex-models.ts +18 -0
- package/src/providers/openai/responses-provider.ts +86 -23
- package/src/providers/openrouter/client.ts +5 -1
- package/src/providers/provider-send-message.ts +7 -1
- package/src/providers/retry.ts +34 -3
- package/src/providers/thinking-config.ts +26 -1
- package/src/providers/types.ts +25 -0
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +214 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +128 -0
- package/src/runtime/agent-wake.ts +152 -56
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +43 -3
- package/src/runtime/background-job-runner.ts +26 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/channel-reply-delivery.ts +182 -47
- package/src/runtime/channel-retry-sweep.ts +141 -16
- package/src/runtime/http-types.ts +7 -6
- package/src/runtime/migrations/vbundle-builder.ts +10 -3
- package/src/runtime/pending-interactions.ts +50 -8
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +162 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +161 -1
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +14 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +290 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +280 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +266 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/approval-routes.ts +4 -1
- package/src/runtime/routes/avatar-routes.ts +10 -10
- package/src/runtime/routes/background-wake-routes.ts +188 -0
- package/src/runtime/routes/browser-tabs-routes.ts +200 -0
- package/src/runtime/routes/btw-routes.ts +0 -6
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +246 -0
- package/src/runtime/routes/content-source-routes.ts +78 -0
- package/src/runtime/routes/conversation-cli-routes.ts +147 -2
- package/src/runtime/routes/conversation-list-routes.ts +12 -4
- package/src/runtime/routes/conversation-management-routes.ts +77 -20
- package/src/runtime/routes/conversation-query-routes.ts +196 -31
- package/src/runtime/routes/conversation-routes.ts +472 -425
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/document-comments-routes.ts +287 -0
- package/src/runtime/routes/documents-routes.ts +33 -0
- package/src/runtime/routes/domain-routes.ts +60 -10
- package/src/runtime/routes/email-routes.ts +5 -2
- package/src/runtime/routes/events-routes.ts +54 -10
- package/src/runtime/routes/group-routes.ts +24 -8
- package/src/runtime/routes/home-feed-routes.ts +6 -3
- package/src/runtime/routes/host-app-control-routes.ts +1 -1
- package/src/runtime/routes/host-browser-routes.ts +17 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/identity-routes.ts +21 -0
- package/src/runtime/routes/inbound-message-handler.ts +288 -58
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +365 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +283 -82
- package/src/runtime/routes/index.ts +20 -4
- package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
- package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
- package/src/runtime/routes/inference-provider-connection-routes.ts +63 -7
- package/src/runtime/routes/integrations/a2a.ts +60 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/log-export-routes.ts +39 -0
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +427 -0
- package/src/runtime/routes/memory-v3-routes.ts +316 -0
- package/src/runtime/routes/migration-routes.ts +21 -24
- package/src/runtime/routes/notification-routes.ts +19 -2
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/question-routes.ts +4 -1
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- package/src/runtime/routes/sanity-routes.ts +159 -0
- package/src/runtime/routes/secret-routes.ts +25 -5
- package/src/runtime/routes/settings-routes.ts +12 -11
- package/src/runtime/routes/slack-channel-routes.ts +188 -0
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/services/conversation-serializer.ts +30 -4
- package/src/runtime/sync/resource-sync-events.ts +106 -38
- package/src/runtime/sync/sync-publisher.test.ts +49 -0
- package/src/runtime/sync/sync-publisher.ts +2 -1
- package/src/runtime/verification-outbound-actions.ts +73 -1
- package/src/schedule/integration-status.ts +3 -1
- package/src/security/__tests__/oauth2-device-code.test.ts +479 -0
- package/src/security/oauth2-device-code.ts +307 -0
- package/src/security/oauth2.ts +26 -9
- package/src/security/secure-keys.ts +5 -0
- package/src/skills/catalog-install.ts +6 -2
- package/src/telemetry/types.ts +12 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/acp/spawn.test.ts +119 -0
- package/src/tools/acp/spawn.ts +15 -2
- package/src/tools/apps/definitions.ts +2 -8
- package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
- package/src/tools/ask-question/ask-question-tool.ts +38 -45
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +150 -0
- package/src/tools/browser/browser-execution.ts +106 -0
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +28 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +4 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +22 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +42 -2
- package/src/tools/browser/cdp-client/factory.ts +171 -4
- package/src/tools/browser/cdp-client/local-cdp-client.ts +21 -0
- package/src/tools/browser/cdp-client/types.ts +101 -0
- package/src/tools/browser/pinned-tabs.ts +146 -0
- package/src/tools/computer-use/definitions.ts +22 -78
- package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
- package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
- package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
- package/src/tools/credentials/vault.ts +3 -9
- package/src/tools/document/document-comment-tool.test.ts +379 -0
- package/src/tools/document/document-comment-tool.ts +156 -0
- package/src/tools/document/document-tool.ts +187 -2
- package/src/tools/execution-target.ts +21 -23
- package/src/tools/executor.ts +6 -1
- package/src/tools/filesystem/edit.ts +3 -9
- package/src/tools/filesystem/list.ts +3 -9
- package/src/tools/filesystem/read.ts +3 -9
- package/src/tools/filesystem/write.ts +3 -9
- package/src/tools/host-filesystem/edit.ts +3 -9
- package/src/tools/host-filesystem/read.ts +3 -9
- package/src/tools/host-filesystem/transfer.ts +3 -9
- package/src/tools/host-filesystem/write.ts +3 -9
- package/src/tools/host-terminal/host-shell.ts +3 -9
- package/src/tools/mcp/mcp-tool-factory.ts +1 -8
- package/src/tools/memory/register.test.ts +1 -1
- package/src/tools/memory/register.ts +4 -9
- package/src/tools/network/__tests__/web-fetch-metadata.test.ts +229 -0
- package/src/tools/network/__tests__/web-search-metadata.test.ts +346 -0
- package/src/tools/network/domain-normalize.ts +17 -0
- package/src/tools/network/web-fetch.ts +216 -73
- package/src/tools/network/web-search.ts +216 -98
- package/src/tools/registry.ts +7 -23
- package/src/tools/schema-transforms.ts +1 -1
- package/src/tools/skills/execute.ts +3 -9
- package/src/tools/skills/load.ts +3 -9
- package/src/tools/skills/skill-tool-factory.ts +1 -8
- package/src/tools/subagent/notify-parent.ts +3 -9
- package/src/tools/system/request-permission.ts +3 -9
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-approval-handler.ts +19 -12
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/types.ts +31 -98
- package/src/tools/ui-surface/definitions.ts +9 -23
- package/src/types/onboarding-context.ts +4 -0
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/__tests__/favicon.test.ts +84 -0
- package/src/util/favicon.ts +40 -0
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -7
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/git-service.ts +75 -4
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/088-deprecate-background-conversation-override.ts +103 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/registry.ts +4 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
- package/src/__tests__/message-complete-display-id.test.ts +0 -175
- package/src/config/bundled-skills/document/SKILL.md +0 -54
- package/src/config/bundled-skills/document/TOOLS.json +0 -106
- package/src/daemon/seed-files.ts +0 -18
- package/src/prompts/cache-boundary.ts +0 -8
- package/src/runtime/routes/interface-routes.ts +0 -43
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-create.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-delete.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-list.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-read.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-update.ts +0 -0
package/src/daemon/lifecycle.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { join } from "node:path";
|
|
|
2
2
|
|
|
3
3
|
import { config as dotenvConfig } from "dotenv";
|
|
4
4
|
|
|
5
|
+
import { registerBackgroundWakeRuntime } from "../background-wake/runtime-registry.js";
|
|
5
6
|
import { setPointerMessageProcessor } from "../calls/call-pointer-messages.js";
|
|
6
7
|
import { reconcileCallsOnStartup } from "../calls/call-recovery.js";
|
|
7
8
|
import { setRelayBroadcast } from "../calls/relay-server.js";
|
|
@@ -32,8 +33,13 @@ import {
|
|
|
32
33
|
} from "../credential-execution/startup-timeout.js";
|
|
33
34
|
import { FilingService } from "../filing/filing-service.js";
|
|
34
35
|
import { HeartbeatService } from "../heartbeat/heartbeat-service.js";
|
|
36
|
+
import { startHomeContentRefresh } from "../home/home-content-refresh.js";
|
|
35
37
|
import { backfillRelationshipStateIfMissing } from "../home/relationship-state-writer.js";
|
|
36
38
|
import { closeSentry, initSentry, setSentryDeviceId } from "../instrument.js";
|
|
39
|
+
import {
|
|
40
|
+
startGatewayFlagListener,
|
|
41
|
+
stopGatewayFlagListener,
|
|
42
|
+
} from "../ipc/gateway-flag-listener.js";
|
|
37
43
|
import { getMcpServerManager } from "../mcp/manager.js";
|
|
38
44
|
import {
|
|
39
45
|
getAttachmentsByIds,
|
|
@@ -44,16 +50,13 @@ import { deleteMessageById, getMessages } from "../memory/conversation-crud.js";
|
|
|
44
50
|
import { getDb } from "../memory/db-connection.js";
|
|
45
51
|
import { initializeDb } from "../memory/db-init.js";
|
|
46
52
|
import { selectEmbeddingBackend } from "../memory/embedding-backend.js";
|
|
47
|
-
import { enqueueMemoryJob } from "../memory/jobs-store.js";
|
|
53
|
+
import { enqueueMemoryJob, isMemoryEnabled } from "../memory/jobs-store.js";
|
|
48
54
|
import { startMemoryJobsWorker } from "../memory/jobs-worker.js";
|
|
49
55
|
import { initQdrantClient, resolveQdrantUrl } from "../memory/qdrant-client.js";
|
|
50
56
|
import { QdrantManager } from "../memory/qdrant-manager.js";
|
|
51
57
|
import { rotateToolInvocations } from "../memory/tool-usage-store.js";
|
|
52
58
|
import { sweepConceptPageFrontmatter } from "../memory/v2/frontmatter-sweep.js";
|
|
53
|
-
import {
|
|
54
|
-
emitNotificationSignal,
|
|
55
|
-
registerBroadcastFn,
|
|
56
|
-
} from "../notifications/emit-signal.js";
|
|
59
|
+
import { emitNotificationSignal } from "../notifications/emit-signal.js";
|
|
57
60
|
import { backfillManualTokenConnections } from "../oauth/manual-token-connection.js";
|
|
58
61
|
import { seedOAuthProviders } from "../oauth/seed-providers.js";
|
|
59
62
|
import { installPluginRuntime } from "../plugins/external-api.js";
|
|
@@ -121,7 +124,6 @@ import {
|
|
|
121
124
|
registerMessagingProviders,
|
|
122
125
|
registerWatcherProviders,
|
|
123
126
|
} from "./providers-setup.js";
|
|
124
|
-
import { seedInterfaceFiles } from "./seed-files.js";
|
|
125
127
|
import { DaemonServer } from "./server.js";
|
|
126
128
|
import { installShutdownHandlers } from "./shutdown-handlers.js";
|
|
127
129
|
import { refreshSkillCapabilityMemories } from "./skill-memory-refresh.js";
|
|
@@ -269,8 +271,13 @@ async function startCesProcess(
|
|
|
269
271
|
|
|
270
272
|
// Entry point for the daemon process itself
|
|
271
273
|
export async function runDaemon(): Promise<void> {
|
|
274
|
+
const startupStartedAt = Date.now();
|
|
275
|
+
// dotenv loads before the first log call so the lazy root logger
|
|
276
|
+
// initializes against the final VELLUM_WORKSPACE_DIR / log path, not
|
|
277
|
+
// whatever was in the live environment at process spawn.
|
|
272
278
|
loadDotEnv();
|
|
273
279
|
validateEnv();
|
|
280
|
+
log.info({ version: APP_VERSION }, "Daemon starting");
|
|
274
281
|
|
|
275
282
|
try {
|
|
276
283
|
// Initialize crash reporting eagerly so early startup failures are
|
|
@@ -353,7 +360,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
353
360
|
log.warn({ err }, "Background feature flag init failed"),
|
|
354
361
|
);
|
|
355
362
|
|
|
356
|
-
|
|
363
|
+
startGatewayFlagListener();
|
|
357
364
|
|
|
358
365
|
log.info("Daemon startup: initializing DB");
|
|
359
366
|
ensurePromptFiles();
|
|
@@ -470,6 +477,10 @@ export async function runDaemon(): Promise<void> {
|
|
|
470
477
|
);
|
|
471
478
|
});
|
|
472
479
|
|
|
480
|
+
// Pre-warm LLM-generated home page content (greeting + suggestion
|
|
481
|
+
// prompts) so the GET handler never triggers LLM calls.
|
|
482
|
+
startHomeContentRefresh();
|
|
483
|
+
|
|
473
484
|
// Backfill injection templates on Slack bot token credentials so the
|
|
474
485
|
// credential proxy can inject Authorization headers. Safe on every startup.
|
|
475
486
|
try {
|
|
@@ -532,11 +543,12 @@ export async function runDaemon(): Promise<void> {
|
|
|
532
543
|
}
|
|
533
544
|
} // end if (dbReady)
|
|
534
545
|
|
|
535
|
-
// Populate the managed-connection cache so
|
|
536
|
-
//
|
|
537
|
-
// system
|
|
538
|
-
//
|
|
539
|
-
//
|
|
546
|
+
// Populate the managed-connection cache so the `14-connected-services`
|
|
547
|
+
// bundled section (rendered by `renderConnectedServices()` in
|
|
548
|
+
// system-sections.ts) can include platform-managed OAuth connections
|
|
549
|
+
// (e.g. Twitter) in the system prompt from the first turn. This is
|
|
550
|
+
// an HTTP-only call with no DB dependency, so it runs regardless of
|
|
551
|
+
// dbReady. A periodic refresh keeps the cache current when users
|
|
540
552
|
// connect/disconnect managed providers while the assistant is running.
|
|
541
553
|
void refreshManagedConnectionCache().catch((err) =>
|
|
542
554
|
log.warn(
|
|
@@ -829,7 +841,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
829
841
|
// If a destructive migration occurred, enqueue a rebuild_index job
|
|
830
842
|
// to re-embed all memory items from the SQLite cache.
|
|
831
843
|
const { migrated } = await qdrantClient.ensureCollection();
|
|
832
|
-
if (migrated) {
|
|
844
|
+
if (migrated && isMemoryEnabled()) {
|
|
833
845
|
enqueueMemoryJob("rebuild_index", {});
|
|
834
846
|
log.info(
|
|
835
847
|
"Qdrant collection was migrated — enqueued rebuild_index job",
|
|
@@ -927,10 +939,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
927
939
|
registerWatcherProviders();
|
|
928
940
|
registerMessagingProviders();
|
|
929
941
|
|
|
930
|
-
// Register the broadcast function for the notification signal pipeline's
|
|
931
|
-
// macOS adapter so it can deliver notification_intent messages to clients.
|
|
932
|
-
registerBroadcastFn((msg) => broadcastMessage(msg));
|
|
933
|
-
|
|
934
942
|
try {
|
|
935
943
|
recoverStaleSchedules();
|
|
936
944
|
} catch (err) {
|
|
@@ -1228,7 +1236,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
1228
1236
|
}
|
|
1229
1237
|
|
|
1230
1238
|
writePid(process.pid);
|
|
1231
|
-
log.info({ pid: process.pid }, "Daemon started");
|
|
1232
1239
|
|
|
1233
1240
|
// Install the `assistant` CLI symlink idempotently on every daemon start.
|
|
1234
1241
|
// Non-blocking — failures are logged but don't affect startup.
|
|
@@ -1264,11 +1271,11 @@ export async function runDaemon(): Promise<void> {
|
|
|
1264
1271
|
})();
|
|
1265
1272
|
|
|
1266
1273
|
if (config.auditLog.retentionDays > 0) {
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1274
|
+
void rotateToolInvocations(config.auditLog.retentionDays).catch(
|
|
1275
|
+
(err) => {
|
|
1276
|
+
log.warn({ err }, "Audit log rotation failed");
|
|
1277
|
+
},
|
|
1278
|
+
);
|
|
1272
1279
|
}
|
|
1273
1280
|
|
|
1274
1281
|
const workspaceHeartbeat = new WorkspaceHeartbeatService();
|
|
@@ -1285,6 +1292,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
1285
1292
|
}),
|
|
1286
1293
|
});
|
|
1287
1294
|
heartbeat.start();
|
|
1295
|
+
registerBackgroundWakeRuntime({ scheduler, heartbeat });
|
|
1288
1296
|
log.info(
|
|
1289
1297
|
{
|
|
1290
1298
|
enabled: heartbeatConfig.enabled,
|
|
@@ -1341,10 +1349,19 @@ export async function runDaemon(): Promise<void> {
|
|
|
1341
1349
|
mcpManager,
|
|
1342
1350
|
telemetryReporter,
|
|
1343
1351
|
cleanupPidFile: () => {
|
|
1352
|
+
stopGatewayFlagListener();
|
|
1344
1353
|
stopDiskPressureGuardForLifecycle();
|
|
1345
1354
|
cleanupPidFile();
|
|
1346
1355
|
},
|
|
1347
1356
|
});
|
|
1357
|
+
|
|
1358
|
+
log.info(
|
|
1359
|
+
{
|
|
1360
|
+
durationMs: Date.now() - startupStartedAt,
|
|
1361
|
+
pid: process.pid,
|
|
1362
|
+
},
|
|
1363
|
+
"Daemon started",
|
|
1364
|
+
);
|
|
1348
1365
|
} catch (err) {
|
|
1349
1366
|
log.error({ err }, "Daemon startup failed — cleaning up");
|
|
1350
1367
|
stopDiskPressureGuardForLifecycle();
|
|
@@ -44,7 +44,6 @@ import type {
|
|
|
44
44
|
ExecutionTarget,
|
|
45
45
|
Tool,
|
|
46
46
|
ToolContext,
|
|
47
|
-
ToolDefinition,
|
|
48
47
|
} from "../tools/types.js";
|
|
49
48
|
import { RiskLevel } from "../tools/types.js";
|
|
50
49
|
import { getLogger } from "../util/logger.js";
|
|
@@ -132,15 +131,11 @@ function buildProxyTool(
|
|
|
132
131
|
supervisor: MeetHostSupervisor,
|
|
133
132
|
manifestHash: string,
|
|
134
133
|
): Tool {
|
|
135
|
-
const definition: ToolDefinition = {
|
|
136
|
-
name: entry.name,
|
|
137
|
-
description: entry.description,
|
|
138
|
-
input_schema: (entry.input_schema as object) ?? {},
|
|
139
|
-
};
|
|
140
134
|
const risk = coerceRiskLevel(entry.risk, entry.name);
|
|
141
135
|
return {
|
|
142
136
|
name: entry.name,
|
|
143
137
|
description: entry.description,
|
|
138
|
+
input_schema: (entry.input_schema as object) ?? {},
|
|
144
139
|
category: entry.category,
|
|
145
140
|
defaultRiskLevel: risk,
|
|
146
141
|
executionMode: "proxy",
|
|
@@ -149,7 +144,6 @@ function buildProxyTool(
|
|
|
149
144
|
ownerSkillId: MEET_SKILL_ID,
|
|
150
145
|
ownerSkillBundled: true,
|
|
151
146
|
ownerSkillVersionHash: manifestHash,
|
|
152
|
-
getDefinition: () => definition,
|
|
153
147
|
execute: async (input, context) => {
|
|
154
148
|
// `dispatchTool` ensures the meet-host child is up + connected
|
|
155
149
|
// before sending the frame, so callers don't need a separate
|
|
@@ -22,6 +22,7 @@ export * from "./message-types/contacts.js";
|
|
|
22
22
|
export * from "./message-types/conversations.js";
|
|
23
23
|
export * from "./message-types/diagnostics.js";
|
|
24
24
|
export * from "./message-types/disk-pressure.js";
|
|
25
|
+
export * from "./message-types/document-comments.js";
|
|
25
26
|
export * from "./message-types/documents.js";
|
|
26
27
|
export * from "./message-types/guardian-actions.js";
|
|
27
28
|
export * from "./message-types/home.js";
|
|
@@ -45,6 +46,7 @@ export * from "./message-types/subagents.js";
|
|
|
45
46
|
export * from "./message-types/surfaces.js";
|
|
46
47
|
export * from "./message-types/sync.js";
|
|
47
48
|
export * from "./message-types/upgrades.js";
|
|
49
|
+
export * from "./message-types/web-activity.js";
|
|
48
50
|
export * from "./message-types/work-items.js";
|
|
49
51
|
export * from "./message-types/workspace.js";
|
|
50
52
|
|
|
@@ -76,6 +78,7 @@ import type {
|
|
|
76
78
|
_DiagnosticsServerMessages,
|
|
77
79
|
} from "./message-types/diagnostics.js";
|
|
78
80
|
import type { _DiskPressureServerMessages } from "./message-types/disk-pressure.js";
|
|
81
|
+
import type { _DocumentCommentsServerMessages } from "./message-types/document-comments.js";
|
|
79
82
|
import type {
|
|
80
83
|
_DocumentsClientMessages,
|
|
81
84
|
_DocumentsServerMessages,
|
|
@@ -192,6 +195,7 @@ export type ServerMessage =
|
|
|
192
195
|
| _BrowserServerMessages
|
|
193
196
|
| _SubagentsServerMessages
|
|
194
197
|
| _DocumentsServerMessages
|
|
198
|
+
| _DocumentCommentsServerMessages
|
|
195
199
|
| _GuardianActionsServerMessages
|
|
196
200
|
| _SyncInvalidationServerMessages
|
|
197
201
|
| _HomeServerMessages
|
|
@@ -224,6 +224,7 @@ export interface ConversationTitleUpdated {
|
|
|
224
224
|
interface ChannelBinding {
|
|
225
225
|
sourceChannel: ChannelId;
|
|
226
226
|
externalChatId: string;
|
|
227
|
+
externalChatName?: string | null;
|
|
227
228
|
externalThreadId?: string | null;
|
|
228
229
|
externalUserId?: string | null;
|
|
229
230
|
displayName?: string | null;
|
|
@@ -236,6 +237,13 @@ interface ChannelBinding {
|
|
|
236
237
|
webUrl?: string;
|
|
237
238
|
};
|
|
238
239
|
};
|
|
240
|
+
slackChannel?: {
|
|
241
|
+
channelId: string;
|
|
242
|
+
name?: string;
|
|
243
|
+
link?: {
|
|
244
|
+
webUrl?: string;
|
|
245
|
+
};
|
|
246
|
+
};
|
|
239
247
|
}
|
|
240
248
|
|
|
241
249
|
/** Attention state metadata for a conversation's latest assistant message. */
|
|
@@ -313,14 +321,12 @@ export interface GenerationHandoff {
|
|
|
313
321
|
queuedCount: number;
|
|
314
322
|
attachments?: UserMessageAttachment[];
|
|
315
323
|
attachmentWarnings?: string[];
|
|
316
|
-
/** Database ID of the final persisted assistant row, if any. */
|
|
317
|
-
messageId?: string;
|
|
318
324
|
/**
|
|
319
|
-
* Database ID
|
|
320
|
-
*
|
|
321
|
-
*
|
|
325
|
+
* Database ID of the completed assistant turn — the id that survives
|
|
326
|
+
* query-time merging when a turn persists multiple assistant rows. Matches
|
|
327
|
+
* the row the messages route returns.
|
|
322
328
|
*/
|
|
323
|
-
|
|
329
|
+
messageId?: string;
|
|
324
330
|
}
|
|
325
331
|
|
|
326
332
|
export interface ModelInfo {
|
|
@@ -396,10 +402,8 @@ export interface HistoryResponse {
|
|
|
396
402
|
type: "history_response";
|
|
397
403
|
conversationId: string;
|
|
398
404
|
messages: Array<{
|
|
399
|
-
/** Database ID used by clients for the rendered message
|
|
405
|
+
/** Database ID used by clients for the rendered message. */
|
|
400
406
|
id?: string;
|
|
401
|
-
/** Concrete persisted row ID for row-scoped actions such as TTS/fork. */
|
|
402
|
-
daemonMessageId?: string;
|
|
403
407
|
role: string;
|
|
404
408
|
text: string;
|
|
405
409
|
timestamp: number;
|
|
@@ -548,6 +552,7 @@ export type ConversationErrorCode =
|
|
|
548
552
|
| "PROVIDER_INVALID_KEY"
|
|
549
553
|
| "MANAGED_KEY_INVALID"
|
|
550
554
|
| "CONTEXT_TOO_LARGE"
|
|
555
|
+
| "BUDGET_YIELD_UNRECOVERED"
|
|
551
556
|
| "CONVERSATION_ABORTED"
|
|
552
557
|
| "CONVERSATION_PROCESSING_FAILED"
|
|
553
558
|
| "DISK_SPACE_CRITICAL"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Document comment event types (Server → Client).
|
|
2
|
+
|
|
3
|
+
export interface DocumentCommentCreated {
|
|
4
|
+
type: "document_comment_created";
|
|
5
|
+
conversationId: string;
|
|
6
|
+
surfaceId: string;
|
|
7
|
+
comment: {
|
|
8
|
+
id: string;
|
|
9
|
+
surfaceId: string;
|
|
10
|
+
author: string;
|
|
11
|
+
content: string;
|
|
12
|
+
anchorStart?: number;
|
|
13
|
+
anchorEnd?: number;
|
|
14
|
+
anchorText?: string;
|
|
15
|
+
parentCommentId?: string;
|
|
16
|
+
status: string;
|
|
17
|
+
createdAt: number;
|
|
18
|
+
updatedAt: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface DocumentCommentResolved {
|
|
23
|
+
type: "document_comment_resolved";
|
|
24
|
+
conversationId: string;
|
|
25
|
+
surfaceId: string;
|
|
26
|
+
commentId: string;
|
|
27
|
+
resolvedBy: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface DocumentCommentReopened {
|
|
31
|
+
type: "document_comment_reopened";
|
|
32
|
+
conversationId: string;
|
|
33
|
+
surfaceId: string;
|
|
34
|
+
commentId: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface DocumentCommentDeleted {
|
|
38
|
+
type: "document_comment_deleted";
|
|
39
|
+
conversationId: string;
|
|
40
|
+
surfaceId: string;
|
|
41
|
+
commentId: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// --- Domain-level union alias (consumed by the barrel file) ---
|
|
45
|
+
|
|
46
|
+
export type _DocumentCommentsServerMessages =
|
|
47
|
+
| DocumentCommentCreated
|
|
48
|
+
| DocumentCommentResolved
|
|
49
|
+
| DocumentCommentReopened
|
|
50
|
+
| DocumentCommentDeleted;
|
|
@@ -7,19 +7,7 @@
|
|
|
7
7
|
* just enough metadata to invalidate a cache and trigger a refetch.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
* Broadcast after the daemon successfully writes a fresh
|
|
12
|
-
* `relationship-state.json` snapshot to disk. Subscribers should
|
|
13
|
-
* refetch `GET /v1/home/state` to read the new state.
|
|
14
|
-
*
|
|
15
|
-
* Only emitted on the success branch of the writer — if the
|
|
16
|
-
* underlying `writeFileSync` throws, this event is NOT published.
|
|
17
|
-
*/
|
|
18
|
-
export interface RelationshipStateUpdated {
|
|
19
|
-
type: "relationship_state_updated";
|
|
20
|
-
/** ISO-8601 timestamp of the newly-written state's `updatedAt` field. */
|
|
21
|
-
updatedAt: string;
|
|
22
|
-
}
|
|
10
|
+
import type { RelationshipStateUpdated } from "../../events/relationship-state-updated.js";
|
|
23
11
|
|
|
24
12
|
/**
|
|
25
13
|
* Broadcast after the daemon successfully writes a fresh home activity
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import type { ChannelId, InterfaceId } from "../../channels/types.js";
|
|
4
4
|
import type { CommandIntent, UserMessageAttachment } from "./shared.js";
|
|
5
|
+
import type { ToolActivityMetadata } from "./web-activity.js";
|
|
5
6
|
|
|
6
7
|
// === Client → Server ===
|
|
7
8
|
|
|
@@ -175,6 +176,9 @@ export interface ToolResult {
|
|
|
175
176
|
approvalReason?: string;
|
|
176
177
|
/** Snapshot of the auto-approve threshold at execution time. */
|
|
177
178
|
riskThreshold?: string;
|
|
179
|
+
/** Structured activity metadata for rich client rendering. Optional; old
|
|
180
|
+
* clients that key off `result` continue to work unchanged. */
|
|
181
|
+
activityMetadata?: ToolActivityMetadata;
|
|
178
182
|
}
|
|
179
183
|
|
|
180
184
|
export interface ConfirmationRequest {
|
|
@@ -300,14 +304,12 @@ export interface MessageComplete {
|
|
|
300
304
|
conversationId?: string;
|
|
301
305
|
attachments?: UserMessageAttachment[];
|
|
302
306
|
attachmentWarnings?: string[];
|
|
303
|
-
/** Database ID of the final persisted assistant row, if any. */
|
|
304
|
-
messageId?: string;
|
|
305
307
|
/**
|
|
306
|
-
* Database ID
|
|
307
|
-
*
|
|
308
|
-
*
|
|
308
|
+
* Database ID of the completed assistant turn — the id that survives
|
|
309
|
+
* query-time merging when a turn persists multiple assistant rows. Matches
|
|
310
|
+
* the row the messages route returns.
|
|
309
311
|
*/
|
|
310
|
-
|
|
312
|
+
messageId?: string;
|
|
311
313
|
/**
|
|
312
314
|
* Distinguishes a real main-turn completion from auxiliary events such as
|
|
313
315
|
* call transcripts, call summaries, and watch notifier outputs. Clients
|
|
@@ -363,6 +365,12 @@ export interface MessageQueuedDeleted {
|
|
|
363
365
|
requestId: string;
|
|
364
366
|
}
|
|
365
367
|
|
|
368
|
+
export interface MessageSteered {
|
|
369
|
+
type: "message_steered";
|
|
370
|
+
conversationId: string;
|
|
371
|
+
requestId: string;
|
|
372
|
+
}
|
|
373
|
+
|
|
366
374
|
export interface SuggestionResponse {
|
|
367
375
|
type: "suggestion_response";
|
|
368
376
|
requestId: string;
|
|
@@ -390,6 +398,39 @@ export interface ConfirmationStateChanged {
|
|
|
390
398
|
toolUseId?: string;
|
|
391
399
|
}
|
|
392
400
|
|
|
401
|
+
/**
|
|
402
|
+
* Lifecycle states reported by `interaction_resolved`.
|
|
403
|
+
*
|
|
404
|
+
* - `"approved"` / `"rejected"` — user-supplied verdict on a confirmation.
|
|
405
|
+
* - `"answered"` — user/client provided a response (secret value, question
|
|
406
|
+
* answer, host-proxy result).
|
|
407
|
+
* - `"cancelled"` — the interaction was torn down without a user response
|
|
408
|
+
* (timeout, abort, dispose, prompter shutdown).
|
|
409
|
+
* - `"superseded"` — invalidated by a newer event (auto-deny on enqueue, a
|
|
410
|
+
* fresh user message arriving while a confirmation was outstanding).
|
|
411
|
+
*/
|
|
412
|
+
export type InteractionResolutionState =
|
|
413
|
+
| "approved"
|
|
414
|
+
| "rejected"
|
|
415
|
+
| "answered"
|
|
416
|
+
| "cancelled"
|
|
417
|
+
| "superseded";
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Broadcast when a pending interaction (confirmation, secret, question,
|
|
421
|
+
* host-proxy request) transitions to a resolved state. Clients use this to
|
|
422
|
+
* drop attention/processing indicators without polling.
|
|
423
|
+
*/
|
|
424
|
+
export interface InteractionResolved {
|
|
425
|
+
type: "interaction_resolved";
|
|
426
|
+
requestId: string;
|
|
427
|
+
/** Conversation id the interaction belongs to. */
|
|
428
|
+
conversationId: string;
|
|
429
|
+
state: InteractionResolutionState;
|
|
430
|
+
/** Kind of the resolved interaction (e.g. "confirmation", "secret", "host_bash"). */
|
|
431
|
+
kind: string;
|
|
432
|
+
}
|
|
433
|
+
|
|
393
434
|
/**
|
|
394
435
|
* Server-side assistant activity lifecycle for thinking indicator placement.
|
|
395
436
|
*
|
|
@@ -426,6 +467,21 @@ export interface AssistantActivityState {
|
|
|
426
467
|
statusText?: string;
|
|
427
468
|
}
|
|
428
469
|
|
|
470
|
+
/**
|
|
471
|
+
* Emitted when the query complexity auto-router selects a non-default
|
|
472
|
+
* profile for the current turn. Clients use this to show an inline
|
|
473
|
+
* notification (e.g. "Using Quality for this response"). Only fires when
|
|
474
|
+
* the router picks a profile — not when the user explicitly pinned one.
|
|
475
|
+
*/
|
|
476
|
+
export interface TurnProfileAutoRouted {
|
|
477
|
+
type: "turn_profile_auto_routed";
|
|
478
|
+
conversationId: string;
|
|
479
|
+
/** Profile key (e.g. "quality-optimized"). */
|
|
480
|
+
profile: string;
|
|
481
|
+
/** Human-readable label (e.g. "Quality"). */
|
|
482
|
+
profileLabel: string;
|
|
483
|
+
}
|
|
484
|
+
|
|
429
485
|
/**
|
|
430
486
|
* Broadcast to clients when a conversation's inference-profile override
|
|
431
487
|
* changes. `profile` is the profile name (a key in `llm.profiles`) or
|
|
@@ -497,8 +553,11 @@ export type _MessagesServerMessages =
|
|
|
497
553
|
| MessageDequeued
|
|
498
554
|
| MessageRequestComplete
|
|
499
555
|
| MessageQueuedDeleted
|
|
556
|
+
| MessageSteered
|
|
500
557
|
| SuggestionResponse
|
|
501
558
|
| TraceEvent
|
|
502
559
|
| ConfirmationStateChanged
|
|
503
560
|
| AssistantActivityState
|
|
504
|
-
|
|
|
561
|
+
| TurnProfileAutoRouted
|
|
562
|
+
| ConversationInferenceProfileUpdated
|
|
563
|
+
| InteractionResolved;
|
|
@@ -10,13 +10,15 @@ export type SurfaceType =
|
|
|
10
10
|
| "confirmation"
|
|
11
11
|
| "dynamic_page"
|
|
12
12
|
| "file_upload"
|
|
13
|
-
| "document_preview"
|
|
13
|
+
| "document_preview"
|
|
14
|
+
| "task_preferences";
|
|
14
15
|
|
|
15
16
|
export const INTERACTIVE_SURFACE_TYPES: SurfaceType[] = [
|
|
16
17
|
"form",
|
|
17
18
|
"confirmation",
|
|
18
19
|
"dynamic_page",
|
|
19
20
|
"file_upload",
|
|
21
|
+
"task_preferences",
|
|
20
22
|
];
|
|
21
23
|
|
|
22
24
|
export interface SurfaceAction {
|
|
@@ -7,6 +7,8 @@ export const SYNC_TAGS = {
|
|
|
7
7
|
assistantSounds: "assistant:self:sounds",
|
|
8
8
|
assistantSchedules: "assistant:self:schedules",
|
|
9
9
|
conversationsList: "conversations:list",
|
|
10
|
+
featureFlagsClient: "feature-flags:client",
|
|
11
|
+
featureFlagsAssistant: "feature-flags:assistant",
|
|
10
12
|
} as const;
|
|
11
13
|
|
|
12
14
|
export type KnownSyncInvalidationTag =
|
|
@@ -24,6 +26,14 @@ export type SyncInvalidationTag =
|
|
|
24
26
|
export interface SyncChangedMessage {
|
|
25
27
|
type: "sync_changed";
|
|
26
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;
|
|
27
37
|
}
|
|
28
38
|
|
|
29
39
|
export const SyncInvalidationTagSchema = z.string().min(1);
|
|
@@ -32,6 +42,7 @@ export const SyncChangedMessageSchema = z
|
|
|
32
42
|
.object({
|
|
33
43
|
type: z.literal("sync_changed"),
|
|
34
44
|
tags: z.array(SyncInvalidationTagSchema).min(1),
|
|
45
|
+
originClientId: z.string().min(1).optional(),
|
|
35
46
|
})
|
|
36
47
|
.strict();
|
|
37
48
|
|
|
@@ -49,11 +60,14 @@ export function conversationMetadataSyncTag(
|
|
|
49
60
|
|
|
50
61
|
export function buildSyncChangedMessage(
|
|
51
62
|
tags: SyncInvalidationTag[],
|
|
63
|
+
originClientId?: string,
|
|
52
64
|
): SyncChangedMessage {
|
|
53
65
|
const dedupedTags = Array.from(new Set(tags));
|
|
66
|
+
const trimmedOrigin = originClientId?.trim();
|
|
54
67
|
const parsed = SyncChangedMessageSchema.parse({
|
|
55
68
|
type: "sync_changed",
|
|
56
69
|
tags: dedupedTags,
|
|
70
|
+
...(trimmedOrigin ? { originClientId: trimmedOrigin } : {}),
|
|
57
71
|
});
|
|
58
72
|
return parsed as SyncChangedMessage;
|
|
59
73
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Shared structured result types for web-search and web-fetch tool activity.
|
|
2
|
+
//
|
|
3
|
+
// These types describe live (SSE-time) metadata that producers (search/fetch
|
|
4
|
+
// tool executors) emit and consumers (clients) render alongside the existing
|
|
5
|
+
// `result: string` payload. Persistence to conversation history is out of
|
|
6
|
+
// scope for this plan; the metadata is live-only.
|
|
7
|
+
|
|
8
|
+
export type WebSearchProviderId =
|
|
9
|
+
| "anthropic-native"
|
|
10
|
+
| "brave"
|
|
11
|
+
| "perplexity"
|
|
12
|
+
| "tavily";
|
|
13
|
+
|
|
14
|
+
export interface WebSearchResultItem {
|
|
15
|
+
rank: number; // 1-indexed
|
|
16
|
+
title: string;
|
|
17
|
+
url: string;
|
|
18
|
+
domain: string; // lowercased host
|
|
19
|
+
faviconUrl?: string;
|
|
20
|
+
snippet?: string; // not populated for anthropic-native (content encrypted)
|
|
21
|
+
age?: string; // Brave-only freshness hint
|
|
22
|
+
score?: number; // Tavily-only
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface WebSearchMetadata {
|
|
26
|
+
query: string;
|
|
27
|
+
provider: WebSearchProviderId;
|
|
28
|
+
resultCount: number;
|
|
29
|
+
durationMs: number;
|
|
30
|
+
results: WebSearchResultItem[];
|
|
31
|
+
/** Present when search itself failed; results[] will be empty. */
|
|
32
|
+
errorMessage?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface WebFetchMetadata {
|
|
36
|
+
url: string;
|
|
37
|
+
finalUrl: string;
|
|
38
|
+
status: number;
|
|
39
|
+
contentType?: string;
|
|
40
|
+
byteCount: number;
|
|
41
|
+
charCount: number;
|
|
42
|
+
truncated: boolean;
|
|
43
|
+
title?: string;
|
|
44
|
+
domain: string;
|
|
45
|
+
faviconUrl?: string;
|
|
46
|
+
redirectCount: number;
|
|
47
|
+
durationMs: number;
|
|
48
|
+
errorMessage?: string;
|
|
49
|
+
/** Set when extracted text is dramatically smaller than raw HTML — likely a JS-rendered SPA whose meaningful content the static fetcher missed. */
|
|
50
|
+
mayRequireJavaScript?: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Discriminated container so future tools can add their own metadata. */
|
|
54
|
+
export interface ToolActivityMetadata {
|
|
55
|
+
webSearch?: WebSearchMetadata;
|
|
56
|
+
webFetch?: WebFetchMetadata;
|
|
57
|
+
}
|