@vellumai/assistant 0.8.4 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +33 -1
- package/ARCHITECTURE.md +3 -3
- package/bunfig.toml +6 -1
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/docs/credential-execution-service.md +6 -6
- package/docs/plugins.md +4 -3
- package/knip.json +2 -1
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +12 -13
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +4 -1
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +16 -14
- package/openapi.yaml +2748 -216
- package/package.json +1 -1
- package/src/__tests__/actor-token-service.test.ts +3 -2
- package/src/__tests__/agent-loop-exit-reason.test.ts +102 -9
- package/src/__tests__/agent-loop-override-profile.test.ts +2 -1
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
- package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
- package/src/__tests__/always-loaded-tools-guard.test.ts +2 -2
- package/src/__tests__/annotate-risk-options.test.ts +1 -0
- package/src/__tests__/anthropic-provider.test.ts +34 -37
- package/src/__tests__/approval-cascade.test.ts +1 -0
- package/src/__tests__/approval-routes-http.test.ts +9 -13
- package/src/__tests__/assert-not-live-db.ts +79 -0
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +12 -28
- package/src/__tests__/audit-log-rotation.test.ts +72 -18
- package/src/__tests__/auto-analysis-end-to-end.test.ts +6 -6
- package/src/__tests__/background-workers-disk-pressure.test.ts +8 -11
- package/src/__tests__/browser-skill-endstate.test.ts +3 -3
- package/src/__tests__/btw-routes.test.ts +5 -5
- package/src/__tests__/call-controller.test.ts +3 -3
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/channel-approval-routes.test.ts +3 -2
- package/src/__tests__/channel-guardian.test.ts +6 -5
- package/src/__tests__/channel-readiness-slack-remote.test.ts +175 -0
- package/src/__tests__/channel-reply-delivery.test.ts +35 -0
- package/src/__tests__/channel-retry-sweep.test.ts +320 -3
- package/src/__tests__/checker.test.ts +18 -27
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/compaction-trail-store.test.ts +264 -0
- package/src/__tests__/compactor-call-site-logging.test.ts +215 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +1 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +12 -16
- package/src/__tests__/computer-use-tools.test.ts +14 -18
- package/src/__tests__/config-loader-backfill.test.ts +13 -28
- package/src/__tests__/config-loader-corrupt.test.ts +5 -5
- package/src/__tests__/config-loader-platform-defaults.test.ts +93 -26
- package/src/__tests__/config-loader-quarantine-bulletin.test.ts +3 -3
- package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -4
- package/src/__tests__/config-schema.test.ts +10 -10
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/connection-model-compat.test.ts +83 -0
- package/src/__tests__/contacts-tools.test.ts +3 -2
- package/src/__tests__/context-token-estimator.test.ts +22 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +5 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +55 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +231 -2
- package/src/__tests__/conversation-agent-loop.test.ts +581 -54
- package/src/__tests__/conversation-analysis-routes.test.ts +1 -0
- package/src/__tests__/conversation-app-control-instantiation.test.ts +31 -24
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -0
- package/src/__tests__/conversation-attention-store.test.ts +101 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +3 -2
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
- 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 +61 -0
- package/src/__tests__/conversation-fork-crud.test.ts +239 -15
- package/src/__tests__/conversation-fork-route.test.ts +3 -2
- package/src/__tests__/conversation-history-web-search.test.ts +1 -0
- package/src/__tests__/conversation-inference-profile-list.test.ts +3 -2
- package/src/__tests__/conversation-inference-profile-route.test.ts +3 -2
- package/src/__tests__/conversation-lifecycle.test.ts +53 -11
- package/src/__tests__/conversation-list-source.test.ts +3 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +2 -1
- package/src/__tests__/{conversation-load-cleaned-at.test.ts → conversation-load-history-stripped.test.ts} +14 -13
- package/src/__tests__/conversation-pairing.test.ts +53 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +26 -7
- package/src/__tests__/conversation-process-callsite.test.ts +1 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-queue.test.ts +333 -291
- package/src/__tests__/conversation-routes-disk-view.test.ts +112 -18
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +33 -8
- package/src/__tests__/conversation-routes-slash-commands.test.ts +68 -2
- package/src/__tests__/conversation-runtime-assembly.test.ts +78 -0
- package/src/__tests__/conversation-skill-tools.test.ts +40 -147
- package/src/__tests__/conversation-slash-queue.test.ts +84 -32
- package/src/__tests__/conversation-slash-unknown.test.ts +5 -0
- package/src/__tests__/conversation-speed-override.test.ts +1 -0
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +46 -0
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +1 -0
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -3
- package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -17
- package/src/__tests__/conversation-sync-tags.test.ts +218 -35
- package/src/__tests__/conversation-title-service.test.ts +1 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +30 -0
- package/src/__tests__/conversation-usage.test.ts +1 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -1
- package/src/__tests__/credential-broker-browser-fill.test.ts +3 -3
- package/src/__tests__/credential-broker-server-use.test.ts +5 -5
- package/src/__tests__/credential-execution-client.test.ts +72 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +19 -19
- package/src/__tests__/credential-execution-tools.test.ts +6 -6
- package/src/__tests__/credential-health-service.test.ts +252 -3
- package/src/__tests__/credential-security-invariants.test.ts +6 -5
- package/src/__tests__/credential-vault-unit.test.ts +21 -21
- package/src/__tests__/credential-vault.test.ts +5 -5
- package/src/__tests__/cross-provider-web-search.test.ts +56 -2
- package/src/__tests__/db-connection-isolation.test.ts +7 -6
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +8 -10
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +7 -10
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +9 -15
- package/src/__tests__/db-test-helpers.ts +58 -0
- package/src/__tests__/disk-pressure-guard.test.ts +58 -41
- package/src/__tests__/disk-pressure-lifecycle.test.ts +13 -10
- package/src/__tests__/disk-pressure-routes.test.ts +0 -33
- package/src/__tests__/disk-pressure-tools.test.ts +0 -4
- package/src/__tests__/dm-persistence.test.ts +26 -40
- package/src/__tests__/document-create-dedupe.test.ts +189 -0
- package/src/__tests__/document-find-replace.test.ts +3 -2
- package/src/__tests__/document-tool-security.test.ts +81 -2
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +5 -4
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/encrypted-store-test-helpers.ts +56 -0
- package/src/__tests__/encrypted-store.test.ts +11 -9
- package/src/__tests__/feature-flag-test-helpers.ts +53 -0
- package/src/__tests__/filing-service.test.ts +1 -0
- package/src/__tests__/first-greeting.test.ts +62 -12
- package/src/__tests__/gateway-flag-listener.test.ts +236 -0
- package/src/__tests__/gemini-provider.test.ts +104 -0
- package/src/__tests__/guardian-action-sweep.test.ts +3 -2
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/guardian-outbound-http.test.ts +10 -7
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +48 -3
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +5 -0
- package/src/__tests__/heartbeat-service.test.ts +5 -0
- package/src/__tests__/helpers/mock-logger.ts +26 -0
- package/src/__tests__/host-bash-routes.test.ts +1 -0
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-shell-tool.test.ts +6 -5
- package/src/__tests__/host-transfer-routes-targeted.test.ts +1 -0
- package/src/__tests__/http-conversation-lineage.test.ts +3 -2
- package/src/__tests__/http-user-message-parity.test.ts +29 -7
- package/src/__tests__/identity-intro-cache.test.ts +133 -22
- package/src/__tests__/inbound-slack-persistence.test.ts +44 -72
- package/src/__tests__/inference-profile-reaper.test.ts +3 -2
- package/src/__tests__/inference-profile-session-ipc.test.ts +3 -2
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/injector-disk-pressure.test.ts +3 -17
- package/src/__tests__/inline-skill-load-permissions.test.ts +4 -4
- package/src/__tests__/list-messages-hidden-metadata.test.ts +80 -0
- package/src/__tests__/list-messages-tool-merge.test.ts +70 -11
- package/src/__tests__/llm-context-normalization.test.ts +42 -0
- 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 +408 -9
- package/src/__tests__/llm-schema.test.ts +1 -1
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/logger.test.ts +89 -0
- package/src/__tests__/manual-token-reconciliation.test.ts +76 -1
- package/src/__tests__/mcp-abort-signal.test.ts +16 -2
- package/src/__tests__/mcp-client-auth.test.ts +14 -0
- package/src/__tests__/media-generate-image.test.ts +31 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
- package/src/__tests__/messaging-send-tool.test.ts +1 -0
- package/src/__tests__/migration-import-from-url.test.ts +3 -3
- package/src/__tests__/mock-gateway-ipc.ts +18 -2
- package/src/__tests__/model-intents.test.ts +4 -6
- package/src/__tests__/native-web-search.test.ts +30 -2
- package/src/__tests__/notification-deep-link.test.ts +62 -0
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/oauth-commands-routes.test.ts +37 -0
- package/src/__tests__/oauth-provider-visibility.test.ts +8 -8
- package/src/__tests__/oauth-store.test.ts +3 -2
- package/src/__tests__/onboarding-template-contract.test.ts +4 -3
- package/src/__tests__/openai-provider.test.ts +54 -9
- package/src/__tests__/openai-responses-provider.test.ts +176 -14
- package/src/__tests__/openrouter-provider-only.test.ts +27 -5
- package/src/__tests__/outbound-slack-persistence.test.ts +46 -1
- package/src/__tests__/pending-interactions-resolved-event.test.ts +0 -1
- package/src/__tests__/persistence-pipeline.test.ts +139 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +83 -12
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -2
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +11 -13
- package/src/__tests__/plugin-tool-contribution.test.ts +50 -40
- 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 +21 -16
- package/src/__tests__/process-message-display-content.test.ts +19 -22
- package/src/__tests__/provider-catalog-visibility.test.ts +9 -9
- package/src/__tests__/provider-platform-proxy-integration.test.ts +216 -4
- package/src/__tests__/provider-registry-ollama.test.ts +45 -22
- package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
- package/src/__tests__/recording-handler.test.ts +1 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +84 -84
- package/src/__tests__/relay-server.test.ts +10 -10
- package/src/__tests__/require-fresh-approval.test.ts +2 -2
- package/src/__tests__/runtime-attachment-metadata.test.ts +3 -2
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
- package/src/__tests__/schedule-store.test.ts +16 -1
- package/src/__tests__/scheduler-reuse-conversation.test.ts +48 -3
- package/src/__tests__/secret-ingress-http.test.ts +5 -1
- package/src/__tests__/secure-keys.test.ts +3 -3
- package/src/__tests__/send-endpoint-busy.test.ts +81 -42
- package/src/__tests__/server-history-render.test.ts +4 -1
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
- package/src/__tests__/skill-feature-flags-integration.test.ts +8 -10
- package/src/__tests__/skill-feature-flags.test.ts +16 -18
- package/src/__tests__/skill-load-feature-flag.test.ts +5 -5
- package/src/__tests__/skill-projection-feature-flag.test.ts +48 -37
- package/src/__tests__/skill-projection.benchmark.test.ts +7 -13
- package/src/__tests__/skill-tool-factory.test.ts +97 -96
- package/src/__tests__/slack-channel-config.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +11 -3
- package/src/__tests__/subagent-disposal.test.ts +27 -8
- package/src/__tests__/subagent-fork-notifications.test.ts +24 -9
- package/src/__tests__/subagent-fork-spawn.test.ts +13 -4
- package/src/__tests__/subagent-manager-notify.test.ts +20 -8
- package/src/__tests__/subagent-notify-parent.test.ts +6 -5
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +58 -0
- package/src/__tests__/subagent-tools.test.ts +2 -1
- package/src/__tests__/suggestion-routes.test.ts +2 -0
- package/src/__tests__/sync-message-contract.test.ts +59 -0
- package/src/__tests__/system-prompt.test.ts +183 -131
- package/src/__tests__/terminal-tools.test.ts +1 -1
- package/src/__tests__/test-preload-verifier.ts +68 -0
- package/src/__tests__/test-preload.ts +32 -39
- 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 +35 -12
- package/src/__tests__/tool-executor.test.ts +64 -72
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/tool-preview-lifecycle.test.ts +1 -0
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -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 +3 -2
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/usage-routes.test.ts +3 -0
- package/src/__tests__/validate-input.test.ts +381 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +3 -2
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +2 -1
- package/src/__tests__/voice-session-bridge.test.ts +37 -28
- package/src/__tests__/workspace-git-service.test.ts +6 -5
- package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +326 -0
- package/src/__tests__/workspace-migration-091-retighten-migration-onboarding-thread.test.ts +166 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
- package/src/acp/prepare-agent-env.ts +78 -0
- package/src/acp/session-manager.ts +6 -7
- package/src/agent/loop.ts +88 -0
- package/src/api/README.md +127 -0
- package/src/api/constants/call-sites.ts +27 -0
- package/src/api/events/assistant-outbound-attachment.ts +51 -0
- package/src/api/events/assistant-text-delta.ts +32 -0
- package/src/api/events/assistant-turn-start.ts +33 -0
- package/src/api/events/document-comment-created.ts +48 -0
- package/src/api/events/document-comment-deleted.ts +24 -0
- package/src/api/events/document-comment-reopened.ts +25 -0
- package/src/api/events/document-comment-resolved.ts +27 -0
- package/src/api/events/generation-cancelled.ts +24 -0
- package/src/api/events/generation-handoff.ts +41 -0
- package/src/api/events/message-complete.ts +42 -0
- package/src/api/events/open-url.ts +30 -0
- package/src/api/events/relationship-state-updated.ts +25 -0
- package/src/api/events/tool-use-start.ts +32 -0
- package/src/api/index.ts +129 -0
- package/src/api/package.json +10 -0
- package/src/api/responses/llm-context-response.ts +39 -0
- package/src/api/responses/llm-request-log-entry.ts +93 -0
- package/src/api/responses/memory-recall-log.ts +65 -0
- package/src/api/responses/memory-v2-activation-log.ts +78 -0
- package/src/background-wake/background-wake-routes.test.ts +868 -0
- package/src/background-wake/platform-client.test.ts +308 -0
- package/src/background-wake/platform-client.ts +167 -0
- package/src/background-wake/publisher.ts +91 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/background-wake/wake-intent-hooks.test.ts +282 -0
- package/src/calls/guardian-dispatch.ts +1 -0
- package/src/calls/voice-session-bridge.ts +4 -4
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/conversations-slack.test.ts +16 -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 +1 -0
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/__tests__/notifications.test.ts +184 -40
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/channels/__tests__/channels.test.ts +143 -0
- package/src/cli/commands/channels/index.ts +229 -0
- package/src/cli/commands/domain.ts +91 -41
- 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 +176 -1
- package/src/cli/commands/memory-v3-render.ts +491 -0
- package/src/cli/commands/memory-v3.ts +567 -0
- package/src/cli/commands/notifications.ts +365 -55
- package/src/cli/lib/open-browser.ts +7 -2
- package/src/cli/program.ts +4 -0
- package/src/config/assistant-feature-flags.ts +39 -46
- package/src/config/bundled-skills/document-editor/SKILL.md +16 -3
- package/src/config/bundled-skills/document-editor/TOOLS.json +18 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.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/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 +1 -1
- package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -0
- package/src/config/bundled-tool-registry.ts +2 -0
- package/src/config/call-site-defaults.ts +8 -7
- package/src/config/feature-flag-cache.ts +86 -0
- package/src/config/feature-flag-registry.json +33 -17
- package/src/config/llm-context-resolution.ts +10 -1
- package/src/config/llm-resolver.ts +121 -15
- package/src/config/loader.ts +4 -5
- package/src/config/schemas/__tests__/memory-v2.test.ts +228 -1
- package/src/config/schemas/call-site-catalog.ts +21 -7
- package/src/config/schemas/heartbeat.ts +1 -1
- package/src/config/schemas/llm.ts +102 -2
- package/src/config/schemas/memory-v2.ts +272 -0
- package/src/config/schemas/memory.ts +2 -1
- package/src/config/schemas/services.ts +6 -2
- package/src/config/seed-inference-profiles.ts +36 -16
- package/src/context/compactor.ts +52 -0
- package/src/context/token-estimator.ts +10 -5
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/credential-execution/executable-discovery.ts +40 -0
- package/src/credential-execution/process-manager.ts +6 -2
- package/src/credential-health/credential-health-service.ts +125 -40
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -6
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +13 -15
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +2 -3
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -0
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +25 -12
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +1 -0
- package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +107 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +1 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +390 -80
- package/src/daemon/conversation-agent-loop.ts +244 -90
- package/src/daemon/conversation-error.ts +64 -6
- package/src/daemon/conversation-lifecycle.ts +27 -22
- package/src/daemon/conversation-messaging.ts +84 -43
- package/src/daemon/conversation-process.ts +74 -37
- package/src/daemon/conversation-runtime-assembly.ts +38 -17
- package/src/daemon/conversation-skill-tools.ts +14 -30
- package/src/daemon/conversation-surfaces.ts +69 -34
- package/src/daemon/conversation-tool-setup.ts +77 -32
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +40 -75
- package/src/daemon/daemon-control.ts +1 -1
- package/src/daemon/daemon-skill-host.ts +9 -2
- package/src/daemon/disk-pressure-guard.ts +39 -29
- package/src/daemon/first-greeting.ts +31 -13
- package/src/daemon/handlers/config-model.test.ts +1 -0
- package/src/daemon/handlers/conversations.ts +11 -3
- package/src/daemon/handlers/shared.ts +6 -1
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +4 -4
- package/src/daemon/host-file-proxy.ts +4 -4
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +10 -10
- package/src/daemon/lifecycle.ts +29 -26
- package/src/daemon/mcp-reload-service.ts +1 -1
- package/src/daemon/meet-manifest-loader.ts +11 -24
- package/src/daemon/message-types/conversations.ts +22 -27
- package/src/daemon/message-types/document-comments.ts +8 -44
- package/src/daemon/message-types/home.ts +2 -14
- package/src/daemon/message-types/integrations.ts +2 -7
- package/src/daemon/message-types/messages.ts +25 -48
- package/src/daemon/message-types/subagents.ts +6 -0
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/process-message.ts +9 -9
- package/src/daemon/providers-setup.ts +1 -1
- package/src/daemon/server.ts +16 -0
- package/src/daemon/shutdown-handlers.ts +24 -5
- package/src/daemon/switch-inference-profile-tool.ts +62 -0
- package/src/daemon/tool-setup-types.ts +7 -0
- package/src/daemon/wake-target-adapter.ts +10 -0
- package/src/documents/document-store.ts +38 -0
- package/src/export/__tests__/transcript-formatter.test.ts +1 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +30 -1
- package/src/heartbeat/heartbeat-service.ts +63 -0
- package/src/home/__tests__/feed-writer.test.ts +161 -0
- package/src/home/__tests__/post-connect-feed.test.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +55 -59
- package/src/home/feed-writer.ts +146 -7
- package/src/home/home-greeting.ts +0 -9
- package/src/home/suggested-prompts.ts +27 -154
- package/src/ipc/__tests__/cli-ipc.test.ts +1 -0
- package/src/ipc/gateway-client.test.ts +4 -1
- package/src/ipc/gateway-flag-listener.ts +123 -0
- package/src/ipc/skill-routes/__tests__/memory.test.ts +1 -0
- package/src/ipc/skill-routes/__tests__/registries.test.ts +36 -7
- package/src/ipc/skill-routes/memory.ts +4 -3
- package/src/ipc/skill-routes/registries.ts +35 -40
- 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 +242 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +26 -5
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +1 -0
- package/src/memory/__tests__/memory-retrospective-job.test.ts +8 -0
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +1 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +31 -0
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-attention-store.ts +17 -3
- package/src/memory/conversation-crud.ts +423 -182
- 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-connection.ts +29 -19
- package/src/memory/db-init.ts +14 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/db-singleton.ts +77 -0
- package/src/memory/delivery-channels.ts +82 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +2 -4
- package/src/memory/graph/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/graph/retriever.test.ts +3 -3
- 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/job-handlers/embedding.test.ts +3 -2
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -2
- package/src/memory/jobs/embed-pkb-file.ts +6 -1
- package/src/memory/jobs-store.ts +14 -0
- package/src/memory/jobs-worker.ts +66 -22
- package/src/memory/llm-request-log-source-clickhouse.ts +122 -2
- package/src/memory/llm-request-log-source-local.ts +31 -0
- package/src/memory/llm-request-log-source.ts +40 -2
- package/src/memory/llm-request-log-store.ts +228 -1
- package/src/memory/llm-usage-store.ts +24 -0
- package/src/memory/memory-retrospective-enqueue.ts +8 -1
- package/src/memory/memory-retrospective-job.ts +5 -0
- package/src/memory/memory-v2-activation-log-store.ts +110 -7
- 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/265-drop-provider-connection-status.ts +26 -0
- package/src/memory/migrations/266-messages-client-message-id.ts +43 -0
- package/src/memory/migrations/index.ts +19 -0
- package/src/memory/migrations/registry.ts +33 -0
- package/src/memory/schema/conversations.ts +10 -2
- package/src/memory/schema/inference.ts +0 -1
- package/src/memory/schema/infrastructure.ts +21 -0
- package/src/memory/tool-usage-store.ts +36 -8
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +5 -2
- 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 +83 -0
- package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +230 -0
- package/src/memory/v2/__tests__/harness-runner.test.ts +135 -0
- package/src/memory/v2/__tests__/injection.test.ts +127 -98
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +171 -3
- package/src/memory/v2/__tests__/sweep-job.test.ts +6 -3
- package/src/memory/v2/harness/compare.ts +57 -0
- package/src/memory/v2/harness/metrics.ts +128 -0
- package/src/memory/v2/harness/oracle.ts +145 -0
- package/src/memory/v2/harness/replay-input.ts +240 -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 +112 -0
- package/src/memory/v2/harness/trace.ts +64 -0
- package/src/memory/v2/injection.ts +21 -15
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +171 -18
- package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
- package/src/memory/v3/__tests__/consolidation-job.test.ts +466 -0
- package/src/memory/v3/__tests__/coretrieval-seed.test.ts +270 -0
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
- package/src/memory/v3/__tests__/edges.test.ts +706 -0
- package/src/memory/v3/__tests__/filter.test.ts +560 -0
- package/src/memory/v3/__tests__/gate.test.ts +637 -0
- package/src/memory/v3/__tests__/index-composition.test.ts +291 -0
- package/src/memory/v3/__tests__/loop.test.ts +775 -0
- package/src/memory/v3/__tests__/retriever.test.ts +226 -0
- package/src/memory/v3/__tests__/scouts.test.ts +489 -0
- package/src/memory/v3/__tests__/shadow-diff.test.ts +225 -0
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +398 -0
- package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
- package/src/memory/v3/__tests__/traversal.test.ts +508 -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 +784 -0
- package/src/memory/v3/__tests__/validate.test.ts +277 -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/coretrieval-seed.ts +240 -0
- package/src/memory/v3/edge-learning-job.ts +160 -0
- package/src/memory/v3/edges.ts +286 -0
- package/src/memory/v3/filter.ts +286 -0
- package/src/memory/v3/gate.ts +349 -0
- package/src/memory/v3/index-composition.ts +126 -0
- package/src/memory/v3/llm-capture.ts +46 -0
- package/src/memory/v3/loop.ts +430 -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 +431 -0
- package/src/memory/v3/shadow-diff.ts +287 -0
- package/src/memory/v3/shadow-middleware.ts +347 -0
- package/src/memory/v3/traversal.ts +211 -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 +356 -0
- package/src/memory/v3/types.ts +65 -0
- package/src/memory/v3/validate.ts +323 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +1 -0
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +1 -0
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/adapters/slack.ts +45 -11
- package/src/notifications/broadcaster.ts +114 -63
- package/src/notifications/conversation-pairing.ts +23 -3
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/decisions-store.ts +32 -1
- package/src/notifications/deliveries-store.ts +45 -0
- package/src/notifications/edit-notification.ts +201 -0
- package/src/notifications/emit-signal.ts +40 -50
- package/src/notifications/signal.ts +10 -0
- package/src/notifications/types.ts +37 -0
- package/src/oauth/byo-connection.test.ts +67 -3
- package/src/oauth/byo-connection.ts +32 -5
- package/src/oauth/connect-orchestrator.ts +9 -0
- package/src/oauth/connection-resolver.test.ts +76 -0
- package/src/oauth/connection-resolver.ts +49 -10
- package/src/oauth/manual-token-connection.ts +51 -3
- package/src/oauth/seed-providers.ts +3 -0
- package/src/permissions/approval-policy.test.ts +19 -5
- package/src/permissions/approval-policy.ts +14 -3
- package/src/permissions/checker.ts +21 -8
- package/src/permissions/prompter.ts +3 -3
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +2 -2
- package/src/platform/client.test.ts +24 -1
- package/src/platform/client.ts +8 -0
- package/src/platform/feature-gate.ts +15 -0
- package/src/plugin-api/index.ts +4 -0
- package/src/plugin-api/types.ts +7 -33
- package/src/plugins/defaults/index.ts +6 -0
- package/src/plugins/defaults/injectors.ts +20 -19
- package/src/plugins/defaults/persistence.ts +25 -6
- package/src/plugins/external-plugin-loader.ts +5 -68
- package/src/plugins/types.ts +68 -29
- package/src/proactive-artifact/aux-message-injector.ts +17 -4
- package/src/proactive-artifact/job.test.ts +1 -0
- package/src/prompts/__tests__/system-prompt.test.ts +4 -4
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +39 -7
- package/src/prompts/system-prompt.ts +84 -221
- package/src/prompts/template-detection.ts +10 -4
- package/src/prompts/templates/BOOTSTRAP.md +9 -13
- package/src/prompts/templates/IDENTITY.md +0 -2
- package/src/prompts/templates/system-sections.ts +230 -8
- package/src/providers/__tests__/connection-model-compat.test.ts +233 -0
- package/src/providers/__tests__/registry-native-web-search.test.ts +122 -0
- package/src/providers/__tests__/retry-callsite.test.ts +85 -5
- package/src/providers/anthropic/client.ts +32 -66
- package/src/providers/call-site-routing.ts +42 -6
- package/src/providers/connection-model-compat.ts +61 -0
- package/src/providers/connection-resolution.ts +47 -14
- package/src/providers/fireworks/client.ts +1 -0
- package/src/providers/gemini/client.ts +70 -6
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +0 -2
- package/src/providers/inference/__tests__/base-url-security.test.ts +2 -3
- package/src/providers/inference/__tests__/{connections-status-label.test.ts → connections-label.test.ts} +12 -111
- package/src/providers/inference/adapter-factory.ts +3 -0
- package/src/providers/inference/auth.ts +0 -8
- package/src/providers/inference/connections.ts +3 -66
- package/src/providers/inference/resolve-auth.ts +2 -3
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +78 -1
- package/src/providers/model-intents.ts +4 -4
- package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +157 -5
- package/src/providers/openai/chat-completions-provider.ts +116 -15
- package/src/providers/openai/codex-models.ts +20 -0
- package/src/providers/openai/responses-provider.ts +87 -30
- package/src/providers/openrouter/client.ts +13 -8
- package/src/providers/provider-send-message.ts +20 -5
- package/src/providers/registry.ts +48 -8
- package/src/providers/retry.ts +50 -7
- package/src/providers/search-provider-catalog.ts +17 -9
- package/src/providers/thinking-config.ts +26 -1
- package/src/providers/types.ts +9 -0
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +1 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +1 -0
- package/src/runtime/access-request-helper.ts +1 -0
- package/src/runtime/agent-wake.ts +1 -0
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +46 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/channel-readiness-service.ts +68 -0
- package/src/runtime/channel-reply-delivery.ts +23 -0
- package/src/runtime/channel-retry-sweep.ts +47 -14
- package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
- package/src/runtime/http-types.ts +0 -2
- package/src/runtime/migrations/vbundle-builder.ts +12 -4
- package/src/runtime/pending-interactions.ts +0 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -0
- package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +406 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +204 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +209 -1
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -50
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +76 -9
- package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +35 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -2
- package/src/runtime/routes/__tests__/surface-content-routes.test.ts +294 -0
- package/src/runtime/routes/__tests__/task-routes.test.ts +48 -3
- package/src/runtime/routes/acp-routes-list.test.ts +3 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/app-management-routes.ts +111 -4
- package/src/runtime/routes/avatar-routes.ts +10 -10
- package/src/runtime/routes/background-wake-routes.ts +356 -0
- package/src/runtime/routes/browser-tabs-routes.ts +200 -0
- package/src/runtime/routes/btw-routes.ts +4 -10
- package/src/runtime/routes/conversation-analysis-routes.ts +6 -0
- package/src/runtime/routes/conversation-cli-routes.ts +1 -1
- package/src/runtime/routes/conversation-compaction-routes.ts +263 -0
- package/src/runtime/routes/conversation-list-routes.ts +159 -4
- package/src/runtime/routes/conversation-management-routes.ts +108 -26
- package/src/runtime/routes/conversation-query-routes.ts +200 -44
- package/src/runtime/routes/conversation-routes.ts +409 -521
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/conversations-import-routes.ts +19 -6
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/documents-routes.ts +10 -1
- 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 +35 -8
- package/src/runtime/routes/home-feed-routes.ts +129 -0
- package/src/runtime/routes/host-browser-routes.ts +10 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/identity-intro-cache.ts +61 -16
- package/src/runtime/routes/identity-routes.ts +30 -9
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +530 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +57 -8
- package/src/runtime/routes/index.ts +10 -0
- 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 +5 -26
- package/src/runtime/routes/integrations/vercel.ts +15 -0
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/llm-context-normalization.ts +7 -2
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +215 -5
- package/src/runtime/routes/memory-v3-routes.ts +474 -0
- package/src/runtime/routes/migration-routes.ts +32 -28
- package/src/runtime/routes/notification-routes.ts +63 -1
- package/src/runtime/routes/oauth-commands-routes.ts +6 -1
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- 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 +5 -4
- package/src/runtime/routes/surface-action-routes.ts +1 -38
- package/src/runtime/routes/surface-content-routes.ts +12 -5
- package/src/runtime/routes/surface-conversation-resolver.ts +65 -0
- package/src/runtime/routes/wipe-conversation-routes.ts +3 -0
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -0
- package/src/runtime/slack-dm-text-delivery.ts +177 -0
- 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/tool-grant-request-helper.ts +1 -0
- package/src/runtime/verification-outbound-actions.ts +73 -1
- package/src/schedule/schedule-store.ts +8 -1
- package/src/schedule/scheduler.ts +111 -15
- package/src/security/__tests__/provider-key-env-fallback.test.ts +3 -3
- package/src/security/encrypted-store.ts +7 -16
- package/src/security/store-path-override.ts +61 -0
- package/src/signals/user-message.ts +5 -8
- package/src/skills/validate-input.ts +177 -0
- package/src/subagent/manager.ts +13 -13
- package/src/subagent/types.ts +6 -0
- package/src/tasks/tool-sanitizer.ts +2 -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 +36 -28
- 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__/browser-execution-acquire.test.ts +2 -8
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +70 -0
- package/src/tools/browser/browser-execution.ts +16 -3
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +3 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +12 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +27 -1
- package/src/tools/browser/cdp-client/factory.ts +100 -17
- package/src/tools/browser/cdp-client/local-cdp-client.ts +12 -0
- package/src/tools/browser/cdp-client/types.ts +65 -0
- package/src/tools/browser/pinned-tabs.ts +96 -40
- package/src/tools/computer-use/definitions.ts +282 -336
- 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-tool.ts +189 -7
- package/src/tools/execution-target.ts +18 -23
- package/src/tools/executor.ts +24 -56
- 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.test.ts +1 -0
- package/src/tools/host-filesystem/edit.ts +3 -9
- package/src/tools/host-filesystem/read.test.ts +1 -0
- package/src/tools/host-filesystem/read.ts +3 -9
- package/src/tools/host-filesystem/transfer.test.ts +31 -6
- package/src/tools/host-filesystem/transfer.ts +3 -9
- package/src/tools/host-filesystem/write.test.ts +1 -0
- 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 -10
- package/src/tools/memory/register.test.ts +1 -1
- package/src/tools/memory/register.ts +4 -9
- package/src/tools/network/__tests__/managed-search-proxy.test.ts +282 -0
- package/src/tools/network/__tests__/web-search.test.ts +211 -3
- package/src/tools/network/managed-search-proxy.ts +183 -0
- package/src/tools/network/web-fetch.ts +3 -9
- package/src/tools/network/web-search.ts +224 -76
- package/src/tools/policy-context.ts +3 -1
- package/src/tools/registry.ts +150 -123
- package/src/tools/schedule/create.ts +1 -1
- 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 +18 -44
- package/src/tools/subagent/notify-parent.ts +3 -9
- package/src/tools/subagent/spawn.ts +3 -0
- package/src/tools/system/request-permission.ts +3 -9
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-approval-handler.ts +10 -4
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/tool-name-aliases.ts +72 -14
- package/src/tools/types.ts +32 -101
- package/src/tools/ui-surface/definitions.ts +104 -108
- package/src/types/onboarding-context.ts +6 -0
- package/src/usage/attribution.ts +32 -1
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/browser.ts +7 -2
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -2
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +109 -0
- package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +41 -0
- package/src/workspace/migrations/registry.ts +6 -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/daemon/query-complexity-router.ts +0 -75
- package/src/prompts/cache-boundary.ts +0 -8
package/src/daemon/lifecycle.ts
CHANGED
|
@@ -2,6 +2,8 @@ import { join } from "node:path";
|
|
|
2
2
|
|
|
3
3
|
import { config as dotenvConfig } from "dotenv";
|
|
4
4
|
|
|
5
|
+
import { refreshBackgroundWakeIntent } from "../background-wake/publisher.js";
|
|
6
|
+
import { registerBackgroundWakeRuntime } from "../background-wake/runtime-registry.js";
|
|
5
7
|
import { setPointerMessageProcessor } from "../calls/call-pointer-messages.js";
|
|
6
8
|
import { reconcileCallsOnStartup } from "../calls/call-recovery.js";
|
|
7
9
|
import { setRelayBroadcast } from "../calls/relay-server.js";
|
|
@@ -35,6 +37,10 @@ import { HeartbeatService } from "../heartbeat/heartbeat-service.js";
|
|
|
35
37
|
import { startHomeContentRefresh } from "../home/home-content-refresh.js";
|
|
36
38
|
import { backfillRelationshipStateIfMissing } from "../home/relationship-state-writer.js";
|
|
37
39
|
import { closeSentry, initSentry, setSentryDeviceId } from "../instrument.js";
|
|
40
|
+
import {
|
|
41
|
+
startGatewayFlagListener,
|
|
42
|
+
stopGatewayFlagListener,
|
|
43
|
+
} from "../ipc/gateway-flag-listener.js";
|
|
38
44
|
import { getMcpServerManager } from "../mcp/manager.js";
|
|
39
45
|
import {
|
|
40
46
|
getAttachmentsByIds,
|
|
@@ -45,16 +51,13 @@ import { deleteMessageById, getMessages } from "../memory/conversation-crud.js";
|
|
|
45
51
|
import { getDb } from "../memory/db-connection.js";
|
|
46
52
|
import { initializeDb } from "../memory/db-init.js";
|
|
47
53
|
import { selectEmbeddingBackend } from "../memory/embedding-backend.js";
|
|
48
|
-
import { enqueueMemoryJob } from "../memory/jobs-store.js";
|
|
54
|
+
import { enqueueMemoryJob, isMemoryEnabled } from "../memory/jobs-store.js";
|
|
49
55
|
import { startMemoryJobsWorker } from "../memory/jobs-worker.js";
|
|
50
56
|
import { initQdrantClient, resolveQdrantUrl } from "../memory/qdrant-client.js";
|
|
51
57
|
import { QdrantManager } from "../memory/qdrant-manager.js";
|
|
52
58
|
import { rotateToolInvocations } from "../memory/tool-usage-store.js";
|
|
53
59
|
import { sweepConceptPageFrontmatter } from "../memory/v2/frontmatter-sweep.js";
|
|
54
|
-
import {
|
|
55
|
-
emitNotificationSignal,
|
|
56
|
-
registerBroadcastFn,
|
|
57
|
-
} from "../notifications/emit-signal.js";
|
|
60
|
+
import { emitNotificationSignal } from "../notifications/emit-signal.js";
|
|
58
61
|
import { backfillManualTokenConnections } from "../oauth/manual-token-connection.js";
|
|
59
62
|
import { seedOAuthProviders } from "../oauth/seed-providers.js";
|
|
60
63
|
import { installPluginRuntime } from "../plugins/external-api.js";
|
|
@@ -71,6 +74,7 @@ import {
|
|
|
71
74
|
import { RuntimeHttpServer } from "../runtime/http-server.js";
|
|
72
75
|
import { recoverInterruptedImport } from "../runtime/migrations/vbundle-streaming-importer.js";
|
|
73
76
|
import { registerSecretsDeps } from "../runtime/routes/secrets-deps.js";
|
|
77
|
+
import { publishConversationListChanged } from "../runtime/sync/resource-sync-events.js";
|
|
74
78
|
import { recoverStaleSchedules } from "../schedule/schedule-recovery.js";
|
|
75
79
|
import { startScheduler } from "../schedule/scheduler.js";
|
|
76
80
|
import {
|
|
@@ -358,6 +362,8 @@ export async function runDaemon(): Promise<void> {
|
|
|
358
362
|
log.warn({ err }, "Background feature flag init failed"),
|
|
359
363
|
);
|
|
360
364
|
|
|
365
|
+
startGatewayFlagListener();
|
|
366
|
+
|
|
361
367
|
log.info("Daemon startup: initializing DB");
|
|
362
368
|
ensurePromptFiles();
|
|
363
369
|
|
|
@@ -539,11 +545,12 @@ export async function runDaemon(): Promise<void> {
|
|
|
539
545
|
}
|
|
540
546
|
} // end if (dbReady)
|
|
541
547
|
|
|
542
|
-
// Populate the managed-connection cache so
|
|
543
|
-
//
|
|
544
|
-
// system
|
|
545
|
-
//
|
|
546
|
-
//
|
|
548
|
+
// Populate the managed-connection cache so the `14-connected-services`
|
|
549
|
+
// bundled section (rendered by `renderConnectedServices()` in
|
|
550
|
+
// system-sections.ts) can include platform-managed OAuth connections
|
|
551
|
+
// (e.g. Twitter) in the system prompt from the first turn. This is
|
|
552
|
+
// an HTTP-only call with no DB dependency, so it runs regardless of
|
|
553
|
+
// dbReady. A periodic refresh keeps the cache current when users
|
|
547
554
|
// connect/disconnect managed providers while the assistant is running.
|
|
548
555
|
void refreshManagedConnectionCache().catch((err) =>
|
|
549
556
|
log.warn(
|
|
@@ -836,7 +843,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
836
843
|
// If a destructive migration occurred, enqueue a rebuild_index job
|
|
837
844
|
// to re-embed all memory items from the SQLite cache.
|
|
838
845
|
const { migrated } = await qdrantClient.ensureCollection();
|
|
839
|
-
if (migrated) {
|
|
846
|
+
if (migrated && isMemoryEnabled()) {
|
|
840
847
|
enqueueMemoryJob("rebuild_index", {});
|
|
841
848
|
log.info(
|
|
842
849
|
"Qdrant collection was migrated — enqueued rebuild_index job",
|
|
@@ -934,10 +941,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
934
941
|
registerWatcherProviders();
|
|
935
942
|
registerMessagingProviders();
|
|
936
943
|
|
|
937
|
-
// Register the broadcast function for the notification signal pipeline's
|
|
938
|
-
// macOS adapter so it can deliver notification_intent messages to clients.
|
|
939
|
-
registerBroadcastFn((msg) => broadcastMessage(msg));
|
|
940
|
-
|
|
941
944
|
try {
|
|
942
945
|
recoverStaleSchedules();
|
|
943
946
|
} catch (err) {
|
|
@@ -1017,6 +1020,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
1017
1020
|
scheduleJobId: info.scheduleJobId,
|
|
1018
1021
|
title: info.title,
|
|
1019
1022
|
});
|
|
1023
|
+
publishConversationListChanged("created");
|
|
1020
1024
|
},
|
|
1021
1025
|
);
|
|
1022
1026
|
|
|
@@ -1081,13 +1085,11 @@ export async function runDaemon(): Promise<void> {
|
|
|
1081
1085
|
// its own finally block.
|
|
1082
1086
|
conversation.toolsDisabledDepth++;
|
|
1083
1087
|
try {
|
|
1084
|
-
const messageId = await conversation.persistUserMessage(
|
|
1085
|
-
instruction,
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
"[Call status event]",
|
|
1090
|
-
);
|
|
1088
|
+
const { id: messageId } = await conversation.persistUserMessage({
|
|
1089
|
+
content: instruction,
|
|
1090
|
+
metadata: { pointerInstruction: true },
|
|
1091
|
+
displayContent: "[Call status event]",
|
|
1092
|
+
});
|
|
1091
1093
|
|
|
1092
1094
|
// Helper: roll back persisted messages on failure, then reload
|
|
1093
1095
|
// in-memory history from the (now cleaned) DB. Reloading avoids
|
|
@@ -1270,11 +1272,9 @@ export async function runDaemon(): Promise<void> {
|
|
|
1270
1272
|
})();
|
|
1271
1273
|
|
|
1272
1274
|
if (config.auditLog.retentionDays > 0) {
|
|
1273
|
-
|
|
1274
|
-
rotateToolInvocations(config.auditLog.retentionDays);
|
|
1275
|
-
} catch (err) {
|
|
1275
|
+
void rotateToolInvocations(config.auditLog.retentionDays).catch((err) => {
|
|
1276
1276
|
log.warn({ err }, "Audit log rotation failed");
|
|
1277
|
-
}
|
|
1277
|
+
});
|
|
1278
1278
|
}
|
|
1279
1279
|
|
|
1280
1280
|
const workspaceHeartbeat = new WorkspaceHeartbeatService();
|
|
@@ -1291,6 +1291,8 @@ export async function runDaemon(): Promise<void> {
|
|
|
1291
1291
|
}),
|
|
1292
1292
|
});
|
|
1293
1293
|
heartbeat.start();
|
|
1294
|
+
registerBackgroundWakeRuntime({ scheduler, heartbeat });
|
|
1295
|
+
refreshBackgroundWakeIntent("daemon-startup");
|
|
1294
1296
|
log.info(
|
|
1295
1297
|
{
|
|
1296
1298
|
enabled: heartbeatConfig.enabled,
|
|
@@ -1347,6 +1349,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
1347
1349
|
mcpManager,
|
|
1348
1350
|
telemetryReporter,
|
|
1349
1351
|
cleanupPidFile: () => {
|
|
1352
|
+
stopGatewayFlagListener();
|
|
1350
1353
|
stopDiskPressureGuardForLifecycle();
|
|
1351
1354
|
cleanupPidFile();
|
|
1352
1355
|
},
|
|
@@ -82,7 +82,7 @@ async function doReload(): Promise<McpReloadResult> {
|
|
|
82
82
|
serverConfig,
|
|
83
83
|
manager,
|
|
84
84
|
);
|
|
85
|
-
const accepted = registerMcpTools(mcpTools);
|
|
85
|
+
const accepted = registerMcpTools(serverId, mcpTools);
|
|
86
86
|
const acceptedNames = accepted.map((t) => t.name);
|
|
87
87
|
toolCount += accepted.length;
|
|
88
88
|
servers.push({
|
|
@@ -40,12 +40,7 @@ import type { SkillRoute } from "../runtime/skill-route-registry.js";
|
|
|
40
40
|
import { registerSkillRoute } from "../runtime/skill-route-registry.js";
|
|
41
41
|
import { getRepoSkillsDir } from "../skills/catalog-install.js";
|
|
42
42
|
import { registerExternalTools } from "../tools/registry.js";
|
|
43
|
-
import type {
|
|
44
|
-
ExecutionTarget,
|
|
45
|
-
Tool,
|
|
46
|
-
ToolContext,
|
|
47
|
-
ToolDefinition,
|
|
48
|
-
} from "../tools/types.js";
|
|
43
|
+
import type { ExecutionTarget, Tool, ToolContext } from "../tools/types.js";
|
|
49
44
|
import { RiskLevel } from "../tools/types.js";
|
|
50
45
|
import { getLogger } from "../util/logger.js";
|
|
51
46
|
import { getSkillRuntimePath } from "../util/platform.js";
|
|
@@ -130,26 +125,15 @@ function serializeToolContext(context: ToolContext): Record<string, unknown> {
|
|
|
130
125
|
function buildProxyTool(
|
|
131
126
|
entry: ManifestToolEntry,
|
|
132
127
|
supervisor: MeetHostSupervisor,
|
|
133
|
-
manifestHash: string,
|
|
134
128
|
): Tool {
|
|
135
|
-
const definition: ToolDefinition = {
|
|
136
|
-
name: entry.name,
|
|
137
|
-
description: entry.description,
|
|
138
|
-
input_schema: (entry.input_schema as object) ?? {},
|
|
139
|
-
};
|
|
140
129
|
const risk = coerceRiskLevel(entry.risk, entry.name);
|
|
141
130
|
return {
|
|
142
131
|
name: entry.name,
|
|
143
132
|
description: entry.description,
|
|
133
|
+
input_schema: (entry.input_schema as object) ?? {},
|
|
144
134
|
category: entry.category,
|
|
145
135
|
defaultRiskLevel: risk,
|
|
146
|
-
executionMode: "proxy",
|
|
147
136
|
executionTarget: "host" as ExecutionTarget,
|
|
148
|
-
origin: "skill",
|
|
149
|
-
ownerSkillId: MEET_SKILL_ID,
|
|
150
|
-
ownerSkillBundled: true,
|
|
151
|
-
ownerSkillVersionHash: manifestHash,
|
|
152
|
-
getDefinition: () => definition,
|
|
153
137
|
execute: async (input, context) => {
|
|
154
138
|
// `dispatchTool` ensures the meet-host child is up + connected
|
|
155
139
|
// before sending the frame, so callers don't need a separate
|
|
@@ -324,7 +308,10 @@ export interface MeetManifestLoaderDeps {
|
|
|
324
308
|
/** Override for the manifest path resolver. */
|
|
325
309
|
manifestPath?: string;
|
|
326
310
|
/** Override for {@link registerExternalTools}. */
|
|
327
|
-
registerTools?: (
|
|
311
|
+
registerTools?: (
|
|
312
|
+
owner: { kind: "skill" | "plugin" | "mcp"; id: string },
|
|
313
|
+
provider: () => Tool[],
|
|
314
|
+
) => void;
|
|
328
315
|
/** Override for {@link registerSkillRoute}. */
|
|
329
316
|
registerRoute?: (route: SkillRoute) => unknown;
|
|
330
317
|
/** Override for {@link registerShutdownHook}. */
|
|
@@ -367,11 +354,11 @@ export async function loadMeetManifestProxies(
|
|
|
367
354
|
|
|
368
355
|
// Tool provider resolves the full proxy list lazily so the tool manifest
|
|
369
356
|
// reflects the manifest file at `initializeTools()` time — same timing
|
|
370
|
-
// contract as the in-process skill's provider closure.
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
),
|
|
357
|
+
// contract as the in-process skill's provider closure. Owner is recorded
|
|
358
|
+
// up-front so `getToolOwner(name)` returns the meet-join skill id without
|
|
359
|
+
// the tool object having to carry it.
|
|
360
|
+
registerTools({ kind: "skill", id: MEET_SKILL_ID }, () =>
|
|
361
|
+
manifest.tools.map((entry) => buildProxyTool(entry, supervisor)),
|
|
375
362
|
);
|
|
376
363
|
|
|
377
364
|
for (const entry of manifest.routes) {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Conversation lifecycle, auth, model config, and history types.
|
|
2
2
|
|
|
3
|
+
import type { GenerationCancelledEvent } from "../../api/events/generation-cancelled.js";
|
|
4
|
+
import type { GenerationHandoffEvent } from "../../api/events/generation-handoff.js";
|
|
3
5
|
import type {
|
|
4
6
|
ChannelId,
|
|
5
7
|
HostProxyInterfaceId,
|
|
@@ -309,28 +311,6 @@ export interface AssistantStatusMessage {
|
|
|
309
311
|
keyFingerprint?: string;
|
|
310
312
|
}
|
|
311
313
|
|
|
312
|
-
export interface GenerationCancelled {
|
|
313
|
-
type: "generation_cancelled";
|
|
314
|
-
conversationId?: string;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
export interface GenerationHandoff {
|
|
318
|
-
type: "generation_handoff";
|
|
319
|
-
conversationId: string;
|
|
320
|
-
requestId?: string;
|
|
321
|
-
queuedCount: number;
|
|
322
|
-
attachments?: UserMessageAttachment[];
|
|
323
|
-
attachmentWarnings?: string[];
|
|
324
|
-
/** Database ID of the final persisted assistant row, if any. */
|
|
325
|
-
messageId?: string;
|
|
326
|
-
/**
|
|
327
|
-
* Database ID used by clients for the rendered assistant bubble. Tool turns
|
|
328
|
-
* may persist multiple assistant rows; this matches the history row that
|
|
329
|
-
* survives query-time merging.
|
|
330
|
-
*/
|
|
331
|
-
displayMessageId?: string;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
314
|
export interface ModelInfo {
|
|
335
315
|
type: "model_info";
|
|
336
316
|
conversationId?: string;
|
|
@@ -404,10 +384,8 @@ export interface HistoryResponse {
|
|
|
404
384
|
type: "history_response";
|
|
405
385
|
conversationId: string;
|
|
406
386
|
messages: Array<{
|
|
407
|
-
/** Database ID used by clients for the rendered message
|
|
387
|
+
/** Database ID used by clients for the rendered message. */
|
|
408
388
|
id?: string;
|
|
409
|
-
/** Concrete persisted row ID for row-scoped actions such as TTS/fork. */
|
|
410
|
-
daemonMessageId?: string;
|
|
411
389
|
role: string;
|
|
412
390
|
text: string;
|
|
413
391
|
timestamp: number;
|
|
@@ -460,6 +438,20 @@ export interface UsageUpdate {
|
|
|
460
438
|
contextWindowMaxTokens?: number;
|
|
461
439
|
}
|
|
462
440
|
|
|
441
|
+
/**
|
|
442
|
+
* Emitted after each LLM call with per-call token deltas and estimated cost.
|
|
443
|
+
* Clients accumulate these additively for live-updating usage metrics.
|
|
444
|
+
* This is a UI-only hint — it does not persist to DB or affect billing.
|
|
445
|
+
*/
|
|
446
|
+
export interface UsageProgress {
|
|
447
|
+
type: "usage_progress";
|
|
448
|
+
conversationId: string;
|
|
449
|
+
inputTokens: number;
|
|
450
|
+
outputTokens: number;
|
|
451
|
+
estimatedCost: number;
|
|
452
|
+
model: string;
|
|
453
|
+
}
|
|
454
|
+
|
|
463
455
|
export interface UsageResponse {
|
|
464
456
|
type: "usage_response";
|
|
465
457
|
totalInputTokens: number;
|
|
@@ -556,6 +548,8 @@ export type ConversationErrorCode =
|
|
|
556
548
|
| "PROVIDER_INVALID_KEY"
|
|
557
549
|
| "MANAGED_KEY_INVALID"
|
|
558
550
|
| "CONTEXT_TOO_LARGE"
|
|
551
|
+
| "BUDGET_YIELD_UNRECOVERED"
|
|
552
|
+
| "MAX_TOKENS_REACHED"
|
|
559
553
|
| "CONVERSATION_ABORTED"
|
|
560
554
|
| "CONVERSATION_PROCESSING_FAILED"
|
|
561
555
|
| "DISK_SPACE_CRITICAL"
|
|
@@ -648,12 +642,13 @@ export type _ConversationsServerMessages =
|
|
|
648
642
|
| AuthResult
|
|
649
643
|
| PongMessage
|
|
650
644
|
| AssistantStatusMessage
|
|
651
|
-
|
|
|
652
|
-
|
|
|
645
|
+
| GenerationCancelledEvent
|
|
646
|
+
| GenerationHandoffEvent
|
|
653
647
|
| ModelInfo
|
|
654
648
|
| HistoryResponse
|
|
655
649
|
| UndoComplete
|
|
656
650
|
| UsageUpdate
|
|
651
|
+
| UsageProgress
|
|
657
652
|
| UsageResponse
|
|
658
653
|
| ContextCompacted
|
|
659
654
|
| CompactionCircuitOpen
|
|
@@ -1,50 +1,14 @@
|
|
|
1
1
|
// Document comment event types (Server → Client).
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
}
|
|
3
|
+
import type { DocumentCommentCreatedEvent } from "../../api/events/document-comment-created.js";
|
|
4
|
+
import type { DocumentCommentDeletedEvent } from "../../api/events/document-comment-deleted.js";
|
|
5
|
+
import type { DocumentCommentReopenedEvent } from "../../api/events/document-comment-reopened.js";
|
|
6
|
+
import type { DocumentCommentResolvedEvent } from "../../api/events/document-comment-resolved.js";
|
|
43
7
|
|
|
44
8
|
// --- Domain-level union alias (consumed by the barrel file) ---
|
|
45
9
|
|
|
46
10
|
export type _DocumentCommentsServerMessages =
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
11
|
+
| DocumentCommentCreatedEvent
|
|
12
|
+
| DocumentCommentResolvedEvent
|
|
13
|
+
| DocumentCommentReopenedEvent
|
|
14
|
+
| DocumentCommentDeletedEvent;
|
|
@@ -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 { RelationshipStateUpdatedEvent } from "../../api/events/relationship-state-updated.js";
|
|
23
11
|
|
|
24
12
|
/**
|
|
25
13
|
* Broadcast after the daemon successfully writes a fresh home activity
|
|
@@ -37,4 +25,4 @@ export interface HomeFeedUpdated {
|
|
|
37
25
|
newItemCount: number;
|
|
38
26
|
}
|
|
39
27
|
|
|
40
|
-
export type _HomeServerMessages =
|
|
28
|
+
export type _HomeServerMessages = RelationshipStateUpdatedEvent | HomeFeedUpdated;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// External service integrations: Slack, Telegram, Vercel, ingress, guardian.
|
|
2
2
|
|
|
3
|
+
import type { OpenUrlEvent } from "../../api/events/open-url.js";
|
|
3
4
|
import type { ChannelId } from "../../channels/types.js";
|
|
4
5
|
|
|
5
6
|
// === Client → Server ===
|
|
@@ -206,12 +207,6 @@ export interface OAuthConnectResultResponse {
|
|
|
206
207
|
error?: string;
|
|
207
208
|
}
|
|
208
209
|
|
|
209
|
-
export interface OpenUrl {
|
|
210
|
-
type: "open_url";
|
|
211
|
-
url: string;
|
|
212
|
-
title?: string;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
210
|
export interface NavigateSettings {
|
|
216
211
|
type: "navigate_settings";
|
|
217
212
|
tab: string;
|
|
@@ -250,7 +245,7 @@ export type _IntegrationsServerMessages =
|
|
|
250
245
|
| IntegrationListResponse
|
|
251
246
|
| IntegrationConnectResult
|
|
252
247
|
| OAuthConnectResultResponse
|
|
253
|
-
|
|
|
248
|
+
| OpenUrlEvent
|
|
254
249
|
| NavigateSettings
|
|
255
250
|
| ShowPlatformLogin
|
|
256
251
|
| PlatformDisconnected;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
// User/assistant messages, tool results, confirmations, secrets, errors, and generation lifecycle.
|
|
2
2
|
|
|
3
|
+
import type { AssistantTextDeltaEvent } from "../../api/events/assistant-text-delta.js";
|
|
4
|
+
import type { AssistantTurnStartEvent } from "../../api/events/assistant-turn-start.js";
|
|
5
|
+
import type { MessageCompleteEvent } from "../../api/events/message-complete.js";
|
|
6
|
+
import type { ToolUseStartEvent } from "../../api/events/tool-use-start.js";
|
|
3
7
|
import type { ChannelId, InterfaceId } from "../../channels/types.js";
|
|
4
8
|
import type { CommandIntent, UserMessageAttachment } from "./shared.js";
|
|
5
9
|
import type { ToolActivityMetadata } from "./web-activity.js";
|
|
@@ -72,25 +76,13 @@ export interface UserMessageEcho {
|
|
|
72
76
|
clientMessageId?: string;
|
|
73
77
|
}
|
|
74
78
|
|
|
75
|
-
export interface AssistantTextDelta {
|
|
76
|
-
type: "assistant_text_delta";
|
|
77
|
-
text: string;
|
|
78
|
-
conversationId?: string;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
79
|
export interface AssistantThinkingDelta {
|
|
82
80
|
type: "assistant_thinking_delta";
|
|
83
81
|
thinking: string;
|
|
84
82
|
conversationId?: string;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
type: "tool_use_start";
|
|
89
|
-
toolName: string;
|
|
90
|
-
input: Record<string, unknown>;
|
|
91
|
-
conversationId?: string;
|
|
92
|
-
/** The tool_use block ID for client-side correlation. */
|
|
93
|
-
toolUseId?: string;
|
|
83
|
+
/** Database ID of the assistant message this thinking delta belongs to.
|
|
84
|
+
* Same semantics as `AssistantTextDeltaEvent.messageId`. */
|
|
85
|
+
messageId?: string;
|
|
94
86
|
}
|
|
95
87
|
|
|
96
88
|
export interface ToolOutputChunk {
|
|
@@ -103,6 +95,9 @@ export interface ToolOutputChunk {
|
|
|
103
95
|
subToolInput?: string;
|
|
104
96
|
subToolIsError?: boolean;
|
|
105
97
|
subToolId?: string;
|
|
98
|
+
/** Database ID of the assistant message that owns the parent tool_use
|
|
99
|
+
* block. Same semantics as `AssistantTextDeltaEvent.messageId`. */
|
|
100
|
+
messageId?: string;
|
|
106
101
|
}
|
|
107
102
|
|
|
108
103
|
export interface ToolUsePreviewStart {
|
|
@@ -110,6 +105,9 @@ export interface ToolUsePreviewStart {
|
|
|
110
105
|
toolUseId: string;
|
|
111
106
|
toolName: string;
|
|
112
107
|
conversationId?: string;
|
|
108
|
+
/** Database ID of the assistant message that owns this tool_use block.
|
|
109
|
+
* Same semantics as `AssistantTextDeltaEvent.messageId`. */
|
|
110
|
+
messageId?: string;
|
|
113
111
|
}
|
|
114
112
|
|
|
115
113
|
export interface ToolInputDelta {
|
|
@@ -119,6 +117,9 @@ export interface ToolInputDelta {
|
|
|
119
117
|
conversationId?: string;
|
|
120
118
|
/** The tool_use block ID for client-side correlation. */
|
|
121
119
|
toolUseId?: string;
|
|
120
|
+
/** Database ID of the assistant message that owns this tool_use block.
|
|
121
|
+
* Same semantics as `AssistantTextDeltaEvent.messageId`. */
|
|
122
|
+
messageId?: string;
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
export interface ToolResult {
|
|
@@ -140,6 +141,9 @@ export interface ToolResult {
|
|
|
140
141
|
imageDataList?: string[];
|
|
141
142
|
/** The tool_use block ID for client-side correlation. */
|
|
142
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;
|
|
143
147
|
/** Risk level from the classifier ("low" | "medium" | "high" | "unknown"). */
|
|
144
148
|
riskLevel?: string;
|
|
145
149
|
/** Human-readable reason for the risk classification. */
|
|
@@ -299,28 +303,6 @@ export interface QuestionRequest {
|
|
|
299
303
|
toolUseId?: string;
|
|
300
304
|
}
|
|
301
305
|
|
|
302
|
-
export interface MessageComplete {
|
|
303
|
-
type: "message_complete";
|
|
304
|
-
conversationId?: string;
|
|
305
|
-
attachments?: UserMessageAttachment[];
|
|
306
|
-
attachmentWarnings?: string[];
|
|
307
|
-
/** Database ID of the final persisted assistant row, if any. */
|
|
308
|
-
messageId?: string;
|
|
309
|
-
/**
|
|
310
|
-
* Database ID used by clients for the rendered assistant bubble. Tool turns
|
|
311
|
-
* may persist multiple assistant rows; this matches the history row that
|
|
312
|
-
* survives query-time merging.
|
|
313
|
-
*/
|
|
314
|
-
displayMessageId?: string;
|
|
315
|
-
/**
|
|
316
|
-
* Distinguishes a real main-turn completion from auxiliary events such as
|
|
317
|
-
* call transcripts, call summaries, and watch notifier outputs. Clients
|
|
318
|
-
* gate turn-completion side effects (e.g. the task_complete sound) on
|
|
319
|
-
* `source !== "aux"`. Absent is treated as main for backwards compatibility.
|
|
320
|
-
*/
|
|
321
|
-
source?: "main" | "aux";
|
|
322
|
-
}
|
|
323
|
-
|
|
324
306
|
export interface ErrorMessage {
|
|
325
307
|
type: "error";
|
|
326
308
|
conversationId?: string;
|
|
@@ -426,17 +408,11 @@ export type InteractionResolutionState =
|
|
|
426
408
|
export interface InteractionResolved {
|
|
427
409
|
type: "interaction_resolved";
|
|
428
410
|
requestId: string;
|
|
429
|
-
/**
|
|
430
|
-
|
|
431
|
-
* id and the web client's conversation key coincide today (see
|
|
432
|
-
* `conversation-key-store.ts`); the field is named after the client-facing
|
|
433
|
-
* concept.
|
|
434
|
-
*/
|
|
435
|
-
conversationKey: string;
|
|
411
|
+
/** Conversation id the interaction belongs to. */
|
|
412
|
+
conversationId: string;
|
|
436
413
|
state: InteractionResolutionState;
|
|
437
414
|
/** Kind of the resolved interaction (e.g. "confirmation", "secret", "host_bash"). */
|
|
438
415
|
kind: string;
|
|
439
|
-
conversationId?: string;
|
|
440
416
|
}
|
|
441
417
|
|
|
442
418
|
/**
|
|
@@ -545,9 +521,10 @@ export type _MessagesClientMessages =
|
|
|
545
521
|
|
|
546
522
|
export type _MessagesServerMessages =
|
|
547
523
|
| UserMessageEcho
|
|
548
|
-
|
|
|
524
|
+
| AssistantTurnStartEvent
|
|
525
|
+
| AssistantTextDeltaEvent
|
|
549
526
|
| AssistantThinkingDelta
|
|
550
|
-
|
|
|
527
|
+
| ToolUseStartEvent
|
|
551
528
|
| ToolUsePreviewStart
|
|
552
529
|
| ToolOutputChunk
|
|
553
530
|
| ToolInputDelta
|
|
@@ -555,7 +532,7 @@ export type _MessagesServerMessages =
|
|
|
555
532
|
| ConfirmationRequest
|
|
556
533
|
| SecretRequest
|
|
557
534
|
| QuestionRequest
|
|
558
|
-
|
|
|
535
|
+
| MessageCompleteEvent
|
|
559
536
|
| ErrorMessage
|
|
560
537
|
| MessageQueued
|
|
561
538
|
| MessageDequeued
|
|
@@ -12,6 +12,12 @@ export interface SubagentSpawned {
|
|
|
12
12
|
label: string;
|
|
13
13
|
objective: string;
|
|
14
14
|
isFork?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Tool-use id of the `skill_execute` call that spawned this subagent. Lets
|
|
17
|
+
* the client anchor the inline subagent card to the exact spawn tool call,
|
|
18
|
+
* independent of the (reconcile-volatile) parent message id.
|
|
19
|
+
*/
|
|
20
|
+
parentToolUseId?: string;
|
|
15
21
|
}
|
|
16
22
|
|
|
17
23
|
export interface SubagentStatusChanged {
|
|
@@ -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
|
}
|