@vellumai/assistant 0.11.2 → 0.11.3-staging.2
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 +58 -3
- package/docs/trusted-contact-access.md +9 -5
- package/docs/vellum-doctor.md +195 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/channels.ts +39 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
- package/node_modules/@vellumai/ces-client/src/index.ts +1 -0
- package/node_modules/@vellumai/ces-client/src/rpc-client.ts +19 -2
- package/node_modules/@vellumai/environments/package.json +2 -1
- package/node_modules/@vellumai/environments/src/__tests__/cloud-assistant-hub-url.test.ts +38 -0
- package/node_modules/@vellumai/environments/src/__tests__/install-layout.test.ts +98 -0
- package/node_modules/@vellumai/environments/src/__tests__/package-boundary.test.ts +5 -5
- package/node_modules/@vellumai/environments/src/index.ts +17 -6
- package/node_modules/@vellumai/environments/src/install-layout.ts +49 -0
- package/node_modules/@vellumai/environments/src/seeds.ts +29 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/channels.ts +39 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +4 -0
- package/node_modules/@vellumai/gateway-client/src/verification-session-contract.ts +91 -6
- package/node_modules/@vellumai/ipc-server-utils/src/endpoint.test.ts +36 -0
- package/node_modules/@vellumai/ipc-server-utils/src/endpoint.ts +142 -0
- package/node_modules/@vellumai/ipc-server-utils/src/index.ts +2 -0
- package/node_modules/@vellumai/ipc-server-utils/src/listen-options.ts +3 -0
- package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.test.ts +15 -1
- package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.ts +17 -2
- package/node_modules/@vellumai/service-contracts/src/channels.ts +39 -0
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
- package/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +16 -2
- package/openapi.yaml +589 -30
- package/package.json +1 -1
- package/src/__tests__/agent-image-optimize.test.ts +4 -4
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +113 -66
- package/src/__tests__/agent-loop-override-profile.test.ts +38 -48
- package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +166 -0
- 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__/answered-question-persistence.test.ts +240 -0
- package/src/__tests__/anthropic-provider.test.ts +165 -30
- package/src/__tests__/app-control-flow.test.ts +9 -8
- package/src/__tests__/assistant-event-hub.test.ts +48 -0
- package/src/__tests__/attachments-store-heic-normalize.test.ts +16 -12
- package/src/__tests__/attachments-store.test.ts +130 -68
- package/src/__tests__/attachments.test.ts +36 -36
- package/src/__tests__/background-workers-disk-pressure.test.ts +1 -1
- package/src/__tests__/call-start-guardian-guard.test.ts +18 -4
- package/src/__tests__/canned-reply-release.test.ts +86 -0
- package/src/__tests__/channel-guardian.test.ts +59 -29
- package/src/__tests__/channel-readiness-telegram-remote.test.ts +154 -0
- package/src/__tests__/channel-setup-panel-ack.test.ts +6 -5
- package/src/__tests__/client-os-metadata-persistence.test.ts +103 -4
- package/src/__tests__/compactor-image-manifest-trust.test.ts +1 -1
- package/src/__tests__/consult-deadline.test.ts +65 -0
- package/src/__tests__/conversation-agent-loop.test.ts +438 -2
- package/src/__tests__/conversation-disk-view-integration.test.ts +5 -1
- package/src/__tests__/conversation-disk-view.test.ts +4 -4
- package/src/__tests__/conversation-error.test.ts +22 -3
- package/src/__tests__/conversation-fork-crud.test.ts +5 -1
- package/src/__tests__/conversation-fork-referential.test.ts +352 -0
- package/src/__tests__/conversation-fork-retrospective.test.ts +5 -1
- package/src/__tests__/conversation-group-tools.test.ts +32 -2
- package/src/__tests__/conversation-inference-profile-route.test.ts +27 -1
- package/src/__tests__/conversation-initial-prompt.test.ts +51 -22
- package/src/__tests__/conversation-key-store-bootstrap-cleanup.test.ts +119 -0
- package/src/__tests__/conversation-key-store-origin.test.ts +105 -0
- package/src/__tests__/conversation-list-recency-ordering.test.ts +104 -0
- package/src/__tests__/conversation-origin-at-creation.test.ts +153 -0
- package/src/__tests__/conversation-origin-channel-filter.test.ts +95 -0
- package/src/__tests__/conversation-placement-promotion.test.ts +172 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +123 -0
- package/src/__tests__/conversation-queue.test.ts +433 -1
- package/src/__tests__/conversation-retry-route.test.ts +3 -1
- package/src/__tests__/conversation-routes-hidden-queue.test.ts +64 -1
- package/src/__tests__/conversation-store-ephemeral.test.ts +4 -0
- package/src/__tests__/conversation-store.test.ts +26 -10
- package/src/__tests__/conversation-summarize-route.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +15 -6
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +6 -5
- package/src/__tests__/conversation-surfaces-app-control.test.ts +12 -11
- package/src/__tests__/conversation-surfaces-app-open.test.ts +11 -5
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +5 -4
- package/src/__tests__/conversation-surfaces-history-restored-completion.test.ts +967 -0
- package/src/__tests__/conversation-surfaces-persisted-info.test.ts +312 -0
- package/src/__tests__/conversation-surfaces-queued-emit.test.ts +6 -5
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -8
- package/src/__tests__/conversation-surfaces-standalone.test.ts +21 -11
- package/src/__tests__/conversation-surfaces-state-update.test.ts +7 -11
- package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -6
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +11 -6
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +9 -6
- package/src/__tests__/conversation-tool-setup-attribution.test.ts +70 -7
- package/src/__tests__/conversation-wait-for-idle.test.ts +6 -11
- package/src/__tests__/credential-prompt-route.test.ts +57 -7
- package/src/__tests__/credential-security-invariants.test.ts +1 -0
- package/src/__tests__/cu-unified-flow.test.ts +89 -28
- package/src/__tests__/custom-group-listing-visibility.test.ts +1 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +4 -1
- package/src/__tests__/discord-access-request-privacy.test.ts +366 -0
- package/src/__tests__/discord-requester-notice-privacy.test.ts +87 -0
- package/src/__tests__/disk-pressure-guard.test.ts +55 -55
- package/src/__tests__/disk-pressure-routes.test.ts +10 -10
- package/src/__tests__/disk-pressure-tools.test.ts +2 -2
- package/src/__tests__/disk-usage.test.ts +35 -20
- package/src/__tests__/document-sync-tags.test.ts +379 -0
- package/src/__tests__/document-update-default-surface.test.ts +28 -0
- package/src/__tests__/dynamic-skill-background-guard.test.ts +2 -2
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -4
- package/src/__tests__/ensure-conversation-exists.test.ts +8 -5
- package/src/__tests__/events-dev-bypass-actor.test.ts +183 -1
- package/src/__tests__/evict-conversations-for-reload.test.ts +90 -0
- package/src/__tests__/file-list-tool.test.ts +12 -10
- package/src/__tests__/file-ops-service.test.ts +151 -44
- package/src/__tests__/file-read-container-boundary.test.ts +137 -0
- package/src/__tests__/file-read-tool.test.ts +21 -9
- package/src/__tests__/file-url-path-guard.test.ts +83 -0
- package/src/__tests__/filesystem-tools.test.ts +82 -66
- package/src/__tests__/guardian-outbound-http.test.ts +8 -8
- package/src/__tests__/helpers/gateway-verification-sessions-stub.ts +14 -1
- package/src/__tests__/helpers/hub-clients.ts +42 -0
- package/src/__tests__/helpers/mock-conversation.ts +46 -0
- package/src/__tests__/helpers/verification-sessions-ipc-sim.ts +61 -57
- package/src/__tests__/history-repair.test.ts +112 -12
- package/src/__tests__/host-bash-proxy.test.ts +10 -5
- package/src/__tests__/host-bash-routes.test.ts +67 -0
- package/src/__tests__/host-browser-proxy.test.ts +2 -2
- package/src/__tests__/host-cu-proxy.test.ts +3 -7
- package/src/__tests__/host-file-proxy.test.ts +3 -7
- package/src/__tests__/host-file-read-tool.test.ts +5 -1
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +6 -4
- package/src/__tests__/http-conversation-lineage.test.ts +2 -5
- package/src/__tests__/http-user-message-parity.test.ts +44 -0
- package/src/__tests__/identity-routes.test.ts +13 -13
- package/src/__tests__/image-conversion.test.ts +29 -26
- package/src/__tests__/image-source-path-reinject.test.ts +2 -2
- package/src/__tests__/inference-profile-session-handler.test.ts +95 -0
- package/src/__tests__/inference-profile-session-ipc.test.ts +25 -0
- package/src/__tests__/introduction-card-resolver.test.ts +6 -1
- package/src/__tests__/list-messages-attachments.test.ts +56 -32
- package/src/__tests__/list-messages-background-tool-completion.test.ts +4 -4
- package/src/__tests__/list-messages-client-message-id.test.ts +2 -2
- package/src/__tests__/list-messages-hidden-metadata.test.ts +16 -16
- package/src/__tests__/list-messages-page-latest.test.ts +61 -61
- package/src/__tests__/list-messages-provider-error.test.ts +6 -6
- package/src/__tests__/list-messages-queued.test.ts +49 -6
- package/src/__tests__/list-messages-system-card.test.ts +4 -4
- package/src/__tests__/list-messages-tool-merge.test.ts +9 -9
- package/src/__tests__/llm-resolver-override-or-default.test.ts +141 -0
- package/src/__tests__/llm-usage-store.test.ts +55 -0
- package/src/__tests__/manual-token-reconciliation.test.ts +45 -0
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +133 -0
- package/src/__tests__/media-stream-server-integration.test.ts +36 -0
- package/src/__tests__/migration-export-http.test.ts +1 -1
- package/src/__tests__/migration-import-commit-http.test.ts +1 -1
- package/src/__tests__/migration-import-preflight-http.test.ts +1 -1
- package/src/__tests__/migration-validate-http.test.ts +1 -1
- package/src/__tests__/mtime-cache.test.ts +65 -3
- package/src/__tests__/notification-platform-adapter.test.ts +104 -0
- package/src/__tests__/notification-schedule-notify-dedup.test.ts +1 -1
- package/src/__tests__/oauth-provider-profiles.test.ts +4 -2
- package/src/__tests__/oauth-provider-seed-logos.test.ts +65 -0
- package/src/__tests__/oauth-provider-serializer.test.ts +17 -0
- package/src/__tests__/oauth-providers-routes.test.ts +1 -0
- package/src/__tests__/openai-responses-prompt-cache.test.ts +5 -2
- package/src/__tests__/path-policy.test.ts +164 -1
- package/src/__tests__/persist-media-references.test.ts +2 -2
- package/src/__tests__/persist-unsendable-image-downscale.test.ts +5 -5
- package/src/__tests__/persist-unsendable-image.test.ts +23 -23
- package/src/__tests__/persona-resolver.test.ts +154 -0
- package/src/__tests__/plugin-api-webhook-url.test.ts +170 -0
- package/src/__tests__/plugin-import-boundary-guard.test.ts +6 -0
- package/src/__tests__/processing-flag-persist-failure.test.ts +15 -10
- package/src/__tests__/profile-availability-incomplete.test.ts +113 -0
- package/src/__tests__/profiler-routes.test.ts +13 -13
- package/src/__tests__/prompt-cache-cross-turn-stability.test.ts +593 -0
- package/src/__tests__/proxy-approval-callback.test.ts +3 -3
- package/src/__tests__/queued-message-cancel-and-steer.test.ts +189 -0
- package/src/__tests__/queued-message-steer-actor-scoping.test.ts +164 -0
- package/src/__tests__/resolve-trust-class.test.ts +20 -0
- package/src/__tests__/run-conversation-turn-persistence.test.ts +1 -1
- package/src/__tests__/run-due-schedules.test.ts +174 -0
- package/src/__tests__/runtime-attachment-metadata.test.ts +15 -7
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +166 -0
- package/src/__tests__/schedule-routes.test.ts +730 -8
- package/src/__tests__/schedule-store.test.ts +540 -0
- package/src/__tests__/schedule-tools.test.ts +103 -0
- package/src/__tests__/scheduler-wake.test.ts +5 -0
- package/src/__tests__/secret-routes-platform-proxy.test.ts +29 -1
- package/src/__tests__/secure-keys.test.ts +91 -0
- package/src/__tests__/server-history-render.test.ts +97 -7
- package/src/__tests__/size-guard.test.ts +8 -8
- package/src/__tests__/skill-docs-sync-guard.test.ts +3 -2
- package/src/__tests__/skill-tool-factory.test.ts +247 -0
- package/src/__tests__/skills-install-staging.test.ts +15 -6
- package/src/__tests__/slack-edit-ordering-characterization.test.ts +103 -0
- package/src/__tests__/slack-inbound-verification.test.ts +4 -1
- package/src/__tests__/slack-mention-binding-invariance.test.ts +103 -0
- package/src/__tests__/slack-mention-provider-leak-audit.test.ts +135 -0
- package/src/__tests__/starter-task-flow.test.ts +5 -4
- package/src/__tests__/steer-on-enqueue-question.test.ts +3 -2
- package/src/__tests__/stt-language-catalog-parity.test.ts +38 -0
- package/src/__tests__/subagent-allowlist-validation.test.ts +26 -4
- package/src/__tests__/subagent-cron-run-attribution.test.ts +301 -0
- package/src/__tests__/subagent-disposal.test.ts +10 -0
- package/src/__tests__/subagent-fork-notifications.test.ts +10 -0
- package/src/__tests__/subagent-fork-prompt-role.test.ts +85 -11
- package/src/__tests__/subagent-fork-spawn.test.ts +15 -7
- package/src/__tests__/subagent-manager-notify.test.ts +148 -0
- package/src/__tests__/subagent-notify-parent.test.ts +1 -1
- package/src/__tests__/subagent-persistence.test.ts +141 -0
- package/src/__tests__/subagent-role-registry.test.ts +172 -63
- package/src/__tests__/subagent-role-resolution.test.ts +88 -0
- package/src/__tests__/subagent-spawn-and-await.test.ts +48 -0
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +111 -10
- package/src/__tests__/subagent-terminal-message.test.ts +88 -1
- package/src/__tests__/subagent-tool-gate-mode.test.ts +225 -10
- package/src/__tests__/subagent-tools.test.ts +1901 -108
- package/src/__tests__/surface-completion-compaction-boundary.test.ts +124 -0
- package/src/__tests__/surface-completion-in-flight-snapshot.test.ts +298 -0
- package/src/__tests__/system-prompt.test.ts +82 -7
- package/src/__tests__/tool-grant-request-escalation.test.ts +40 -1
- package/src/__tests__/tool-result-spool.test.ts +74 -18
- package/src/__tests__/tool-side-effects-documents.test.ts +174 -0
- package/src/__tests__/tool-side-effects-hook-failures.test.ts +129 -0
- package/src/__tests__/tools-audio-read.test.ts +10 -10
- package/src/__tests__/tools-get-route.test.ts +85 -12
- package/src/__tests__/tools-list-cli.test.ts +171 -0
- package/src/__tests__/top-level-renderer.test.ts +54 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +68 -1
- package/src/__tests__/trusted-contact-multichannel.test.ts +4 -1
- package/src/__tests__/turn-tail-chain.test.ts +135 -0
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +6 -4
- package/src/__tests__/ui-visual-surface.test.ts +5 -4
- package/src/__tests__/ui-work-result-surface.test.ts +5 -4
- package/src/__tests__/unified-turn-context-visible-app.test.ts +7 -8
- package/src/__tests__/usage-routes.test.ts +62 -0
- package/src/__tests__/verification-outbound-delivery.test.ts +176 -0
- package/src/__tests__/visible-app-context.test.ts +20 -4
- package/src/__tests__/web-search-history.test.ts +96 -0
- package/src/__tests__/workspace-migration-139-clear-renamed-cost-profile-label.test.ts +6 -6
- package/src/__tests__/workspace-migration-140-repair-seed-pinned-memory-v3-live.test.ts +330 -0
- package/src/acp/failure-error.ts +3 -5
- package/src/agent/attachments.ts +26 -24
- package/src/agent/history-repair/history-repair.ts +27 -26
- package/src/agent/image-optimize.ts +6 -6
- package/src/agent/loop.ts +40 -22
- package/src/agent/message-types.ts +3 -3
- package/src/api/constants/document-tools.ts +55 -0
- package/src/api/events/question-answered.ts +53 -0
- package/src/api/events/tool-result.ts +7 -0
- package/src/api/index.ts +13 -0
- package/src/api/responses/conversation-message.ts +11 -0
- package/src/api/surfaces-oauth-connect.test.ts +96 -0
- package/src/api/surfaces.ts +36 -8
- package/src/approvals/guardian-channel-delivery.ts +83 -0
- package/src/approvals/guardian-expiry-notifier.ts +13 -11
- package/src/approvals/guardian-request-resolvers.ts +222 -135
- package/src/calls/__tests__/voice-session-bridge.test.ts +50 -0
- package/src/calls/media-stream-server.ts +9 -1
- package/src/calls/voice-session-bridge.ts +38 -0
- package/src/channels/__tests__/gateway-verification-sessions.test.ts +3 -3
- package/src/channels/config.ts +7 -2
- package/src/channels/gateway-verification-sessions.ts +7 -2
- package/src/channels/types.ts +7 -1
- package/src/cli/commands/__tests__/cache.test.ts +7 -4
- package/src/cli/commands/__tests__/cli-test-harness.ts +82 -0
- package/src/cli/commands/__tests__/conversations-wake.test.ts +51 -6
- package/src/cli/commands/__tests__/inference-models.test.ts +14 -0
- package/src/cli/commands/__tests__/inference-profiles.test.ts +44 -1
- package/src/cli/commands/__tests__/inference-providers.test.ts +7 -0
- package/src/cli/commands/__tests__/plugins.test.ts +692 -0
- package/src/cli/commands/__tests__/schedules.test.ts +136 -37
- package/src/cli/commands/conversations.ts +7 -3
- package/src/cli/commands/credentials.help.ts +7 -0
- package/src/cli/commands/inference-profiles.ts +9 -3
- package/src/cli/commands/inference.help.ts +16 -2
- package/src/cli/commands/mcp.help.ts +4 -2
- package/src/cli/commands/memory/memory-retrospective.ts +18 -0
- package/src/cli/commands/notifications.ts +3 -6
- package/src/cli/commands/oauth/connect-surface-guidance.test.ts +16 -0
- package/src/cli/commands/oauth/connect-surface-guidance.ts +25 -7
- package/src/cli/commands/oauth/connect.test.ts +26 -1
- package/src/cli/commands/oauth/connect.ts +4 -1
- package/src/cli/commands/oauth/index.help.ts +3 -1
- package/src/cli/commands/oauth/providers.ts +3 -0
- package/src/cli/commands/plugins.help.ts +25 -2
- package/src/cli/commands/plugins.ts +289 -10
- package/src/cli/commands/schedules.help.ts +14 -12
- package/src/cli/commands/schedules.ts +19 -5
- package/src/cli/commands/tools.help.ts +4 -2
- package/src/cli/commands/tools.ts +38 -0
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +1 -0
- package/src/cli/lib/__tests__/install-from-github.test.ts +79 -0
- package/src/cli/lib/__tests__/install-from-platform.test.ts +47 -1
- package/src/cli/lib/__tests__/plugin-surfaces.test.ts +86 -7
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +122 -0
- package/src/cli/lib/install-from-github.ts +61 -0
- package/src/cli/lib/install-from-platform.ts +13 -2
- package/src/cli/lib/plugin-surfaces.ts +124 -4
- package/src/cli/lib/upgrade-plugin.ts +18 -0
- package/src/cli.ts +1 -1
- package/src/config/__tests__/deployment-context-defaults.test.ts +73 -0
- package/src/config/__tests__/memory-retrospective-schema.test.ts +40 -0
- package/src/config/__tests__/plugin-updates-schema.test.ts +43 -0
- package/src/config/__tests__/profile-tool-support.test.ts +131 -0
- package/src/config/bundled-skills/AGENTS.md +1 -1
- package/src/config/bundled-skills/app-builder/SKILL.md +1 -1
- package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +3 -3
- package/src/config/bundled-skills/schedule/SKILL.md +5 -1
- package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
- package/src/config/bundled-skills/settings/TOOLS.json +2 -2
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +1 -0
- package/src/config/bundled-skills/subagent/SKILL.md +53 -22
- package/src/config/bundled-skills/subagent/TOOLS.json +14 -13
- package/src/config/bundled-skills/visualize/SKILL.md +1 -1
- package/src/config/default-profile-catalog.ts +6 -2
- package/src/config/feature-flag-registry.json +25 -17
- package/src/config/llm-resolver.ts +45 -15
- package/src/config/loader.ts +70 -1
- package/src/config/profile-tool-support.ts +110 -0
- package/src/config/sanitize-for-transfer.ts +11 -0
- package/src/config/schema.ts +4 -0
- package/src/config/schemas/__tests__/stt.test.ts +20 -5
- package/src/config/schemas/channels.ts +13 -0
- package/src/config/schemas/memory-retrospective.ts +25 -0
- package/src/config/schemas/plugin-updates.ts +55 -0
- package/src/config/schemas/services.ts +8 -4
- package/src/config/schemas/stt.ts +17 -5
- package/src/config/schemas/timeouts.ts +1 -1
- package/src/contacts/__tests__/guardian-delivery-reader.test.ts +16 -0
- package/src/contacts/guardian-delivery-reader.ts +29 -2
- package/src/context/compactor.ts +4 -4
- package/src/context/post-turn-tool-result-truncation.ts +32 -16
- package/src/context/strip-injections.ts +42 -0
- package/src/context/tool-result-spool.ts +32 -18
- package/src/credential-execution/ces-runtime.ts +3 -0
- package/src/credential-execution/client.ts +22 -1
- package/src/credential-execution/process-manager.test.ts +99 -0
- package/src/credential-execution/process-manager.ts +62 -16
- package/src/daemon/__tests__/abort-null-controller.test.ts +141 -5
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +8 -12
- package/src/daemon/__tests__/install-assistant-command.test.ts +234 -0
- package/src/daemon/__tests__/turn-tail-assistant-reply-notify.test.ts +2 -4
- package/src/daemon/__tests__/turn-tail-deleted-conversation.test.ts +20 -29
- package/src/daemon/channel-ui-capability.ts +4 -4
- package/src/daemon/conversation-agent-loop-handlers.ts +117 -61
- package/src/daemon/conversation-agent-loop.ts +318 -148
- package/src/daemon/conversation-attachments.ts +1 -1
- package/src/daemon/conversation-error.ts +8 -1
- package/src/daemon/conversation-initial-prompt.ts +16 -38
- package/src/daemon/conversation-lifecycle.ts +154 -32
- package/src/daemon/conversation-messaging.ts +106 -43
- package/src/daemon/conversation-process.ts +131 -33
- package/src/daemon/conversation-queue-manager.ts +10 -0
- package/src/daemon/conversation-runtime-assembly.ts +9 -4
- package/src/daemon/conversation-store.ts +52 -3
- package/src/daemon/conversation-surface-state.ts +9 -0
- package/src/daemon/conversation-surfaces.ts +403 -210
- package/src/daemon/conversation-tool-setup.ts +56 -7
- package/src/daemon/conversation-turn-finalize.ts +134 -89
- package/src/daemon/conversation.ts +111 -27
- package/src/daemon/disk-pressure-guard-lifecycle.ts +2 -2
- package/src/daemon/disk-pressure-guard.ts +3 -3
- package/src/daemon/doordash-steps.ts +5 -5
- package/src/daemon/external-plugins-bootstrap.ts +7 -1
- package/src/daemon/handlers/config-channels.ts +48 -5
- package/src/daemon/handlers/conversation-history.ts +1 -1
- package/src/daemon/handlers/conversations.ts +62 -17
- package/src/daemon/handlers/shared.ts +12 -0
- package/src/daemon/handlers/skills.ts +11 -1
- package/src/daemon/identity-helpers.ts +38 -10
- package/src/daemon/install-assistant-command.ts +322 -0
- package/src/daemon/lifecycle.ts +14 -3
- package/src/daemon/message-types/conversations.ts +6 -7
- package/src/daemon/message-types/sync.ts +1 -0
- package/src/daemon/persist-media-references.ts +23 -14
- package/src/daemon/process-message.ts +6 -6
- package/src/daemon/tool-setup-types.ts +19 -122
- package/src/daemon/tool-side-effects.ts +17 -94
- package/src/daemon/trust-context-types.ts +39 -0
- package/src/daemon/trust-context.ts +14 -6
- package/src/daemon/turn-tail-chain.ts +73 -0
- package/src/daemon/web-search-history.ts +47 -33
- package/src/heartbeat/heartbeat-service.ts +6 -6
- package/src/ipc/__tests__/socket-path.test.ts +21 -0
- package/src/ipc/assistant-server.ts +17 -10
- package/src/ipc/cli-client.ts +10 -1
- package/src/ipc/routes/__tests__/documents-sync-ipc-routes.test.ts +56 -0
- package/src/ipc/routes/documents-sync-ipc-routes.ts +42 -0
- package/src/ipc/socket-cleanup.ts +9 -7
- package/src/ipc/socket-path.ts +4 -96
- package/src/live-voice/__tests__/live-voice-archive.test.ts +16 -16
- package/src/live-voice/__tests__/live-voice-attach-image.test.ts +209 -0
- package/src/live-voice/__tests__/live-voice-connection.test.ts +20 -0
- package/src/live-voice/__tests__/live-voice-integration.test.ts +7 -5
- package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +265 -0
- package/src/live-voice/__tests__/live-voice-stt.test.ts +6 -1
- package/src/live-voice/__tests__/live-voice-vad.test.ts +35 -15
- package/src/live-voice/__tests__/protocol.test.ts +52 -0
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +3 -0
- package/src/live-voice/live-voice-archive.ts +13 -13
- package/src/live-voice/live-voice-connection.ts +7 -1
- package/src/live-voice/live-voice-photo.ts +169 -0
- package/src/live-voice/live-voice-session.ts +108 -4
- package/src/live-voice/protocol.ts +89 -1
- package/src/mcp/client.ts +10 -0
- package/src/messaging/providers/__tests__/callback-routing.test.ts +5 -1
- package/src/messaging/providers/__tests__/transport-dispatch.test.ts +66 -4
- package/src/messaging/providers/callback-routing.ts +1 -0
- package/src/messaging/providers/discord/api.ts +312 -0
- package/src/messaging/providers/discord/dm-delivery.test.ts +204 -0
- package/src/messaging/providers/discord/render.test.ts +204 -0
- package/src/messaging/providers/discord/render.ts +195 -0
- package/src/messaging/providers/discord/send.test.ts +179 -0
- package/src/messaging/providers/discord/send.ts +212 -0
- package/src/messaging/providers/discord/transport.ts +81 -0
- package/src/messaging/providers/index.ts +3 -1
- package/src/messaging/providers/retry-policy.test.ts +247 -0
- package/src/messaging/providers/retry-policy.ts +206 -0
- package/src/messaging/providers/slack/mention-source.test.ts +285 -0
- package/src/messaging/providers/slack/mention-source.ts +287 -0
- package/src/messaging/providers/telegram-bot/api.ts +47 -130
- package/src/messaging/providers/whatsapp/api.ts +47 -136
- package/src/monitoring/__tests__/db-integrity-sample.test.ts +4 -1
- package/src/monitoring/__tests__/plugin-auto-update.test.ts +332 -0
- package/src/monitoring/db-integrity-sample.ts +6 -1
- package/src/monitoring/plugin-auto-update.ts +359 -0
- package/src/monitoring/resource-sampler.ts +21 -5
- package/src/monitoring/worker.ts +13 -0
- package/src/notifications/__tests__/assistant-reply-producer.test.ts +375 -2
- package/src/notifications/__tests__/broadcaster.test.ts +37 -1
- package/src/notifications/__tests__/copy-composer.test.ts +165 -0
- package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +205 -0
- package/src/notifications/__tests__/notification-utils.test.ts +249 -0
- package/src/notifications/adapters/platform.ts +31 -2
- package/src/notifications/assistant-reply-producer.ts +79 -32
- package/src/notifications/broadcaster.ts +30 -10
- package/src/notifications/copy-composer.ts +69 -0
- package/src/notifications/emit-signal.ts +82 -15
- package/src/notifications/events-store.ts +10 -2
- package/src/notifications/home-feed-side-effect.ts +6 -3
- package/src/notifications/notification-utils.ts +173 -5
- package/src/notifications/signal.ts +12 -0
- package/src/oauth/AGENTS.md +4 -2
- package/src/oauth/byo-connection.ts +6 -1
- package/src/oauth/credential-token-resolver.ts +3 -10
- package/src/oauth/manual-token-connection.ts +29 -64
- package/src/oauth/manual-token-providers.ts +62 -0
- package/src/oauth/provider-serializer.ts +13 -0
- package/src/oauth/seed-providers.ts +62 -11
- package/src/onboarding/onboarding-events-store.ts +91 -1
- package/src/permissions/question-prompter.test.ts +4 -0
- package/src/permissions/question-prompter.ts +21 -4
- package/src/persistence/__tests__/conversation-lineage.test.ts +248 -0
- package/src/persistence/attachments-store.ts +15 -15
- package/src/persistence/conversation-attention-store.ts +30 -10
- package/src/persistence/conversation-bootstrap.ts +17 -0
- package/src/persistence/conversation-crud.ts +363 -97
- package/src/persistence/conversation-group-migration.ts +1 -1
- package/src/persistence/conversation-key-store.ts +38 -10
- package/src/persistence/conversation-lineage.ts +226 -0
- package/src/persistence/conversation-plugin-facade.ts +28 -3
- package/src/persistence/conversation-queries.ts +207 -33
- package/src/persistence/conversation-types.ts +107 -1
- package/src/persistence/jobs-store.ts +32 -8
- package/src/persistence/llm-usage-store.ts +22 -0
- package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +168 -0
- package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +76 -0
- package/src/persistence/migrations/362-add-conversation-subagent-kind.test.ts +187 -0
- package/src/persistence/migrations/362-add-conversation-subagent-kind.ts +93 -0
- package/src/persistence/migrations/363-backfill-schedule-inference-profile.test.ts +229 -0
- package/src/persistence/migrations/363-backfill-schedule-inference-profile.ts +127 -0
- package/src/persistence/migrations/364-add-schedule-source-key.test.ts +120 -0
- package/src/persistence/migrations/364-add-schedule-source-key.ts +43 -0
- package/src/persistence/migrations/365-add-conversation-fork-strategy.ts +27 -0
- package/src/persistence/schema/conversations.ts +32 -0
- package/src/persistence/schema/infrastructure.ts +3 -0
- package/src/persistence/steps.ts +30 -0
- package/src/persistence/subagent-store.ts +148 -6
- package/src/platform/managed-speech.test.ts +20 -0
- package/src/platform/managed-speech.ts +9 -0
- package/src/plugin-api/index.ts +8 -0
- package/src/plugin-api/webhook-url.ts +151 -0
- package/src/plugins/__tests__/installed-plugin-dirs.test.ts +82 -0
- package/src/plugins/__tests__/source-fingerprint.test.ts +5 -1
- package/src/plugins/collect-source-versions.ts +4 -27
- package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +5 -5
- package/src/plugins/defaults/exploration-drift/package.json +1 -1
- package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +4 -2
- package/src/plugins/defaults/image-recovery/recover.ts +67 -57
- package/src/plugins/defaults/index.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/conversation-queries.test.ts +64 -18
- package/src/plugins/defaults/memory/__tests__/jobs-worker-outcome-contract.test.ts +242 -0
- package/src/plugins/defaults/memory/__tests__/jobs-worker-retrospective-sweep.test.ts +24 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +48 -3
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +511 -19
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +39 -3
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +493 -0
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-wake-chain.test.ts +5 -4
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +5 -1
- package/src/plugins/defaults/memory/job-handlers.ts +87 -5
- package/src/plugins/defaults/memory/jobs-worker.ts +60 -6
- package/src/plugins/defaults/memory/memory-retrospective-constants.ts +11 -0
- package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +29 -0
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +342 -60
- package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +23 -3
- package/src/plugins/defaults/memory/substrate/consolidation-lock.ts +9 -4
- package/src/plugins/defaults/memory/substrate/sweep-job.ts +7 -0
- package/src/plugins/defaults/memory/v1/graph/injection.ts +1 -1
- package/src/plugins/defaults/memory/v2/router.ts +8 -0
- package/src/plugins/defaults/turn-context/unified-turn-context.ts +1 -2
- package/src/plugins/external-plugin-loader.ts +17 -8
- package/src/plugins/installed-plugin-dirs.ts +101 -0
- package/src/plugins/mtime-cache.ts +34 -22
- package/src/plugins/types.ts +69 -8
- package/src/prompts/persona-resolver.ts +6 -2
- package/src/prompts/system-prompt.ts +72 -17
- package/src/providers/__tests__/inference.test.ts +40 -0
- package/src/providers/__tests__/preflight-resolved-config.test.ts +58 -1
- package/src/providers/__tests__/retry-callsite.test.ts +67 -0
- package/src/providers/__tests__/vellum-connection-routing.test.ts +42 -11
- package/src/providers/anthropic/client.ts +112 -95
- package/src/providers/connection-resolution.ts +35 -1
- package/src/providers/gemini/client.ts +5 -5
- package/src/providers/inference/adapter-factory.ts +16 -10
- package/src/providers/inference/auth.ts +16 -0
- package/src/providers/inference/connection-availability.ts +164 -12
- package/src/providers/inference/connections.ts +25 -1
- package/src/providers/media-resolve.ts +21 -11
- package/src/providers/model-catalog.ts +15 -0
- package/src/providers/openai/chat-completions-provider.ts +4 -4
- package/src/providers/openai/responses-provider.ts +12 -25
- package/src/providers/registry.ts +9 -4
- package/src/providers/retry.ts +25 -0
- package/src/providers/server-tool-pairing.ts +134 -0
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +187 -6
- package/src/providers/speech-to-text/deepgram.ts +1 -0
- package/src/providers/speech-to-text/resolve.ts +80 -10
- package/src/providers/speech-to-text/vellum-managed.ts +7 -1
- package/src/providers/speech-to-text/vellum-speech-relay-connection.ts +3 -1
- package/src/providers/types.ts +26 -6
- package/src/providers/vellum-model-routing.ts +6 -7
- package/src/runtime/AGENTS.md +2 -0
- package/src/runtime/__tests__/agent-wake.test.ts +16 -16
- package/src/runtime/__tests__/background-job-runner.test.ts +0 -144
- package/src/runtime/__tests__/desktop-presence.test.ts +162 -0
- package/src/runtime/agent-wake.ts +63 -24
- package/src/runtime/assistant-event-hub.ts +87 -12
- package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -0
- package/src/runtime/auth/__tests__/scopes.test.ts +20 -0
- package/src/runtime/auth/same-actor.ts +56 -8
- package/src/runtime/auth/scopes.ts +12 -0
- package/src/runtime/auth/types.ts +2 -0
- package/src/runtime/background-job-runner.ts +5 -27
- package/src/runtime/channel-readiness-service.ts +59 -3
- package/src/runtime/channel-readiness-types.ts +18 -0
- package/src/runtime/desktop-presence.ts +69 -0
- package/src/runtime/http-server.ts +12 -0
- package/src/runtime/local-actor-identity.ts +11 -9
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/client-routes.test.ts +186 -14
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +547 -1
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +162 -7
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +14 -10
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +340 -3
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +28 -1
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +173 -1
- package/src/runtime/routes/__tests__/question-routes.test.ts +64 -0
- package/src/runtime/routes/__tests__/retrospective-routes.test.ts +20 -0
- package/src/runtime/routes/__tests__/skill-history-route.test.ts +116 -0
- package/src/runtime/routes/__tests__/wake-conversation-routes.test.ts +60 -2
- package/src/runtime/routes/archive-utils.ts +16 -12
- package/src/runtime/routes/attachment-routes.ts +13 -6
- package/src/runtime/routes/canned-reply-release.ts +54 -0
- package/src/runtime/routes/channel-verification-routes.ts +2 -27
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +5 -0
- package/src/runtime/routes/client-routes.ts +114 -2
- package/src/runtime/routes/conversation-cli-routes.ts +10 -12
- package/src/runtime/routes/conversation-list-routes.ts +59 -10
- package/src/runtime/routes/conversation-management-routes.ts +47 -18
- package/src/runtime/routes/conversation-query-routes.ts +32 -53
- package/src/runtime/routes/conversation-routes.ts +360 -293
- package/src/runtime/routes/credential-prompt-routes.ts +23 -2
- package/src/runtime/routes/debug-routes.ts +4 -1
- package/src/runtime/routes/default-provider-routes.ts +7 -11
- package/src/runtime/routes/documents-routes.ts +44 -1
- package/src/runtime/routes/events-routes.ts +28 -1
- package/src/runtime/routes/host-app-control-routes.ts +2 -0
- package/src/runtime/routes/host-bash-routes.ts +2 -0
- package/src/runtime/routes/host-browser-routes.ts +2 -0
- package/src/runtime/routes/host-cu-routes.ts +2 -0
- package/src/runtime/routes/host-file-routes.ts +2 -0
- package/src/runtime/routes/host-transfer-routes.ts +4 -0
- package/src/runtime/routes/identity-routes.ts +6 -6
- package/src/runtime/routes/inbound-message-handler.ts +5 -5
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +7 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +14 -0
- package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +2 -2
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +14 -11
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +14 -17
- package/src/runtime/routes/inference-profile-availability-guard.ts +171 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +26 -2
- package/src/runtime/routes/inference-profile-session-routes.ts +2 -1
- package/src/runtime/routes/inference-profiles-routes.ts +152 -73
- package/src/runtime/routes/inference-provider-connection-routes.ts +0 -16
- package/src/runtime/routes/llm-call-sites-routes.ts +13 -0
- package/src/runtime/routes/log-export-routes.ts +1 -1
- package/src/runtime/routes/notification-routes.ts +0 -14
- package/src/runtime/routes/oauth-providers.ts +1 -0
- package/src/runtime/routes/plugins-routes.ts +106 -1
- package/src/runtime/routes/profiler-routes.ts +4 -2
- package/src/runtime/routes/question-routes.ts +28 -10
- package/src/runtime/routes/retrospective-routes.ts +9 -3
- package/src/runtime/routes/schedule-routes.ts +210 -12
- package/src/runtime/routes/secret-routes.ts +40 -23
- package/src/runtime/routes/settings-routes.ts +41 -13
- package/src/runtime/routes/skills-routes.ts +79 -0
- package/src/runtime/routes/ui-snapshot-routes.ts +1 -0
- package/src/runtime/routes/wake-conversation-routes.ts +23 -0
- package/src/runtime/services/__tests__/conversation-serializer.test.ts +1 -0
- package/src/runtime/services/conversation-serializer.ts +24 -9
- package/src/runtime/sync/documents-sidecar-publish.test.ts +101 -0
- package/src/runtime/sync/resource-sync-events.ts +79 -1
- package/src/runtime/sync/worker-daemon-notify.test.ts +34 -0
- package/src/runtime/sync/worker-daemon-notify.ts +44 -6
- package/src/runtime/verification-outbound-actions.ts +250 -222
- package/src/runtime/verification-templates.ts +41 -30
- package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +614 -0
- package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1066 -0
- package/src/schedule/inference-profile.ts +64 -3
- package/src/schedule/plugin-schedule-declarations.ts +518 -0
- package/src/schedule/plugin-schedule-reconciler.ts +605 -0
- package/src/schedule/plugin-schedules-gate.ts +23 -0
- package/src/schedule/schedule-store.ts +520 -26
- package/src/schedule/scheduler.ts +38 -0
- package/src/security/credential-backend.ts +51 -4
- package/src/security/encrypted-store.ts +64 -42
- package/src/security/secure-keys.ts +55 -7
- package/src/skills/catalog-install.ts +20 -7
- package/src/skills/inline-command-runner.ts +2 -7
- package/src/skills/skill-history.test.ts +269 -0
- package/src/skills/skill-history.ts +250 -0
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/stt/daemon-batch-transcriber.ts +8 -6
- package/src/subagent/__tests__/consult-prompt.test.ts +25 -0
- package/src/subagent/consult-prompt.ts +3 -1
- package/src/subagent/consult-transcript.ts +1 -1
- package/src/subagent/manager.ts +304 -44
- package/src/subagent/progress-events.ts +35 -0
- package/src/subagent/role-resolution.ts +88 -0
- package/src/subagent/types.ts +302 -67
- package/src/subagent/validate-allowlists.ts +3 -4
- package/src/telegram/__tests__/webhook-health.test.ts +73 -1
- package/src/telegram/webhook-health.ts +101 -3
- package/src/telemetry/__tests__/telemetry-event-fixtures.ts +2 -0
- package/src/telemetry/activation-funnel.ts +6 -1
- package/src/telemetry/live-voice-funnel.ts +75 -0
- package/src/telemetry/telemetry-event-sources.ts +6 -0
- package/src/telemetry/telemetry-wire-source.json +1 -1
- package/src/telemetry/telemetry-wire.generated.ts +2 -0
- package/src/telemetry/types.ts +23 -4
- package/src/telemetry/usage-telemetry-reporter.test.ts +4 -0
- package/src/tools/__tests__/subagent-workflow-tool-input-schemas.test.ts +1 -1
- package/src/tools/ask-question/ask-question-tool.test.ts +118 -3
- package/src/tools/ask-question/ask-question-tool.ts +56 -2
- package/src/tools/browser/browser-execution.ts +1 -1
- package/src/tools/calls/call-start.ts +8 -5
- package/src/tools/conversation-groups/move_to_group.ts +10 -12
- package/src/tools/document/document-tool.ts +11 -4
- package/src/tools/execution-timeout.ts +9 -2
- package/src/tools/executor.ts +7 -6
- package/src/tools/filesystem/edit.ts +1 -1
- package/src/tools/filesystem/list.ts +1 -1
- package/src/tools/filesystem/read.ts +7 -13
- package/src/tools/filesystem/search.ts +23 -21
- package/src/tools/filesystem/write.ts +4 -1
- package/src/tools/host-filesystem/edit.ts +7 -2
- package/src/tools/host-filesystem/read.ts +21 -8
- package/src/tools/host-filesystem/write.ts +10 -2
- package/src/tools/host-terminal/host-shell.ts +2 -2
- package/src/tools/mcp/mcp-tool-factory.ts +25 -1
- package/src/tools/permission-checker.ts +8 -3
- package/src/tools/schedule/delete.ts +13 -1
- package/src/tools/schedule/list.ts +14 -3
- package/src/tools/schedule/update.ts +56 -33
- package/src/tools/shared/filesystem/audio-read.ts +6 -4
- package/src/tools/shared/filesystem/file-ops-service.ts +176 -116
- package/src/tools/shared/filesystem/image-read.ts +12 -12
- package/src/tools/shared/filesystem/path-policy.ts +70 -5
- package/src/tools/shared/filesystem/size-guard.ts +6 -6
- package/src/tools/shared/input-misuse.ts +72 -0
- package/src/tools/skills/scaffold-managed.ts +82 -0
- package/src/tools/skills/skill-tool-factory.ts +14 -1
- package/src/tools/subagent/consult-deadline.ts +12 -7
- package/src/tools/subagent/message.ts +3 -1
- package/src/tools/subagent/read.ts +66 -4
- package/src/tools/subagent/spawn.ts +500 -78
- package/src/tools/tool-approval-handler.ts +45 -4
- package/src/tools/types.ts +22 -3
- package/src/tools/ui-surface/surface-shape-docs.ts +1 -1
- package/src/tools/ui-surface/visual-validation.ts +2 -0
- package/src/usage/__tests__/subagent-attribution.test.ts +109 -0
- package/src/usage/subagent-attribution.ts +108 -0
- package/src/util/__tests__/sqlite-retry.test.ts +112 -0
- package/src/util/abort-reasons.ts +16 -0
- package/src/util/ansi.ts +44 -0
- package/src/util/disk-usage.ts +17 -13
- package/src/util/image-conversion.ts +20 -13
- package/src/util/schedule-source-key.ts +23 -0
- package/src/util/worker-process.ts +7 -1
- package/src/workspace/git-service.ts +33 -9
- package/src/workspace/migrations/140-repair-seed-pinned-memory-v3-live.ts +260 -0
- package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +111 -0
- package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +126 -0
- package/src/workspace/migrations/registry.ts +4 -0
- package/src/workspace/top-level-renderer.ts +15 -2
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +0 -357
- package/src/daemon/install-symlink.ts +0 -207
- package/src/notifications/deferred-emit.ts +0 -147
|
@@ -103,10 +103,14 @@ describe("handleListMessages attachments", () => {
|
|
|
103
103
|
"user",
|
|
104
104
|
JSON.stringify([{ type: "text", text: "check this image" }]),
|
|
105
105
|
);
|
|
106
|
-
const stored = uploadAttachment(
|
|
106
|
+
const stored = await uploadAttachment(
|
|
107
|
+
"photo.png",
|
|
108
|
+
"image/png",
|
|
109
|
+
IMAGE_BASE64,
|
|
110
|
+
);
|
|
107
111
|
linkAttachmentToMessage(msg.id, stored.id, 0);
|
|
108
112
|
|
|
109
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
113
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
110
114
|
const body = response as { messages: MessagePayload[] };
|
|
111
115
|
|
|
112
116
|
expect(body.messages).toHaveLength(1);
|
|
@@ -124,14 +128,14 @@ describe("handleListMessages attachments", () => {
|
|
|
124
128
|
"user",
|
|
125
129
|
JSON.stringify([{ type: "text", text: "check this doc" }]),
|
|
126
130
|
);
|
|
127
|
-
const stored = uploadAttachment(
|
|
131
|
+
const stored = await uploadAttachment(
|
|
128
132
|
"report.pdf",
|
|
129
133
|
"application/pdf",
|
|
130
134
|
DOC_BASE64,
|
|
131
135
|
);
|
|
132
136
|
linkAttachmentToMessage(msg.id, stored.id, 0);
|
|
133
137
|
|
|
134
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
138
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
135
139
|
const body = response as { messages: MessagePayload[] };
|
|
136
140
|
|
|
137
141
|
expect(body.messages).toHaveLength(1);
|
|
@@ -150,10 +154,14 @@ describe("handleListMessages attachments", () => {
|
|
|
150
154
|
"assistant",
|
|
151
155
|
JSON.stringify([{ type: "text", text: "here is an image" }]),
|
|
152
156
|
);
|
|
153
|
-
const stored = uploadAttachment(
|
|
157
|
+
const stored = await uploadAttachment(
|
|
158
|
+
"result.png",
|
|
159
|
+
"image/png",
|
|
160
|
+
IMAGE_BASE64,
|
|
161
|
+
);
|
|
154
162
|
linkAttachmentToMessage(msg.id, stored.id, 0);
|
|
155
163
|
|
|
156
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
164
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
157
165
|
const body = response as { messages: MessagePayload[] };
|
|
158
166
|
|
|
159
167
|
expect(body.messages).toHaveLength(1);
|
|
@@ -172,8 +180,12 @@ describe("handleListMessages attachments", () => {
|
|
|
172
180
|
"user",
|
|
173
181
|
JSON.stringify([{ type: "text", text: "here are files" }]),
|
|
174
182
|
);
|
|
175
|
-
const imgStored = uploadAttachment(
|
|
176
|
-
|
|
183
|
+
const imgStored = await uploadAttachment(
|
|
184
|
+
"photo.png",
|
|
185
|
+
"image/png",
|
|
186
|
+
IMAGE_BASE64,
|
|
187
|
+
);
|
|
188
|
+
const docStored = await uploadAttachment(
|
|
177
189
|
"doc.pdf",
|
|
178
190
|
"application/pdf",
|
|
179
191
|
DOC_BASE64,
|
|
@@ -181,7 +193,7 @@ describe("handleListMessages attachments", () => {
|
|
|
181
193
|
linkAttachmentToMessage(msg.id, imgStored.id, 0);
|
|
182
194
|
linkAttachmentToMessage(msg.id, docStored.id, 1);
|
|
183
195
|
|
|
184
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
196
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
185
197
|
const body = response as { messages: MessagePayload[] };
|
|
186
198
|
|
|
187
199
|
const attachments = body.messages[0].attachments!;
|
|
@@ -200,7 +212,11 @@ describe("handleListMessages attachments", () => {
|
|
|
200
212
|
// duplicating it doubles every image in the response and in client
|
|
201
213
|
// memory.
|
|
202
214
|
const conv = createConversation();
|
|
203
|
-
const stored = uploadAttachment(
|
|
215
|
+
const stored = await uploadAttachment(
|
|
216
|
+
"photo.png",
|
|
217
|
+
"image/png",
|
|
218
|
+
IMAGE_BASE64,
|
|
219
|
+
);
|
|
204
220
|
const msg = await addMessage(
|
|
205
221
|
conv.id,
|
|
206
222
|
"user",
|
|
@@ -216,7 +232,7 @@ describe("handleListMessages attachments", () => {
|
|
|
216
232
|
);
|
|
217
233
|
linkAttachmentToMessage(msg.id, stored.id, 0);
|
|
218
234
|
|
|
219
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
235
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
220
236
|
const body = response as {
|
|
221
237
|
messages: {
|
|
222
238
|
attachments?: AttachmentPayload[];
|
|
@@ -257,10 +273,14 @@ describe("handleListMessages attachments", () => {
|
|
|
257
273
|
"assistant",
|
|
258
274
|
JSON.stringify([{ type: "text", text: "" }]),
|
|
259
275
|
);
|
|
260
|
-
const stored = uploadAttachment(
|
|
276
|
+
const stored = await uploadAttachment(
|
|
277
|
+
"output.png",
|
|
278
|
+
"image/png",
|
|
279
|
+
IMAGE_BASE64,
|
|
280
|
+
);
|
|
261
281
|
linkAttachmentToMessage(msg.id, stored.id, 0);
|
|
262
282
|
|
|
263
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
283
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
264
284
|
const body = response as {
|
|
265
285
|
messages: {
|
|
266
286
|
attachments?: AttachmentPayload[];
|
|
@@ -294,10 +314,14 @@ describe("handleListMessages attachments", () => {
|
|
|
294
314
|
"assistant",
|
|
295
315
|
JSON.stringify([{ type: "text", text: "" }]),
|
|
296
316
|
);
|
|
297
|
-
const stored = uploadAttachment(
|
|
317
|
+
const stored = await uploadAttachment(
|
|
318
|
+
"output.png",
|
|
319
|
+
"image/png",
|
|
320
|
+
IMAGE_BASE64,
|
|
321
|
+
);
|
|
298
322
|
linkAttachmentToMessage(msg.id, stored.id, 0);
|
|
299
323
|
|
|
300
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
324
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
301
325
|
const body = response as {
|
|
302
326
|
messages: {
|
|
303
327
|
attachments?: AttachmentPayload[];
|
|
@@ -335,7 +359,7 @@ describe("handleListMessages HEIC display normalization", () => {
|
|
|
335
359
|
const heicB64 = fakeHeifHeaderBytes().toString("base64");
|
|
336
360
|
insertLegacyAttachmentRow(msg.id, "IMG_1.HEIC", "image/heic", heicB64);
|
|
337
361
|
|
|
338
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
362
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
339
363
|
const body = response as { messages: MessagePayload[] };
|
|
340
364
|
|
|
341
365
|
const attachments = body.messages[0].attachments!;
|
|
@@ -364,7 +388,7 @@ describe("handleListMessages HEIC display normalization", () => {
|
|
|
364
388
|
"document",
|
|
365
389
|
);
|
|
366
390
|
|
|
367
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
391
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
368
392
|
const body = response as { messages: MessagePayload[] };
|
|
369
393
|
|
|
370
394
|
const attachments = body.messages[0].attachments!;
|
|
@@ -394,7 +418,7 @@ describe("handleListMessages HEIC display normalization", () => {
|
|
|
394
418
|
heic!.toString("base64"),
|
|
395
419
|
);
|
|
396
420
|
|
|
397
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
421
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
398
422
|
const body = response as { messages: MessagePayload[] };
|
|
399
423
|
|
|
400
424
|
const attachments = body.messages[0].attachments!;
|
|
@@ -428,7 +452,7 @@ describe("handleListMessages HEIC display normalization", () => {
|
|
|
428
452
|
"document",
|
|
429
453
|
);
|
|
430
454
|
|
|
431
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
455
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
432
456
|
const body = response as { messages: MessagePayload[] };
|
|
433
457
|
|
|
434
458
|
const attachments = body.messages[0].attachments!;
|
|
@@ -455,7 +479,7 @@ describe("handleListMessages no_response filtering", () => {
|
|
|
455
479
|
JSON.stringify([{ type: "text", text: "<no_response/>" }]),
|
|
456
480
|
);
|
|
457
481
|
|
|
458
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
482
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
459
483
|
const body = response as {
|
|
460
484
|
messages: { textSegments?: string[] }[];
|
|
461
485
|
};
|
|
@@ -476,7 +500,7 @@ describe("handleListMessages no_response filtering", () => {
|
|
|
476
500
|
]),
|
|
477
501
|
);
|
|
478
502
|
|
|
479
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
503
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
480
504
|
const body = response as {
|
|
481
505
|
messages: { textSegments?: string[] }[];
|
|
482
506
|
};
|
|
@@ -504,7 +528,7 @@ describe("handleListMessages no_response filtering", () => {
|
|
|
504
528
|
]),
|
|
505
529
|
);
|
|
506
530
|
|
|
507
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
531
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
508
532
|
const body = response as {
|
|
509
533
|
messages: {
|
|
510
534
|
textSegments: string[];
|
|
@@ -527,7 +551,7 @@ describe("handleListMessages no_response filtering", () => {
|
|
|
527
551
|
JSON.stringify([{ type: "text", text: "What does <no_response/> do?" }]),
|
|
528
552
|
);
|
|
529
553
|
|
|
530
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
554
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
531
555
|
const body = response as {
|
|
532
556
|
messages: { textSegments?: string[] }[];
|
|
533
557
|
};
|
|
@@ -588,7 +612,7 @@ describe("handleListMessages pagination", () => {
|
|
|
588
612
|
const conv = createConversation();
|
|
589
613
|
await insertMessages(conv.id, 5);
|
|
590
614
|
|
|
591
|
-
const response = handleListMessages(createTestArgs(conv.id));
|
|
615
|
+
const response = await handleListMessages(createTestArgs(conv.id));
|
|
592
616
|
const body = response as unknown as PaginatedResponse;
|
|
593
617
|
|
|
594
618
|
expect(body.messages).toHaveLength(5);
|
|
@@ -602,7 +626,7 @@ describe("handleListMessages pagination", () => {
|
|
|
602
626
|
await insertMessages(conv.id, 5);
|
|
603
627
|
|
|
604
628
|
const args = createPaginatedArgs(conv.id, { limit: "3" });
|
|
605
|
-
const response = handleListMessages(args);
|
|
629
|
+
const response = await handleListMessages(args);
|
|
606
630
|
const body = response as unknown as PaginatedResponse;
|
|
607
631
|
|
|
608
632
|
// Option A: without beforeTimestamp, all messages are returned regardless of limit
|
|
@@ -619,7 +643,7 @@ describe("handleListMessages pagination", () => {
|
|
|
619
643
|
beforeTimestamp: String(msgs[7].createdAt),
|
|
620
644
|
limit: "3",
|
|
621
645
|
});
|
|
622
|
-
const response = handleListMessages(args);
|
|
646
|
+
const response = await handleListMessages(args);
|
|
623
647
|
const body = response as unknown as PaginatedResponse;
|
|
624
648
|
|
|
625
649
|
expect(body.messages).toHaveLength(3);
|
|
@@ -640,7 +664,7 @@ describe("handleListMessages pagination", () => {
|
|
|
640
664
|
beforeTimestamp: String(msgs[1].createdAt),
|
|
641
665
|
limit: "10",
|
|
642
666
|
});
|
|
643
|
-
const response = handleListMessages(args);
|
|
667
|
+
const response = await handleListMessages(args);
|
|
644
668
|
const body = response as unknown as PaginatedResponse;
|
|
645
669
|
|
|
646
670
|
const ids = body.messages.map((m) => m.id);
|
|
@@ -658,7 +682,7 @@ describe("handleListMessages pagination", () => {
|
|
|
658
682
|
beforeTimestamp: String(msgs[4].createdAt + 1),
|
|
659
683
|
limit: "10",
|
|
660
684
|
});
|
|
661
|
-
const response = handleListMessages(args);
|
|
685
|
+
const response = await handleListMessages(args);
|
|
662
686
|
const body = response as unknown as PaginatedResponse;
|
|
663
687
|
|
|
664
688
|
expect(body.messages).toHaveLength(5);
|
|
@@ -674,7 +698,7 @@ describe("handleListMessages pagination", () => {
|
|
|
674
698
|
beforeTimestamp: String(msgs[4].createdAt + 1),
|
|
675
699
|
limit: "3",
|
|
676
700
|
});
|
|
677
|
-
const response = handleListMessages(args);
|
|
701
|
+
const response = await handleListMessages(args);
|
|
678
702
|
const body = response as unknown as PaginatedResponse;
|
|
679
703
|
|
|
680
704
|
expect(body.messages).toHaveLength(3);
|
|
@@ -685,7 +709,7 @@ describe("handleListMessages pagination", () => {
|
|
|
685
709
|
|
|
686
710
|
test("empty / nonexistent conversation → empty messages, no pagination metadata", async () => {
|
|
687
711
|
const args = createPaginatedArgs("nonexistent-conv-id");
|
|
688
|
-
const response = handleListMessages(args);
|
|
712
|
+
const response = await handleListMessages(args);
|
|
689
713
|
const body = response as unknown as PaginatedResponse;
|
|
690
714
|
|
|
691
715
|
expect(body.messages).toEqual([]);
|
|
@@ -698,7 +722,7 @@ describe("handleListMessages pagination", () => {
|
|
|
698
722
|
const conv = createConversation();
|
|
699
723
|
const args = createPaginatedArgs(conv.id, { limit: "abc" });
|
|
700
724
|
|
|
701
|
-
expect(
|
|
725
|
+
await expect(handleListMessages(args)).rejects.toThrow(
|
|
702
726
|
"limit must be a valid number",
|
|
703
727
|
);
|
|
704
728
|
});
|
|
@@ -707,7 +731,7 @@ describe("handleListMessages pagination", () => {
|
|
|
707
731
|
const conv = createConversation();
|
|
708
732
|
const args = createPaginatedArgs(conv.id, { beforeTimestamp: "abc" });
|
|
709
733
|
|
|
710
|
-
expect(
|
|
734
|
+
await expect(handleListMessages(args)).rejects.toThrow(
|
|
711
735
|
"beforeTimestamp must be a valid number",
|
|
712
736
|
);
|
|
713
737
|
});
|
|
@@ -85,9 +85,9 @@ describe("handleListMessages background-tool completion projection", () => {
|
|
|
85
85
|
},
|
|
86
86
|
);
|
|
87
87
|
|
|
88
|
-
const response = handleListMessages({
|
|
88
|
+
const response = (await handleListMessages({
|
|
89
89
|
queryParams: { conversationId: conv.id },
|
|
90
|
-
}) as { messages: ProjectedMessage[] };
|
|
90
|
+
})) as { messages: ProjectedMessage[] };
|
|
91
91
|
|
|
92
92
|
// Every projected message validates against the wire schema.
|
|
93
93
|
for (const message of response.messages) {
|
|
@@ -115,9 +115,9 @@ describe("handleListMessages background-tool completion projection", () => {
|
|
|
115
115
|
JSON.stringify([{ type: "text", text: "hi there" }]),
|
|
116
116
|
);
|
|
117
117
|
|
|
118
|
-
const response = handleListMessages({
|
|
118
|
+
const response = (await handleListMessages({
|
|
119
119
|
queryParams: { conversationId: conv.id },
|
|
120
|
-
}) as { messages: ProjectedMessage[] };
|
|
120
|
+
})) as { messages: ProjectedMessage[] };
|
|
121
121
|
|
|
122
122
|
expect(response.messages).toHaveLength(2);
|
|
123
123
|
for (const message of response.messages) {
|
|
@@ -48,7 +48,7 @@ describe("handleListMessages clientMessageId", () => {
|
|
|
48
48
|
);
|
|
49
49
|
|
|
50
50
|
// WHEN the messages snapshot is built
|
|
51
|
-
const response = handleListMessages({
|
|
51
|
+
const response = await handleListMessages({
|
|
52
52
|
queryParams: { conversationId: conv.id },
|
|
53
53
|
});
|
|
54
54
|
const body = response as { messages: MessagePayload[] };
|
|
@@ -70,7 +70,7 @@ describe("handleListMessages clientMessageId", () => {
|
|
|
70
70
|
);
|
|
71
71
|
|
|
72
72
|
// WHEN the messages snapshot is built
|
|
73
|
-
const response = handleListMessages({
|
|
73
|
+
const response = await handleListMessages({
|
|
74
74
|
queryParams: { conversationId: conv.id },
|
|
75
75
|
});
|
|
76
76
|
const body = response as { messages: MessagePayload[] };
|
|
@@ -70,7 +70,7 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
70
70
|
JSON.stringify([{ type: "text", text: "second visible" }]),
|
|
71
71
|
);
|
|
72
72
|
|
|
73
|
-
const response = handleListMessages({
|
|
73
|
+
const response = await handleListMessages({
|
|
74
74
|
queryParams: { conversationId: conv.id },
|
|
75
75
|
});
|
|
76
76
|
const body = response as { messages: MessagePayload[] };
|
|
@@ -109,7 +109,7 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
109
109
|
);
|
|
110
110
|
|
|
111
111
|
// WHEN the UI history list is serialized
|
|
112
|
-
const response = handleListMessages({
|
|
112
|
+
const response = await handleListMessages({
|
|
113
113
|
queryParams: { conversationId: conv.id },
|
|
114
114
|
});
|
|
115
115
|
const body = response as { messages: MessagePayload[] };
|
|
@@ -140,7 +140,7 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
140
140
|
{ metadata: { hidden: false } },
|
|
141
141
|
);
|
|
142
142
|
|
|
143
|
-
const response = handleListMessages({
|
|
143
|
+
const response = await handleListMessages({
|
|
144
144
|
queryParams: { conversationId: conv.id },
|
|
145
145
|
});
|
|
146
146
|
const body = response as { messages: MessagePayload[] };
|
|
@@ -177,9 +177,9 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
177
177
|
);
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
const latest = handleListMessages({
|
|
180
|
+
const latest = (await handleListMessages({
|
|
181
181
|
queryParams: { conversationId: conv.id, page: "latest", limit: "2" },
|
|
182
|
-
}) as {
|
|
182
|
+
})) as {
|
|
183
183
|
messages: MessagePayload[];
|
|
184
184
|
hasMore: boolean;
|
|
185
185
|
oldestTimestamp: number | null;
|
|
@@ -196,13 +196,13 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
196
196
|
|
|
197
197
|
// Older page request — anchored before the latest page's oldest row —
|
|
198
198
|
// should skip the hidden block entirely and return the next 2 visible rows.
|
|
199
|
-
const older = handleListMessages({
|
|
199
|
+
const older = (await handleListMessages({
|
|
200
200
|
queryParams: {
|
|
201
201
|
conversationId: conv.id,
|
|
202
202
|
beforeTimestamp: String(latest.oldestTimestamp),
|
|
203
203
|
limit: "2",
|
|
204
204
|
},
|
|
205
|
-
}) as {
|
|
205
|
+
})) as {
|
|
206
206
|
messages: MessagePayload[];
|
|
207
207
|
hasMore: boolean;
|
|
208
208
|
};
|
|
@@ -214,7 +214,7 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
214
214
|
expect(older.hasMore).toBe(true);
|
|
215
215
|
});
|
|
216
216
|
|
|
217
|
-
test("pagination keeps hasMore + a cursor when a >cap hidden block truncates the scan", () => {
|
|
217
|
+
test("pagination keeps hasMore + a cursor when a >cap hidden block truncates the scan", async () => {
|
|
218
218
|
// Exercise cap-truncation with a small cap + a few hundred rows rather than
|
|
219
219
|
// >10k: the large seed made the post-test resetTables DELETE slow enough to
|
|
220
220
|
// time out the next test's beforeEach under parallel CI load.
|
|
@@ -258,9 +258,9 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
258
258
|
}
|
|
259
259
|
});
|
|
260
260
|
|
|
261
|
-
const latest = handleListMessages({
|
|
261
|
+
const latest = (await handleListMessages({
|
|
262
262
|
queryParams: { conversationId: conv.id, page: "latest", limit: "2" },
|
|
263
|
-
}) as {
|
|
263
|
+
})) as {
|
|
264
264
|
messages: MessagePayload[];
|
|
265
265
|
hasMore: boolean;
|
|
266
266
|
oldestTimestamp: number | null;
|
|
@@ -274,13 +274,13 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
274
274
|
|
|
275
275
|
// Resuming from the surfaced cursor drains the remaining hidden rows and
|
|
276
276
|
// surfaces the visible ones below the cap.
|
|
277
|
-
const older = handleListMessages({
|
|
277
|
+
const older = (await handleListMessages({
|
|
278
278
|
queryParams: {
|
|
279
279
|
conversationId: conv.id,
|
|
280
280
|
beforeTimestamp: String(latest.oldestTimestamp),
|
|
281
281
|
limit: "2",
|
|
282
282
|
},
|
|
283
|
-
}) as { messages: MessagePayload[]; hasMore: boolean };
|
|
283
|
+
})) as { messages: MessagePayload[]; hasMore: boolean };
|
|
284
284
|
|
|
285
285
|
expect(older.messages.map(plainText)).toEqual(["visible 0", "visible 1"]);
|
|
286
286
|
expect(older.hasMore).toBe(false);
|
|
@@ -311,9 +311,9 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
311
311
|
);
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
-
const latest = handleListMessages({
|
|
314
|
+
const latest = (await handleListMessages({
|
|
315
315
|
queryParams: { conversationId: conv.id, page: "latest", limit: "2" },
|
|
316
|
-
}) as {
|
|
316
|
+
})) as {
|
|
317
317
|
messages: MessagePayload[];
|
|
318
318
|
hasMore: boolean;
|
|
319
319
|
oldestTimestamp: number | null;
|
|
@@ -357,7 +357,7 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
357
357
|
JSON.stringify([{ type: "text", text: "retrospective review" }]),
|
|
358
358
|
);
|
|
359
359
|
|
|
360
|
-
const response = handleListMessages({
|
|
360
|
+
const response = await handleListMessages({
|
|
361
361
|
queryParams: { conversationId: conv.id },
|
|
362
362
|
});
|
|
363
363
|
const body = response as { messages: MessagePayload[] };
|
|
@@ -405,7 +405,7 @@ describe("handleListMessages metadata.hidden filtering", () => {
|
|
|
405
405
|
JSON.stringify([{ type: "text", text: "retrospective review" }]),
|
|
406
406
|
);
|
|
407
407
|
|
|
408
|
-
const response = handleListMessages({
|
|
408
|
+
const response = await handleListMessages({
|
|
409
409
|
queryParams: { conversationId: conv.id },
|
|
410
410
|
});
|
|
411
411
|
const body = response as { messages: MessagePayload[] };
|