@vellumai/assistant 0.10.12 → 0.11.0-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/AGENTS.md +1 -1
- package/ARCHITECTURE.md +4 -5
- package/README.md +1 -1
- package/docs/architecture/memory.md +60 -23
- package/docs/error-handling.md +3 -3
- package/docs/guardian-request-flow.md +112 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/package.json +1 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +9 -1
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/secret-detection.test.ts +449 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/channels.ts +1 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/secret-detection.ts +468 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/dist/events/app.d.ts +28 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/dist/events/app.d.ts.map +1 -1
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/dist/events/index.d.ts +2 -2
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/dist/events/index.d.ts.map +1 -1
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/dist/events/index.js.map +1 -1
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/dist/events/message.d.ts +2 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/dist/events/message.d.ts.map +1 -1
- package/node_modules/@vellumai/gateway-client/node_modules/@slack/types/package.json +1 -1
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/package.json +1 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +9 -1
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/secret-detection.test.ts +449 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/channels.ts +1 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/secret-detection.ts +468 -0
- package/node_modules/@vellumai/gateway-client/package.json +1 -1
- package/node_modules/@vellumai/gateway-client/src/admission-policy-contract.ts +6 -0
- package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +34 -0
- package/node_modules/@vellumai/service-contracts/package.json +1 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +9 -1
- package/node_modules/@vellumai/service-contracts/src/__tests__/secret-detection.test.ts +449 -0
- package/node_modules/@vellumai/service-contracts/src/channels.ts +1 -0
- package/node_modules/@vellumai/service-contracts/src/secret-detection.ts +468 -0
- package/openapi.yaml +264 -14
- package/package.json +2 -2
- package/src/__tests__/acp-session.test.ts +3 -3
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +3 -0
- package/src/__tests__/anthropic-provider.test.ts +40 -0
- package/src/__tests__/app-conversation-ids-backfill.test.ts +33 -2
- package/src/__tests__/app-conversation-ids.test.ts +204 -0
- package/src/__tests__/approval-cascade.test.ts +5 -5
- package/src/__tests__/approval-routes-http.test.ts +3 -3
- package/src/__tests__/ask-question-resolver.test.ts +207 -0
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +16 -16
- package/src/__tests__/assistant-event-hub-targeted.test.ts +13 -11
- package/src/__tests__/assistant-event-hub.test.ts +13 -11
- package/src/__tests__/assistant-event.test.ts +12 -9
- package/src/__tests__/assistant-feature-flag-guard.test.ts +3 -3
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +1 -1
- package/src/__tests__/assistant-id-boundary-guard.test.ts +0 -58
- package/src/__tests__/assistant-stream-state.test.ts +17 -7
- package/src/__tests__/avatar-identity-sync.test.ts +3 -3
- package/src/__tests__/background-workers-disk-pressure.test.ts +1 -0
- package/src/__tests__/call-conversation-messages.test.ts +134 -18
- package/src/__tests__/call-start-guardian-guard.test.ts +27 -0
- package/src/__tests__/channel-approvals.test.ts +0 -27
- package/src/__tests__/channel-guardian.test.ts +85 -512
- package/src/__tests__/channel-readiness-slack-remote.test.ts +151 -3
- package/src/__tests__/channel-retry-sweep.test.ts +88 -1
- package/src/__tests__/channel-setup-panel-ack.test.ts +12 -9
- package/src/__tests__/chat-reveal-guard-priming.test.ts +31 -34
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +2 -2
- package/src/__tests__/compaction-events.test.ts +8 -8
- package/src/__tests__/config-loader-platform-defaults.test.ts +54 -28
- package/src/__tests__/config-model-image-provider.test.ts +20 -0
- package/src/__tests__/config-schema-memory-substrate.test.ts +306 -0
- package/src/__tests__/config-schema.test.ts +14 -2
- package/src/__tests__/config-set-platform-guard.test.ts +11 -12
- package/src/__tests__/config-sounds-sync.test.ts +4 -4
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +5 -0
- package/src/__tests__/context-search-memory-source.test.ts +1 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +6 -6
- package/src/__tests__/context-token-estimator.test.ts +54 -1
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +12 -3
- package/src/__tests__/conversation-agent-loop-fatal-cleanup.test.ts +13 -4
- package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +4 -4
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +10 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +22 -13
- package/src/__tests__/conversation-agent-loop.test.ts +39 -30
- package/src/__tests__/conversation-confirmation-signals.test.ts +14 -14
- package/src/__tests__/conversation-evictor.test.ts +49 -0
- package/src/__tests__/conversation-fork-crud.test.ts +1 -1
- package/src/__tests__/conversation-group-tools.test.ts +279 -0
- package/src/__tests__/conversation-history-web-search.test.ts +1 -1
- package/src/__tests__/conversation-key-store-disk-view.test.ts +5 -5
- package/src/__tests__/conversation-lineage.test.ts +235 -0
- package/src/__tests__/conversation-loop-db-lock-resilience.test.ts +5 -5
- package/src/__tests__/conversation-message-sync-tags.test.ts +4 -4
- package/src/__tests__/conversation-queue.test.ts +81 -81
- package/src/__tests__/conversation-routes-enabled-plugins.test.ts +8 -1
- package/src/__tests__/conversation-routes-hidden-queue.test.ts +8 -1
- package/src/__tests__/conversation-routes-slash-commands.test.ts +10 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +29 -2
- package/src/__tests__/conversation-slash-queue.test.ts +11 -11
- package/src/__tests__/conversation-slash-unknown.test.ts +2 -2
- package/src/__tests__/conversation-speed-override.test.ts +2 -2
- package/src/__tests__/conversation-summarize-route.test.ts +9 -0
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +18 -16
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +17 -17
- package/src/__tests__/conversation-surfaces-app-open.test.ts +7 -4
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +7 -7
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +9 -9
- package/src/__tests__/conversation-surfaces-standalone.test.ts +12 -12
- package/src/__tests__/conversation-surfaces-state-update.test.ts +8 -5
- package/src/__tests__/conversation-surfaces-table-action.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +46 -46
- package/src/__tests__/conversation-sync-tags.test.ts +5 -5
- package/src/__tests__/conversation-wait-for-idle.test.ts +2 -2
- package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -4
- package/src/__tests__/conversation-workspace-injection.test.ts +0 -3
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -3
- package/src/__tests__/copy-composer-tc-templates.test.ts +3 -131
- package/src/__tests__/credential-security-invariants.test.ts +1 -0
- package/src/__tests__/daemon-assistant-events.test.ts +14 -15
- package/src/__tests__/db-test-helpers.ts +13 -27
- package/src/__tests__/disk-pressure-routes.test.ts +12 -3
- package/src/__tests__/document-tool-security.test.ts +95 -0
- package/src/__tests__/drain-kick-guard.test.ts +232 -0
- package/src/__tests__/dynamic-skill-background-guard.test.ts +19 -6
- package/src/__tests__/emit-event-signal.test.ts +5 -6
- package/src/__tests__/encrypted-store-test-helpers.ts +10 -20
- package/src/__tests__/events-tail-route.test.ts +6 -4
- package/src/__tests__/feature-flag-test-helpers.ts +10 -20
- package/src/__tests__/file-edit-tool.test.ts +24 -4
- package/src/__tests__/file-list-tool.test.ts +2 -1
- package/src/__tests__/file-read-tool.test.ts +62 -10
- package/src/__tests__/file-write-tool.test.ts +24 -5
- package/src/__tests__/followup-tools.test.ts +58 -0
- package/src/__tests__/gateway-threshold-reader-mock.ts +99 -0
- package/src/__tests__/graph-extraction-event-date.test.ts +1 -1
- package/src/__tests__/guardian-question-mode.test.ts +42 -3
- package/src/__tests__/guardian-reply-router-answer-mode.test.ts +283 -0
- package/src/__tests__/guardian-vellum-destination-pinning.test.ts +221 -0
- package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
- package/src/__tests__/heartbeat-service.test.ts +1 -0
- package/src/__tests__/helpers/native-web-search-harness.ts +10 -10
- package/src/__tests__/host-browser-proxy.test.ts +1 -1
- package/src/__tests__/host-file-edit-tool.test.ts +3 -3
- package/src/__tests__/host-file-read-tool.test.ts +2 -2
- package/src/__tests__/host-file-write-tool.test.ts +7 -3
- package/src/__tests__/host-shell-tool.test.ts +17 -5
- package/src/__tests__/host-transfer-pending-interactions.test.ts +8 -8
- package/src/__tests__/image-credentials.test.ts +65 -8
- package/src/__tests__/injection-block.test.ts +4 -4
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +2 -2
- package/src/__tests__/injector-registry-order-guard.test.ts +4 -9
- package/src/__tests__/injector-v3-suppression.test.ts +6 -4
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +27 -28
- package/src/__tests__/list-messages-page-latest.test.ts +2 -2
- package/src/__tests__/llm-usage-store.test.ts +67 -4
- package/src/__tests__/log-redact.test.ts +18 -0
- package/src/__tests__/managed-profile-guard.test.ts +27 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +62 -11
- package/src/__tests__/memory-identity-context-parity.test.ts +1 -1
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +9 -1
- package/src/__tests__/memory-retrieval-hook.test.ts +4 -4
- package/src/__tests__/notification-decision-strategy.test.ts +115 -11
- package/src/__tests__/notification-deep-link.test.ts +12 -12
- package/src/__tests__/notification-vellum-adapter.test.ts +8 -8
- package/src/__tests__/outbound-slack-persistence.test.ts +8 -8
- package/src/__tests__/path-policy.test.ts +315 -0
- package/src/__tests__/pending-interactions-resolved-event.test.ts +6 -6
- package/src/__tests__/persistence-layering-guard.test.ts +2 -2
- package/src/__tests__/pkb-autoinject.test.ts +1 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +1 -0
- package/src/__tests__/platform-callback-registration.test.ts +10 -10
- package/src/__tests__/plugin-event-hub-facade.test.ts +22 -15
- package/src/__tests__/plugin-import-boundary-guard.test.ts +15 -15
- package/src/__tests__/processing-flag-persist-failure.test.ts +0 -4
- package/src/__tests__/provider-platform-proxy-integration.test.ts +0 -1
- package/src/__tests__/rebuild-index-graph-nodes.test.ts +1 -1
- package/src/__tests__/request-secret-standalone-channel-gate.test.ts +5 -5
- package/src/__tests__/require-fresh-approval.test.ts +38 -38
- package/src/__tests__/resolve-app-id.test.ts +32 -0
- package/src/__tests__/run-due-schedules.test.ts +72 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +11 -10
- package/src/__tests__/runtime-events-sse.test.ts +1 -1
- package/src/__tests__/schedule-routes.test.ts +44 -5
- package/src/__tests__/schedule-store.test.ts +3 -3
- package/src/__tests__/schedule-tools.test.ts +176 -0
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +3 -3
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +3 -3
- package/src/__tests__/secret-response-routing.test.ts +3 -3
- package/src/__tests__/secret-routes-platform-proxy.test.ts +4 -7
- package/src/__tests__/secret-scanner.test.ts +36 -0
- package/src/__tests__/send-endpoint-busy.test.ts +7 -7
- package/src/__tests__/slack-required-scopes-mirror.test.ts +81 -0
- package/src/__tests__/starter-task-flow.test.ts +26 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +2 -2
- package/src/__tests__/subagent-disposal.test.ts +40 -11
- package/src/__tests__/subagent-fork-notifications.test.ts +4 -4
- package/src/__tests__/subagent-fork-prompt-role.test.ts +3 -3
- package/src/__tests__/subagent-fork-spawn.test.ts +4 -4
- package/src/__tests__/subagent-manager-notify.test.ts +73 -14
- package/src/__tests__/subagent-notify-parent.test.ts +48 -4
- package/src/__tests__/subagent-spawn-and-await.test.ts +62 -14
- package/src/__tests__/subagent-tools.test.ts +64 -0
- package/src/__tests__/sync-message-contract.test.ts +3 -3
- package/src/__tests__/terminal-tools.test.ts +12 -3
- package/src/__tests__/test-preload.ts +9 -0
- package/src/__tests__/tool-approval-handler.test.ts +587 -43
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +7 -4
- package/src/__tests__/tool-executor.test.ts +116 -0
- package/src/__tests__/tool-grant-request-escalation.test.ts +5 -0
- package/src/__tests__/tool-preview-lifecycle.test.ts +32 -29
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +5 -5
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-start-timestamp.test.ts +4 -4
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +9 -22
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +13 -13
- package/src/__tests__/ui-work-result-surface.test.ts +3 -3
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +6 -6
- package/src/__tests__/voice-session-bridge.test.ts +44 -44
- package/src/__tests__/workspace-migration-134-image-generation-mode-to-provider.test.ts +284 -0
- package/src/__tests__/workspace-policy.test.ts +482 -2
- package/src/acp/__tests__/client-handler.test.ts +3 -3
- package/src/acp/__tests__/session-manager-persistence.test.ts +10 -10
- package/src/acp/__tests__/session-manager-resume.test.ts +7 -7
- package/src/acp/client-handler.ts +3 -3
- package/src/acp/session-manager.ts +8 -8
- package/src/api/events/subagent-event.ts +2 -2
- package/src/api/responses/memory-v2-activation-log.ts +2 -2
- package/src/api/responses/subagent-detail.ts +13 -0
- package/src/approvals/AGENTS.md +2 -0
- package/src/approvals/guardian-request-resolvers.ts +118 -24
- package/src/apps/app-store.ts +95 -4
- package/src/calls/__tests__/voice-control-protocol.test.ts +57 -0
- package/src/calls/__tests__/voice-session-bridge.test.ts +229 -7
- package/src/calls/__tests__/voice-triage-escalate.test.ts +3 -4
- package/src/calls/call-controller.ts +27 -27
- package/src/calls/call-conversation-messages.ts +58 -18
- package/src/calls/voice-control-protocol.ts +56 -0
- package/src/calls/voice-session-bridge.ts +178 -65
- package/src/calls/voice-triage-escalate.ts +2 -3
- package/src/channels/config.ts +8 -0
- package/src/channels/types.ts +1 -0
- package/src/cli/commands/config.ts +49 -13
- package/src/cli/commands/memory/index.help.ts +4 -2
- package/src/cli/commands/memory/memory-retrospective.ts +5 -0
- package/src/cli/commands/webhooks.help.ts +9 -4
- package/src/cli/lib/bundled-marketplace.json +12 -0
- package/src/cli.ts +2 -109
- package/src/config/__tests__/deployment-context-defaults.test.ts +9 -0
- package/src/config/__tests__/substrate-twin-shadowing.test.ts +191 -0
- package/src/config/assistant-feature-flags.ts +1 -1
- package/src/config/bundled-skills/conversation-groups/SKILL.md +29 -0
- package/src/config/bundled-skills/conversation-groups/TOOLS.json +58 -0
- package/src/config/bundled-skills/conversation-groups/tools/group-create.ts +12 -0
- package/src/config/bundled-skills/conversation-groups/tools/group-list.ts +12 -0
- package/src/config/bundled-skills/conversation-groups/tools/move-to-group.ts +12 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +13 -7
- package/src/config/bundled-skills/schedule/SKILL.md +2 -0
- package/src/config/feature-flag-cache.ts +6 -16
- package/src/config/feature-flag-registry.json +14 -38
- package/src/config/loader.ts +7 -1
- package/src/config/memory-tier.ts +15 -10
- package/src/config/memory-v3-gate.test.ts +278 -1
- package/src/config/memory-v3-gate.ts +88 -26
- package/src/config/raw-config-utils.ts +1 -1
- package/src/config/schemas/__tests__/live-voice.test.ts +27 -16
- package/src/config/schemas/__tests__/memory-v3.test.ts +1 -0
- package/src/config/schemas/live-voice.ts +33 -7
- package/src/config/schemas/llm.ts +1 -0
- package/src/config/schemas/memory-retrospective.ts +13 -0
- package/src/config/schemas/memory-substrate.ts +183 -0
- package/src/config/schemas/memory-v2.ts +3 -2
- package/src/config/schemas/memory-v3.ts +11 -4
- package/src/config/schemas/memory.ts +35 -1
- package/src/config/schemas/services.ts +10 -2
- package/src/config/substrate-twin-shadowing.ts +195 -0
- package/src/config/webhook-routing.ts +67 -0
- package/src/context/compactor.ts +10 -3
- package/src/context/token-estimator.ts +21 -0
- package/src/daemon/__tests__/channel-ui-capability.test.ts +85 -0
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +3 -3
- package/src/daemon/__tests__/embedding-reconcile.test.ts +3 -3
- package/src/daemon/__tests__/inference-profile-notification.test.ts +3 -6
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +5 -5
- package/src/daemon/__tests__/web-search-status-text.test.ts +2 -2
- package/src/daemon/channel-ui-capability.ts +70 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +4 -4
- package/src/daemon/conversation-agent-loop.ts +12 -5
- package/src/daemon/conversation-evictor.ts +26 -4
- package/src/daemon/conversation-launch.ts +11 -14
- package/src/daemon/conversation-lineage.ts +76 -0
- package/src/daemon/conversation-messaging.ts +14 -14
- package/src/daemon/conversation-notifiers.ts +2 -2
- package/src/daemon/conversation-process.ts +133 -21
- package/src/daemon/conversation-queue-manager.ts +7 -7
- package/src/daemon/conversation-runtime-assembly.ts +16 -0
- package/src/daemon/conversation-store.ts +11 -3
- package/src/daemon/conversation-surfaces.ts +8 -14
- package/src/daemon/conversation-tool-setup.ts +13 -7
- package/src/daemon/conversation-usage.ts +12 -11
- package/src/daemon/conversation.ts +38 -15
- package/src/daemon/disk-pressure-guard.ts +5 -12
- package/src/daemon/embedding-reconcile.ts +14 -9
- package/src/daemon/handlers/config-channels.ts +40 -134
- package/src/daemon/handlers/config-model.ts +15 -7
- package/src/daemon/handlers/conversations.ts +4 -2
- package/src/daemon/handlers/shared.ts +29 -0
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/lifecycle.ts +13 -0
- package/src/daemon/message-protocol.ts +8 -144
- package/src/daemon/message-types/computer-use.ts +0 -12
- package/src/daemon/message-types/conversations.ts +9 -345
- package/src/daemon/message-types/host-app-control.ts +0 -9
- package/src/daemon/message-types/host-browser.ts +0 -7
- package/src/daemon/message-types/host-ui-snapshot.ts +0 -7
- package/src/daemon/message-types/messages.ts +0 -48
- package/src/daemon/message-types/notifications.ts +0 -7
- package/src/daemon/message-types/skills.ts +0 -5
- package/src/daemon/message-types/surfaces.ts +0 -9
- package/src/daemon/message-types/sync.ts +0 -2
- package/src/daemon/process-message.ts +5 -5
- package/src/daemon/skill-memory-refresh.ts +5 -5
- package/src/daemon/tool-side-effects.ts +32 -16
- package/src/daemon/trust-context.ts +1 -1
- package/src/daemon/wake-conversation-ops.ts +4 -4
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +100 -7
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +67 -0
- package/src/heartbeat/heartbeat-run-store.ts +81 -4
- package/src/heartbeat/heartbeat-service.ts +32 -1
- package/src/home/__tests__/feed-writer.test.ts +7 -7
- package/src/home/__tests__/home-content-refresh.test.ts +3 -0
- package/src/home/__tests__/suggested-prompts.test.ts +1 -0
- package/src/home/feed-writer.ts +6 -13
- package/src/home/home-content-refresh.ts +6 -9
- package/src/home/relationship-state-writer.ts +5 -12
- package/src/home/suggested-prompts-cache.ts +6 -19
- package/src/ipc/__tests__/events-publish-client.test.ts +67 -0
- package/src/ipc/events-publish-client.ts +44 -0
- package/src/ipc/routes/__tests__/conversation-sync-ipc-routes.test.ts +2 -2
- package/src/ipc/routes/__tests__/events-ipc-routes.test.ts +38 -9
- package/src/ipc/routes/events-ipc-routes.ts +11 -31
- package/src/live-voice/__tests__/front-decision.test.ts +4 -176
- package/src/live-voice/__tests__/live-voice-agent-turn.test.ts +276 -68
- package/src/live-voice/__tests__/live-voice-continuation-fork-hydration.test.ts +286 -0
- package/src/live-voice/__tests__/live-voice-events.test.ts +6 -3
- package/src/live-voice/__tests__/live-voice-progress.test.ts +185 -46
- package/src/live-voice/__tests__/live-voice-triage-escalate.test.ts +24 -59
- package/src/live-voice/__tests__/live-voice-tts-session.test.ts +38 -54
- package/src/live-voice/__tests__/live-voice-vad.test.ts +1154 -636
- package/src/live-voice/front-decision.ts +5 -155
- package/src/live-voice/live-voice-metrics.ts +4 -1
- package/src/live-voice/live-voice-session.ts +1288 -439
- package/src/live-voice/progress-phrases.ts +17 -0
- package/src/live-voice/protocol.ts +15 -0
- package/src/media/app-icon-generator.ts +15 -8
- package/src/media/avatar-router.ts +9 -5
- package/src/media/image-credentials.ts +42 -10
- package/src/media/image-service.ts +1 -13
- package/src/media/types.ts +26 -3
- package/src/notifications/AGENTS.md +2 -0
- package/src/notifications/__tests__/broadcaster.test.ts +95 -0
- package/src/notifications/adapters/macos.ts +3 -3
- package/src/notifications/broadcaster.ts +57 -0
- package/src/notifications/copy-composer.ts +0 -15
- package/src/notifications/decision-engine.ts +21 -22
- package/src/notifications/guardian-question-mode.ts +57 -2
- package/src/notifications/home-feed-side-effect.ts +4 -0
- package/src/notifications/signal.ts +6 -4
- package/src/notifications/trusted-contact-payloads.ts +3 -4
- package/src/notifications/vellum-card-affinity.ts +39 -0
- package/src/oauth/AGENTS.md +1 -1
- package/src/permissions/channel-permission-query.test.ts +69 -0
- package/src/permissions/channel-permission-query.ts +73 -1
- package/src/permissions/checker.test.ts +298 -15
- package/src/permissions/checker.ts +102 -36
- package/src/permissions/confirmation-guardian-request.test.ts +2 -2
- package/src/permissions/confirmation-guardian-request.ts +2 -2
- package/src/permissions/gateway-threshold-reader.test.ts +224 -17
- package/src/permissions/gateway-threshold-reader.ts +82 -10
- package/src/permissions/ipc-risk-types.ts +8 -0
- package/src/permissions/prompter.ts +5 -5
- package/src/permissions/question-guardian-request.test.ts +222 -0
- package/src/permissions/question-guardian-request.ts +179 -0
- package/src/permissions/question-prompter.test.ts +8 -8
- package/src/permissions/question-prompter.ts +18 -0
- package/src/permissions/secret-prompter.ts +2 -4
- package/src/permissions/workspace-policy.ts +269 -34
- package/src/persistence/__tests__/lifecycle-quiesce.test.ts +82 -0
- package/src/persistence/__tests__/message-content-file.test.ts +58 -3
- package/src/persistence/conversation-crud.ts +93 -0
- package/src/persistence/conversation-key-store.ts +63 -0
- package/src/persistence/conversation-parent.ts +27 -0
- package/src/persistence/db-async-query.ts +1 -1
- package/src/persistence/db-singleton.ts +14 -27
- package/src/persistence/delivery-crud.ts +45 -0
- package/src/persistence/embeddings/embedding-backend.ts +2 -1
- package/src/persistence/embeddings/embedding-identity.ts +7 -3
- package/src/persistence/job-utils.ts +32 -27
- package/src/persistence/jobs-store.ts +92 -3
- package/src/persistence/lifecycle-quiesce.ts +80 -0
- package/src/persistence/llm-usage-store.ts +45 -8
- package/src/persistence/message-content-file.ts +4 -4
- package/src/persistence/migrations/336-move-memory-v2-activation-logs-to-memory-db.ts +1 -1
- package/src/persistence/migrations/351-schedule-skill-script-handoff.ts +39 -0
- package/src/persistence/migrations/352-drop-schedule-skill-script-handoff.test.ts +83 -0
- package/src/persistence/migrations/352-drop-schedule-skill-script-handoff.ts +36 -0
- package/src/persistence/migrations/353-add-llm-usage-conversation-type.test.ts +110 -0
- package/src/persistence/migrations/353-add-llm-usage-conversation-type.ts +49 -0
- package/src/persistence/migrations/354-backfill-app-conversation-lineage.ts +41 -0
- package/src/persistence/schema/infrastructure.ts +11 -0
- package/src/persistence/steps.ts +9 -1
- package/src/plugin-api/__tests__/publish-event-forwarding.test.ts +113 -0
- package/src/plugin-api/__tests__/publish-event.test.ts +57 -0
- package/src/plugin-api/conversation-turn.ts +4 -4
- package/src/plugin-api/event-hub-facade.ts +15 -6
- package/src/plugin-api/index.ts +10 -4
- package/src/plugin-api/publish-event.ts +36 -0
- package/src/plugins/AGENTS.md +2 -0
- package/src/plugins/defaults/compaction/window-manager.ts +9 -0
- package/src/plugins/defaults/index.ts +9 -13
- package/src/plugins/defaults/memory/AGENTS.md +775 -0
- package/src/plugins/defaults/memory/__tests__/capability-seed-embed-gate.test.ts +186 -0
- package/src/plugins/defaults/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/indexer-tier-dispatch.test.ts +129 -0
- package/src/plugins/defaults/memory/__tests__/jobs-worker-quiesce-gate.test.ts +91 -0
- package/src/plugins/defaults/memory/__tests__/jobs-worker-v1-graph-substrate-noop.test.ts +342 -0
- package/src/plugins/defaults/memory/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +9 -1
- package/src/plugins/defaults/memory/__tests__/jobs-worker-v2-schedule.test.ts +36 -1
- package/src/plugins/defaults/memory/__tests__/jobs-worker-v2-sweep-defer.test.ts +9 -1
- package/src/plugins/defaults/memory/__tests__/memory-log-stores-degraded.test.ts +2 -2
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +44 -10
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-sweep.test.ts +151 -10
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +1155 -0
- package/src/plugins/defaults/memory/__tests__/memory-v2-activation-log-store.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-v2-concept-frequency.test.ts +3 -3
- package/src/plugins/defaults/memory/__tests__/tools-delete-memory-page.test.ts +1 -1
- package/src/plugins/defaults/memory/context-search/sources/memory-v2.ts +71 -35
- package/src/plugins/defaults/memory/context-search/sources/memory.ts +5 -1
- package/src/plugins/defaults/memory/fork-conversation-memory.ts +4 -4
- package/src/plugins/defaults/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +80 -10
- package/src/plugins/defaults/memory/graph/__tests__/handle-remember-v2.test.ts +1 -1
- package/src/plugins/defaults/memory/graph/capability-seed.ts +24 -10
- package/src/plugins/defaults/memory/graph/conversation-graph-memory.ts +123 -49
- package/src/plugins/defaults/memory/graph/graph-search.ts +6 -118
- package/src/plugins/defaults/memory/graph/in-context-tracker.test.ts +173 -0
- package/src/plugins/defaults/memory/graph/in-context-tracker.ts +109 -0
- package/src/plugins/defaults/memory/graph/store.ts +1 -0
- package/src/plugins/defaults/memory/graph/tool-handlers.test.ts +1 -1
- package/src/plugins/defaults/memory/graph/tool-handlers.ts +5 -2
- package/src/plugins/defaults/memory/graph-topology/__tests__/build-memory-graph.test.ts +1 -1
- package/src/plugins/defaults/memory/graph-topology/build-memory-graph.ts +6 -9
- package/src/plugins/defaults/memory/hooks/__tests__/user-prompt-submit.test.ts +30 -16
- package/src/plugins/defaults/memory/hooks/user-prompt-submit.ts +18 -14
- package/src/plugins/defaults/memory/indexer.ts +146 -89
- package/src/plugins/defaults/memory/injectors.ts +86 -41
- package/src/plugins/defaults/memory/job-handlers.ts +130 -39
- package/src/plugins/defaults/memory/jobs/__tests__/embed-concept-page.test.ts +2 -2
- package/src/plugins/defaults/memory/jobs/embed-concept-page.ts +22 -10
- package/src/plugins/defaults/memory/jobs-worker.ts +279 -208
- package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +4 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +40 -3
- package/src/plugins/defaults/memory/memory-retrospective-sweep.ts +99 -11
- package/src/plugins/defaults/memory/src/__tests__/memory-v2-routes.test.ts +5 -3
- package/src/plugins/defaults/memory/src/__tests__/memory-v2-simulate-route.test.ts +3 -4
- package/src/plugins/defaults/memory/src/memory-graph-routes.ts +2 -1
- package/src/plugins/defaults/memory/src/memory-item-routes.test.ts +7 -5
- package/src/plugins/defaults/memory/src/memory-item-routes.ts +51 -19
- package/src/plugins/defaults/memory/src/memory-v2-routes.ts +31 -20
- package/src/plugins/defaults/memory/startup.ts +58 -21
- package/src/plugins/defaults/memory/substrate/__tests__/boot-maintenance.test.ts +335 -0
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/cli-command-store.test.ts +14 -8
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/consolidation-job.test.ts +51 -21
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/edge-index.test.ts +1 -1
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/frontmatter-sweep.test.ts +3 -3
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/page-index.test.ts +1 -1
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/page-store.test.ts +1 -1
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/prompts-consolidation.test.ts +2 -2
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/qdrant.test.ts +23 -14
- package/src/plugins/defaults/memory/substrate/__tests__/reembed-job.test.ts +262 -0
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/sim.test.ts +9 -12
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/skill-content.test.ts +2 -2
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/skill-store.test.ts +9 -9
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/sparse-bm25.test.ts +12 -5
- package/src/plugins/defaults/memory/substrate/__tests__/spread.test.ts +276 -0
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/static-context.test.ts +17 -8
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/sweep-job.test.ts +9 -9
- package/src/plugins/defaults/memory/{v3/substrate/memory-v2-startup.ts → substrate/boot-maintenance.ts} +43 -24
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/cli-command-store.ts +13 -8
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/consolidation-job.ts +51 -27
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/constants.ts +1 -0
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/edge-index.ts +28 -9
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/frontmatter-sweep.ts +14 -7
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/injected-block-slugs.ts +9 -3
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/page-index.ts +29 -10
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/page-store.ts +35 -12
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/prompts/consolidation.ts +14 -8
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/prompts/sweep.ts +4 -1
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/qdrant.ts +96 -36
- package/src/plugins/defaults/memory/substrate/reembed-job.ts +54 -0
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/sim.ts +26 -15
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/skill-content.ts +1 -1
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/skill-store.ts +13 -8
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/sparse-bm25.ts +27 -10
- package/src/plugins/defaults/memory/substrate/spread.ts +165 -0
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/static-context.ts +12 -7
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/sweep-job.ts +20 -15
- package/src/plugins/defaults/memory/substrate/tuning.ts +93 -0
- package/src/plugins/defaults/memory/{v3/substrate → substrate}/types.ts +7 -4
- package/src/plugins/defaults/memory/tools.test.ts +1 -1
- package/src/plugins/defaults/memory/tools.ts +1 -1
- package/src/plugins/defaults/memory/v1/README.md +5 -0
- package/src/plugins/defaults/memory/{__tests__ → v1/__tests__}/filing-jobs.test.ts +4 -4
- package/src/plugins/defaults/memory/{filing-jobs.ts → v1/filing-jobs.ts} +3 -3
- package/src/plugins/defaults/memory/{graph → v1/graph}/bootstrap.test.ts +68 -6
- package/src/plugins/defaults/memory/{graph → v1/graph}/bootstrap.ts +40 -21
- package/src/plugins/defaults/memory/{graph → v1/graph}/consolidation.ts +14 -14
- package/src/plugins/defaults/memory/{graph → v1/graph}/decay.test.ts +1 -1
- package/src/plugins/defaults/memory/{graph → v1/graph}/decay.ts +3 -3
- package/src/plugins/defaults/memory/{graph → v1/graph}/extraction-job.ts +5 -5
- package/src/plugins/defaults/memory/{graph → v1/graph}/extraction.test.ts +1 -1
- package/src/plugins/defaults/memory/{graph → v1/graph}/extraction.ts +20 -14
- package/src/plugins/defaults/memory/{graph → v1/graph}/graph-search.test.ts +3 -3
- package/src/plugins/defaults/memory/v1/graph/graph-search.ts +123 -0
- package/src/plugins/defaults/memory/{graph → v1/graph}/injection.test.ts +1 -118
- package/src/plugins/defaults/memory/{graph → v1/graph}/injection.ts +9 -111
- package/src/plugins/defaults/memory/{graph → v1/graph}/narrative.ts +6 -6
- package/src/plugins/defaults/memory/{graph → v1/graph}/pattern-scan.ts +5 -5
- package/src/plugins/defaults/memory/{graph → v1/graph}/retriever.test.ts +135 -42
- package/src/plugins/defaults/memory/{graph → v1/graph}/retriever.ts +40 -22
- package/src/plugins/defaults/memory/{graph → v1/graph}/scoring.test.ts +1 -1
- package/src/plugins/defaults/memory/{graph → v1/graph}/scoring.ts +1 -1
- package/src/plugins/defaults/memory/{graph → v1/graph}/serendipity.ts +1 -1
- package/src/plugins/defaults/memory/{graph → v1/graph}/triggers.test.ts +1 -1
- package/src/plugins/defaults/memory/{graph → v1/graph}/triggers.ts +1 -1
- package/src/plugins/defaults/memory/{identity-context.ts → v1/identity-context.ts} +4 -4
- package/src/plugins/defaults/memory/{job-handlers → v1/job-handlers}/backfill.ts +6 -6
- package/src/plugins/defaults/memory/{job-handlers → v1/job-handlers}/embedding.test.ts +6 -6
- package/src/plugins/defaults/memory/{job-handlers → v1/job-handlers}/embedding.ts +6 -6
- package/src/plugins/defaults/memory/{job-handlers → v1/job-handlers}/index-maintenance.ts +8 -8
- package/src/plugins/defaults/memory/{jobs → v1/jobs}/embed-pkb-file.test.ts +7 -7
- package/src/plugins/defaults/memory/{jobs → v1/jobs}/embed-pkb-file.ts +5 -5
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/autoinject.ts +1 -1
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/context.ts +2 -2
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/pkb-index.test.ts +3 -3
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/pkb-index.ts +2 -2
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/pkb-reconcile.test.ts +3 -3
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/pkb-reconcile.ts +2 -2
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/pkb-search.test.ts +3 -3
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/pkb-search.ts +6 -6
- package/src/plugins/defaults/memory/{pkb → v1/pkb}/types.ts +3 -5
- package/src/plugins/defaults/memory/{pkb-schedule.ts → v1/pkb-schedule.ts} +2 -2
- package/src/plugins/defaults/memory/{search/semantic.ts → v1/semantic-search.ts} +1 -1
- package/src/plugins/defaults/memory/v2/__tests__/activation-store.test.ts +1 -1
- package/src/plugins/defaults/memory/v2/__tests__/activation.test.ts +11 -274
- package/src/plugins/defaults/memory/v2/__tests__/backfill-jobs.test.ts +9 -131
- package/src/plugins/defaults/memory/v2/__tests__/harness-compare.test.ts +1 -1
- package/src/plugins/defaults/memory/v2/__tests__/harness-oracle.test.ts +1 -1
- package/src/plugins/defaults/memory/v2/__tests__/harness-replay-input.test.ts +1 -1
- package/src/plugins/defaults/memory/v2/__tests__/injection.test.ts +14 -10
- package/src/plugins/defaults/memory/v2/__tests__/reranker.test.ts +7 -5
- package/src/plugins/defaults/memory/v2/__tests__/router.test.ts +12 -6
- package/src/plugins/defaults/memory/{memory-v2-activation-log-store.ts → v2/activation-log-store.ts} +2 -2
- package/src/plugins/defaults/memory/v2/activation-store.ts +22 -8
- package/src/plugins/defaults/memory/v2/activation.ts +30 -163
- package/src/plugins/defaults/memory/v2/backfill-jobs.ts +7 -54
- package/src/plugins/defaults/memory/{memory-v2-concept-frequency.ts → v2/concept-frequency.ts} +3 -3
- package/src/plugins/defaults/memory/v2/harness/oracle.ts +1 -1
- package/src/plugins/defaults/memory/v2/harness/replay-input.ts +2 -2
- package/src/plugins/defaults/memory/v2/harness/retriever.ts +1 -1
- package/src/plugins/defaults/memory/v2/injection.ts +36 -26
- package/src/plugins/defaults/memory/v2/migration.ts +2 -2
- package/src/plugins/defaults/memory/{rerank-local.ts → v2/rerank-local.ts} +44 -18
- package/src/plugins/defaults/memory/v2/reranker.ts +29 -11
- package/src/plugins/defaults/memory/v2/router.ts +38 -15
- package/src/plugins/defaults/memory/v3/__tests__/candidate-match.test.ts +5 -3
- package/src/plugins/defaults/memory/v3/__tests__/carry-integration.test.ts +21 -8
- package/src/plugins/defaults/memory/v3/__tests__/edge.test.ts +1 -1
- package/src/plugins/defaults/memory/v3/__tests__/live-integration.test.ts +1 -1
- package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +4 -1
- package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +181 -3
- package/src/plugins/defaults/memory/v3/__tests__/selection-log-store.test.ts +3 -0
- package/src/plugins/defaults/memory/v3/__tests__/shadow-integration.test.ts +14 -5
- package/src/plugins/defaults/memory/v3/__tests__/shadow-plugin.test.ts +40 -50
- package/src/plugins/defaults/memory/v3/__tests__/tuning-profile.test.ts +1 -0
- package/src/plugins/defaults/memory/v3/candidate-match.ts +2 -2
- package/src/plugins/defaults/memory/v3/capabilities.ts +6 -4
- package/src/plugins/defaults/memory/v3/card.ts +25 -9
- package/src/plugins/defaults/memory/v3/edge.ts +52 -18
- package/src/plugins/defaults/memory/v3/gate.ts +4 -4
- package/src/plugins/defaults/memory/v3/injector.ts +10 -3
- package/src/plugins/defaults/memory/v3/maintain-job.ts +3 -3
- package/src/plugins/defaults/memory/v3/orchestrate.ts +100 -18
- package/src/plugins/defaults/memory/v3/page-content.ts +26 -10
- package/src/plugins/defaults/memory/v3/prune.ts +40 -16
- package/src/plugins/defaults/memory/v3/selection-log-store.ts +34 -12
- package/src/plugins/defaults/memory/v3/shadow-plugin.ts +9 -13
- package/src/plugins/defaults/memory/v3/span-query.test.ts +86 -0
- package/src/plugins/defaults/memory/v3/span-query.ts +71 -0
- package/src/plugins/defaults/memory/v3/tuning-profile.ts +3 -0
- package/src/plugins/defaults/memory/v3/types.ts +4 -1
- package/src/plugins/defaults/memory/v3-eval/eval-packets.ts +2 -2
- package/src/plugins/defaults/memory/validation.ts +1 -1
- package/src/plugins/defaults/memory/worker.ts +2 -1
- package/src/plugins/defaults/platform-hosted/__tests__/reengage.test.ts +104 -12
- package/src/plugins/defaults/platform-hosted/routes/reengage.ts +104 -12
- package/src/plugins/types.ts +2 -2
- package/src/prompts/sections.ts +4 -16
- package/src/providers/__tests__/registry-native-web-search.test.ts +47 -2
- package/src/providers/anthropic/client.ts +15 -6
- package/src/providers/content-block-schema.ts +26 -0
- package/src/providers/inference/__tests__/connections-credential-normalize.test.ts +87 -0
- package/src/providers/inference/adapter-factory.ts +6 -0
- package/src/providers/inference/connections.ts +30 -14
- package/src/providers/model-catalog.ts +77 -0
- package/src/providers/openai/__tests__/chat-completions-input-audio.test.ts +260 -0
- package/src/providers/openai/chat-completions-provider.ts +65 -17
- package/src/providers/openai/input-audio.ts +76 -0
- package/src/providers/openrouter/client.ts +0 -2
- package/src/providers/platform-proxy/constants.ts +4 -0
- package/src/providers/poolside/client.ts +42 -0
- package/src/providers/registry.ts +40 -8
- package/src/providers/retry.ts +2 -0
- package/src/providers/types.ts +39 -1
- package/src/providers/vercel-ai-gateway/client.ts +0 -2
- package/src/runtime/AGENTS.md +7 -5
- package/src/runtime/__tests__/question-request-guardian-bridge.test.ts +173 -0
- package/src/runtime/__tests__/question-resolution.test.ts +111 -0
- package/src/runtime/access-request-helper.ts +7 -15
- package/src/runtime/assistant-event-hub.ts +43 -31
- package/src/runtime/assistant-event-publish-options.ts +31 -0
- package/src/runtime/assistant-event.ts +19 -30
- package/src/runtime/assistant-stream-state.ts +4 -4
- package/src/runtime/channel-approvals.ts +0 -25
- package/src/runtime/channel-readiness-service.ts +99 -40
- package/src/runtime/channel-retry-sweep.ts +38 -15
- package/src/runtime/confirmation-request-guardian-bridge.ts +4 -0
- package/src/runtime/guardian-reply-router.ts +108 -0
- package/src/runtime/http-server.ts +8 -0
- package/src/runtime/http-types.ts +2 -2
- package/src/runtime/process-role.ts +42 -0
- package/src/runtime/question-request-guardian-bridge.ts +184 -0
- package/src/runtime/question-resolution.ts +153 -0
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +6 -2
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/subagents-routes.test.ts +250 -0
- package/src/runtime/routes/__tests__/webhook-routes.test.ts +201 -0
- package/src/runtime/routes/acp-routes.ts +2 -2
- package/src/runtime/routes/bookmark-routes.ts +3 -15
- package/src/runtime/routes/canned-message-complete.ts +2 -2
- package/src/runtime/routes/consolidation-routes.ts +8 -2
- package/src/runtime/routes/conversation-list-routes.ts +3 -19
- package/src/runtime/routes/conversation-management-routes.ts +1 -5
- package/src/runtime/routes/conversation-query-routes.ts +52 -8
- package/src/runtime/routes/conversation-routes.ts +36 -22
- package/src/runtime/routes/credential-request-routes.ts +0 -1
- package/src/runtime/routes/filing-routes.ts +7 -7
- package/src/runtime/routes/global-search-routes.ts +1 -1
- package/src/runtime/routes/guardian-approval-prompt.ts +2 -2
- package/src/runtime/routes/image-generation-routes.ts +12 -9
- package/src/runtime/routes/inbound-message-handler.ts +17 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +50 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +19 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +4 -4
- package/src/runtime/routes/inbound-stages/inbound-content-prep.test.ts +129 -0
- package/src/runtime/routes/inbound-stages/inbound-content-prep.ts +141 -9
- package/src/runtime/routes/index.ts +2 -0
- package/src/runtime/routes/lifecycle-routes.ts +199 -0
- package/src/runtime/routes/platform-routes.ts +3 -8
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +7 -7
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +5 -5
- package/src/runtime/routes/question-routes.ts +34 -87
- package/src/runtime/routes/secret-routes.ts +11 -1
- package/src/runtime/routes/settings-routes.ts +8 -18
- package/src/runtime/routes/subagents-routes.ts +35 -8
- package/src/runtime/routes/upgrade-broadcast-routes.ts +4 -5
- package/src/runtime/routes/webhook-routes.ts +89 -30
- package/src/runtime/routes/workspace-routes.test.ts +7 -4
- package/src/runtime/slack-reply-session.test.ts +12 -12
- package/src/runtime/slack-reply-session.ts +17 -17
- package/src/runtime/sync/sync-publisher.test.ts +7 -5
- package/src/runtime/tool-grant-request-helper.ts +4 -0
- package/src/schedule/schedule-store.ts +70 -0
- package/src/schedule/scheduler.ts +27 -0
- package/src/security/AGENTS.md +1 -1
- package/src/security/credential-key.ts +17 -0
- package/src/security/secret-ingress.ts +14 -105
- package/src/security/secret-patterns.ts +8 -139
- package/src/security/secret-scanner.ts +8 -3
- package/src/security/store-path-override.ts +6 -16
- package/src/sequence/store.ts +8 -0
- package/src/signals/emit-event.ts +5 -10
- package/src/signals/event-stream.ts +20 -10
- package/src/subagent/manager.ts +76 -25
- package/src/subagent/notify.ts +8 -0
- package/src/subagent/types.ts +13 -3
- package/src/telegram/__tests__/webhook-health.test.ts +442 -0
- package/src/telegram/webhook-health.ts +478 -0
- package/src/telemetry/AGENTS.md +6 -0
- package/src/telemetry/memory-corpus-size.test.ts +129 -0
- package/src/telemetry/memory-corpus-size.ts +184 -0
- package/src/telemetry/memory-tier-reporter.test.ts +67 -2
- package/src/telemetry/memory-tier-reporter.ts +30 -3
- package/src/tools/__tests__/conversation-group-tool-input-schemas.test.ts +61 -0
- package/src/tools/__tests__/document-tool-input-schemas.test.ts +103 -0
- package/src/tools/__tests__/followup-call-acp-tool-input-schemas.test.ts +125 -0
- package/src/tools/__tests__/schedule-tool-input-schemas.test.ts +83 -0
- package/src/tools/__tests__/subagent-workflow-tool-input-schemas.test.ts +116 -0
- package/src/tools/__tests__/tool-input-schemas.test.ts +192 -0
- package/src/tools/__tests__/tool-schema-drift-harness.ts +142 -0
- package/src/tools/acp/abort.ts +21 -1
- package/src/tools/acp/context.ts +5 -5
- package/src/tools/acp/spawn.test.ts +15 -5
- package/src/tools/acp/spawn.ts +26 -3
- package/src/tools/acp/status.ts +20 -1
- package/src/tools/acp/steer.test.ts +20 -0
- package/src/tools/acp/steer.ts +23 -2
- package/src/tools/apps/resolve-app-id.ts +15 -3
- package/src/tools/ask-question/ask-question-tool.test.ts +65 -0
- package/src/tools/ask-question/ask-question-tool.ts +68 -92
- package/src/tools/browser/browser-screencast.ts +6 -6
- package/src/tools/calls/call-end.ts +24 -3
- package/src/tools/calls/call-start.ts +35 -11
- package/src/tools/calls/call-status.ts +20 -1
- package/src/tools/conversation-groups/group_create.ts +63 -0
- package/src/tools/conversation-groups/group_list.ts +20 -0
- package/src/tools/conversation-groups/group_shared.ts +52 -0
- package/src/tools/conversation-groups/move_to_group.ts +106 -0
- package/src/tools/document/document-comment-tool.test.ts +49 -0
- package/src/tools/document/document-comment-tool.ts +45 -6
- package/src/tools/document/document-tool.ts +142 -24
- package/src/tools/executor.ts +27 -13
- package/src/tools/filesystem/edit.ts +62 -60
- package/src/tools/filesystem/list.ts +36 -29
- package/src/tools/filesystem/read.ts +56 -39
- package/src/tools/filesystem/write.ts +44 -38
- package/src/tools/followups/followup_create.ts +41 -12
- package/src/tools/followups/followup_list.ts +34 -6
- package/src/tools/followups/followup_resolve.ts +26 -4
- package/src/tools/host-filesystem/edit.ts +50 -60
- package/src/tools/host-filesystem/read.ts +45 -39
- package/src/tools/host-filesystem/write.ts +31 -36
- package/src/tools/host-terminal/host-shell.ts +76 -62
- package/src/tools/policy-context.ts +27 -10
- package/src/tools/schedule/create.ts +76 -33
- package/src/tools/schedule/delete.ts +21 -2
- package/src/tools/schedule/list.ts +25 -3
- package/src/tools/schedule/update.ts +105 -48
- package/src/tools/shared/filesystem/path-policy.ts +246 -40
- package/src/tools/shared/zod-tool-schema.ts +117 -0
- package/src/tools/subagent/abort.ts +12 -4
- package/src/tools/subagent/consult-deadline.ts +9 -3
- package/src/tools/subagent/message.ts +21 -5
- package/src/tools/subagent/notify-parent.ts +44 -23
- package/src/tools/subagent/read.ts +15 -4
- package/src/tools/subagent/resolve.ts +26 -4
- package/src/tools/subagent/spawn.ts +37 -13
- package/src/tools/subagent/status.ts +12 -4
- package/src/tools/system/request-permission.ts +35 -26
- package/src/tools/terminal/shell.ts +68 -55
- package/src/tools/tool-approval-handler.ts +327 -53
- package/src/tools/tool-input-schemas.ts +85 -0
- package/src/tools/tool-types.ts +7 -0
- package/src/tools/types.ts +8 -0
- package/src/tools/workflows/manage-workflows.ts +30 -2
- package/src/tools/workflows/run-workflow.test.ts +54 -2
- package/src/tools/workflows/run-workflow.ts +32 -4
- package/src/util/fs-symlinks.ts +30 -0
- package/src/util/log-redact.ts +7 -3
- package/src/util/platform.ts +15 -0
- package/src/vellum-assistant-namespace.d.ts +80 -0
- package/src/watcher/watcher-store.ts +8 -0
- package/src/workflows/leaf-runner.test.ts +104 -2
- package/src/workflows/leaf-runner.ts +31 -6
- package/src/workspace/migrations/070-memory-v2-summary-schema-rebuild.ts +2 -2
- package/src/workspace/migrations/134-image-generation-mode-to-provider.ts +128 -0
- package/src/workspace/migrations/135-copy-substrate-tunables.ts +248 -0
- package/src/workspace/migrations/__tests__/135-copy-substrate-tunables.test.ts +446 -0
- package/src/workspace/migrations/__tests__/backfill-v3-leaves.test.ts +2 -2
- package/src/workspace/migrations/registry.ts +4 -0
- package/tsconfig.plugin-api.json +1 -1
- package/src/__tests__/memory-retrieval-budget.test.ts +0 -49
- package/src/__tests__/secret-patterns.test.ts +0 -27
- package/src/config/__tests__/proc-to-skills.test.ts +0 -21
- package/src/config/memory-tier.test.ts +0 -44
- package/src/daemon/message-types/acp.ts +0 -20
- package/src/daemon/message-types/apps.ts +0 -11
- package/src/daemon/message-types/background-tools.ts +0 -14
- package/src/daemon/message-types/bookmarks.ts +0 -13
- package/src/daemon/message-types/contacts.ts +0 -13
- package/src/daemon/message-types/document-comments.ts +0 -14
- package/src/daemon/message-types/documents.ts +0 -13
- package/src/daemon/message-types/home.ts +0 -15
- package/src/daemon/message-types/host-bash.ts +0 -12
- package/src/daemon/message-types/host-cu.ts +0 -10
- package/src/daemon/message-types/host-file.ts +0 -12
- package/src/daemon/message-types/host-transfer.ts +0 -12
- package/src/daemon/message-types/integrations.ts +0 -90
- package/src/daemon/message-types/memory.ts +0 -10
- package/src/daemon/message-types/schedules.ts +0 -14
- package/src/daemon/message-types/settings.ts +0 -17
- package/src/daemon/message-types/subagents.ts +0 -63
- package/src/daemon/message-types/upgrades.ts +0 -14
- package/src/daemon/message-types/workflows.ts +0 -25
- package/src/daemon/message-types/workspace.ts +0 -137
- package/src/live-voice/ack-phrases.ts +0 -58
- package/src/plugins/defaults/memory/retrieval-budget.ts +0 -29
- package/src/plugins/defaults/memory/v3/__tests__/gate-flag.test.ts +0 -69
- package/src/plugins/defaults/memory/v3/gate-flag.ts +0 -20
- package/src/plugins/defaults/memory/v3/substrate/__tests__/memory-v2-startup.test.ts +0 -86
- package/src/plugins/defaults/memory/v3/substrate/memory-v2-startup.test.ts +0 -205
- /package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/concept-page-frontmatter-schema.test.ts +0 -0
- /package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/consolidation-prompt-flag-gating-guard.test.ts +0 -0
- /package/src/plugins/defaults/memory/{v3/substrate → substrate}/__tests__/injected-block-slugs.test.ts +0 -0
- /package/src/plugins/defaults/memory/{v3/substrate → substrate}/cli-command-content.ts +0 -0
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// Contact events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`. Contact list/get/delete are served by the HTTP
|
|
6
|
-
// `contacts` routes, not by a client message.
|
|
7
|
-
|
|
8
|
-
import type { ContactRequestEvent } from "../../api/events/contact-request.js";
|
|
9
|
-
import type { ContactsChangedEvent } from "../../api/events/contacts-changed.js";
|
|
10
|
-
|
|
11
|
-
export type _ContactsServerMessages =
|
|
12
|
-
| ContactsChangedEvent
|
|
13
|
-
| ContactRequestEvent;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// Document comment event types (Server → Client).
|
|
2
|
-
|
|
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";
|
|
7
|
-
|
|
8
|
-
// --- Domain-level union alias (consumed by the barrel file) ---
|
|
9
|
-
|
|
10
|
-
export type _DocumentCommentsServerMessages =
|
|
11
|
-
| DocumentCommentCreatedEvent
|
|
12
|
-
| DocumentCommentResolvedEvent
|
|
13
|
-
| DocumentCommentReopenedEvent
|
|
14
|
-
| DocumentCommentDeletedEvent;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// Document editor events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`. Document save/load/list are served by the document
|
|
6
|
-
// tools and HTTP document routes, not by client messages.
|
|
7
|
-
|
|
8
|
-
import type { DocumentEditorShowEvent } from "../../api/events/document-editor-show.js";
|
|
9
|
-
import type { DocumentEditorUpdateEvent } from "../../api/events/document-editor-update.js";
|
|
10
|
-
|
|
11
|
-
export type _DocumentsServerMessages =
|
|
12
|
-
| DocumentEditorShowEvent
|
|
13
|
-
| DocumentEditorUpdateEvent;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Home — server → client push messages for the macOS Home page.
|
|
3
|
-
*
|
|
4
|
-
* These messages are fire-and-forget notifications; the client reacts
|
|
5
|
-
* by refetching the authoritative state from the HTTP route
|
|
6
|
-
* (`GET /v1/home/state`). Payloads stay deliberately tiny — they carry
|
|
7
|
-
* just enough metadata to invalidate a cache and trigger a refetch.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { HomeFeedUpdatedEvent } from "../../api/events/home-feed-updated.js";
|
|
11
|
-
import type { RelationshipStateUpdatedEvent } from "../../api/events/relationship-state-updated.js";
|
|
12
|
-
|
|
13
|
-
export type _HomeServerMessages =
|
|
14
|
-
| RelationshipStateUpdatedEvent
|
|
15
|
-
| HomeFeedUpdatedEvent;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// Host bash proxy events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`.
|
|
6
|
-
|
|
7
|
-
import type { HostBashCancelEvent } from "../../api/events/host-bash.js";
|
|
8
|
-
import type { HostBashRequestEvent } from "../../api/events/host-bash.js";
|
|
9
|
-
|
|
10
|
-
export type _HostBashServerMessages =
|
|
11
|
-
| HostBashRequestEvent
|
|
12
|
-
| HostBashCancelEvent;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// Host computer-use proxy events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`.
|
|
6
|
-
|
|
7
|
-
import type { HostCuCancelEvent } from "../../api/events/host-cu.js";
|
|
8
|
-
import type { HostCuRequestEvent } from "../../api/events/host-cu.js";
|
|
9
|
-
|
|
10
|
-
export type _HostCuServerMessages = HostCuRequestEvent | HostCuCancelEvent;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// Host file proxy events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`.
|
|
6
|
-
|
|
7
|
-
import type { HostFileCancelEvent } from "../../api/events/host-file.js";
|
|
8
|
-
import type { HostFileRequestEvent } from "../../api/events/host-file.js";
|
|
9
|
-
|
|
10
|
-
export type _HostFileServerMessages =
|
|
11
|
-
| HostFileRequestEvent
|
|
12
|
-
| HostFileCancelEvent;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// Host transfer proxy events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`.
|
|
6
|
-
|
|
7
|
-
import type { HostTransferCancelEvent } from "../../api/events/host-transfer.js";
|
|
8
|
-
import type { HostTransferRequestEvent } from "../../api/events/host-transfer.js";
|
|
9
|
-
|
|
10
|
-
export type _HostTransferServerMessages =
|
|
11
|
-
| HostTransferRequestEvent
|
|
12
|
-
| HostTransferCancelEvent;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
// External service integrations: Slack, Telegram, Vercel, ingress, platform.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events that are live hub broadcasts are single-sourced from
|
|
4
|
-
// their canonical `api/events` wire schemas; this file only composes them into
|
|
5
|
-
// the domain union consumed by `message-protocol.ts`. Config get/set flows
|
|
6
|
-
// (Slack webhook, ingress, platform, Vercel, Telegram, integration listing and
|
|
7
|
-
// connect) are served by the HTTP settings routes, not by client messages.
|
|
8
|
-
|
|
9
|
-
import type { NavigateSettingsEvent } from "../../api/events/navigate-settings.js";
|
|
10
|
-
import type { OAuthConnectResultEvent } from "../../api/events/oauth-connect-result.js";
|
|
11
|
-
import type { OpenPanelEvent } from "../../api/events/open-panel.js";
|
|
12
|
-
import type { OpenUrlEvent } from "../../api/events/open-url.js";
|
|
13
|
-
import type { PlatformDisconnectedEvent } from "../../api/events/platform-disconnected.js";
|
|
14
|
-
import type { ShowPlatformLoginEvent } from "../../api/events/show-platform-login.js";
|
|
15
|
-
import type { ChannelId } from "../../channels/types.js";
|
|
16
|
-
|
|
17
|
-
// === Client → Server ===
|
|
18
|
-
|
|
19
|
-
export interface ChannelVerificationSessionRequest {
|
|
20
|
-
type: "channel_verification_session";
|
|
21
|
-
action:
|
|
22
|
-
| "create_session"
|
|
23
|
-
| "status"
|
|
24
|
-
| "cancel_session"
|
|
25
|
-
| "revoke"
|
|
26
|
-
| "resend_session";
|
|
27
|
-
channel?: ChannelId; // Defaults to 'telegram'
|
|
28
|
-
conversationId?: string;
|
|
29
|
-
rebind?: boolean; // When true, allows creating a challenge even if a binding already exists
|
|
30
|
-
/** E.164 phone number for phone, Telegram handle/chat-id. Used by outbound actions. */
|
|
31
|
-
destination?: string;
|
|
32
|
-
/** Origin conversation ID so completion/failure pointers can route back. */
|
|
33
|
-
originConversationId?: string;
|
|
34
|
-
/** Distinguishes guardian vs trusted-contact verification flows in the unified create endpoint. */
|
|
35
|
-
purpose?: "guardian" | "trusted_contact";
|
|
36
|
-
/** Contact-channel ID for the absorbed contact-channel verify flow. */
|
|
37
|
-
contactChannelId?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// === Server → Client ===
|
|
41
|
-
|
|
42
|
-
export interface ChannelVerificationSessionResponse {
|
|
43
|
-
type: "channel_verification_session_response";
|
|
44
|
-
success: boolean;
|
|
45
|
-
secret?: string;
|
|
46
|
-
instruction?: string;
|
|
47
|
-
/** Present when action is 'status'. */
|
|
48
|
-
bound?: boolean;
|
|
49
|
-
guardianExternalUserId?: string;
|
|
50
|
-
/** The channel this status pertains to (e.g. "telegram", "phone"). Present when action is 'status'. */
|
|
51
|
-
channel?: ChannelId;
|
|
52
|
-
/** The assistant ID scoped to this status. Present when action is 'status'. */
|
|
53
|
-
assistantId?: string;
|
|
54
|
-
/** The delivery chat ID for the guardian (e.g. Telegram chat ID). Present when action is 'status' and bound is true. */
|
|
55
|
-
guardianDeliveryChatId?: string;
|
|
56
|
-
/** Optional channel username/handle for the bound guardian (for UI display). */
|
|
57
|
-
guardianUsername?: string;
|
|
58
|
-
/** Optional display name for the bound guardian (for UI display). */
|
|
59
|
-
guardianDisplayName?: string;
|
|
60
|
-
/** Whether a pending verification challenge exists for this (assistantId, channel). Used by relay setup to detect active voice verification sessions. */
|
|
61
|
-
hasPendingChallenge?: boolean;
|
|
62
|
-
error?: string;
|
|
63
|
-
/** Human-readable error detail (e.g. for already_bound failures). */
|
|
64
|
-
message?: string;
|
|
65
|
-
/** Conversation ID for outbound verification flows. */
|
|
66
|
-
verificationSessionId?: string;
|
|
67
|
-
/** Epoch ms when the verification session expires. */
|
|
68
|
-
expiresAt?: number;
|
|
69
|
-
/** Epoch ms after which a resend is allowed. */
|
|
70
|
-
nextResendAt?: number;
|
|
71
|
-
/** Number of sends for this session. */
|
|
72
|
-
sendCount?: number;
|
|
73
|
-
/** Telegram deep-link URL for bootstrap (M3 placeholder). */
|
|
74
|
-
telegramBootstrapUrl?: string;
|
|
75
|
-
/** True when the outbound session is still in pending_bootstrap state (Telegram handle flow). Prevents the client from clearing the bootstrap URL during status polling. */
|
|
76
|
-
pendingBootstrap?: boolean;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
80
|
-
|
|
81
|
-
export type _IntegrationsClientMessages = ChannelVerificationSessionRequest;
|
|
82
|
-
|
|
83
|
-
export type _IntegrationsServerMessages =
|
|
84
|
-
| ChannelVerificationSessionResponse
|
|
85
|
-
| OAuthConnectResultEvent
|
|
86
|
-
| OpenUrlEvent
|
|
87
|
-
| OpenPanelEvent
|
|
88
|
-
| NavigateSettingsEvent
|
|
89
|
-
| ShowPlatformLoginEvent
|
|
90
|
-
| PlatformDisconnectedEvent;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// Memory recall and status events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`. Memory has no client messages.
|
|
6
|
-
|
|
7
|
-
import type { MemoryRecalledEvent } from "../../api/events/memory-recalled.js";
|
|
8
|
-
import type { MemoryStatusEvent } from "../../api/events/memory-status.js";
|
|
9
|
-
|
|
10
|
-
export type _MemoryServerMessages = MemoryRecalledEvent | MemoryStatusEvent;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// Heartbeat events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`. Schedule / heartbeat / filing management (list,
|
|
6
|
-
// config, run-now, checklist) is served by the HTTP heartbeat and filing
|
|
7
|
-
// routes, not by client messages.
|
|
8
|
-
|
|
9
|
-
import type { HeartbeatAlertEvent } from "../../api/events/heartbeat-alert.js";
|
|
10
|
-
import type { HeartbeatConversationCreatedEvent } from "../../api/events/heartbeat-conversation-created.js";
|
|
11
|
-
|
|
12
|
-
export type _SchedulesServerMessages =
|
|
13
|
-
| HeartbeatAlertEvent
|
|
14
|
-
| HeartbeatConversationCreatedEvent;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// Client settings: daemon-pushed configuration updates to connected clients.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`. Settings mutations (voice config, avatar generation)
|
|
6
|
-
// are served by the HTTP settings/avatar routes, not by client messages.
|
|
7
|
-
|
|
8
|
-
import type { AvatarUpdatedEvent } from "../../api/events/avatar-updated.js";
|
|
9
|
-
import type { ClientSettingsUpdateEvent } from "../../api/events/client-settings-update.js";
|
|
10
|
-
import type { ConfigChangedEvent } from "../../api/events/config-changed.js";
|
|
11
|
-
import type { SoundsConfigUpdatedEvent } from "../../api/events/sounds-config-updated.js";
|
|
12
|
-
|
|
13
|
-
export type _SettingsServerMessages =
|
|
14
|
-
| ClientSettingsUpdateEvent
|
|
15
|
-
| AvatarUpdatedEvent
|
|
16
|
-
| ConfigChangedEvent
|
|
17
|
-
| SoundsConfigUpdatedEvent;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// Subagent lifecycle and communication types.
|
|
2
|
-
//
|
|
3
|
-
// The `subagent_spawned` and `subagent_status_changed` server events are
|
|
4
|
-
// single-sourced from their canonical `api/events` wire schemas; this file
|
|
5
|
-
// composes them into the domain union consumed by `message-protocol.ts`.
|
|
6
|
-
|
|
7
|
-
import type { SubagentSpawnedEvent } from "../../api/events/subagent-spawned.js";
|
|
8
|
-
import type { SubagentStatusChangedEvent } from "../../api/events/subagent-status-changed.js";
|
|
9
|
-
import type { UsageStats } from "./shared.js";
|
|
10
|
-
|
|
11
|
-
// === Server → Client ===
|
|
12
|
-
|
|
13
|
-
export interface SubagentDetailResponse {
|
|
14
|
-
type: "subagent_detail_response";
|
|
15
|
-
subagentId: string;
|
|
16
|
-
objective?: string;
|
|
17
|
-
usage?: UsageStats;
|
|
18
|
-
events: Array<{
|
|
19
|
-
type: string;
|
|
20
|
-
content: string;
|
|
21
|
-
toolName?: string;
|
|
22
|
-
isError?: boolean;
|
|
23
|
-
messageId?: string;
|
|
24
|
-
}>;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// === Client → Server ===
|
|
28
|
-
|
|
29
|
-
export interface SubagentAbortRequest {
|
|
30
|
-
type: "subagent_abort";
|
|
31
|
-
subagentId: string;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface SubagentStatusRequest {
|
|
35
|
-
type: "subagent_status";
|
|
36
|
-
/** If omitted, returns all subagents for the conversation. */
|
|
37
|
-
subagentId?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface SubagentMessageRequest {
|
|
41
|
-
type: "subagent_message";
|
|
42
|
-
subagentId: string;
|
|
43
|
-
content: string;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface SubagentDetailRequest {
|
|
47
|
-
type: "subagent_detail_request";
|
|
48
|
-
subagentId: string;
|
|
49
|
-
conversationId: string;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
53
|
-
|
|
54
|
-
export type _SubagentsClientMessages =
|
|
55
|
-
| SubagentAbortRequest
|
|
56
|
-
| SubagentStatusRequest
|
|
57
|
-
| SubagentMessageRequest
|
|
58
|
-
| SubagentDetailRequest;
|
|
59
|
-
|
|
60
|
-
export type _SubagentsServerMessages =
|
|
61
|
-
| SubagentSpawnedEvent
|
|
62
|
-
| SubagentStatusChangedEvent
|
|
63
|
-
| SubagentDetailResponse;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// Service-group upgrade lifecycle events.
|
|
2
|
-
//
|
|
3
|
-
// Server→client events are single-sourced from their canonical `api/events`
|
|
4
|
-
// wire schemas; this file only composes them into the domain union consumed by
|
|
5
|
-
// `message-protocol.ts`.
|
|
6
|
-
|
|
7
|
-
import type { ServiceGroupUpdateCompleteEvent } from "../../api/events/service-group-update-complete.js";
|
|
8
|
-
import type { ServiceGroupUpdateProgressEvent } from "../../api/events/service-group-update-progress.js";
|
|
9
|
-
import type { ServiceGroupUpdateStartingEvent } from "../../api/events/service-group-update-starting.js";
|
|
10
|
-
|
|
11
|
-
export type _UpgradesServerMessages =
|
|
12
|
-
| ServiceGroupUpdateStartingEvent
|
|
13
|
-
| ServiceGroupUpdateProgressEvent
|
|
14
|
-
| ServiceGroupUpdateCompleteEvent;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// Workflow orchestration run lifecycle events.
|
|
2
|
-
//
|
|
3
|
-
// Emitted by the `WorkflowRunManager` (run-manager.ts) as a workflow run
|
|
4
|
-
// progresses and completes. These are server → client push events only — the
|
|
5
|
-
// run is launched via the workflow tool / scheduler / routes (later PRs), not
|
|
6
|
-
// via a client message in this union.
|
|
7
|
-
//
|
|
8
|
-
// The events are single-sourced from their canonical `api/events` wire
|
|
9
|
-
// schemas; this file only composes them into the domain union consumed by
|
|
10
|
-
// `message-protocol.ts`.
|
|
11
|
-
|
|
12
|
-
import type { WorkflowCompletedEvent } from "../../api/events/workflow-completed.js";
|
|
13
|
-
import type { WorkflowLeafFinishedEvent } from "../../api/events/workflow-leaf-finished.js";
|
|
14
|
-
import type { WorkflowLeafStartedEvent } from "../../api/events/workflow-leaf-started.js";
|
|
15
|
-
import type { WorkflowProgressEvent } from "../../api/events/workflow-progress.js";
|
|
16
|
-
import type { WorkflowStartedEvent } from "../../api/events/workflow-started.js";
|
|
17
|
-
|
|
18
|
-
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
19
|
-
|
|
20
|
-
export type _WorkflowsServerMessages =
|
|
21
|
-
| WorkflowProgressEvent
|
|
22
|
-
| WorkflowCompletedEvent
|
|
23
|
-
| WorkflowStartedEvent
|
|
24
|
-
| WorkflowLeafStartedEvent
|
|
25
|
-
| WorkflowLeafFinishedEvent;
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
// Workspace file, identity, and tool permission types.
|
|
2
|
-
|
|
3
|
-
import type { IdentityChangedEvent } from "../../api/events/identity-changed.js";
|
|
4
|
-
|
|
5
|
-
// === Client → Server ===
|
|
6
|
-
|
|
7
|
-
export interface WorkspaceFilesListRequest {
|
|
8
|
-
type: "workspace_files_list";
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface WorkspaceFileReadRequest {
|
|
12
|
-
type: "workspace_file_read";
|
|
13
|
-
/** Relative path within the workspace directory (e.g. "IDENTITY.md"). */
|
|
14
|
-
path: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface IdentityGetRequest {
|
|
18
|
-
type: "identity_get";
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface ToolPermissionSimulateRequest {
|
|
22
|
-
type: "tool_permission_simulate";
|
|
23
|
-
/** Tool name to simulate (e.g. 'bash', 'file_write'). */
|
|
24
|
-
toolName: string;
|
|
25
|
-
/** Tool input record to simulate. */
|
|
26
|
-
input: Record<string, unknown>;
|
|
27
|
-
/** Working directory context; defaults to daemon cwd when omitted. */
|
|
28
|
-
workingDir?: string;
|
|
29
|
-
/** Whether the simulated context is interactive (default true). */
|
|
30
|
-
isInteractive?: boolean;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface ToolNamesListRequest {
|
|
34
|
-
type: "tool_names_list";
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// === Server → Client ===
|
|
38
|
-
|
|
39
|
-
export interface WorkspaceFilesListResponse {
|
|
40
|
-
type: "workspace_files_list_response";
|
|
41
|
-
files: Array<{
|
|
42
|
-
/** Relative path within the workspace (e.g. "IDENTITY.md", "skills/my-skill"). */
|
|
43
|
-
path: string;
|
|
44
|
-
/** Display name (e.g. "IDENTITY.md"). */
|
|
45
|
-
name: string;
|
|
46
|
-
/** Whether the file/directory exists. */
|
|
47
|
-
exists: boolean;
|
|
48
|
-
}>;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export interface WorkspaceFileReadResponse {
|
|
52
|
-
type: "workspace_file_read_response";
|
|
53
|
-
path: string;
|
|
54
|
-
content: string | null;
|
|
55
|
-
error?: string;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export interface IdentityGetResponse {
|
|
59
|
-
type: "identity_get_response";
|
|
60
|
-
/** Whether an IDENTITY.md file was found. When false, all fields are empty defaults. */
|
|
61
|
-
found: boolean;
|
|
62
|
-
name: string;
|
|
63
|
-
role: string;
|
|
64
|
-
personality: string;
|
|
65
|
-
emoji: string;
|
|
66
|
-
home: string;
|
|
67
|
-
version?: string;
|
|
68
|
-
assistantId?: string;
|
|
69
|
-
createdAt?: string;
|
|
70
|
-
originSystem?: string;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface ToolPermissionSimulateResponse {
|
|
74
|
-
type: "tool_permission_simulate_response";
|
|
75
|
-
success: boolean;
|
|
76
|
-
/** The simulated permission decision. */
|
|
77
|
-
decision?: "allow" | "deny" | "prompt";
|
|
78
|
-
/** Risk level of the simulated tool invocation. */
|
|
79
|
-
riskLevel?: string;
|
|
80
|
-
/** Human-readable reason for the decision. */
|
|
81
|
-
reason?: string;
|
|
82
|
-
/** When decision is 'prompt', the data needed to render a ToolConfirmationBubble. */
|
|
83
|
-
promptPayload?: {
|
|
84
|
-
allowlistOptions: Array<{
|
|
85
|
-
label: string;
|
|
86
|
-
description: string;
|
|
87
|
-
pattern: string;
|
|
88
|
-
}>;
|
|
89
|
-
scopeOptions: Array<{ label: string; scope: string }>;
|
|
90
|
-
persistentDecisionsAllowed: boolean;
|
|
91
|
-
};
|
|
92
|
-
/** Resolved execution target for the tool. */
|
|
93
|
-
executionTarget?: "host" | "sandbox";
|
|
94
|
-
/** ID of the trust rule that matched (if any). */
|
|
95
|
-
matchedTrustRuleId?: string;
|
|
96
|
-
/** Error message when success is false. */
|
|
97
|
-
error?: string;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export interface ToolInputSchema {
|
|
101
|
-
type: "object";
|
|
102
|
-
properties?: Record<
|
|
103
|
-
string,
|
|
104
|
-
{
|
|
105
|
-
type?: string;
|
|
106
|
-
description?: string;
|
|
107
|
-
enum?: string[];
|
|
108
|
-
[key: string]: unknown;
|
|
109
|
-
}
|
|
110
|
-
>;
|
|
111
|
-
required?: string[];
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export interface ToolNamesListResponse {
|
|
115
|
-
type: "tool_names_list_response";
|
|
116
|
-
/** Sorted list of all registered tool names. */
|
|
117
|
-
names: string[];
|
|
118
|
-
/** Input schemas keyed by tool name. */
|
|
119
|
-
schemas?: Record<string, ToolInputSchema>;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
123
|
-
|
|
124
|
-
export type _WorkspaceClientMessages =
|
|
125
|
-
| WorkspaceFilesListRequest
|
|
126
|
-
| WorkspaceFileReadRequest
|
|
127
|
-
| IdentityGetRequest
|
|
128
|
-
| ToolPermissionSimulateRequest
|
|
129
|
-
| ToolNamesListRequest;
|
|
130
|
-
|
|
131
|
-
export type _WorkspaceServerMessages =
|
|
132
|
-
| WorkspaceFilesListResponse
|
|
133
|
-
| WorkspaceFileReadResponse
|
|
134
|
-
| IdentityGetResponse
|
|
135
|
-
| ToolPermissionSimulateResponse
|
|
136
|
-
| ToolNamesListResponse
|
|
137
|
-
| IdentityChangedEvent;
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { LiveVoiceSpokenAckKind } from "./live-voice-metrics.js";
|
|
2
|
-
|
|
3
|
-
// Short, persona-neutral phrases spoken to hold the floor when the model is
|
|
4
|
-
// slow to produce its first delta. Pure floor-holders:
|
|
5
|
-
// they must never carry content or require domain knowledge, and they stay
|
|
6
|
-
// short (≤ 6 words) so they finish before the real reply's audio arrives.
|
|
7
|
-
const ACK_PHRASES: readonly string[] = [
|
|
8
|
-
"One sec — let me think.",
|
|
9
|
-
"Let me look into that.",
|
|
10
|
-
"Give me a moment.",
|
|
11
|
-
"Hmm, let me check.",
|
|
12
|
-
"Just a moment.",
|
|
13
|
-
];
|
|
14
|
-
|
|
15
|
-
// Tool-flavored variant spoken the moment a turn starts tool use (a
|
|
16
|
-
// guaranteed-slow turn). Same rules as ACK_PHRASES: persona-neutral, no
|
|
17
|
-
// domain content, ≤ 6 words.
|
|
18
|
-
const TOOL_ACK_PHRASES: readonly string[] = [
|
|
19
|
-
"Let me check that.",
|
|
20
|
-
"Looking that up now.",
|
|
21
|
-
"Let me pull that up.",
|
|
22
|
-
"One moment, checking.",
|
|
23
|
-
"Give me a second here.",
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
const PHRASES_BY_KIND: Record<LiveVoiceSpokenAckKind, readonly string[]> = {
|
|
27
|
-
first_delta: ACK_PHRASES,
|
|
28
|
-
tool_use: TOOL_ACK_PHRASES,
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
// Static fallbacks for an idle-triggered progress narration whose LLM
|
|
32
|
-
// phrasing failed — the one case where prolonged silence is actively harmful.
|
|
33
|
-
// The idle trigger can fire on a slow turn with zero tool activity, so every
|
|
34
|
-
// phrase stays strictly neutral: no claims about running tools or tasks.
|
|
35
|
-
// Same rules as the ack lists: persona-neutral, no domain content, ≤ 8 words.
|
|
36
|
-
// Exported so tests can assert the neutrality invariant against the list.
|
|
37
|
-
export const PROGRESS_FALLBACK_PHRASES: readonly string[] = [
|
|
38
|
-
"Still on it — one moment.",
|
|
39
|
-
"Still thinking this through.",
|
|
40
|
-
"Almost there — thanks for waiting.",
|
|
41
|
-
];
|
|
42
|
-
|
|
43
|
-
// Deterministic rotation through a phrase list: callers hold a nonnegative
|
|
44
|
-
// monotonic counter, so consecutive picks vary while tests stay reproducible.
|
|
45
|
-
function pickPhrase(phrases: readonly string[], counter: number): string {
|
|
46
|
-
return phrases[counter % phrases.length];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function pickAckPhrase(
|
|
50
|
-
kind: LiveVoiceSpokenAckKind,
|
|
51
|
-
counter: number,
|
|
52
|
-
): string {
|
|
53
|
-
return pickPhrase(PHRASES_BY_KIND[kind], counter);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function pickProgressPhrase(counter: number): string {
|
|
57
|
-
return pickPhrase(PROGRESS_FALLBACK_PHRASES, counter);
|
|
58
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export interface RecallBudgetInput {
|
|
2
|
-
estimatedPromptTokens: number;
|
|
3
|
-
maxInputTokens: number;
|
|
4
|
-
targetHeadroomTokens: number;
|
|
5
|
-
minInjectTokens: number;
|
|
6
|
-
maxInjectTokens: number;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Compute per-turn memory recall injection budget from context headroom.
|
|
11
|
-
*
|
|
12
|
-
* The result is always clamped into [minInjectTokens, maxInjectTokens].
|
|
13
|
-
*/
|
|
14
|
-
export function computeRecallBudget(input: RecallBudgetInput): number {
|
|
15
|
-
const maxInput = Math.max(0, Math.floor(input.maxInputTokens));
|
|
16
|
-
const estimatedPrompt = Math.max(0, Math.floor(input.estimatedPromptTokens));
|
|
17
|
-
const headroomTarget = Math.max(0, Math.floor(input.targetHeadroomTokens));
|
|
18
|
-
const minInject = Math.max(1, Math.floor(input.minInjectTokens));
|
|
19
|
-
const maxInject = Math.max(minInject, Math.floor(input.maxInjectTokens));
|
|
20
|
-
|
|
21
|
-
const available = maxInput - estimatedPrompt - headroomTarget;
|
|
22
|
-
return clamp(Math.floor(available), minInject, maxInject);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function clamp(value: number, min: number, max: number): number {
|
|
26
|
-
if (value < min) return min;
|
|
27
|
-
if (value > max) return max;
|
|
28
|
-
return value;
|
|
29
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for `gate-flag.ts` — the on/off predicate gating the memory-v3
|
|
3
|
-
* per-turn injection gate. The assistant flag resolver is mocked so the test
|
|
4
|
-
* asserts the composition: the predicate forwards `MEMORY_V3_INJECTION_GATE_FLAG`
|
|
5
|
-
* and the config to `isAssistantFeatureFlagEnabled` and ANDs its boolean with
|
|
6
|
-
* the `memory.v3.gate.enabled` config kill-switch.
|
|
7
|
-
*/
|
|
8
|
-
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
9
|
-
|
|
10
|
-
import type { AssistantConfig } from "../../../../../config/schema.js";
|
|
11
|
-
|
|
12
|
-
// The resolver is mocked BEFORE importing the module under test so the import
|
|
13
|
-
// observes the spy at load time. The specifier is resolved relative to THIS
|
|
14
|
-
// test file (one level deeper than gate-flag.ts's own import path).
|
|
15
|
-
const isAssistantFeatureFlagEnabled = mock(
|
|
16
|
-
(_flag: string, _config: AssistantConfig): boolean => false,
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
mock.module("../../../../../config/assistant-feature-flags.js", () => ({
|
|
20
|
-
isAssistantFeatureFlagEnabled,
|
|
21
|
-
}));
|
|
22
|
-
|
|
23
|
-
const { isMemoryV3InjectionGateEnabled, MEMORY_V3_INJECTION_GATE_FLAG } =
|
|
24
|
-
await import("../gate-flag.js");
|
|
25
|
-
|
|
26
|
-
// The predicate reads only `memory.v3.gate.enabled` from the config.
|
|
27
|
-
const cfgWithGateEnabled = (enabled: boolean): AssistantConfig =>
|
|
28
|
-
({ memory: { v3: { gate: { enabled } } } }) as AssistantConfig;
|
|
29
|
-
|
|
30
|
-
describe("gate-flag", () => {
|
|
31
|
-
beforeEach(() => {
|
|
32
|
-
isAssistantFeatureFlagEnabled.mockReset();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
test("constant is the kebab-case flag id", () => {
|
|
36
|
-
expect(MEMORY_V3_INJECTION_GATE_FLAG).toBe("memory-v3-injection-gate");
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test("flag on + config enabled → true, resolver called with the flag id + config", () => {
|
|
40
|
-
isAssistantFeatureFlagEnabled.mockReturnValue(true);
|
|
41
|
-
|
|
42
|
-
const cfg = cfgWithGateEnabled(true);
|
|
43
|
-
expect(isMemoryV3InjectionGateEnabled(cfg)).toBe(true);
|
|
44
|
-
expect(isAssistantFeatureFlagEnabled).toHaveBeenCalledTimes(1);
|
|
45
|
-
expect(isAssistantFeatureFlagEnabled).toHaveBeenCalledWith(
|
|
46
|
-
MEMORY_V3_INJECTION_GATE_FLAG,
|
|
47
|
-
cfg,
|
|
48
|
-
);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
test("returns false when the resolver returns false", () => {
|
|
52
|
-
isAssistantFeatureFlagEnabled.mockReturnValue(false);
|
|
53
|
-
|
|
54
|
-
const cfg = cfgWithGateEnabled(true);
|
|
55
|
-
expect(isMemoryV3InjectionGateEnabled(cfg)).toBe(false);
|
|
56
|
-
expect(isAssistantFeatureFlagEnabled).toHaveBeenCalledWith(
|
|
57
|
-
MEMORY_V3_INJECTION_GATE_FLAG,
|
|
58
|
-
cfg,
|
|
59
|
-
);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test("config kill-switch: flag on + gate.enabled false → false", () => {
|
|
63
|
-
isAssistantFeatureFlagEnabled.mockReturnValue(true);
|
|
64
|
-
|
|
65
|
-
expect(isMemoryV3InjectionGateEnabled(cfgWithGateEnabled(false))).toBe(
|
|
66
|
-
false,
|
|
67
|
-
);
|
|
68
|
-
});
|
|
69
|
-
});
|