@vellumai/assistant 0.11.0 → 0.11.1-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 +14 -9
- package/Dockerfile +1 -0
- package/docs/architecture/memory.md +59 -0
- package/docs/stt-provider-onboarding.md +10 -7
- package/eslint.config.mjs +34 -1
- 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__/conversation-handle.test.ts +316 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/redacted-credential.test.ts +1 -1
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/conversation-handle.ts +246 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +2 -2
- 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__/conversation-handle.test.ts +316 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/redacted-credential.test.ts +1 -1
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/conversation-handle.ts +246 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +2 -2
- package/node_modules/@vellumai/ipc-server-utils/src/index.ts +10 -0
- package/{src/ipc → node_modules/@vellumai/ipc-server-utils/src}/ipc-framing.ts +21 -7
- package/node_modules/@vellumai/service-contracts/package.json +1 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/conversation-handle.test.ts +316 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/redacted-credential.test.ts +1 -1
- package/node_modules/@vellumai/service-contracts/src/conversation-handle.ts +246 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
- package/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +2 -2
- package/openapi.yaml +365 -11
- package/package.json +1 -1
- package/scripts/build-plugin-api.ts +11 -4
- package/scripts/capture-x-graphql.ts +54 -20
- package/scripts/generate-openapi.ts +7 -3
- package/scripts/memory-inspect.ts +17 -6
- package/scripts/sync-llm-catalog.ts +44 -19
- package/scripts/sync-web-search-catalog.ts +3 -1
- package/scripts/voice-ttft-spike.ts +6 -3
- package/src/__tests__/add-message-skip-indexing.test.ts +3 -2
- package/src/__tests__/agent-loop-history-repair.test.ts +180 -0
- package/src/__tests__/agent-loop-output-hooks.test.ts +35 -11
- package/src/__tests__/agent-loop-override-profile.test.ts +21 -14
- package/src/__tests__/agent-loop-regrowth-guard.test.ts +3 -1
- package/src/__tests__/agent-loop.test.ts +5 -2
- package/src/__tests__/anthropic-error-formatting.test.ts +3 -1
- package/src/__tests__/app-control-flow.test.ts +3 -1
- package/src/__tests__/app-control-tool-schemas.test.ts +6 -2
- package/src/__tests__/app-dir-path-guard.test.ts +9 -3
- package/src/__tests__/app-routes-csp.test.ts +12 -4
- package/src/__tests__/app-source-watcher.test.ts +3 -1
- package/src/__tests__/approval-primitive.test.ts +66 -22
- package/src/__tests__/assistant-feature-flag-guard.test.ts +6 -2
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +12 -4
- package/src/__tests__/assistant-id-boundary-guard.test.ts +26 -9
- package/src/__tests__/attachments-store.test.ts +12 -4
- package/src/__tests__/avatar-generator.test.ts +3 -1
- package/src/__tests__/background-shell-bash.test.ts +3 -1
- package/src/__tests__/browser-fill-credential.test.ts +6 -2
- package/src/__tests__/browser-runtime-check.test.ts +3 -1
- package/src/__tests__/build-persisted-content.test.ts +3 -1
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +15 -5
- package/src/__tests__/byok-default-profile-ensure.test.ts +1095 -0
- package/src/__tests__/call-controller.test.ts +9 -3
- package/src/__tests__/call-domain.test.ts +15 -8
- package/src/__tests__/call-setup-flow-midcall-trust.test.ts +3 -1
- package/src/__tests__/call-state-machine.test.ts +3 -1
- package/src/__tests__/channel-approval-routes.test.ts +2 -1
- package/src/__tests__/channel-approval.test.ts +9 -6
- package/src/__tests__/channel-guardian.test.ts +3 -1
- package/src/__tests__/channel-setup-panel-ack.test.ts +1 -3
- package/src/__tests__/clawhub.test.ts +3 -1
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +3 -1
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +3 -2
- package/src/__tests__/compaction-summary-head-persisted-count.test.ts +1 -1
- package/src/__tests__/config-callsite-patch-merge.test.ts +92 -0
- package/src/__tests__/config-get-vision-flag.test.ts +1 -1
- package/src/__tests__/config-loader-backfill.test.ts +199 -134
- package/src/__tests__/config-loader-corrupt.test.ts +3 -1
- package/src/__tests__/config-loader-platform-defaults.test.ts +3 -1
- package/src/__tests__/config-loader-quarantine-notice.test.ts +3 -1
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +3 -1
- package/src/__tests__/config-model-image-provider.test.ts +3 -1
- package/src/__tests__/config-set-platform-guard.test.ts +3 -1
- package/src/__tests__/config-watcher.test.ts +3 -1
- package/src/__tests__/connection-model-compat.test.ts +3 -1
- package/src/__tests__/contact-store-user-file.test.ts +18 -6
- package/src/__tests__/contacts-relay-reads.test.ts +31 -22
- package/src/__tests__/contacts-tools.test.ts +3 -1
- package/src/__tests__/context-overflow-reducer.test.ts +3 -1
- package/src/__tests__/context-search-conversations-source.test.ts +4 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +3 -1
- package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +3 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop.test.ts +1 -1
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +3 -3
- package/src/__tests__/conversation-delete-subagent-rows.test.ts +303 -0
- package/src/__tests__/conversation-fork-route.test.ts +3 -1
- package/src/__tests__/conversation-inference-profile-list.test.ts +3 -1
- package/src/__tests__/conversation-list-source.test.ts +3 -1
- package/src/__tests__/conversation-loop-db-lock-resilience.test.ts +9 -8
- package/src/__tests__/conversation-pairing.test.ts +6 -2
- package/src/__tests__/conversation-pre-run-repair.test.ts +1 -1
- package/src/__tests__/conversation-queue.test.ts +65 -1
- package/src/__tests__/conversation-routes-disk-view.test.ts +18 -6
- package/src/__tests__/conversation-slash-commands.test.ts +27 -9
- package/src/__tests__/conversation-slash.test.ts +92 -0
- package/src/__tests__/conversation-starter-routes.test.ts +6 -2
- package/src/__tests__/conversation-surfaces-app-control.test.ts +3 -1
- package/src/__tests__/conversation-surfaces-app-open.test.ts +1 -3
- package/src/__tests__/conversation-surfaces-queued-emit.test.ts +86 -0
- package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -2
- package/src/__tests__/conversation-surfaces-state-update.test.ts +1 -3
- package/src/__tests__/conversation-surfaces-table-action.test.ts +1 -3
- package/src/__tests__/conversation-usage.test.ts +159 -0
- package/src/__tests__/conversations-import-system-filter.test.ts +101 -4
- package/src/__tests__/credential-broker-server-use.test.ts +21 -7
- package/src/__tests__/credential-broker.test.ts +30 -10
- package/src/__tests__/credential-execution-client.test.ts +17 -6
- package/src/__tests__/credential-security-invariants.test.ts +3 -1
- package/src/__tests__/custom-group-listing-visibility.test.ts +93 -0
- package/src/__tests__/db-migration-rollback.test.ts +21 -7
- package/src/__tests__/db-readiness-http-gate.test.ts +3 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +1 -0
- package/src/__tests__/default-provider-ensure.test.ts +10 -1
- package/src/__tests__/disk-pressure-guard.test.ts +3 -1
- package/src/__tests__/dm-backfill.test.ts +3 -1
- package/src/__tests__/dm-persistence.test.ts +3 -1
- package/src/__tests__/docker-signing-key-bootstrap.test.ts +2 -1
- package/src/__tests__/drain-requeue-on-contention.test.ts +124 -0
- package/src/__tests__/edit-engine.test.ts +42 -14
- package/src/__tests__/events-dev-bypass-actor.test.ts +3 -1
- package/src/__tests__/file-ops-service.test.ts +60 -20
- package/src/__tests__/filesystem-tools.test.ts +90 -30
- package/src/__tests__/fixtures/mock-chrome-extension.ts +18 -6
- package/src/__tests__/fixtures/mock-signup-server.ts +6 -2
- package/src/__tests__/fuzzy-match-property.test.ts +18 -6
- package/src/__tests__/gateway-flag-listener.test.ts +9 -3
- package/src/__tests__/gateway-only-enforcement.test.ts +2 -1
- package/src/__tests__/gateway-only-guard.test.ts +12 -4
- package/src/__tests__/gemini-image-service.test.ts +3 -1
- package/src/__tests__/gemini-provider.test.ts +81 -2
- package/src/__tests__/get-skill-detail-audit.test.ts +9 -3
- package/src/__tests__/google-calendar-watcher.test.ts +75 -0
- package/src/__tests__/guardian-card-rehydration.test.ts +210 -0
- package/src/__tests__/guardian-card-withdrawal.test.ts +37 -2
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +42 -14
- package/src/__tests__/guardian-expiry-notifier.test.ts +3 -1
- package/src/__tests__/guardian-question-mode.test.ts +12 -4
- package/src/__tests__/headless-browser-interactions.test.ts +6 -2
- package/src/__tests__/headless-browser-mode.test.ts +6 -2
- package/src/__tests__/headless-browser-navigate.test.ts +33 -11
- package/src/__tests__/headless-browser-read-tools.test.ts +24 -8
- package/src/__tests__/headless-browser-snapshot.test.ts +3 -1
- package/src/__tests__/helpers/channel-test-adapter.ts +17 -7
- package/src/__tests__/helpers/create-guardian-binding.ts +3 -1
- package/src/__tests__/helpers/derive-guardian-delivery.ts +3 -1
- package/src/__tests__/helpers/gateway-acl-store.ts +6 -2
- package/src/__tests__/helpers/gateway-classify-mock.ts +3 -1
- package/src/__tests__/helpers/seed-contact-channel.ts +3 -1
- package/src/__tests__/helpers/tar-fixtures.ts +3 -1
- package/src/__tests__/history-repair-observability.test.ts +1 -1
- package/src/__tests__/history-repair.test.ts +2 -2
- package/src/__tests__/host-app-control-routes.test.ts +98 -2
- package/src/__tests__/host-bash-routes.test.ts +66 -0
- package/src/__tests__/host-cu-proxy.test.ts +7 -1
- package/src/__tests__/host-cu-routes-targeted.test.ts +87 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +60 -0
- package/src/__tests__/host-proxy-preactivation.test.ts +1 -5
- package/src/__tests__/host-transfer-proxy.test.ts +4 -4
- package/src/__tests__/host-transfer-routes-targeted.test.ts +3 -1
- package/src/__tests__/image-recovery-hook.test.ts +3 -3
- package/src/__tests__/inbound-slack-persistence.test.ts +3 -1
- package/src/__tests__/injector-config-quarantine-notice.test.ts +3 -1
- package/src/__tests__/injector-config-validation-reset-notice.test.ts +3 -1
- package/src/__tests__/injector-disk-pressure.test.ts +3 -1
- package/src/__tests__/injector-document-comments.test.ts +3 -1
- package/src/__tests__/injector-v3-suppression.test.ts +6 -2
- package/src/__tests__/inline-skill-authoring-guard.test.ts +12 -4
- package/src/__tests__/internal-telemetry-routes.test.ts +3 -1
- package/src/__tests__/lexical-index-dual-write.test.ts +3 -1
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +9 -3
- package/src/__tests__/llm-callsite-catalog.test.ts +3 -1
- package/src/__tests__/llm-catalog-parity.test.ts +21 -7
- package/src/__tests__/managed-profile-guard.test.ts +53 -0
- package/src/__tests__/max-tokens-continue-hook.test.ts +120 -0
- package/src/__tests__/mcp-cli.test.ts +10 -3
- package/src/__tests__/media-stream-output.test.ts +9 -3
- package/src/__tests__/media-stream-parser.test.ts +111 -37
- package/src/__tests__/media-stream-stt-session.test.ts +34 -11
- package/src/__tests__/memory-upsert-concurrency.test.ts +19 -16
- package/src/__tests__/message-delete-segment-purge.test.ts +98 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +3 -1
- package/src/__tests__/migration-export-http.test.ts +9 -3
- package/src/__tests__/migration-export-streaming.test.ts +9 -3
- package/src/__tests__/migration-import-commit-http.test.ts +21 -7
- package/src/__tests__/migration-import-preflight-http.test.ts +3 -1
- package/src/__tests__/migration-validate-http.test.ts +3 -1
- package/src/__tests__/mock-fetch.ts +3 -1
- package/src/__tests__/mock-gateway-ipc.ts +20 -7
- package/src/__tests__/mock-signup-server.test.ts +9 -3
- package/src/__tests__/model-intents.test.ts +1 -1
- package/src/__tests__/native-web-search.test.ts +3 -1
- package/src/__tests__/no-is-trusted-guard.test.ts +3 -1
- package/src/__tests__/notification-broadcaster.test.ts +5 -3
- package/src/__tests__/notification-platform-adapter.test.ts +12 -4
- package/src/__tests__/oauth-apps-routes.test.ts +3 -1
- package/src/__tests__/oauth-commands-routes.test.ts +9 -3
- package/src/__tests__/oauth-connect-orchestrator.test.ts +33 -11
- package/src/__tests__/oauth-connect-routes.test.ts +3 -1
- package/src/__tests__/oauth-providers-routes.test.ts +15 -10
- package/src/__tests__/oauth2-refresh-retry.test.ts +3 -1
- package/src/__tests__/onboarding-persona-write.test.ts +12 -10
- package/src/__tests__/openai-image-service.test.ts +6 -2
- package/src/__tests__/openai-provider.test.ts +3 -1
- package/src/__tests__/openai-responses-cutover-guard.test.ts +3 -1
- package/src/__tests__/openai-responses-provider.test.ts +3 -1
- package/src/__tests__/outbound-slack-persistence.test.ts +18 -6
- package/src/__tests__/persist-media-references.test.ts +3 -1
- package/src/__tests__/persist-onboarding-artifacts.test.ts +3 -1
- package/src/__tests__/persist-unsendable-image-downscale.test.ts +3 -3
- package/src/__tests__/persist-unsendable-image.test.ts +3 -3
- package/src/__tests__/persist-user-message-set-processing-failure.test.ts +3 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +9 -3
- package/src/__tests__/persona-resolver.test.ts +3 -1
- package/src/__tests__/plugin-api-tool-definition.test.ts +5 -8
- package/src/__tests__/plugin-bootstrap.test.ts +2 -3
- package/src/__tests__/plugin-import-boundary-guard.test.ts +1 -0
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +1 -4
- package/src/__tests__/post-turn-tool-result-truncation.test.ts +112 -1
- package/src/__tests__/prechat-onboarding-contract.test.ts +6 -2
- package/src/__tests__/pricing.test.ts +2 -2
- package/src/__tests__/process-message-background-slack.test.ts +3 -1
- package/src/__tests__/profiler-routes.test.ts +10 -12
- package/src/__tests__/provider-catalog-visibility.test.ts +12 -4
- package/src/__tests__/provider-error-scenarios.test.ts +27 -9
- package/src/__tests__/provider-streaming.benchmark.test.ts +12 -4
- package/src/__tests__/queued-message-delete-contract.test.ts +339 -0
- package/src/__tests__/recording-handler.test.ts +7 -3
- package/src/__tests__/retry-thinking-preadaptive.test.ts +204 -0
- package/src/__tests__/run-conversation-turn-persistence.test.ts +3 -1
- package/src/__tests__/runtime-events-sse-reconnect.test.ts +3 -1
- package/src/__tests__/schedule-retry.test.ts +3 -1
- package/src/__tests__/schedule-routes-workflow-validation.test.ts +9 -3
- package/src/__tests__/schedule-routes.test.ts +3 -1
- package/src/__tests__/schedule-store.test.ts +113 -9
- package/src/__tests__/schedule-tools.test.ts +106 -0
- package/src/__tests__/scheduler-reuse-conversation.test.ts +3 -1
- package/src/__tests__/scheduler-wake.test.ts +47 -8
- package/src/__tests__/script-proxy-injection-runtime.test.ts +14 -5
- package/src/__tests__/script-proxy-mitm-handler.test.ts +12 -4
- package/src/__tests__/script-proxy-rewrite-specificity.test.ts +12 -4
- package/src/__tests__/search-skills-unified.test.ts +27 -9
- package/src/__tests__/service-contracts-import-guard.test.ts +12 -4
- package/src/__tests__/settings-routes.test.ts +3 -1
- package/src/__tests__/shell-credential-ref.test.ts +6 -2
- package/src/__tests__/shell-observability.test.ts +3 -1
- package/src/__tests__/skill-cache-store.test.ts +3 -1
- package/src/__tests__/skill-feature-flags-integration.test.ts +3 -1
- package/src/__tests__/skill-secret-handling-guard.test.ts +11 -4
- package/src/__tests__/skills-file-content-endpoint.test.ts +93 -31
- package/src/__tests__/skills-files-catalog-fallback.test.ts +33 -11
- package/src/__tests__/skills.test.ts +33 -14
- package/src/__tests__/slack-channel-config.test.ts +6 -2
- package/src/__tests__/slack-messaging-token-resolution.test.ts +6 -2
- package/src/__tests__/sse-actor-principal-guardian-source.test.ts +3 -1
- package/src/__tests__/steer-on-enqueue-question.test.ts +3 -1
- package/src/__tests__/steer-tool-repair.test.ts +6 -2
- package/src/__tests__/stt-language-catalog-parity.test.ts +131 -0
- package/src/__tests__/subagent-allowlist-validation.test.ts +3 -1
- package/src/__tests__/subagent-detail.test.ts +317 -3
- package/src/__tests__/subagent-disposal.test.ts +149 -1
- package/src/__tests__/subagent-fork-prompt-role.test.ts +3 -1
- package/src/__tests__/subagent-notify-parent.test.ts +1 -0
- package/src/__tests__/subagent-persistence.test.ts +444 -7
- package/src/__tests__/subagent-reconcile-route.test.ts +423 -0
- package/src/__tests__/subagent-role-registry.test.ts +3 -1
- package/src/__tests__/subagent-tools.test.ts +304 -0
- package/src/__tests__/system-prompt.test.ts +12 -5
- package/src/__tests__/task-progress-nudge-hook.test.ts +3 -1
- package/src/__tests__/telegram-bot-username-resolution.test.ts +3 -1
- package/src/__tests__/telegram-config.test.ts +3 -1
- package/src/__tests__/telemetry-routes.test.ts +8 -3
- package/src/__tests__/thinking-block-replay.test.ts +1 -2
- package/src/__tests__/thread-backfill.test.ts +24 -8
- package/src/__tests__/token-estimator-accuracy.benchmark.test.ts +6 -2
- package/src/__tests__/token-manager.test.ts +36 -12
- package/src/__tests__/tool-preview-lifecycle.test.ts +3 -6
- package/src/__tests__/tool-result-truncation.test.ts +3 -1
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -2
- package/src/__tests__/tts-catalog-parity.test.ts +6 -2
- package/src/__tests__/twilio-provider.test.ts +6 -2
- package/src/__tests__/unicode.test.ts +1 -3
- package/src/__tests__/usage-cli.test.ts +3 -1
- package/src/__tests__/usage-routes.test.ts +3 -1
- package/src/__tests__/validate-input.test.ts +27 -9
- package/src/__tests__/voice-approval-resolver-relay.test.ts +15 -5
- package/src/__tests__/voice-config-update.test.ts +257 -2
- package/src/__tests__/wake-schedule-escalation.test.ts +477 -0
- package/src/__tests__/wake-schedule-trust.test.ts +255 -0
- package/src/__tests__/web-fetch.test.ts +21 -7
- package/src/__tests__/web-search-catalog-parity.test.ts +11 -4
- package/src/__tests__/web-search-history.test.ts +72 -78
- package/src/__tests__/web-search.test.ts +15 -5
- package/src/__tests__/worker-entrypoint-guards.test.ts +39 -0
- package/src/__tests__/workspace-greetings.test.ts +3 -1
- package/src/__tests__/workspace-migration-026-backfill-install-meta.test.ts +3 -1
- package/src/__tests__/workspace-migration-043-release-notes-latex-rendering.test.ts +3 -1
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +1 -4
- package/src/__tests__/workspace-migration-130-speech-mode-to-provider.test.ts +3 -1
- package/src/__tests__/workspace-migration-136-repair-stale-fireworks-kimi-model-id.test.ts +139 -0
- package/src/__tests__/workspace-migration-down-functions.test.ts +5 -2
- package/src/__tests__/workspace-migration-meets.test.ts +4 -6
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +3 -1
- package/src/__tests__/workspace-migration-seed-device-id.test.ts +3 -1
- package/src/a2a/__tests__/agent-card.test.ts +5 -21
- package/src/a2a/agent-card.ts +11 -17
- package/src/acp/__tests__/helpers/exec-file-stub.ts +3 -1
- package/src/acp/__tests__/prepare-agent-env.test.ts +3 -1
- package/src/acp/agent-process.ts +18 -6
- package/src/acp/auto-install.test.ts +9 -3
- package/src/acp/auto-install.ts +6 -2
- package/src/acp/failure-error.ts +8 -3
- package/src/acp/prepare-agent-env.ts +3 -1
- package/src/acp/resolve-agent.test.ts +81 -27
- package/src/acp/resolve-agent.ts +9 -3
- package/src/{plugins/defaults/history-repair/terminal.ts → agent/history-repair/history-repair.ts} +42 -11
- package/src/agent/image-optimize.ts +18 -6
- package/src/agent/loop.ts +45 -10
- package/src/api/events/contact-request.ts +1 -0
- package/src/api/events/message-dequeued.ts +4 -0
- package/src/api/events/message-queued-deleted.ts +4 -0
- package/src/api/events/message-queued.ts +4 -0
- package/src/api/events/message-requeued.ts +35 -0
- package/src/api/events/tool-result.ts +1 -0
- package/src/api/index.ts +6 -0
- package/src/api/responses/subagent-detail.ts +13 -6
- package/src/approvals/guardian-card-withdrawal.ts +30 -11
- package/src/apps/app-store.ts +65 -22
- package/src/apps/shared-app-links-store.ts +9 -3
- package/src/avatar/__tests__/avatar-store.test.ts +6 -2
- package/src/avatar/avatar-manifest.ts +18 -6
- package/src/avatar/resvg-lazy.test.ts +6 -2
- package/src/background-wake/background-wake-routes.test.ts +9 -3
- package/src/background-wake/next-wake.ts +15 -5
- package/src/background-wake/platform-client.ts +18 -6
- package/src/background-wake/publisher.ts +3 -1
- package/src/backup/__tests__/paths.test.ts +0 -1
- package/src/backup/__tests__/restore.test.ts +1 -6
- package/src/backup/__tests__/snapshot-lock.test.ts +3 -2
- package/src/backup/list-snapshots.ts +15 -5
- package/src/backup/local-writer.ts +9 -3
- package/src/backup/paths.ts +6 -3
- package/src/backup/snapshot-lock.ts +18 -6
- package/src/browser-session/__tests__/manager.test.ts +6 -2
- package/src/browser-session/manager.ts +6 -2
- package/src/bundler/app-compiler.ts +44 -15
- package/src/bundler/bundle-scanner.ts +29 -10
- package/src/bundler/bundle-signer.ts +3 -1
- package/src/bundler/compiler-tools.ts +15 -5
- package/src/bundler/package-resolver.ts +3 -1
- package/src/bundler/signature-verifier.ts +3 -1
- package/src/calls/__tests__/inbound-trust-reader.test.ts +1 -4
- package/src/calls/__tests__/tts-text-sanitizer.test.ts +11 -11
- package/src/calls/access-request-wait.ts +9 -3
- package/src/calls/audio-store.ts +9 -3
- package/src/calls/call-constants.ts +6 -2
- package/src/calls/call-controller.ts +72 -25
- package/src/calls/call-pointer-message-composer.ts +11 -4
- package/src/calls/call-pointer-messages.ts +24 -8
- package/src/calls/call-store.ts +12 -4
- package/src/calls/guardian-action-sweep.ts +3 -1
- package/src/calls/inbound-trust-reader.ts +5 -1
- package/src/calls/media-stream-audio-transcode.ts +9 -3
- package/src/calls/media-stream-output.ts +41 -15
- package/src/calls/media-stream-stt-session.ts +21 -7
- package/src/calls/media-turn-detector.ts +9 -3
- package/src/calls/speaker-identification.ts +21 -7
- package/src/calls/telephony-credential-preflight.ts +1 -3
- package/src/calls/tts-text-sanitizer.ts +2 -8
- package/src/calls/twilio-config.ts +3 -1
- package/src/calls/twilio-provider.ts +3 -1
- package/src/calls/twilio-rest.ts +3 -1
- package/src/calls/voice-control-protocol.ts +12 -4
- package/src/channels/__tests__/gateway-verification-sessions.test.ts +2 -3
- package/src/channels/permission-profiles.ts +9 -3
- package/src/channels/slack-callback-url.ts +9 -3
- package/src/channels/types.ts +17 -6
- package/src/cli/__tests__/run-assistant-command.ts +3 -1
- package/src/cli/__tests__/unknown-command.test.ts +3 -1
- package/src/cli/commands/__tests__/attachment.test.ts +3 -1
- package/src/cli/commands/__tests__/avatar.test.ts +18 -10
- package/src/cli/commands/__tests__/backup.test.ts +30 -10
- package/src/cli/commands/__tests__/browser.test.ts +3 -1
- package/src/cli/commands/__tests__/cache.test.ts +3 -1
- package/src/cli/commands/__tests__/changelog.test.ts +3 -1
- package/src/cli/commands/__tests__/channel-verification-sessions.test.ts +11 -6
- package/src/cli/commands/__tests__/conversations-import.test.ts +3 -1
- package/src/cli/commands/__tests__/conversations-new.test.ts +9 -3
- package/src/cli/commands/__tests__/conversations-slack.test.ts +15 -5
- package/src/cli/commands/__tests__/conversations-wake.test.ts +13 -3
- package/src/cli/commands/__tests__/domain-register.test.ts +1 -3
- package/src/cli/commands/__tests__/domain-status.test.ts +13 -5
- package/src/cli/commands/__tests__/email-attachment.test.ts +61 -19
- package/src/cli/commands/__tests__/email-core.test.ts +126 -49
- package/src/cli/commands/__tests__/gateway.test.ts +6 -2
- package/src/cli/commands/__tests__/image-generation.test.ts +5 -2
- package/src/cli/commands/__tests__/inference-send.test.ts +3 -1
- package/src/cli/commands/__tests__/skills.test.ts +3 -1
- package/src/cli/commands/__tests__/status.test.ts +16 -3
- package/src/cli/commands/__tests__/stt.test.ts +23 -5
- package/src/cli/commands/__tests__/trust.test.ts +3 -1
- package/src/cli/commands/__tests__/tts.test.ts +6 -2
- package/src/cli/commands/__tests__/ui-confirm.test.ts +3 -1
- package/src/cli/commands/__tests__/ui.test.ts +3 -1
- package/src/cli/commands/__tests__/watchers.test.ts +3 -1
- package/src/cli/commands/__tests__/webhooks.test.ts +23 -5
- package/src/cli/commands/audit.ts +7 -3
- package/src/cli/commands/avatar.ts +14 -7
- package/src/cli/commands/backup.ts +42 -17
- package/src/cli/commands/cache.ts +9 -3
- package/src/cli/commands/changelog.ts +50 -18
- package/src/cli/commands/channel-verification-sessions.ts +25 -10
- package/src/cli/commands/channels/__tests__/channels.test.ts +8 -13
- package/src/cli/commands/channels/index.ts +12 -4
- package/src/cli/commands/clients.ts +12 -4
- package/src/cli/commands/contacts.help.ts +5 -0
- package/src/cli/commands/contacts.ts +30 -12
- package/src/cli/commands/conversations-import.ts +2 -1
- package/src/cli/commands/conversations.ts +12 -4
- package/src/cli/commands/db/__tests__/repair.test.ts +6 -2
- package/src/cli/commands/db/format.ts +18 -6
- package/src/cli/commands/db/repair-steps.ts +3 -1
- package/src/cli/commands/db/status.ts +6 -2
- package/src/cli/commands/gateway.ts +25 -9
- package/src/cli/commands/image-generation.ts +5 -2
- package/src/cli/commands/inference-session.ts +6 -2
- package/src/cli/commands/inference.ts +44 -6
- package/src/cli/commands/memory/__tests__/memory-ingest.test.ts +591 -0
- package/src/cli/commands/memory/__tests__/memory-v2.test.ts +3 -1
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +3 -1
- package/src/cli/commands/memory/__tests__/worker.test.ts +3 -1
- package/src/cli/commands/memory/index.help.ts +55 -1
- package/src/cli/commands/memory/index.ts +2 -0
- package/src/cli/commands/memory/memory-ingest.ts +273 -0
- package/src/cli/commands/memory/memory-v2-compare-render.ts +3 -1
- package/src/cli/commands/memory/memory-v2.ts +12 -4
- package/src/cli/commands/memory/memory-v3.ts +3 -1
- package/src/cli/commands/notifications.ts +56 -19
- package/src/cli/commands/oauth/apps.ts +15 -5
- package/src/cli/commands/oauth/disconnect.ts +9 -3
- package/src/cli/commands/oauth/mode.ts +6 -2
- package/src/cli/commands/oauth/ping.ts +9 -3
- package/src/cli/commands/oauth/providers.ts +223 -92
- package/src/cli/commands/oauth/request.ts +26 -9
- package/src/cli/commands/oauth/token.ts +9 -3
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +7 -8
- package/src/cli/commands/platform/__tests__/plans.test.ts +129 -0
- package/src/cli/commands/platform/__tests__/subscription.test.ts +121 -0
- package/src/cli/commands/platform/connect.ts +2 -1
- package/src/cli/commands/platform/disconnect.ts +2 -1
- package/src/cli/commands/platform/index.help.ts +55 -0
- package/src/cli/commands/platform/index.ts +118 -4
- package/src/cli/commands/ps.ts +3 -1
- package/src/cli/commands/sequence.ts +43 -15
- package/src/cli/commands/skills.ts +103 -45
- package/src/cli/commands/status.ts +3 -1
- package/src/cli/commands/telemetry.ts +2 -1
- package/src/cli/commands/ui.ts +6 -2
- package/src/cli/commands/watchers.ts +31 -11
- package/src/cli/commands/webhooks.ts +4 -2
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +3 -1
- package/src/cli/lib/__tests__/list-installed-plugins.test.ts +4 -2
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +5 -2
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +20 -11
- package/src/cli/lib/__tests__/plugin-details.test.ts +13 -7
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +3 -1
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +17 -5
- package/src/cli/lib/__tests__/publish-plugin.test.ts +51 -22
- package/src/cli/lib/__tests__/search-plugins.test.ts +13 -6
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +9 -3
- package/src/cli/lib/bundled-marketplace.json +13 -0
- package/src/cli/lib/cli-colors.ts +24 -8
- package/src/cli/lib/confirm-prompt.ts +3 -1
- package/src/cli/lib/install-from-github.ts +6 -2
- package/src/cli/lib/ipc-params.ts +6 -2
- package/src/cli/lib/list-installed-plugins.ts +21 -7
- package/src/cli/lib/parse-github-plugin-spec.ts +15 -5
- package/src/cli/lib/plugin-artifact.ts +9 -3
- package/src/cli/lib/plugin-catalog-platform.ts +7 -2
- package/src/cli/lib/plugin-catalog-resolve.ts +7 -5
- package/src/cli/lib/plugin-marketplace.ts +12 -4
- package/src/cli/lib/plugin-surfaces.ts +15 -5
- package/src/cli/lib/publish-plugin.ts +24 -8
- package/src/cli/lib/search-plugins.ts +3 -1
- package/src/cli/lib/time-ago.ts +18 -6
- package/src/cli/lib/unknown-command.ts +12 -4
- package/src/cli/output.ts +3 -1
- package/src/cli/program.ts +3 -1
- package/src/cli/utils/__tests__/conversation-id.test.ts +3 -3
- package/src/cli/utils/conversation-id.ts +9 -3
- package/src/cli/utils/parse-duration.ts +6 -2
- package/src/config/__tests__/default-plugin-skill-discovery.test.ts +158 -0
- package/src/config/__tests__/default-profile-catalog.test.ts +60 -1
- package/src/config/__tests__/deployment-context-defaults.test.ts +9 -3
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +7 -2
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +9 -3
- package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +5 -2
- package/src/config/__tests__/seed-default-provider.test.ts +16 -0
- package/src/config/__tests__/sync-gated-profiles.test.ts +6 -2
- package/src/config/assistant-feature-flags.ts +32 -11
- package/src/config/bundled-skills/app-builder/SKILL.md +3 -3
- package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +24 -34
- package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +1 -1
- package/src/config/bundled-skills/app-builder/references/SLIDES.md +1 -0
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +1 -1
- package/src/config/bundled-skills/app-builder/tools/app-generate-icon.ts +3 -1
- package/src/config/bundled-skills/app-builder/tools/app-refresh.ts +3 -1
- package/src/config/bundled-skills/app-builder/tools/app-update.ts +3 -1
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +11 -4
- package/src/config/bundled-skills/contacts/tools/google-contacts.ts +6 -2
- package/src/config/bundled-skills/media-processing/__tests__/extract-keyframes.test.ts +3 -1
- package/src/config/bundled-skills/media-processing/services/preprocess.ts +9 -3
- package/src/config/bundled-skills/media-processing/services/processing-pipeline.ts +9 -3
- package/src/config/bundled-skills/media-processing/services/reduce.ts +3 -1
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +3 -1
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +12 -4
- package/src/config/bundled-skills/messaging/SKILL.md +2 -2
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +6 -2
- package/src/config/bundled-skills/messaging/tools/messaging-draft.ts +23 -8
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +5 -2
- package/src/config/bundled-skills/messaging/tools/shared.ts +21 -7
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +7 -7
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +11 -4
- package/src/config/bundled-skills/schedule/SKILL.md +4 -0
- package/src/config/bundled-skills/schedule/TOOLS.json +8 -0
- package/src/config/bundled-skills/sequences/tools/sequence-create.ts +8 -3
- package/src/config/bundled-skills/sequences/tools/sequence-delete.ts +6 -2
- package/src/config/bundled-skills/sequences/tools/sequence-enroll.ts +12 -4
- package/src/config/bundled-skills/sequences/tools/sequence-enrollment-list.ts +3 -1
- package/src/config/bundled-skills/sequences/tools/sequence-get.ts +6 -2
- package/src/config/bundled-skills/sequences/tools/sequence-import.ts +13 -5
- package/src/config/bundled-skills/sequences/tools/sequence-list.ts +3 -1
- package/src/config/bundled-skills/sequences/tools/sequence-update.ts +17 -7
- package/src/config/bundled-skills/settings/TOOLS.json +4 -3
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +226 -2
- package/src/config/bundled-skills/skill-management/SKILL.md +1 -1
- package/src/config/bundled-skills/skill-management/TOOLS.json +1 -1
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.test.ts +3 -1
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +15 -5
- package/src/config/default-profile-catalog.ts +103 -42
- package/src/config/default-profile-names.ts +16 -2
- package/src/config/env-registry.ts +3 -1
- package/src/config/env.ts +6 -2
- package/src/config/feature-flag-registry.json +8 -8
- package/src/config/llm-resolver.ts +4 -4
- package/src/config/loader.ts +42 -14
- package/src/config/prune-seeded-callsite-defaults.ts +30 -10
- package/src/config/schema-utils.ts +9 -3
- package/src/config/schemas/__tests__/stt.test.ts +27 -0
- package/src/config/schemas/llm.ts +48 -4
- package/src/config/schemas/memory-v3.ts +7 -7
- package/src/config/schemas/stt.ts +20 -1
- package/src/config/seed-inference-profiles.ts +84 -160
- package/src/config/skills.ts +195 -45
- package/src/config/sync-gated-profiles.ts +21 -7
- package/src/contacts/__tests__/guardian-contact-reader.test.ts +3 -1
- package/src/contacts/contact-store.ts +106 -37
- package/src/contacts/guardian-contact-reader.ts +3 -1
- package/src/contacts/guardian-delivery-reader.ts +15 -5
- package/src/context/compactor.ts +96 -32
- package/src/context/estimator-calibration.ts +9 -3
- package/src/context/image-dimensions.ts +75 -25
- package/src/context/post-turn-tool-result-truncation.ts +158 -23
- package/src/context/strip-injections.ts +15 -5
- package/src/context/token-estimator.ts +3 -1
- package/src/context/tool-result-spool.ts +3 -1
- package/src/context/tool-result-truncation.ts +6 -2
- package/src/conversations/job-handlers/summarization.ts +18 -6
- package/src/credential-execution/ces-runtime.ts +10 -10
- package/src/credential-execution/process-manager.test.ts +3 -1
- package/src/credential-execution/process-manager.ts +6 -2
- package/src/credential-health/credential-health-service.ts +30 -10
- package/src/daemon/__tests__/embedding-reconcile.test.ts +3 -1
- package/src/daemon/app-source-watcher.ts +21 -7
- package/src/daemon/assistant-attachments.ts +44 -15
- package/src/daemon/classifier.ts +9 -3
- package/src/daemon/connection-policy.ts +6 -2
- package/src/daemon/conversation-agent-loop.ts +10 -1
- package/src/daemon/conversation-error.ts +12 -4
- package/src/daemon/conversation-evictor.ts +12 -4
- package/src/daemon/conversation-media-retry.ts +18 -6
- package/src/daemon/conversation-messaging.ts +58 -15
- package/src/daemon/conversation-notices.ts +6 -2
- package/src/daemon/conversation-plugin-scope.ts +3 -1
- package/src/daemon/conversation-process.ts +77 -10
- package/src/daemon/conversation-queue-manager.ts +35 -8
- package/src/daemon/conversation-registry.ts +9 -3
- package/src/daemon/conversation-resting-trust.ts +64 -0
- package/src/daemon/conversation-runtime-assembly.ts +6 -2
- package/src/daemon/conversation-slash.ts +50 -17
- package/src/daemon/conversation-store.ts +16 -5
- package/src/daemon/conversation-surfaces.ts +2 -7
- package/src/daemon/conversation-usage.ts +109 -15
- package/src/daemon/conversation-workspace.ts +5 -2
- package/src/daemon/conversation.ts +1 -1
- package/src/daemon/daemon-control.ts +42 -14
- package/src/daemon/date-context.ts +15 -5
- package/src/daemon/dictation-profile-store.ts +26 -10
- package/src/daemon/dictation-text-processing.ts +9 -3
- package/src/daemon/disk-pressure-guard.ts +12 -4
- package/src/daemon/disk-pressure-policy.ts +15 -5
- package/src/daemon/first-greeting.ts +9 -3
- package/src/daemon/handlers/__tests__/config-channels.test.ts +9 -3
- package/src/daemon/handlers/config-channels.ts +3 -1
- package/src/daemon/handlers/conversations.ts +83 -11
- package/src/daemon/handlers/identity.ts +6 -2
- package/src/daemon/handlers/skills.ts +138 -48
- package/src/daemon/host-app-control-proxy.ts +3 -1
- package/src/daemon/host-bash-proxy.ts +11 -4
- package/src/daemon/host-cu-proxy.ts +20 -7
- package/src/daemon/host-transfer-proxy.ts +24 -8
- package/src/daemon/identity-helpers.ts +3 -1
- package/src/daemon/install-symlink.ts +18 -6
- package/src/daemon/interrupted-turn-reconciler.ts +7 -33
- package/src/daemon/lifecycle.ts +20 -5
- package/src/daemon/message-types/web-activity.ts +1 -0
- package/src/daemon/now-scratchpad.ts +3 -1
- package/src/daemon/orphan-reaper.test.ts +17 -6
- package/src/daemon/orphan-reaper.ts +24 -8
- package/src/daemon/parse-actual-tokens-from-error.ts +27 -9
- package/src/daemon/persist-media-references.ts +6 -2
- package/src/daemon/pkb-context-tracker.test.ts +37 -9
- package/src/daemon/pkb-context-tracker.ts +12 -4
- package/src/daemon/pointer-conversation-trust.ts +3 -1
- package/src/daemon/process-message.ts +3 -1
- package/src/daemon/profiler-run-store.ts +21 -7
- package/src/daemon/shutdown-handlers.ts +20 -7
- package/src/daemon/sqlite-corruption-watchdog.ts +6 -2
- package/src/daemon/summarize-boundary.ts +3 -1
- package/src/daemon/turn-latency-tracker.ts +33 -11
- package/src/daemon/verification-session-intent.ts +3 -1
- package/src/daemon/wake-conversation-ops.ts +3 -1
- package/src/daemon/web-search-history.ts +12 -4
- package/src/documents/document-store.ts +15 -5
- package/src/followups/followup-store.ts +9 -3
- package/src/heartbeat/heartbeat-run-store.ts +3 -1
- package/src/home/conversation-starter-checkpoints.ts +3 -1
- package/src/home/feed-source-enrichment.test.ts +7 -0
- package/src/home/feed-source-enrichment.ts +11 -2
- package/src/home/feed-writer.ts +27 -9
- package/src/home/home-greeting-cache.ts +3 -1
- package/src/home/job-handlers/conversation-starters.ts +15 -5
- package/src/home/post-connect-feed.ts +3 -1
- package/src/home/progress-formula.ts +6 -2
- package/src/home/relationship-state-writer.ts +78 -25
- package/src/ipc/__tests__/exit-helper.test.ts +12 -8
- package/src/ipc/__tests__/streaming-client.test.ts +54 -16
- package/src/ipc/__tests__/streaming-framing.test.ts +31 -8
- package/src/ipc/__tests__/ui-request-route.test.ts +3 -1
- package/src/ipc/__tests__/watcher-ipc.test.ts +6 -2
- package/src/ipc/assistant-server.ts +21 -13
- package/src/ipc/cli-client.ts +38 -13
- package/src/ipc/gateway-client.ts +6 -2
- package/src/ipc/gateway-flag-listener.ts +9 -3
- package/src/ipc/routes/__tests__/contacts-mirror-apply-atomicity.test.ts +7 -4
- package/src/ipc/routes/__tests__/contacts-mirror-apply.test.ts +22 -10
- package/src/ipc/routes/__tests__/contacts-mirror-ipc-routes.test.ts +26 -13
- package/src/ipc/routes/__tests__/contacts-mirror-merge-contact.test.ts +35 -9
- package/src/ipc/routes/__tests__/contacts-mirror-upsert-full.test.ts +37 -20
- package/src/ipc/routes/__tests__/guardian-label-ipc-routes.test.ts +4 -6
- package/src/ipc/routes/contacts-info-ipc-routes.ts +9 -6
- package/src/ipc/routes/trust-rules.test.ts +6 -2
- package/src/ipc/socket-cleanup.ts +6 -2
- package/src/live-voice/__tests__/live-activity-reporter.test.ts +194 -0
- package/src/live-voice/__tests__/live-voice-archive.test.ts +24 -8
- package/src/live-voice/__tests__/live-voice-stt.test.ts +330 -3
- package/src/live-voice/__tests__/live-voice-vad.test.ts +11 -1
- package/src/live-voice/__tests__/protocol.test.ts +45 -15
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +6 -2
- package/src/live-voice/live-activity-reporter.ts +180 -0
- package/src/live-voice/live-voice-archive.ts +18 -6
- package/src/live-voice/live-voice-metrics.ts +24 -8
- package/src/live-voice/live-voice-session.ts +154 -15
- package/src/live-voice/protocol.ts +6 -2
- package/src/mcp/client.ts +9 -3
- package/src/mcp/manager.ts +3 -1
- package/src/mcp/mcp-auth-orchestrator.ts +3 -1
- package/src/mcp/mcp-header-store.ts +3 -1
- package/src/mcp/mcp-oauth-provider.ts +12 -4
- package/src/media/gemini-image-service.ts +15 -5
- package/src/media/openai-image-service.ts +9 -3
- package/src/messaging/draft-store.ts +3 -1
- package/src/messaging/providers/__tests__/transport-dispatch.test.ts +3 -1
- package/src/messaging/providers/a2a/__tests__/deliver.test.ts +3 -1
- package/src/messaging/providers/a2a/deliver.ts +3 -1
- package/src/messaging/providers/callback-routing.ts +3 -1
- package/src/messaging/providers/gmail/adapter.ts +36 -12
- package/src/messaging/providers/gmail/client.ts +71 -24
- package/src/messaging/providers/gmail/mime-builder.ts +6 -2
- package/src/messaging/providers/gmail/people-client.ts +3 -1
- package/src/messaging/providers/outlook/client.ts +30 -10
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +15 -6
- package/src/messaging/providers/slack/adapter.ts +51 -17
- package/src/messaging/providers/slack/api.ts +39 -13
- package/src/messaging/providers/slack/client.ts +9 -3
- package/src/messaging/providers/slack/deep-link.ts +15 -5
- package/src/messaging/providers/slack/message-metadata.ts +21 -7
- package/src/messaging/providers/slack/render-transcript.ts +54 -18
- package/src/messaging/providers/slack/render.ts +50 -17
- package/src/messaging/providers/slack/transport.ts +9 -3
- package/src/messaging/providers/telegram-bot/adapter.ts +6 -2
- package/src/messaging/providers/telegram-bot/api.ts +3 -1
- package/src/messaging/providers/telegram-bot/render.ts +33 -11
- package/src/messaging/providers/telegram-bot/send.ts +3 -1
- package/src/messaging/providers/whatsapp/adapter.ts +3 -1
- package/src/messaging/providers/whatsapp/api.ts +9 -3
- package/src/messaging/registry.ts +3 -1
- package/src/messaging/style-analyzer.ts +3 -1
- package/src/monitoring/__tests__/db-integrity-sample.test.ts +96 -0
- package/src/monitoring/__tests__/sample-ring-buffer.test.ts +12 -4
- package/src/monitoring/db-integrity-check.ts +163 -0
- package/src/monitoring/db-integrity-sample.ts +171 -0
- package/src/monitoring/process-memory.ts +2 -1
- package/src/monitoring/sample-ring-buffer.ts +15 -5
- package/src/monitoring/worker.ts +12 -0
- package/src/notifications/adapters/platform.ts +6 -7
- package/src/notifications/adapters/shared.ts +9 -3
- package/src/notifications/conversation-candidates.ts +21 -7
- package/src/notifications/conversation-seed-composer.ts +21 -7
- package/src/notifications/copy-composer.ts +12 -4
- package/src/notifications/decisions-store.ts +6 -2
- package/src/notifications/deferred-emit.ts +18 -6
- package/src/notifications/deliveries-store.ts +3 -1
- package/src/notifications/destination-resolver.ts +12 -6
- package/src/notifications/deterministic-checks.ts +6 -2
- package/src/notifications/edit-notification.ts +3 -1
- package/src/notifications/events-store.ts +3 -1
- package/src/notifications/guardian-question-mode.ts +15 -5
- package/src/notifications/home-feed-side-effect.ts +12 -4
- package/src/notifications/notification-utils.ts +8 -3
- package/src/notifications/preference-extractor.ts +5 -2
- package/src/notifications/preference-summary.ts +3 -1
- package/src/oauth/__tests__/oauth-connect-state.test.ts +4 -1
- package/src/oauth/byo-connection.test.ts +15 -5
- package/src/oauth/byo-connection.ts +6 -2
- package/src/oauth/connect-orchestrator.ts +3 -1
- package/src/oauth/connection-resolver.test.ts +6 -2
- package/src/oauth/connection-resolver.ts +12 -4
- package/src/oauth/identity-verifier.ts +30 -10
- package/src/oauth/manual-token-connection.ts +12 -4
- package/src/oauth/oauth-connect-state.ts +15 -3
- package/src/oauth/oauth-store.ts +132 -52
- package/src/oauth/provider-serializer.ts +9 -3
- package/src/oauth/provider-visibility.ts +3 -1
- package/src/oauth/scope-utils.ts +3 -1
- package/src/onboarding/checkin-event.ts +33 -11
- package/src/outbound-proxy/certs.ts +6 -2
- package/src/outbound-proxy/connect-tunnel.ts +15 -5
- package/src/outbound-proxy/host-pattern-match.ts +3 -1
- package/src/outbound-proxy/http-forwarder.ts +9 -3
- package/src/outbound-proxy/logging.ts +6 -2
- package/src/outbound-proxy/mitm-handler.ts +9 -3
- package/src/outbound-proxy/policy.ts +12 -4
- package/src/outbound-proxy/router.ts +3 -1
- package/src/outbound-proxy/server.ts +15 -5
- package/src/permissions/approval-provenance.test.ts +13 -4
- package/src/permissions/question-prompter.test.ts +12 -4
- package/src/permissions/question-prompter.ts +6 -2
- package/src/persistence/__tests__/raw-query-telemetry.test.ts +3 -1
- package/src/persistence/a2a-invite-store.ts +1 -4
- package/src/persistence/attachments-store.ts +60 -20
- package/src/persistence/bookmark-crud.ts +6 -2
- package/src/persistence/compaction-ledger-store.ts +6 -2
- package/src/persistence/compaction-log-store-clickhouse.ts +29 -10
- package/src/persistence/conversation-attention-store.ts +3 -1
- package/src/persistence/conversation-crud.ts +241 -93
- package/src/persistence/conversation-directories.ts +9 -3
- package/src/persistence/conversation-group-migration.ts +17 -1
- package/src/persistence/conversation-key-store.ts +3 -1
- package/src/persistence/conversation-queries.ts +146 -47
- package/src/persistence/conversation-search-lexical.ts +3 -1
- package/src/persistence/db-async-query.ts +9 -3
- package/src/persistence/delivery-channels.ts +3 -1
- package/src/persistence/embeddings/__tests__/embedding-identity.test.ts +9 -3
- package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +755 -0
- package/src/persistence/embeddings/__tests__/plugin-facade-index.test.ts +73 -0
- package/src/persistence/embeddings/__tests__/plugin-index.test.ts +323 -0
- package/src/persistence/embeddings/embed.ts +21 -7
- package/src/persistence/embeddings/embedding-backend.test.ts +12 -4
- package/src/persistence/embeddings/embedding-backend.ts +181 -24
- package/src/persistence/embeddings/embedding-billing-breaker.ts +21 -7
- package/src/persistence/embeddings/embedding-cache.ts +6 -2
- package/src/persistence/embeddings/embedding-gemini.ts +6 -2
- package/src/persistence/embeddings/embedding-identity.ts +12 -4
- package/src/persistence/embeddings/embedding-local.ts +719 -142
- package/src/persistence/embeddings/embedding-ollama.ts +6 -2
- package/src/persistence/embeddings/embedding-openai.ts +3 -1
- package/src/persistence/embeddings/embedding-runtime-manager.ts +25 -9
- package/src/persistence/embeddings/embedding-types.ts +22 -1
- package/src/persistence/embeddings/messages-lexical-index.ts +12 -4
- package/src/persistence/embeddings/plugin-facade.ts +102 -3
- package/src/persistence/embeddings/plugin-index.ts +341 -0
- package/src/persistence/embeddings/qdrant-circuit-breaker.ts +6 -2
- package/src/persistence/embeddings/qdrant-client.test.ts +10 -4
- package/src/persistence/embeddings/qdrant-client.ts +173 -9
- package/src/persistence/embeddings/qdrant-manager.ts +21 -7
- package/src/persistence/external-conversation-store.ts +6 -2
- package/src/persistence/group-crud.test.ts +59 -0
- package/src/persistence/group-crud.ts +36 -11
- package/src/persistence/job-handlers/cleanup.ts +30 -12
- package/src/persistence/job-utils.ts +46 -26
- package/src/persistence/llm-request-log-sink-clickhouse.ts +12 -4
- package/src/persistence/llm-request-log-source-clickhouse.ts +18 -6
- package/src/persistence/llm-request-log-store.ts +26 -9
- package/src/persistence/migrations/001-job-deferrals.ts +3 -1
- package/src/persistence/migrations/002-tool-invocations-fk.ts +6 -2
- package/src/persistence/migrations/003-memory-fts-backfill.ts +3 -1
- package/src/persistence/migrations/004-entity-relation-dedup.ts +3 -1
- package/src/persistence/migrations/005-fingerprint-scope-unique.ts +3 -1
- package/src/persistence/migrations/006-scope-salted-fingerprints.ts +6 -2
- package/src/persistence/migrations/007-assistant-id-to-self.ts +3 -1
- package/src/persistence/migrations/008-remove-assistant-id-columns.ts +6 -2
- package/src/persistence/migrations/009-llm-usage-events-drop-assistant-id.ts +6 -2
- package/src/persistence/migrations/011-call-sessions-provider-sid-dedup.ts +9 -3
- package/src/persistence/migrations/014-backfill-inbox-thread-state.ts +3 -1
- package/src/persistence/migrations/015-drop-active-search-index.ts +3 -1
- package/src/persistence/migrations/019-notification-tables-schema-migration.ts +3 -1
- package/src/persistence/migrations/020-rename-macos-ios-channel-to-vellum.ts +3 -1
- package/src/persistence/migrations/024-embedding-vector-blob.ts +6 -2
- package/src/persistence/migrations/025-messages-fts-backfill.ts +3 -1
- package/src/persistence/migrations/026a-embeddings-nullable-vector-json.ts +9 -3
- package/src/persistence/migrations/036-normalize-phone-identities.ts +36 -12
- package/src/persistence/migrations/120-fk-cascade-rebuilds.ts +12 -4
- package/src/persistence/migrations/126-backfill-guardian-principal-id.ts +6 -2
- package/src/persistence/migrations/127-guardian-principal-id-not-null.ts +15 -5
- package/src/persistence/migrations/134-contacts-notes-column.ts +10 -4
- package/src/persistence/migrations/135-backfill-contact-interaction-stats.ts +6 -2
- package/src/persistence/migrations/136-drop-assistant-id-columns.ts +12 -4
- package/src/persistence/migrations/140-backfill-usage-cache-accounting.ts +24 -8
- package/src/persistence/migrations/141-rename-verification-table.ts +12 -4
- package/src/persistence/migrations/142-rename-verification-session-id-column.ts +6 -2
- package/src/persistence/migrations/147-migrate-reminders-to-schedules.ts +6 -2
- package/src/persistence/migrations/150-oauth-apps-client-secret-path.ts +12 -4
- package/src/persistence/migrations/157-invite-contact-id.ts +3 -1
- package/src/persistence/migrations/162-guardian-timestamps-epoch-ms.ts +21 -8
- package/src/persistence/migrations/174-rename-thread-starters-table.ts +12 -4
- package/src/persistence/migrations/180-backfill-inline-attachments-to-disk.ts +3 -1
- package/src/persistence/migrations/196-strip-integration-prefix-from-provider-keys.ts +6 -2
- package/src/persistence/migrations/206-scrub-corrupted-image-attachments.ts +3 -1
- package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +3 -1
- package/src/persistence/migrations/220-normalize-user-file-by-principal.ts +24 -8
- package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +3 -1
- package/src/persistence/migrations/231-repair-memory-graph-event-dates.ts +18 -6
- package/src/persistence/migrations/241-activation-state-fk-cascade.ts +6 -2
- package/src/persistence/migrations/246-backfill-provider-connection-label.ts +3 -1
- package/src/persistence/migrations/247-external-conversation-binding-thread-id.ts +3 -1
- package/src/persistence/migrations/249-normalize-slack-external-content.ts +30 -10
- package/src/persistence/migrations/256-memory-v2-injection-events.ts +24 -8
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +3 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.ts +6 -2
- package/src/persistence/migrations/297-move-llm-request-logs-to-logs-db.ts +3 -1
- package/src/persistence/migrations/302-create-compaction-events.ts +3 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +3 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.ts +6 -2
- package/src/persistence/migrations/311-create-subagents-table.ts +5 -3
- package/src/persistence/migrations/318-drop-contact-channel-telemetry.ts +3 -1
- package/src/persistence/migrations/319-remove-legacy-managed-connections.ts +3 -1
- package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.ts +3 -1
- package/src/persistence/migrations/340-sweep-orphaned-graph-node-vectors.test.ts +9 -0
- package/src/persistence/migrations/342-add-conversation-parent-id.test.ts +1 -3
- package/src/persistence/migrations/352-drop-schedule-skill-script-handoff.ts +3 -1
- package/src/persistence/migrations/355-add-schedule-group-id.ts +22 -0
- package/src/persistence/migrations/356-add-subagent-parent-tool-use-id.test.ts +87 -0
- package/src/persistence/migrations/356-add-subagent-parent-tool-use-id.ts +31 -0
- package/src/persistence/migrations/357-move-memory-segments-to-memory-db.ts +95 -0
- package/src/persistence/migrations/358-move-memory-embeddings-to-memory-db.ts +83 -0
- package/src/persistence/migrations/359-move-memory-summaries-to-memory-db.ts +86 -0
- package/src/persistence/migrations/__tests__/350-conversations-total-input-tokens-nullable.test.ts +3 -1
- package/src/persistence/migrations/run-migrations.ts +12 -4
- package/src/persistence/migrations/validate-migration-state.ts +12 -4
- package/src/persistence/raw-query.ts +9 -3
- package/src/persistence/schema/conversation-groups.ts +2 -0
- package/src/persistence/schema/infrastructure.ts +1 -0
- package/src/persistence/slow-query-log.ts +27 -9
- package/src/persistence/slow-sync-log.ts +3 -1
- package/src/persistence/steps.ts +60 -0
- package/src/persistence/subagent-store.ts +187 -8
- package/src/persistence/usage-buckets.ts +9 -3
- package/src/persistence/usage-grouped-buckets.ts +6 -2
- package/src/platform/feature-gate.ts +3 -1
- package/src/platform/sync-identity.ts +9 -3
- package/src/playbooks/playbook-compiler.ts +3 -1
- package/src/plugin-api/index.ts +34 -1
- package/src/plugin-api/model-profiles.test.ts +30 -0
- package/src/plugin-api/model-profiles.ts +11 -4
- package/src/plugin-api/vision-support.test.ts +65 -2
- package/src/plugin-api/vision-support.ts +15 -3
- package/src/plugins/defaults/channel/injectors.ts +12 -4
- package/src/plugins/defaults/compaction/window-manager.ts +30 -10
- package/src/plugins/defaults/documents/injectors.ts +18 -6
- package/src/plugins/defaults/empty-response/hooks/post-model-call.ts +9 -3
- package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +26 -8
- package/src/plugins/defaults/image-fallback/hooks/post-compact.ts +3 -1
- package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +6 -2
- package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +3 -1
- package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +6 -2
- package/src/plugins/defaults/image-fallback/src/image-persist.ts +3 -1
- package/src/plugins/defaults/image-fallback/src/vision-caption.ts +6 -2
- package/src/plugins/defaults/index.ts +0 -28
- package/src/plugins/defaults/injection-presence.ts +3 -1
- package/src/plugins/defaults/main.ts +31 -0
- package/src/plugins/defaults/max-tokens-continue/hooks/post-model-call.ts +62 -6
- package/src/plugins/defaults/memory/AGENTS.md +10 -7
- package/src/plugins/defaults/memory/__tests__/capability-seed-embed-gate.test.ts +4 -4
- package/src/plugins/defaults/memory/__tests__/compaction-log-store-clickhouse.test.ts +6 -2
- package/src/plugins/defaults/memory/__tests__/conversation-memory-purge.test.ts +1 -0
- package/src/plugins/defaults/memory/__tests__/conversation-queries.test.ts +224 -0
- package/src/plugins/defaults/memory/__tests__/conversation-row-batch-delete.test.ts +18 -34
- package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +3 -1
- package/src/plugins/defaults/memory/__tests__/db-memory-attach.test.ts +3 -0
- package/src/plugins/defaults/memory/__tests__/embedding-cache.test.ts +10 -7
- package/src/plugins/defaults/memory/__tests__/indexer-tier-dispatch.test.ts +62 -2
- package/src/plugins/defaults/memory/__tests__/relocated-memory-test-rows.ts +16 -0
- package/src/plugins/defaults/memory/__tests__/table-relocation.test.ts +183 -0
- package/src/plugins/defaults/memory/__tests__/worker-control.test.ts +6 -2
- package/src/plugins/defaults/memory/anisotropy.test.ts +18 -6
- package/src/plugins/defaults/memory/anisotropy.ts +45 -15
- package/src/plugins/defaults/memory/context-search/agent-protocol.ts +3 -1
- package/src/plugins/defaults/memory/context-search/agent-runner.ts +6 -2
- package/src/plugins/defaults/memory/context-search/limits.ts +6 -2
- package/src/plugins/defaults/memory/context-search/search.ts +30 -10
- package/src/plugins/defaults/memory/context-search/sources/memory.ts +9 -3
- package/src/plugins/defaults/memory/context-search/sources/workspace.ts +33 -11
- package/src/plugins/defaults/memory/conversation-memory-purge.ts +5 -0
- package/src/plugins/defaults/memory/find-most-recent-retrospective-for.ts +3 -1
- package/src/plugins/defaults/memory/frontmatter.ts +3 -1
- package/src/plugins/defaults/memory/graph/__tests__/conversation-graph-memory-recent-summaries.test.ts +142 -0
- package/src/plugins/defaults/memory/graph/conversation-graph-memory.ts +117 -45
- package/src/plugins/defaults/memory/graph/graph-memory-state-store.ts +9 -3
- package/src/plugins/defaults/memory/graph/graph-search.ts +3 -1
- package/src/plugins/defaults/memory/graph/store.ts +113 -45
- package/src/plugins/defaults/memory/graph/types.ts +20 -7
- package/src/plugins/defaults/memory/graph-topology/__tests__/build-memory-graph.test.ts +1 -0
- package/src/plugins/defaults/memory/indexer.ts +40 -3
- package/src/plugins/defaults/memory/jobs/__tests__/embed-concept-page.test.ts +2 -2
- package/src/plugins/defaults/memory/jobs/embed-concept-page.ts +20 -21
- package/src/plugins/defaults/memory/memory-db.ts +3 -1
- package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +18 -6
- package/src/plugins/defaults/memory/memory-retrospective-state.ts +30 -10
- package/src/plugins/defaults/memory/memory-retrospective-trigger-check.ts +18 -6
- package/src/plugins/defaults/memory/prompt-override.ts +6 -2
- package/src/plugins/defaults/memory/segmenter.ts +6 -2
- package/src/plugins/defaults/memory/src/__tests__/memory-ingest-routes.test.ts +176 -0
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +3 -1
- package/src/plugins/defaults/memory/src/memory-ingest-routes.ts +125 -0
- package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -2
- package/src/plugins/defaults/memory/substrate/__tests__/consolidation-lock.test.ts +136 -0
- package/src/plugins/defaults/memory/substrate/__tests__/ingest.test.ts +440 -0
- package/src/plugins/defaults/memory/substrate/__tests__/page-index.test.ts +129 -2
- package/src/plugins/defaults/memory/substrate/__tests__/page-store.test.ts +31 -0
- package/src/plugins/defaults/memory/substrate/consolidation-job.ts +10 -218
- package/src/plugins/defaults/memory/substrate/consolidation-lock.ts +250 -0
- package/src/plugins/defaults/memory/substrate/ingest.ts +360 -0
- package/src/plugins/defaults/memory/substrate/page-index.ts +110 -1
- package/src/plugins/defaults/memory/substrate/page-store.ts +20 -24
- package/src/plugins/defaults/memory/substrate/types.ts +12 -0
- package/src/plugins/defaults/memory/task-memory-cleanup.ts +18 -6
- package/src/plugins/defaults/memory/v1/graph/bootstrap.ts +27 -10
- package/src/plugins/defaults/memory/v1/graph/consolidation.ts +57 -21
- package/src/plugins/defaults/memory/v1/graph/decay.ts +6 -2
- package/src/plugins/defaults/memory/v1/graph/extraction-job.ts +3 -1
- package/src/plugins/defaults/memory/v1/graph/injection.ts +24 -8
- package/src/plugins/defaults/memory/v1/graph/narrative.ts +3 -1
- package/src/plugins/defaults/memory/v1/graph/pattern-scan.ts +3 -1
- package/src/plugins/defaults/memory/v1/graph/scoring.ts +18 -6
- package/src/plugins/defaults/memory/v1/graph/serendipity.ts +9 -3
- package/src/plugins/defaults/memory/v1/graph/triggers.ts +30 -10
- package/src/plugins/defaults/memory/v1/job-handlers/embedding.ts +10 -3
- package/src/plugins/defaults/memory/v1/job-handlers/index-maintenance.ts +12 -12
- package/src/plugins/defaults/memory/v1/jobs/embed-pkb-file.ts +9 -3
- package/src/plugins/defaults/memory/v1/pkb/autoinject.ts +3 -1
- package/src/plugins/defaults/memory/v1/pkb/context.ts +12 -4
- package/src/plugins/defaults/memory/v1/pkb/pkb-reconcile.test.ts +3 -1
- package/src/plugins/defaults/memory/v1/pkb/pkb-reconcile.ts +3 -1
- package/src/plugins/defaults/memory/v1/pkb/pkb-search.test.ts +6 -2
- package/src/plugins/defaults/memory/v1/pkb/pkb-search.ts +15 -5
- package/src/plugins/defaults/memory/v1/pkb-schedule.ts +3 -1
- package/src/plugins/defaults/memory/v1/semantic-search.ts +30 -15
- package/src/plugins/defaults/memory/v2/harness/metrics.ts +9 -3
- package/src/plugins/defaults/memory/v2/harness/runner.ts +9 -3
- package/src/plugins/defaults/memory/v2/injection-events.ts +21 -7
- package/src/plugins/defaults/memory/v3/__tests__/card.test.ts +2 -2
- package/src/plugins/defaults/memory/v3/__tests__/carry-integration.test.ts +1 -0
- package/src/plugins/defaults/memory/v3/__tests__/dense.test.ts +9 -3
- package/src/plugins/defaults/memory/v3/__tests__/edge.test.ts +9 -1
- package/src/plugins/defaults/memory/v3/__tests__/fresh-set.test.ts +39 -5
- package/src/plugins/defaults/memory/v3/__tests__/injection.test.ts +6 -2
- package/src/plugins/defaults/memory/v3/__tests__/live-integration.test.ts +1 -0
- package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -0
- package/src/plugins/defaults/memory/v3/__tests__/section-dense-store.test.ts +13 -3
- package/src/plugins/defaults/memory/v3/__tests__/shadow-integration.test.ts +1 -0
- package/src/plugins/defaults/memory/v3/__tests__/shadow-plugin.test.ts +4 -0
- package/src/plugins/defaults/memory/v3/card.ts +1 -1
- package/src/plugins/defaults/memory/v3/core-set.ts +6 -2
- package/src/plugins/defaults/memory/v3/dense.ts +15 -5
- package/src/plugins/defaults/memory/v3/entity-lane.ts +9 -3
- package/src/plugins/defaults/memory/v3/ever-injected-store.ts +39 -13
- package/src/plugins/defaults/memory/v3/fresh-set.ts +27 -15
- package/src/plugins/defaults/memory/v3/hot-set.ts +6 -2
- package/src/plugins/defaults/memory/v3/injector.ts +51 -17
- package/src/plugins/defaults/memory/v3/learned-edges.ts +21 -7
- package/src/plugins/defaults/memory/v3/llm-retry.ts +3 -1
- package/src/plugins/defaults/memory/v3/orchestrate.ts +15 -5
- package/src/plugins/defaults/memory/v3/pool-select.test.ts +3 -1
- package/src/plugins/defaults/memory/v3/pool-select.ts +15 -5
- package/src/plugins/defaults/memory/v3/render-injection.ts +6 -2
- package/src/plugins/defaults/memory/v3/section-dense-store.ts +51 -25
- package/src/plugins/defaults/memory/v3/section-needle.ts +27 -9
- package/src/plugins/defaults/memory/v3/sections.ts +6 -2
- package/src/plugins/defaults/memory/v3/shadow-plugin.ts +24 -17
- package/src/plugins/defaults/memory/v3-eval/__tests__/eval-tally.test.ts +9 -3
- package/src/plugins/defaults/memory/v3-eval/eval-packets.ts +6 -0
- package/src/plugins/defaults/memory/v3-eval/eval-tally.ts +22 -9
- package/src/plugins/defaults/memory/worker.ts +54 -10
- package/src/plugins/defaults/session/injectors.ts +15 -5
- package/src/plugins/defaults/surface-completion-nudge/hooks/post-model-call.ts +49 -17
- package/src/plugins/defaults/task-progress-nudge/hooks/post-tool-use.ts +33 -11
- package/src/plugins/defaults/title-generate/hooks/stop.ts +15 -5
- package/src/plugins/defaults/title-generate/hooks/user-prompt-submit.ts +6 -2
- package/src/plugins/defaults/tool-error/hooks/post-tool-use.ts +21 -7
- package/src/plugins/defaults/tool-result-truncate/terminal.ts +3 -1
- package/src/plugins/defaults/turn-context/injectors.ts +3 -1
- package/src/plugins/defaults/workspace/injectors.ts +52 -18
- package/src/plugins/external-plugin-loader.ts +21 -7
- package/src/plugins/injector-registry.ts +6 -2
- package/src/prompts/__tests__/system-prompt.test.ts +5 -2
- package/src/prompts/bootstrap-cleanup.ts +3 -1
- package/src/prompts/normalize-onboarding.ts +9 -3
- package/src/prompts/persona-resolver.ts +33 -11
- package/src/prompts/sections.ts +42 -14
- package/src/prompts/system-prompt.ts +30 -10
- package/src/prompts/template-detection.ts +6 -2
- package/src/prompts/templates/system-sections.ts +55 -20
- package/src/prompts/user-reference.ts +6 -2
- package/src/providers/__tests__/connection-model-compat.test.ts +6 -1
- package/src/providers/__tests__/inference.test.ts +24 -8
- package/src/providers/__tests__/preflight-resolved-config.test.ts +25 -0
- package/src/providers/__tests__/request-diagnostics.test.ts +131 -0
- package/src/providers/__tests__/retry-callsite.test.ts +30 -0
- package/src/providers/__tests__/search-provider-catalog.test.ts +4 -1
- package/src/providers/__tests__/vellum-mismatch-routing.test.ts +108 -1
- package/src/providers/anthropic/client.ts +119 -41
- package/src/providers/call-site-routing.ts +7 -0
- package/src/providers/connection-model-compat.ts +12 -4
- package/src/providers/connection-resolution.ts +61 -1
- package/src/providers/fetch-provider-catalog.ts +3 -2
- package/src/providers/gemini/client.ts +86 -12
- package/src/providers/inference/codex-token-refresh.ts +6 -2
- package/src/providers/inference/connection-availability.ts +13 -1
- package/src/providers/inference/connections.ts +78 -15
- package/src/providers/media-resolve.ts +21 -7
- package/src/providers/model-catalog.ts +104 -63
- package/src/providers/model-intents.ts +2 -2
- package/src/providers/ollama/client.ts +3 -1
- package/src/providers/openai/__tests__/chat-completions-input-audio.test.ts +3 -1
- package/src/providers/openai/__tests__/chat-completions-provider-endpoint.test.ts +3 -1
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +3 -1
- package/src/providers/openai/api-error-normalization.ts +75 -25
- package/src/providers/openai/chat-completions-provider.ts +49 -16
- package/src/providers/openai/codex-models.ts +9 -5
- package/src/providers/openai/coerce-object-args.ts +12 -4
- package/src/providers/openai/responses-provider.ts +31 -11
- package/src/providers/openrouter/client.ts +9 -3
- package/src/providers/platform-proxy/context.ts +9 -3
- package/src/providers/provider-catalog-visibility.ts +4 -4
- package/src/providers/provider-send-message.ts +6 -0
- package/src/providers/ratelimit.ts +6 -2
- package/src/providers/request-diagnostics.ts +225 -0
- package/src/providers/retry.ts +68 -17
- package/src/providers/routing-identity.ts +2 -1
- package/src/providers/search-provider-catalog.ts +18 -0
- package/src/providers/speech-to-text/__tests__/deepgram.test.ts +27 -0
- package/src/providers/speech-to-text/__tests__/provider-catalog.test.ts +25 -0
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +195 -1
- package/src/providers/speech-to-text/deepgram-realtime.test.ts +18 -6
- package/src/providers/speech-to-text/deepgram-realtime.ts +9 -1
- package/src/providers/speech-to-text/deepgram.ts +117 -1
- package/src/providers/speech-to-text/google-gemini-live-stream.test.ts +116 -132
- package/src/providers/speech-to-text/google-gemini-live-stream.ts +87 -31
- package/src/providers/speech-to-text/provider-catalog.ts +17 -0
- package/src/providers/speech-to-text/resolve.ts +64 -5
- package/src/providers/speech-to-text/xai-realtime.test.ts +18 -6
- package/src/providers/speech-to-text/xai-realtime.ts +60 -20
- package/src/providers/speech-to-text/xai.test.ts +43 -0
- package/src/providers/speech-to-text/xai.ts +48 -7
- package/src/providers/stop-reasons.ts +3 -1
- package/src/providers/thinking-config.ts +7 -1
- package/src/providers/tool-progress-events.ts +15 -5
- package/src/providers/usage-tracking.ts +6 -2
- package/src/routes/route-host-client.ts +3 -2
- package/src/routes/route-host-protocol.ts +1 -1
- package/src/routes/worker.ts +3 -2
- package/src/runtime/__tests__/agent-wake.test.ts +3 -1
- package/src/runtime/__tests__/interactive-ui.test.ts +3 -1
- package/src/runtime/__tests__/local-principal-trust.test.ts +10 -8
- package/src/runtime/anchored-guardian.test.ts +45 -8
- package/src/runtime/anchored-guardian.ts +4 -1
- package/src/runtime/approval-conversation-turn.ts +17 -7
- package/src/runtime/approval-message-composer.ts +6 -2
- package/src/runtime/auth/__tests__/guard-tests.test.ts +24 -8
- package/src/runtime/auth/middleware.ts +0 -2
- package/src/runtime/auth/owner-caller.ts +95 -0
- package/src/runtime/auth/require-bound-guardian.ts +7 -22
- package/src/runtime/auth/same-actor.ts +12 -4
- package/src/runtime/background-job-runner.ts +12 -4
- package/src/runtime/channel-invite-transports/slack.ts +6 -2
- package/src/runtime/channel-invite-transports/telegram.ts +6 -2
- package/src/runtime/channel-verification-service.ts +9 -3
- package/src/runtime/decision-token.ts +3 -1
- package/src/runtime/guardian-action-message-composer.ts +6 -2
- package/src/runtime/guardian-vellum-migration.ts +18 -6
- package/src/runtime/http-router.ts +18 -6
- package/src/runtime/invite-service.ts +6 -2
- package/src/runtime/local-principal-trust.ts +6 -2
- package/src/runtime/member-verdict-cache.ts +18 -6
- package/src/runtime/middleware/__tests__/request-logger.test.ts +1 -3
- package/src/runtime/middleware/auth.ts +37 -13
- package/src/runtime/middleware/error-handler.ts +1 -4
- package/src/runtime/middleware/rate-limiter.ts +12 -4
- package/src/runtime/middleware/request-logger.ts +12 -4
- package/src/runtime/migrations/__tests__/rebind-secrets-credentials.test.ts +18 -6
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +3 -1
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +9 -3
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +84 -28
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +18 -6
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +24 -8
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +3 -1
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +6 -2
- package/src/runtime/migrations/gcs-signed-url.ts +21 -7
- package/src/runtime/migrations/job-registry.ts +24 -8
- package/src/runtime/migrations/migration-wizard.ts +9 -3
- package/src/runtime/migrations/transfer-progress-screen.ts +3 -1
- package/src/runtime/migrations/validation-results-screen.ts +3 -1
- package/src/runtime/migrations/vbundle-builder.ts +33 -11
- package/src/runtime/migrations/vbundle-import-analyzer.ts +3 -1
- package/src/runtime/migrations/vbundle-import-policy.ts +21 -7
- package/src/runtime/migrations/vbundle-importer.ts +9 -3
- package/src/runtime/migrations/vbundle-metadata-merge.ts +12 -4
- package/src/runtime/migrations/vbundle-streaming-importer.ts +57 -19
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -5
- package/src/runtime/migrations/vbundle-validator.ts +6 -2
- package/src/runtime/nl-approval-parser.ts +6 -3
- package/src/runtime/no-response.ts +12 -4
- package/src/runtime/pending-interactions.ts +9 -3
- package/src/runtime/pre-first-message-gate.ts +3 -1
- package/src/runtime/routes/__tests__/acp-routes.test.ts +24 -8
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +9 -3
- package/src/runtime/routes/__tests__/backup-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +9 -3
- package/src/runtime/routes/__tests__/client-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +12 -4
- package/src/runtime/routes/__tests__/consolidation-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/contact-routes-update-channel-relay.test.ts +3 -1
- package/src/runtime/routes/__tests__/contact-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +116 -1
- package/src/runtime/routes/__tests__/conversation-surface-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +4 -14
- package/src/runtime/routes/__tests__/default-provider-routes.test.ts +4 -4
- package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +112 -0
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/gateway-status-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/global-search-routes.test.ts +12 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +6 -3
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +57 -4
- package/src/runtime/routes/__tests__/inference-send-routes.test.ts +79 -2
- package/src/runtime/routes/__tests__/invite-relay-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/ps-routes.test.ts +12 -4
- package/src/runtime/routes/__tests__/question-routes.test.ts +6 -2
- package/src/runtime/routes/__tests__/retrospective-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +6 -2
- package/src/runtime/routes/__tests__/schedule-routes-create.test.ts +3 -1
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/stt-routes.test.ts +22 -3
- package/src/runtime/routes/__tests__/surface-action-routes.test.ts +9 -3
- package/src/runtime/routes/__tests__/surface-content-routes.test.ts +3 -1
- package/src/runtime/routes/__tests__/tts-routes.test.ts +9 -3
- package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +3 -12
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +26 -115
- package/src/runtime/routes/__tests__/wake-conversation-routes.test.ts +3 -1
- package/src/runtime/routes/acp-routes-list.test.ts +9 -3
- package/src/runtime/routes/acp-routes.test.ts +18 -6
- package/src/runtime/routes/app-management-routes.ts +13 -5
- package/src/runtime/routes/app-routes.ts +3 -1
- package/src/runtime/routes/archive-utils.ts +3 -1
- package/src/runtime/routes/attachment-routes.ts +6 -2
- package/src/runtime/routes/background-wake-routes.ts +12 -4
- package/src/runtime/routes/backup-routes.ts +6 -2
- package/src/runtime/routes/browser-routes.ts +3 -1
- package/src/runtime/routes/call-routes.ts +3 -1
- package/src/runtime/routes/contact-prompt-routes.ts +8 -1
- package/src/runtime/routes/contact-routes.ts +9 -3
- package/src/runtime/routes/conversation-list-routes.ts +3 -1
- package/src/runtime/routes/conversation-management-routes.ts +6 -2
- package/src/runtime/routes/conversation-query-routes.ts +101 -12
- package/src/runtime/routes/conversation-routes.ts +6 -2
- package/src/runtime/routes/conversation-starter-routes.ts +12 -4
- package/src/runtime/routes/conversations-import-routes.ts +28 -2
- package/src/runtime/routes/debug-bash-routes.ts +3 -1
- package/src/runtime/routes/default-provider-routes.ts +8 -4
- package/src/runtime/routes/defer-routes.ts +17 -14
- package/src/runtime/routes/deprecated-route-context.ts +125 -0
- package/src/runtime/routes/diagnostics-routes.ts +3 -1
- package/src/runtime/routes/disk-pressure-routes.ts +12 -4
- package/src/runtime/routes/email-routes.ts +18 -6
- package/src/runtime/routes/errors.ts +13 -0
- package/src/runtime/routes/events-routes.ts +9 -3
- package/src/runtime/routes/global-search-routes.ts +28 -8
- package/src/runtime/routes/group-routes.ts +47 -5
- package/src/runtime/routes/guardian-action-routes.ts +2 -1
- package/src/runtime/routes/heartbeat-routes.ts +12 -6
- package/src/runtime/routes/home-feed-routes.ts +51 -18
- package/src/runtime/routes/host-app-control-routes.ts +40 -45
- package/src/runtime/routes/host-bash-routes.ts +31 -22
- package/src/runtime/routes/host-browser-routes.ts +6 -3
- package/src/runtime/routes/host-cu-routes.ts +26 -36
- package/src/runtime/routes/host-file-routes.ts +29 -40
- package/src/runtime/routes/host-transfer-routes.ts +21 -9
- package/src/runtime/routes/http-adapter.ts +15 -5
- package/src/runtime/routes/identity-routes.ts +15 -5
- package/src/runtime/routes/inbound-stages/admission-policy.test.ts +9 -3
- package/src/runtime/routes/inbound-stages/channel-turn-admission.ts +2 -2
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +12 -4
- package/src/runtime/routes/index.ts +2 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +6 -2
- package/src/runtime/routes/inference-profile-session-reaper.ts +6 -2
- package/src/runtime/routes/inference-profiles-routes.ts +10 -5
- package/src/runtime/routes/inference-provider-connection-routes.ts +36 -6
- package/src/runtime/routes/inference-send-routes.ts +88 -22
- package/src/runtime/routes/integrations/twilio.ts +3 -1
- package/src/runtime/routes/internal-oauth-routes.ts +6 -2
- package/src/runtime/routes/llm-call-sites-routes.ts +5 -2
- package/src/runtime/routes/llm-context-normalization.ts +36 -12
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +12 -4
- package/src/runtime/routes/log-export/workspace-allowlist.ts +33 -11
- package/src/runtime/routes/log-export-routes.ts +51 -17
- package/src/runtime/routes/mcp-auth-routes.ts +23 -8
- package/src/runtime/routes/migration-rollback-routes.ts +4 -2
- package/src/runtime/routes/migration-routes.ts +24 -8
- package/src/runtime/routes/oauth-apps.ts +3 -1
- package/src/runtime/routes/oauth-commands-routes.ts +66 -22
- package/src/runtime/routes/oauth-connect-routes.ts +14 -5
- package/src/runtime/routes/oauth-providers.ts +89 -34
- package/src/runtime/routes/onboarding-checkin-routes.ts +3 -1
- package/src/runtime/routes/platform-routes.ts +162 -50
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +6 -2
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +9 -3
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +3 -1
- package/src/runtime/routes/playground/__tests__/seed-conversation.test.ts +3 -1
- package/src/runtime/routes/playground/__tests__/seeded-conversations.test.ts +3 -1
- package/src/runtime/routes/playground/__tests__/state.test.ts +3 -1
- package/src/runtime/routes/playground/helpers.ts +9 -3
- package/src/runtime/routes/playground/seeded-conversations.ts +3 -1
- package/src/runtime/routes/profiler-routes.ts +12 -4
- package/src/runtime/routes/question-routes.ts +3 -1
- package/src/runtime/routes/redact-staged-export.ts +15 -5
- package/src/runtime/routes/schedule-routes.ts +135 -38
- package/src/runtime/routes/sequence-routes.ts +23 -10
- package/src/runtime/routes/skills-routes.ts +45 -15
- package/src/runtime/routes/slack-channel-routes.ts +6 -2
- package/src/runtime/routes/sounds-config-routes.ts +15 -5
- package/src/runtime/routes/stt-routes.ts +12 -3
- package/src/runtime/routes/subagents-routes.ts +182 -47
- package/src/runtime/routes/tool-call-question-enrichment.ts +6 -2
- package/src/runtime/routes/user-route-dispatcher.ts +23 -64
- package/src/runtime/routes/user-routes-cli.ts +3 -1
- package/src/runtime/routes/user-routes.ts +1 -10
- package/src/runtime/routes/watcher-routes.ts +15 -5
- package/src/runtime/routes/workflow-routes.test.ts +9 -3
- package/src/runtime/routes/workflow-routes.ts +12 -4
- package/src/runtime/routes/workspace-greetings.ts +12 -4
- package/src/runtime/routes/workspace-routes.ts +12 -4
- package/src/runtime/routes/workspace-utils.ts +6 -2
- package/src/runtime/services/conversation-serializer.ts +9 -3
- package/src/runtime/slack-reply-session.test.ts +3 -1
- package/src/runtime/slack-reply-session.ts +42 -14
- package/src/runtime/trust-verdict-consumer.ts +9 -3
- package/src/runtime/verification-outbound-actions.ts +3 -1
- package/src/runtime/verification-rate-limiter.ts +6 -2
- package/src/schedule/__tests__/run-script.test.ts +62 -0
- package/src/schedule/defer-provenance.ts +51 -0
- package/src/schedule/integration-status.ts +6 -2
- package/src/schedule/recurrence-engine.ts +35 -13
- package/src/schedule/recurrence-types.ts +6 -2
- package/src/schedule/run-script.ts +111 -21
- package/src/schedule/schedule-recovery.ts +6 -2
- package/src/schedule/schedule-store.ts +308 -57
- package/src/schedule/scheduler.ts +9 -11
- package/src/schedule/wake-schedule-options.ts +94 -0
- package/src/security/AGENTS.md +14 -0
- package/src/security/__tests__/oauth2-exchange-body.test.ts +1 -4
- package/src/security/__tests__/provider-key-env-fallback.test.ts +6 -2
- package/src/security/__tests__/untrusted-content.test.ts +21 -2
- package/src/security/ces-credential-client.ts +15 -5
- package/src/security/ces-rpc-credential-backend.ts +6 -2
- package/src/security/credential-key.ts +6 -2
- package/src/security/encrypted-store.ts +47 -18
- package/src/security/oauth-callback-registry.ts +6 -2
- package/src/security/oauth2-device-code.ts +7 -2
- package/src/security/oauth2.ts +36 -7
- package/src/security/redact-json.ts +3 -1
- package/src/security/redaction.ts +3 -1
- package/src/security/secret-allowlist.ts +21 -7
- package/src/security/secret-ingress.ts +3 -1
- package/src/security/secret-scanner.ts +23 -8
- package/src/security/token-manager.ts +4 -2
- package/src/security/tool-approval-digest.ts +3 -1
- package/src/security/untrusted-content.ts +11 -3
- package/src/sequence/analytics.ts +6 -2
- package/src/sequence/guardrails.ts +6 -2
- package/src/sequence/importer.ts +18 -6
- package/src/sequence/reply-matcher.ts +18 -6
- package/src/sequence/store.ts +40 -15
- package/src/services/published-app-updater.ts +9 -3
- package/src/signals/cancel.ts +3 -1
- package/src/signals/conversation-undo.ts +3 -1
- package/src/skills/active-skill-tools.ts +9 -3
- package/src/skills/catalog-cache.ts +4 -1
- package/src/skills/catalog-files.ts +93 -31
- package/src/skills/catalog-install.ts +30 -10
- package/src/skills/categories-cache.ts +9 -3
- package/src/skills/clawhub-files.ts +21 -7
- package/src/skills/clawhub.ts +18 -6
- package/src/skills/frontmatter.ts +3 -1
- package/src/skills/include-graph.ts +33 -11
- package/src/skills/inline-command-expansions.ts +9 -3
- package/src/skills/inline-command-runner.ts +6 -2
- package/src/skills/install-meta.ts +17 -6
- package/src/skills/managed-store.ts +3 -1
- package/src/skills/remote-skill-policy.ts +6 -2
- package/src/skills/skill-cache-store.ts +6 -2
- package/src/skills/skillssh-files.ts +42 -14
- package/src/skills/skillssh-registry.ts +18 -6
- package/src/skills/validate-input.ts +60 -20
- package/src/skills/version-hash.ts +6 -2
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +136 -2
- package/src/stt/daemon-batch-transcriber.ts +39 -22
- package/src/subagent/consult-prompt.ts +3 -1
- package/src/subagent/consult-transcript.ts +6 -2
- package/src/subagent/index.ts +11 -2
- package/src/subagent/manager.ts +162 -47
- package/src/subagent/types.ts +67 -0
- package/src/subagent/validate-allowlists.ts +6 -2
- package/src/telemetry/tool-usage-store.ts +6 -2
- package/src/telemetry/watchdog-direct-emit.ts +6 -2
- package/src/telemetry/watchdog-events-store.ts +6 -3
- package/src/tools/background-tool-registry.ts +6 -2
- package/src/tools/browser/__tests__/auth-detector.test.ts +20 -0
- package/src/tools/browser/__tests__/browser-untrusted-content.test.ts +512 -0
- package/src/tools/browser/auth-cache.ts +6 -2
- package/src/tools/browser/auth-detector.ts +24 -6
- package/src/tools/browser/browser-execution.ts +245 -47
- package/src/tools/browser/browser-manager.ts +66 -24
- package/src/tools/browser/browser-screencast.ts +6 -2
- package/src/tools/browser/cdp-client/__tests__/accessibility-snapshot.test.ts +27 -0
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +75 -27
- package/src/tools/browser/cdp-client/__tests__/cdp-dom-helpers.test.ts +39 -14
- package/src/tools/browser/cdp-client/__tests__/cdp-inspect-client.test.ts +9 -3
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +4 -1
- package/src/tools/browser/cdp-client/accessibility-snapshot.ts +67 -19
- package/src/tools/browser/cdp-client/cdp-dom-helpers.ts +15 -5
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +9 -3
- package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +33 -11
- package/src/tools/browser/cdp-client/cdp-inspect/ws-transport.ts +42 -14
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +36 -11
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +9 -3
- package/src/tools/browser/cdp-client/factory.ts +45 -27
- package/src/tools/browser/cdp-client/local-cdp-client.ts +21 -6
- package/src/tools/browser/cdp-client/types.ts +5 -1
- package/src/tools/browser/network-recorder.ts +45 -15
- package/src/tools/browser/pinned-tabs.ts +28 -9
- package/src/tools/browser/runtime-check.ts +21 -7
- package/src/tools/credentials/broker.ts +3 -1
- package/src/tools/credentials/domain-policy.ts +12 -4
- package/src/tools/credentials/host-pattern-match.ts +3 -1
- package/src/tools/credentials/post-connect-hooks.ts +6 -2
- package/src/tools/credentials/resolve.ts +21 -7
- package/src/tools/credentials/selection.ts +15 -5
- package/src/tools/credentials/tool-policy.ts +6 -2
- package/src/tools/execution-target.ts +3 -1
- package/src/tools/filesystem/fuzzy-match.ts +54 -18
- package/src/tools/filesystem/search.ts +34 -12
- package/src/tools/filesystem/write.ts +12 -4
- package/src/tools/network/__tests__/web-search-metadata.test.ts +9 -3
- package/src/tools/network/__tests__/web-search.test.ts +111 -4
- package/src/tools/network/domain-normalize.ts +12 -4
- package/src/tools/network/managed-search-proxy.ts +24 -8
- package/src/tools/network/script-proxy/session-manager.ts +39 -13
- package/src/tools/network/url-safety.ts +63 -21
- package/src/tools/network/web-fetch.ts +62 -21
- package/src/tools/network/web-search-error.ts +30 -13
- package/src/tools/network/web-search.ts +237 -10
- package/src/tools/schedule/create.ts +18 -0
- package/src/tools/schedule/update.ts +19 -2
- package/src/tools/sensitive-output-placeholders.ts +15 -5
- package/src/tools/shared/filesystem/file-ops-service.ts +6 -2
- package/src/tools/shared/filesystem/image-read.ts +3 -1
- package/src/tools/shared/filesystem/size-guard.ts +6 -2
- package/src/tools/skills/execute.ts +24 -8
- package/src/tools/skills/find-similar-skills.ts +6 -2
- package/src/tools/skills/load.ts +25 -9
- package/src/tools/skills/sandbox-runner.ts +6 -2
- package/src/tools/subagent/read.ts +7 -4
- package/src/tools/subagent/resolve.ts +73 -3
- package/src/tools/subagent/status.ts +66 -5
- package/src/tools/tool-input-summary.ts +3 -1
- package/src/tools/tool-name-aliases.ts +3 -1
- package/src/tools/verification-control-plane-policy.ts +12 -4
- package/src/tools/workflows/manage-workflows.ts +5 -2
- package/src/tts/__tests__/provider-adapters.test.ts +9 -3
- package/src/tts/__tests__/speakable-segments.test.ts +4 -4
- package/src/tts/providers/__tests__/xai-tts-socket.test.ts +26 -12
- package/src/tts/providers/deepgram-provider.ts +3 -1
- package/src/tts/providers/elevenlabs-provider.ts +9 -3
- package/src/tts/providers/fish-audio-provider.ts +3 -1
- package/src/tts/providers/xai-provider.ts +3 -1
- package/src/tts/providers/xai-tts-socket.ts +36 -11
- package/src/tts/synthesize-text.ts +3 -1
- package/src/usage/pricing.ts +27 -9
- package/src/util/abort-reasons.ts +3 -1
- package/src/util/bun-runtime.ts +9 -3
- package/src/util/bundled-asset.ts +6 -2
- package/src/util/canonicalize-identity.ts +3 -1
- package/src/util/cgroup-memory.ts +12 -4
- package/src/util/debounce.ts +11 -4
- package/src/util/diff.ts +18 -6
- package/src/util/disk-usage.ts +15 -5
- package/src/util/errors.ts +1 -0
- package/src/util/favicon.ts +9 -3
- package/src/util/fs.ts +3 -1
- package/src/util/image-conversion.ts +15 -5
- package/src/util/log-redact.ts +6 -2
- package/src/util/logger.ts +15 -5
- package/src/util/phone.ts +6 -2
- package/src/util/platform.ts +18 -6
- package/src/util/pricing.ts +30 -10
- package/src/util/process-liveness.ts +6 -2
- package/src/util/promise-guard.ts +3 -1
- package/src/util/retry.ts +21 -7
- package/src/util/row-mapper.ts +6 -2
- package/src/util/spinner.ts +6 -2
- package/src/util/strip-comment-lines.ts +3 -1
- package/src/util/time.ts +18 -6
- package/src/util/truncate.ts +6 -2
- package/src/util/unicode.ts +9 -3
- package/src/util/xml.ts +1 -4
- package/src/version.ts +9 -3
- package/src/watcher/__tests__/engine.test.ts +331 -4
- package/src/watcher/__tests__/payload-bounds.test.ts +414 -0
- package/src/watcher/constants.ts +69 -0
- package/src/watcher/engine.ts +135 -25
- package/src/watcher/payload-bounds.ts +443 -0
- package/src/watcher/provider-types.ts +13 -0
- package/src/watcher/providers/github.ts +18 -6
- package/src/watcher/providers/gmail.ts +1 -0
- package/src/watcher/providers/google-calendar.ts +36 -16
- package/src/watcher/providers/linear.ts +16 -5
- package/src/watcher/providers/outlook-calendar.ts +4 -1
- package/src/watcher/providers/outlook.ts +1 -0
- package/src/watcher/telemetry.ts +3 -1
- package/src/watcher/watcher-store.ts +32 -12
- package/src/workflows/deterministic-stringify.ts +6 -2
- package/src/workflows/engine-integration.test.ts +3 -1
- package/src/workflows/engine.test.ts +17 -6
- package/src/workflows/engine.ts +88 -32
- package/src/workflows/journal-store.ts +3 -1
- package/src/workflows/leaf-runner.ts +9 -2
- package/src/workflows/library.test.ts +5 -2
- package/src/workflows/library.ts +15 -5
- package/src/workflows/run-manager.test.ts +9 -3
- package/src/workflows/run-manager.ts +18 -6
- package/src/workflows/sandbox.ts +6 -2
- package/src/workspace/adaptive-thinking-repair.ts +33 -11
- package/src/workspace/byok-default-profile-ensure.ts +627 -0
- package/src/workspace/commit-message-enrichment-service.ts +15 -5
- package/src/workspace/custom-profile-ensure.ts +26 -15
- package/src/workspace/default-provider-ensure.ts +11 -10
- package/src/workspace/git-service.ts +12 -4
- package/src/workspace/hatched-date.ts +12 -4
- package/src/workspace/heartbeat-service.ts +3 -1
- package/src/workspace/migrations/003-seed-device-id.ts +12 -4
- package/src/workspace/migrations/004-extract-collect-usage-data.ts +27 -9
- package/src/workspace/migrations/006-services-config.ts +17 -6
- package/src/workspace/migrations/007-web-search-provider-rename.ts +34 -10
- package/src/workspace/migrations/010-app-dir-rename.ts +21 -7
- package/src/workspace/migrations/012-rename-conversation-disk-view-dirs.ts +30 -10
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +12 -4
- package/src/workspace/migrations/017-seed-persona-dirs.ts +15 -5
- package/src/workspace/migrations/018-rekey-compound-credential-keys.ts +30 -10
- package/src/workspace/migrations/019-scope-journal-to-guardian.ts +18 -6
- package/src/workspace/migrations/020-rename-oauth-skill-dirs.ts +6 -2
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +6 -2
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +6 -2
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +6 -2
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +6 -2
- package/src/workspace/migrations/025-remove-oauth-app-setup-skills.ts +3 -1
- package/src/workspace/migrations/026-backfill-install-meta.ts +27 -9
- package/src/workspace/migrations/028-recover-conversations-from-disk-view.ts +9 -3
- package/src/workspace/migrations/029-seed-pkb.ts +3 -1
- package/src/workspace/migrations/030-seed-pkb-autoinject.ts +6 -2
- package/src/workspace/migrations/031-drop-user-md.ts +25 -10
- package/src/workspace/migrations/031-llm-log-retention-zero-to-null.ts +28 -10
- package/src/workspace/migrations/032-tts-provider-unification.ts +33 -11
- package/src/workspace/migrations/033-stt-service-explicit-config.ts +12 -4
- package/src/workspace/migrations/034-remove-calls-voice-transcription-provider.ts +24 -8
- package/src/workspace/migrations/036-update-pkb-index-bar.ts +6 -2
- package/src/workspace/migrations/037-create-meets-dir.ts +3 -1
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +27 -9
- package/src/workspace/migrations/039-drop-legacy-llm-keys.ts +9 -3
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +15 -5
- package/src/workspace/migrations/041-backfill-google-gmail-settings-scope.ts +9 -3
- package/src/workspace/migrations/042-fix-backfill-google-gmail-settings-scope.ts +9 -3
- package/src/workspace/migrations/044-bump-stale-provider-stream-timeout.ts +11 -4
- package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +12 -4
- package/src/workspace/migrations/047-remove-watch-callsites.ts +18 -5
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +9 -3
- package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +12 -4
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +12 -4
- package/src/workspace/migrations/054-seed-recall-callsite.ts +12 -4
- package/src/workspace/migrations/057-repair-stale-gemini-model-ids.ts +39 -13
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +6 -2
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +6 -2
- package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +21 -7
- package/src/workspace/migrations/065-bump-stale-heartbeat-interval.ts +12 -3
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +18 -6
- package/src/workspace/migrations/069-seed-onboarding-threads.ts +9 -3
- package/src/workspace/migrations/072-seed-reply-suggestion-callsite.ts +12 -4
- package/src/workspace/migrations/073-repair-recall-callsite-empty-profile.ts +21 -7
- package/src/workspace/migrations/074-drop-deprecated-secret-detection-keys.ts +12 -4
- package/src/workspace/migrations/075-memory-v2-bm25-b-default-reembed.ts +9 -3
- package/src/workspace/migrations/076-drop-services-inference-mode.ts +13 -5
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +9 -3
- package/src/workspace/migrations/079-home-feed-notification-only.ts +21 -7
- package/src/workspace/migrations/080-restrict-vercel-api-token-metadata.ts +3 -1
- package/src/workspace/migrations/081-backfill-bash-allowed-tools-for-injection-credentials.ts +9 -3
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +15 -5
- package/src/workspace/migrations/083-system-prompt-prefix-to-file.ts +8 -3
- package/src/workspace/migrations/084-remove-legacy-skills-index.ts +42 -14
- package/src/workspace/migrations/085-memory-v2-bm25-b-reembed-disabled-v2-pages.ts +12 -4
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +33 -11
- package/src/workspace/migrations/087-memory-router-balanced-profile.ts +15 -5
- package/src/workspace/migrations/088-deprecate-background-conversation-override.ts +9 -3
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +6 -2
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +21 -7
- package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +9 -3
- package/src/workspace/migrations/092-backfill-v3-leaves.ts +30 -10
- package/src/workspace/migrations/093-backfill-leaf-ids.ts +15 -5
- package/src/workspace/migrations/094-seed-avatar-manifest.ts +9 -3
- package/src/workspace/migrations/095-bump-heartbeat-interval-30m-to-60m.ts +12 -3
- package/src/workspace/migrations/096-reduce-quality-profile-effort.ts +18 -6
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +27 -9
- package/src/workspace/migrations/099-disable-cache-one-shot-callsites.ts +24 -8
- package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +21 -7
- package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +15 -5
- package/src/workspace/migrations/102-preserve-heartbeat-enabled-for-existing-workspaces.ts +9 -3
- package/src/workspace/migrations/103-upgrade-quality-profile-to-opus-4-8.ts +21 -7
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +27 -9
- package/src/workspace/migrations/105-enable-memory-v3-live-for-new-workspaces.ts +21 -7
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +9 -3
- package/src/workspace/migrations/107-drop-send-diagnostics.ts +9 -3
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +18 -6
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +9 -3
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +12 -4
- package/src/workspace/migrations/111-prune-seeded-callsite-defaults.ts +36 -12
- package/src/workspace/migrations/112-remove-advisor-callsite-override.ts +18 -5
- package/src/workspace/migrations/113-swap-balanced-profile-to-glm-5p2.ts +18 -6
- package/src/workspace/migrations/114-swap-quality-profile-to-opus.ts +12 -4
- package/src/workspace/migrations/115-drop-frontier-profile.ts +18 -6
- package/src/workspace/migrations/117-normalize-stale-lean-memory-v3-defaults.ts +15 -5
- package/src/workspace/migrations/118-seed-now-md.ts +3 -1
- package/src/workspace/migrations/119-strip-persisted-memory-v3-tuning-defaults.ts +18 -6
- package/src/workspace/migrations/120-revise-onboarding-threads.ts +9 -3
- package/src/workspace/migrations/121-seed-default-user-guardrails.ts +3 -1
- package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +24 -8
- package/src/workspace/migrations/125-repoint-managed-connections-to-vellum.ts +21 -7
- package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +21 -7
- package/src/workspace/migrations/129-remove-analyze-conversation-config.ts +9 -3
- package/src/workspace/migrations/130-speech-mode-to-provider.ts +24 -8
- package/src/workspace/migrations/131-drop-web-fetch-mode.ts +13 -5
- package/src/workspace/migrations/133-collapse-provider-connections.ts +30 -10
- package/src/workspace/migrations/136-repair-stale-fireworks-kimi-model-id.ts +127 -0
- package/src/workspace/migrations/__tests__/backfill-leaf-ids.test.ts +3 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +9 -3
- package/src/workspace/migrations/rebuild-conversation-disk-view.ts +23 -8
- package/src/workspace/migrations/registry.ts +2 -0
- package/src/workspace/migrations/utils.ts +3 -1
- package/src/workspace/top-level-renderer.ts +3 -1
- package/src/__tests__/history-repair-hook.test.ts +0 -392
- package/src/daemon/__tests__/route-conversation-post.test.ts +0 -158
- package/src/daemon/route-conversation-post.ts +0 -158
- package/src/plugins/defaults/history-repair/hooks/post-model-call.ts +0 -50
- package/src/plugins/defaults/history-repair/hooks/stop.ts +0 -22
- package/src/plugins/defaults/history-repair/hooks/user-prompt-submit.ts +0 -35
- package/src/plugins/defaults/history-repair/package.json +0 -14
- package/src/plugins/defaults/history-repair/repair-state-store.ts +0 -51
|
@@ -111,6 +111,10 @@
|
|
|
111
111
|
"inference_profile": {
|
|
112
112
|
"type": "string",
|
|
113
113
|
"description": "Inference profile (a key from llm.profiles) the schedule's LLM-executed runs should use, e.g. to run a heavy task on a cheaper model. When omitted, runs use the default mainAgent model selection. Must name a configured profile."
|
|
114
|
+
},
|
|
115
|
+
"group": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"description": "Sidebar group (name or id) that conversations created by this schedule's runs are filed into, instead of the default Scheduled section. Must reference an existing group. Create one first with conversation_group_create (conversation-groups skill) if needed."
|
|
114
118
|
}
|
|
115
119
|
},
|
|
116
120
|
"required": ["name", "description"]
|
|
@@ -230,6 +234,10 @@
|
|
|
230
234
|
"inference_profile": {
|
|
231
235
|
"type": ["string", "null"],
|
|
232
236
|
"description": "Inference profile (a key from llm.profiles) the schedule's LLM-executed runs should use. Pass null to clear the override and revert to the default mainAgent model selection. Must name a configured profile."
|
|
237
|
+
},
|
|
238
|
+
"group": {
|
|
239
|
+
"type": ["string", "null"],
|
|
240
|
+
"description": "Sidebar group (name or id) that conversations created by future runs are filed into. Pass null to revert to the default Scheduled section. Existing conversations stay where they are; move them with conversation_move_to_group if asked."
|
|
233
241
|
}
|
|
234
242
|
},
|
|
235
243
|
"required": ["job_id"]
|
|
@@ -16,10 +16,15 @@ export async function run(
|
|
|
16
16
|
const description = input.description as string | undefined;
|
|
17
17
|
const exitOnReply = input.exit_on_reply as boolean | undefined;
|
|
18
18
|
|
|
19
|
-
if (!name)
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
if (!name) {
|
|
20
|
+
return err("name is required.");
|
|
21
|
+
}
|
|
22
|
+
if (!channel) {
|
|
23
|
+
return err("channel is required.");
|
|
24
|
+
}
|
|
25
|
+
if (!stepsRaw || stepsRaw.length === 0) {
|
|
22
26
|
return err("steps array is required and must have at least one step.");
|
|
27
|
+
}
|
|
23
28
|
|
|
24
29
|
try {
|
|
25
30
|
const steps: SequenceStep[] = stepsRaw.map((s, i) => ({
|
|
@@ -10,11 +10,15 @@ export async function run(
|
|
|
10
10
|
_context: ToolContext,
|
|
11
11
|
): Promise<ToolExecutionResult> {
|
|
12
12
|
const id = input.id as string;
|
|
13
|
-
if (!id)
|
|
13
|
+
if (!id) {
|
|
14
|
+
return err("id is required.");
|
|
15
|
+
}
|
|
14
16
|
|
|
15
17
|
try {
|
|
16
18
|
const seq = getSequence(id);
|
|
17
|
-
if (!seq)
|
|
19
|
+
if (!seq) {
|
|
20
|
+
return err(`Sequence not found: ${id}`);
|
|
21
|
+
}
|
|
18
22
|
|
|
19
23
|
deleteSequence(id);
|
|
20
24
|
return ok(
|
|
@@ -13,12 +13,18 @@ export async function run(
|
|
|
13
13
|
const emails = input.emails as string | string[];
|
|
14
14
|
const context = input.context as Record<string, unknown> | undefined;
|
|
15
15
|
|
|
16
|
-
if (!sequenceId)
|
|
17
|
-
|
|
16
|
+
if (!sequenceId) {
|
|
17
|
+
return err("sequence_id is required.");
|
|
18
|
+
}
|
|
19
|
+
if (!emails) {
|
|
20
|
+
return err("emails is required (string or array).");
|
|
21
|
+
}
|
|
18
22
|
|
|
19
23
|
try {
|
|
20
24
|
const seq = getSequence(sequenceId);
|
|
21
|
-
if (!seq)
|
|
25
|
+
if (!seq) {
|
|
26
|
+
return err(`Sequence not found: ${sequenceId}`);
|
|
27
|
+
}
|
|
22
28
|
|
|
23
29
|
// Support comma-separated string or array
|
|
24
30
|
const emailList = Array.isArray(emails)
|
|
@@ -28,7 +34,9 @@ export async function run(
|
|
|
28
34
|
.map((e) => e.trim())
|
|
29
35
|
.filter(Boolean);
|
|
30
36
|
|
|
31
|
-
if (emailList.length === 0)
|
|
37
|
+
if (emailList.length === 0) {
|
|
38
|
+
return err("No valid emails provided.");
|
|
39
|
+
}
|
|
32
40
|
|
|
33
41
|
const results: string[] = [];
|
|
34
42
|
let successCount = 0;
|
|
@@ -15,7 +15,9 @@ export async function run(
|
|
|
15
15
|
|
|
16
16
|
try {
|
|
17
17
|
const enrollments = listEnrollments({ sequenceId, status });
|
|
18
|
-
if (enrollments.length === 0)
|
|
18
|
+
if (enrollments.length === 0) {
|
|
19
|
+
return ok("No enrollments found.");
|
|
20
|
+
}
|
|
19
21
|
|
|
20
22
|
const lines = enrollments.map((e) => {
|
|
21
23
|
const nextAt = e.nextStepAt
|
|
@@ -14,11 +14,15 @@ export async function run(
|
|
|
14
14
|
_context: ToolContext,
|
|
15
15
|
): Promise<ToolExecutionResult> {
|
|
16
16
|
const id = input.id as string;
|
|
17
|
-
if (!id)
|
|
17
|
+
if (!id) {
|
|
18
|
+
return err("id is required.");
|
|
19
|
+
}
|
|
18
20
|
|
|
19
21
|
try {
|
|
20
22
|
const seq = getSequence(id);
|
|
21
|
-
if (!seq)
|
|
23
|
+
if (!seq) {
|
|
24
|
+
return err(`Sequence not found: ${id}`);
|
|
25
|
+
}
|
|
22
26
|
|
|
23
27
|
const activeCount = countActiveEnrollments(id);
|
|
24
28
|
const allEnrollments = listEnrollments({ sequenceId: id });
|
|
@@ -14,12 +14,18 @@ export async function run(
|
|
|
14
14
|
const sequenceId = input.sequence_id as string;
|
|
15
15
|
const autoEnroll = input.auto_enroll as boolean | undefined;
|
|
16
16
|
|
|
17
|
-
if (!filePath)
|
|
18
|
-
|
|
17
|
+
if (!filePath) {
|
|
18
|
+
return err("file_path is required.");
|
|
19
|
+
}
|
|
20
|
+
if (!sequenceId) {
|
|
21
|
+
return err("sequence_id is required.");
|
|
22
|
+
}
|
|
19
23
|
|
|
20
24
|
try {
|
|
21
25
|
const seq = getSequence(sequenceId);
|
|
22
|
-
if (!seq)
|
|
26
|
+
if (!seq) {
|
|
27
|
+
return err(`Sequence not found: ${sequenceId}`);
|
|
28
|
+
}
|
|
23
29
|
|
|
24
30
|
const parsed = parseContactFile(filePath);
|
|
25
31
|
|
|
@@ -41,16 +47,18 @@ export async function run(
|
|
|
41
47
|
for (const e of parsed.errors.slice(0, 10)) {
|
|
42
48
|
lines.push(` Row ${e.row}: ${e.reason}`);
|
|
43
49
|
}
|
|
44
|
-
if (parsed.errors.length > 10)
|
|
50
|
+
if (parsed.errors.length > 10) {
|
|
45
51
|
lines.push(` ... and ${parsed.errors.length - 10} more`);
|
|
52
|
+
}
|
|
46
53
|
}
|
|
47
54
|
lines.push("");
|
|
48
55
|
lines.push(`Sample contacts:`);
|
|
49
56
|
for (const c of parsed.contacts.slice(0, 5)) {
|
|
50
57
|
lines.push(` ${c.email}${c.name ? ` (${c.name})` : ""}`);
|
|
51
58
|
}
|
|
52
|
-
if (parsed.contacts.length > 5)
|
|
59
|
+
if (parsed.contacts.length > 5) {
|
|
53
60
|
lines.push(` ... and ${parsed.contacts.length - 5} more`);
|
|
61
|
+
}
|
|
54
62
|
lines.push("");
|
|
55
63
|
lines.push(
|
|
56
64
|
`Call again with auto_enroll=true to enroll all ${parsed.contacts.length} contacts in "${seq.name}".`,
|
|
@@ -17,7 +17,9 @@ export async function run(
|
|
|
17
17
|
|
|
18
18
|
try {
|
|
19
19
|
const seqs = listSequences(status ? { status } : undefined);
|
|
20
|
-
if (seqs.length === 0)
|
|
20
|
+
if (seqs.length === 0) {
|
|
21
|
+
return ok("No sequences found.");
|
|
22
|
+
}
|
|
21
23
|
|
|
22
24
|
const lines = seqs.map((s) => {
|
|
23
25
|
const enrollments = countActiveEnrollments(s.id);
|
|
@@ -26,21 +26,25 @@ export async function run(
|
|
|
26
26
|
|
|
27
27
|
// ── Enrollment-level lifecycle actions ──────────────────────────────
|
|
28
28
|
if (enrollmentId) {
|
|
29
|
-
if (!enrollmentAction)
|
|
29
|
+
if (!enrollmentAction) {
|
|
30
30
|
return err(
|
|
31
31
|
"enrollment_action is required when enrollment_id is provided.",
|
|
32
32
|
);
|
|
33
|
+
}
|
|
33
34
|
|
|
34
35
|
try {
|
|
35
36
|
const enrollment = getEnrollment(enrollmentId);
|
|
36
|
-
if (!enrollment)
|
|
37
|
+
if (!enrollment) {
|
|
38
|
+
return err(`Enrollment not found: ${enrollmentId}`);
|
|
39
|
+
}
|
|
37
40
|
|
|
38
41
|
switch (enrollmentAction) {
|
|
39
42
|
case "pause": {
|
|
40
|
-
if (enrollment.status !== "active")
|
|
43
|
+
if (enrollment.status !== "active") {
|
|
41
44
|
return err(
|
|
42
45
|
`Enrollment is not active (status: ${enrollment.status}).`,
|
|
43
46
|
);
|
|
47
|
+
}
|
|
44
48
|
pauseEnrollment(enrollmentId);
|
|
45
49
|
return ok(
|
|
46
50
|
`Enrollment ${enrollmentId} paused. Resume it later to continue from step ${
|
|
@@ -49,17 +53,19 @@ export async function run(
|
|
|
49
53
|
);
|
|
50
54
|
}
|
|
51
55
|
case "resume": {
|
|
52
|
-
if (enrollment.status !== "paused")
|
|
56
|
+
if (enrollment.status !== "paused") {
|
|
53
57
|
return err(
|
|
54
58
|
`Enrollment is not paused (status: ${enrollment.status}).`,
|
|
55
59
|
);
|
|
60
|
+
}
|
|
56
61
|
const seq = enrollment.sequenceId
|
|
57
62
|
? getSequence(enrollment.sequenceId)
|
|
58
63
|
: null;
|
|
59
|
-
if (seq && seq.status !== "active")
|
|
64
|
+
if (seq && seq.status !== "active") {
|
|
60
65
|
return err(
|
|
61
66
|
`Cannot resume enrollment - parent sequence "${seq.name}" is ${seq.status}. Resume the sequence first.`,
|
|
62
67
|
);
|
|
68
|
+
}
|
|
63
69
|
resumeEnrollment(enrollmentId);
|
|
64
70
|
return ok(`Enrollment ${enrollmentId} resumed.`);
|
|
65
71
|
}
|
|
@@ -86,7 +92,9 @@ export async function run(
|
|
|
86
92
|
}
|
|
87
93
|
|
|
88
94
|
// ── Sequence-level update ──────────────────────────────────────────
|
|
89
|
-
if (!id)
|
|
95
|
+
if (!id) {
|
|
96
|
+
return err("id is required.");
|
|
97
|
+
}
|
|
90
98
|
|
|
91
99
|
const name = input.name as string | undefined;
|
|
92
100
|
const description = input.description as string | undefined;
|
|
@@ -120,7 +128,9 @@ export async function run(
|
|
|
120
128
|
exitOnReply,
|
|
121
129
|
steps,
|
|
122
130
|
});
|
|
123
|
-
if (!updated)
|
|
131
|
+
if (!updated) {
|
|
132
|
+
return err(`Sequence not found: ${id}`);
|
|
133
|
+
}
|
|
124
134
|
|
|
125
135
|
return ok(`Sequence updated: ${updated.name} (${updated.status})`);
|
|
126
136
|
} catch (e) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "voice_config_update",
|
|
6
|
-
"description": "Update a voice configuration setting. Use tts_provider / stt_provider to switch the active TTS / STT provider. Provider \"vellum\" is Vellum-managed speech (billed to your organization; requires a Vellum platform connection via 'assistant platform connect'); any other provider uses the user's own API key. Valid TTS providers come from the provider catalog (vellum, elevenlabs, fish-audio, deepgram, xai); valid STT providers: vellum, deepgram, google-gemini, openai-whisper, xai. Use tts_voice_id to change the voice; it targets whichever TTS provider is currently active. For elevenlabs, pass an ElevenLabs voice ID. For vellum (managed), pass a managed voice model ID
|
|
6
|
+
"description": "Update a voice configuration setting. Use tts_provider / stt_provider to switch the active TTS / STT provider. Provider \"vellum\" is Vellum-managed speech (billed to your organization; requires a Vellum platform connection via 'assistant platform connect'); any other provider uses the user's own API key. Valid TTS providers come from the provider catalog (vellum, elevenlabs, fish-audio, deepgram, xai); valid STT providers: vellum, deepgram, google-gemini, openai-whisper, xai. Use tts_voice_id to change the voice; it targets whichever TTS provider is currently active. For elevenlabs, pass an ElevenLabs voice ID. For vellum (managed), pass a managed voice model ID: this may be an ElevenLabs voice ID (managed speech serves the same ElevenLabs voices) or a Deepgram Aura model ID (e.g. aura-2-thalia-en); only rate-carded voices synthesize, so prefer models from the managed catalog (daemon route GET tts/managed-voices, also used by the web voice picker). For deepgram, pass a Deepgram Aura model ID. Use fish_audio_reference_id for Fish Audio voice reference. Use stt_language to set the spoken language for speech recognition: one of the 49 base language codes on the verified Deepgram nova-3 monolingual roster (e.g. en, es, hi, ta, zh, ko), or \"multi\" for code-switching mid-sentence across its 10-language roster (English, Spanish, French, German, Hindi, Russian, Portuguese, Japanese, Italian, Dutch; e.g. Hinglish); plain language names like \"tamil\" or \"multilingual\" are accepted and normalized. Accepted values follow the configured STT provider: vellum-managed and deepgram accept the full roster plus \"multi\"; xai accepts only the 10 multilingual-roster codes (en, es, fr, de, hi, ru, pt, ja, it, nl) and rejects \"multi\" and the extended codes (both are verified for Deepgram nova-3 only); google-gemini / openai-whisper auto-detect natively, so the value persists but is ignored while they are active. Deepgram uses the same API key for TTS and STT. Changes persist to services.stt / services.tts config and take effect immediately.",
|
|
7
7
|
"category": "system",
|
|
8
8
|
"risk": "low",
|
|
9
9
|
"input_schema": {
|
|
@@ -15,14 +15,15 @@
|
|
|
15
15
|
"activation_key",
|
|
16
16
|
"conversation_timeout",
|
|
17
17
|
"fish_audio_reference_id",
|
|
18
|
+
"stt_language",
|
|
18
19
|
"stt_provider",
|
|
19
20
|
"tts_provider",
|
|
20
21
|
"tts_voice_id"
|
|
21
22
|
],
|
|
22
|
-
"description": "The voice setting to change. tts_provider / stt_provider select the active provider for each service (\"vellum\" = Vellum-managed speech; anything else = the user's own API key). tts_voice_id sets the voice for the currently active TTS provider (ElevenLabs voice ID for elevenlabs; a managed voice model ID for vellum
|
|
23
|
+
"description": "The voice setting to change. tts_provider / stt_provider select the active provider for each service (\"vellum\" = Vellum-managed speech; anything else = the user's own API key). tts_voice_id sets the voice for the currently active TTS provider (ElevenLabs voice ID for elevenlabs; a managed voice model ID for vellum, meaning an ElevenLabs voice ID or a Deepgram Aura model ID like aura-2-thalia-en; a Deepgram Aura model ID for deepgram; voice ID for xai). fish_audio_reference_id sets the Fish Audio voice reference. stt_language sets the spoken language for speech recognition (vellum-managed/deepgram: the full roster plus \"multi\"; xai: only the 10 multilingual-roster codes, with \"multi\" and the extended codes rejected; google-gemini and openai-whisper auto-detect and ignore it). Deepgram shares one API key across TTS and STT."
|
|
23
24
|
},
|
|
24
25
|
"value": {
|
|
25
|
-
"description": "The new value for the setting. For tts_provider: one of vellum, elevenlabs, fish-audio, deepgram, xai. For stt_provider: one of vellum, deepgram, google-gemini, openai-whisper, xai. For tts_voice_id: a voice ID for the active TTS provider
|
|
26
|
+
"description": "The new value for the setting. For tts_provider: one of vellum, elevenlabs, fish-audio, deepgram, xai. For stt_provider: one of vellum, deepgram, google-gemini, openai-whisper, xai. For tts_voice_id: a voice ID for the active TTS provider: an alphanumeric ElevenLabs voice ID (elevenlabs), a managed voice model ID which may be an ElevenLabs voice ID or a Deepgram Aura model ID like aura-2-thalia-en (vellum), or a Deepgram Aura model ID (deepgram). For fish_audio_reference_id: a Fish Audio voice reference ID. For stt_language: one of the 49 base codes on the nova-3 monolingual roster (e.g. en, es, hi, ta, zh, ko), or multi (code-switching across its 10-language roster); language names like \"hindi\", \"tamil\", or \"multilingual\" are also accepted and normalized; when the configured STT provider is xai, only the 10 multilingual-roster codes (en, es, fr, de, hi, ru, pt, ja, it, nl) are accepted. For conversation_timeout: seconds (5, 10, 15, 30, or 60). For activation_key: key identifier string."
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
},
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { normalizeActivationKey } from "../../../../daemon/handlers/config-voice.js";
|
|
2
2
|
import { managedSpeechAvailable } from "../../../../platform/managed-speech.js";
|
|
3
|
+
import {
|
|
4
|
+
DEEPGRAM_MULTI_LANGUAGE_CODES,
|
|
5
|
+
DEEPGRAM_NOVA3_MONOLINGUAL_CODES,
|
|
6
|
+
} from "../../../../providers/speech-to-text/deepgram.js";
|
|
3
7
|
import type {
|
|
4
8
|
ToolContext,
|
|
5
9
|
ToolExecutionResult,
|
|
@@ -41,6 +45,7 @@ const VOICE_SETTINGS = {
|
|
|
41
45
|
type: "string",
|
|
42
46
|
},
|
|
43
47
|
stt_provider: { type: "string" },
|
|
48
|
+
stt_language: { type: "string" },
|
|
44
49
|
} satisfies Record<string, VoiceSettingMeta>;
|
|
45
50
|
|
|
46
51
|
type VoiceSettingName = keyof typeof VOICE_SETTINGS;
|
|
@@ -57,12 +62,135 @@ const FRIENDLY_NAMES: Record<VoiceSettingName, string> = {
|
|
|
57
62
|
tts_voice_id: "ElevenLabs voice",
|
|
58
63
|
fish_audio_reference_id: "Fish Audio voice",
|
|
59
64
|
stt_provider: "Speech-to-text provider",
|
|
65
|
+
stt_language: "Speech-to-text language",
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Curated spoken-language codes for `services.stt.language`: the verified
|
|
70
|
+
* Deepgram nova-3 monolingual roster plus `multi` itself, derived from the
|
|
71
|
+
* daemon's single roster source (`DEEPGRAM_NOVA3_MONOLINGUAL_CODES`, which
|
|
72
|
+
* the web settings catalog mirrors under a parity test). The config schema
|
|
73
|
+
* accepts any non-empty string, but this tool only offers the curated set so
|
|
74
|
+
* a conversational request cannot persist an unvalidated code.
|
|
75
|
+
*/
|
|
76
|
+
const VALID_STT_LANGUAGES = [
|
|
77
|
+
...DEEPGRAM_NOVA3_MONOLINGUAL_CODES,
|
|
78
|
+
"multi",
|
|
79
|
+
] as const;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Codes accepted when the effective STT provider is xai: the pre-expansion
|
|
83
|
+
* multi-roster monolinguals (which include "en"), the set xAI was verified
|
|
84
|
+
* with. The extended nova-3 codes are verified against Deepgram's docs only,
|
|
85
|
+
* and "multi" is a Deepgram nova-3 mode the resolver never forwards to xAI,
|
|
86
|
+
* so both are rejected here rather than persisted as unverified or dead
|
|
87
|
+
* values. Derived from the daemon's roster source, same as the web catalog's
|
|
88
|
+
* provider scoping (`sttLanguageOptionsFor`).
|
|
89
|
+
*/
|
|
90
|
+
const XAI_STT_LANGUAGES: readonly string[] = DEEPGRAM_MULTI_LANGUAGE_CODES;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Rejection copy when a roster code is valid in general but not for xai. It
|
|
94
|
+
* names the provider and the accepted set so the model can steer the user
|
|
95
|
+
* instead of retrying blindly.
|
|
96
|
+
*/
|
|
97
|
+
const XAI_STT_LANGUAGE_ERROR = `the configured STT provider is xai, which supports: ${XAI_STT_LANGUAGES.join(
|
|
98
|
+
", ",
|
|
99
|
+
)}. Multilingual (multi) and the extended language codes are Deepgram/managed (vellum) only; switch stt_provider to use them`;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* STT providers that auto-detect the spoken language natively and take no
|
|
103
|
+
* language parameter (the resolver's value is ignored). A language write is
|
|
104
|
+
* still allowed for them (it applies after a later provider switch), but the
|
|
105
|
+
* success message notes the setting has no effect while they are active.
|
|
106
|
+
*/
|
|
107
|
+
const AUTO_DETECT_STT_PROVIDERS: ReadonlySet<string> = new Set([
|
|
108
|
+
"google-gemini",
|
|
109
|
+
"openai-whisper",
|
|
110
|
+
]);
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Rejection copy for stt_language. The roster is too long to enumerate in an
|
|
114
|
+
* error message, so it names the count and a few examples; the full set is
|
|
115
|
+
* `VALID_STT_LANGUAGES`.
|
|
116
|
+
*/
|
|
117
|
+
const STT_LANGUAGE_ERROR = `stt_language must be one of the ${VALID_STT_LANGUAGES.length - 1} supported language codes (e.g. en, es, hi, ta, zh, ko) or multi for code-switching; language names like "hindi", "tamil", and "multilingual" are also accepted`;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Forgiving aliases normalized (after trim + lowercase) to a curated code, so
|
|
121
|
+
* a natural value like "Hindi" or "multilingual" is accepted rather than
|
|
122
|
+
* rejected. Mirrors the alias treatment stt_provider gets in the config
|
|
123
|
+
* schema (openai/whisper -> openai-whisper). Common alternate names map to
|
|
124
|
+
* the same code (mandarin -> zh, farsi -> fa, filipino -> tl).
|
|
125
|
+
*/
|
|
126
|
+
const STT_LANGUAGE_ALIASES: Record<
|
|
127
|
+
string,
|
|
128
|
+
(typeof VALID_STT_LANGUAGES)[number]
|
|
129
|
+
> = {
|
|
130
|
+
arabic: "ar",
|
|
131
|
+
belarusian: "be",
|
|
132
|
+
bengali: "bn",
|
|
133
|
+
bangla: "bn",
|
|
134
|
+
bosnian: "bs",
|
|
135
|
+
bulgarian: "bg",
|
|
136
|
+
catalan: "ca",
|
|
137
|
+
chinese: "zh",
|
|
138
|
+
mandarin: "zh",
|
|
139
|
+
croatian: "hr",
|
|
140
|
+
czech: "cs",
|
|
141
|
+
danish: "da",
|
|
142
|
+
dutch: "nl",
|
|
143
|
+
english: "en",
|
|
144
|
+
estonian: "et",
|
|
145
|
+
finnish: "fi",
|
|
146
|
+
french: "fr",
|
|
147
|
+
german: "de",
|
|
148
|
+
greek: "el",
|
|
149
|
+
gujarati: "gu",
|
|
150
|
+
hebrew: "he",
|
|
151
|
+
hindi: "hi",
|
|
152
|
+
hungarian: "hu",
|
|
153
|
+
indonesian: "id",
|
|
154
|
+
italian: "it",
|
|
155
|
+
japanese: "ja",
|
|
156
|
+
kannada: "kn",
|
|
157
|
+
korean: "ko",
|
|
158
|
+
latvian: "lv",
|
|
159
|
+
lithuanian: "lt",
|
|
160
|
+
macedonian: "mk",
|
|
161
|
+
malay: "ms",
|
|
162
|
+
marathi: "mr",
|
|
163
|
+
norwegian: "no",
|
|
164
|
+
persian: "fa",
|
|
165
|
+
farsi: "fa",
|
|
166
|
+
polish: "pl",
|
|
167
|
+
portuguese: "pt",
|
|
168
|
+
romanian: "ro",
|
|
169
|
+
russian: "ru",
|
|
170
|
+
serbian: "sr",
|
|
171
|
+
slovak: "sk",
|
|
172
|
+
slovenian: "sl",
|
|
173
|
+
spanish: "es",
|
|
174
|
+
swedish: "sv",
|
|
175
|
+
tagalog: "tl",
|
|
176
|
+
filipino: "tl",
|
|
177
|
+
tamil: "ta",
|
|
178
|
+
telugu: "te",
|
|
179
|
+
thai: "th",
|
|
180
|
+
turkish: "tr",
|
|
181
|
+
ukrainian: "uk",
|
|
182
|
+
vietnamese: "vi",
|
|
183
|
+
multilingual: "multi",
|
|
184
|
+
auto: "multi",
|
|
185
|
+
mixed: "multi",
|
|
186
|
+
"code-switching": "multi",
|
|
60
187
|
};
|
|
61
188
|
|
|
62
189
|
function validateSetting(
|
|
63
190
|
setting: string,
|
|
64
191
|
value: unknown,
|
|
65
192
|
activeTtsProviderId?: string,
|
|
193
|
+
activeSttProviderId?: string,
|
|
66
194
|
):
|
|
67
195
|
| { ok: true; coerced: string | boolean | number }
|
|
68
196
|
| { ok: false; error: string } {
|
|
@@ -150,6 +278,37 @@ function validateSetting(
|
|
|
150
278
|
}
|
|
151
279
|
return { ok: true, coerced: value.trim() };
|
|
152
280
|
}
|
|
281
|
+
case "stt_language": {
|
|
282
|
+
if (typeof value !== "string") {
|
|
283
|
+
return {
|
|
284
|
+
ok: false,
|
|
285
|
+
error: STT_LANGUAGE_ERROR,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
const normalized = value.trim().toLowerCase();
|
|
289
|
+
const coerced = STT_LANGUAGE_ALIASES[normalized] ?? normalized;
|
|
290
|
+
if (!(VALID_STT_LANGUAGES as readonly string[]).includes(coerced)) {
|
|
291
|
+
return {
|
|
292
|
+
ok: false,
|
|
293
|
+
error: STT_LANGUAGE_ERROR,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
// Provider scoping, after alias normalization so "Tamil" and "ta" fail
|
|
297
|
+
// the same way: the extended roster and "multi" are verified for
|
|
298
|
+
// Deepgram nova-3 (BYOK deepgram and the managed relay) only. Under
|
|
299
|
+
// xai, persisting them would mean every web surface withholds the code
|
|
300
|
+
// while the resolver forwards it unverified (or, for "multi", drops it
|
|
301
|
+
// silently), so the write is an honest rejection instead. Auto-detect
|
|
302
|
+
// providers keep the unconditional write (the value applies after a
|
|
303
|
+
// later provider switch); the success message carries the caveat.
|
|
304
|
+
if (
|
|
305
|
+
activeSttProviderId === "xai" &&
|
|
306
|
+
!XAI_STT_LANGUAGES.includes(coerced)
|
|
307
|
+
) {
|
|
308
|
+
return { ok: false, error: XAI_STT_LANGUAGE_ERROR };
|
|
309
|
+
}
|
|
310
|
+
return { ok: true, coerced };
|
|
311
|
+
}
|
|
153
312
|
case "fish_audio_reference_id": {
|
|
154
313
|
if (typeof value !== "string" || value.trim().length === 0) {
|
|
155
314
|
return {
|
|
@@ -186,6 +345,24 @@ function deleteLegacySpeechMode(
|
|
|
186
345
|
delete (entry as Record<string, unknown>).mode;
|
|
187
346
|
}
|
|
188
347
|
|
|
348
|
+
/**
|
|
349
|
+
* Whether a raw `services.stt` block already names a provider, walking the
|
|
350
|
+
* raw shape with the same defensive guards as {@link deleteLegacySpeechMode}
|
|
351
|
+
* (the raw file is untrusted JSON, not schema output).
|
|
352
|
+
*/
|
|
353
|
+
function rawSttProviderPresent(raw: Record<string, unknown>): boolean {
|
|
354
|
+
const services = raw.services;
|
|
355
|
+
if (!services || typeof services !== "object" || Array.isArray(services)) {
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
const stt = (services as Record<string, unknown>).stt;
|
|
359
|
+
if (!stt || typeof stt !== "object" || Array.isArray(stt)) {
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
const provider = (stt as Record<string, unknown>).provider;
|
|
363
|
+
return typeof provider === "string" && provider.trim().length > 0;
|
|
364
|
+
}
|
|
365
|
+
|
|
189
366
|
export async function run(
|
|
190
367
|
input: Record<string, unknown>,
|
|
191
368
|
context: ToolContext,
|
|
@@ -214,7 +391,18 @@ export async function run(
|
|
|
214
391
|
const activeTtsProviderId =
|
|
215
392
|
setting === "tts_voice_id" ? getConfig().services.tts.provider : undefined;
|
|
216
393
|
|
|
217
|
-
|
|
394
|
+
// An stt_language change is scoped by the *effective* STT provider (the
|
|
395
|
+
// same source the sparse-config write-seeding below reads): the extended
|
|
396
|
+
// roster and "multi" are only valid where nova-3 runs.
|
|
397
|
+
const activeSttProviderId =
|
|
398
|
+
setting === "stt_language" ? getConfig().services.stt.provider : undefined;
|
|
399
|
+
|
|
400
|
+
const validation = validateSetting(
|
|
401
|
+
setting,
|
|
402
|
+
value,
|
|
403
|
+
activeTtsProviderId,
|
|
404
|
+
activeSttProviderId,
|
|
405
|
+
);
|
|
218
406
|
if (!validation.ok) {
|
|
219
407
|
return { content: `Error: ${validation.error}`, isError: true };
|
|
220
408
|
}
|
|
@@ -301,14 +489,50 @@ export async function run(
|
|
|
301
489
|
invalidateConfigCache();
|
|
302
490
|
}
|
|
303
491
|
|
|
492
|
+
// Provider scoping happened in validation (xai only accepts its verified
|
|
493
|
+
// set); for the remaining providers the write is unconditional. Auto-detect
|
|
494
|
+
// providers ignore the value at resolve time, so writing it is harmless and
|
|
495
|
+
// the success note below says so, matching how stt_provider does not
|
|
496
|
+
// cross-validate credentials.
|
|
497
|
+
if (setting === "stt_language") {
|
|
498
|
+
// A sparse raw config may lack `services.stt.provider` entirely. Writing
|
|
499
|
+
// only the language would persist `{ stt: { language } }`, and
|
|
500
|
+
// SttServiceSchema requires `provider` (the services-level default fills
|
|
501
|
+
// it only when `services.stt` is wholly absent), so the block would fail
|
|
502
|
+
// validation and trip the loader's salvage ladder: the language never
|
|
503
|
+
// applies and the whole `services` section (including unrelated TTS
|
|
504
|
+
// settings) can reset to defaults (the LUM-2758 failure family). Like the
|
|
505
|
+
// schema's alias preprocessing and this tool's curated-value validation,
|
|
506
|
+
// keep the write self-consistent: seed the provider from the effective
|
|
507
|
+
// config in the same write.
|
|
508
|
+
if (!rawSttProviderPresent(raw)) {
|
|
509
|
+
setNestedValue(
|
|
510
|
+
raw,
|
|
511
|
+
"services.stt.provider",
|
|
512
|
+
getConfig().services.stt.provider,
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
setNestedValue(raw, "services.stt.language", validation.coerced);
|
|
516
|
+
saveRawConfig(raw);
|
|
517
|
+
invalidateConfigCache();
|
|
518
|
+
}
|
|
519
|
+
|
|
304
520
|
const broadcastNote =
|
|
305
521
|
meta.userDefaultsKey && !skipClientBroadcast
|
|
306
522
|
? " The change has been broadcast to the desktop client."
|
|
307
523
|
: "";
|
|
524
|
+
// A language written while an auto-detecting provider is active persists
|
|
525
|
+
// but has no effect until the provider changes; say so in the same
|
|
526
|
+
// provider-aware voice the tool description uses.
|
|
527
|
+
const autoDetectNote =
|
|
528
|
+
activeSttProviderId !== undefined &&
|
|
529
|
+
AUTO_DETECT_STT_PROVIDERS.has(activeSttProviderId)
|
|
530
|
+
? ` Note: the configured STT provider (${activeSttProviderId}) auto-detects the spoken language natively and ignores this setting.`
|
|
531
|
+
: "";
|
|
308
532
|
return {
|
|
309
533
|
content: `${friendlyName} updated to ${JSON.stringify(
|
|
310
534
|
validation.coerced,
|
|
311
|
-
)}.${broadcastNote}`,
|
|
535
|
+
)}.${broadcastNote}${autoDetectNote}`,
|
|
312
536
|
isError: false,
|
|
313
537
|
};
|
|
314
538
|
}
|
|
@@ -114,7 +114,7 @@ Past 500 lines the model loses things in the middle. Warnings get buried, branch
|
|
|
114
114
|
Companion files ship through `scaffold_managed_skill`'s `files` input and live inside the skill folder:
|
|
115
115
|
|
|
116
116
|
- **`references/*.md`** for failure modes, gotchas, and cached values the body should point to.
|
|
117
|
-
- **`scripts/*`** for reusable code the procedure runs. Store the exact version that already ran successfully
|
|
117
|
+
- **`scripts/*`** for reusable code the procedure runs. Store the exact version that already ran successfully: pass `copy_from` with the tested file's absolute path instead of pasting its contents into `content`, so the bytes that shipped are the bytes that ran. Have the new skill's body invoke it through the baseDir placeholder (the word baseDir in curly braces), which resolves to that skill's folder when it loads. The terminal does not run from the skill folder, so a bare `scripts/...` path would fail. (The placeholder is spelled out here rather than written literally because this very body undergoes the same substitution.)
|
|
118
118
|
|
|
119
119
|
## Step 6 - Test the skill before calling it done
|
|
120
120
|
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
},
|
|
73
73
|
"required": ["path"]
|
|
74
74
|
},
|
|
75
|
-
"description": "Optional companion files written under the skill directory, referenced from SKILL.md: references/*.md for gotchas and cached values, scripts/* for reusable code that already ran successfully. Have the body invoke scripts via the {baseDir} placeholder (e.g. `python3 {baseDir}/scripts/export-report.py`)
|
|
75
|
+
"description": "Optional companion files written under the skill directory, referenced from SKILL.md: references/*.md for gotchas and cached values, scripts/* for reusable code that already ran successfully. Each entry is {path, content} or {path, copy_from}: exactly one of content or copy_from. Prefer copy_from (the absolute path of an existing on-disk file, under the workspace or system temp dir, at most 1 MiB) over re-emitting file bytes inline. Have the body invoke scripts via the {baseDir} placeholder (e.g. `python3 {baseDir}/scripts/export-report.py`); it resolves to the skill folder on load. Paths must resolve inside the skill folder."
|
|
76
76
|
},
|
|
77
77
|
"add_to_index": {
|
|
78
78
|
"type": "boolean",
|
|
@@ -40,7 +40,9 @@ let mockFileContents: Record<string, Buffer> = {};
|
|
|
40
40
|
|
|
41
41
|
mock.module("node:fs/promises", () => ({
|
|
42
42
|
access: async (p: string) => {
|
|
43
|
-
if (!accessiblePaths.has(p))
|
|
43
|
+
if (!accessiblePaths.has(p)) {
|
|
44
|
+
throw new Error(`ENOENT: no such file: ${p}`);
|
|
45
|
+
}
|
|
44
46
|
},
|
|
45
47
|
readFile: async (p: string) => {
|
|
46
48
|
return mockFileContents[p] ?? Buffer.alloc(0);
|
|
@@ -64,7 +64,9 @@ async function getAudioDuration(audioPath: string): Promise<number> {
|
|
|
64
64
|
],
|
|
65
65
|
FFPROBE_TIMEOUT_MS,
|
|
66
66
|
);
|
|
67
|
-
if (result.exitCode !== 0)
|
|
67
|
+
if (result.exitCode !== 0) {
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
68
70
|
return parseFloat(result.stdout.trim()) || 0;
|
|
69
71
|
}
|
|
70
72
|
|
|
@@ -141,7 +143,9 @@ async function resolveSource(
|
|
|
141
143
|
async function toWav(inputPath: string, isVideo: boolean): Promise<string> {
|
|
142
144
|
const wavPath = join(tmpdir(), `vellum-transcribe-${randomUUID()}.wav`);
|
|
143
145
|
const args = ["ffmpeg", "-y", "-i", inputPath];
|
|
144
|
-
if (isVideo)
|
|
146
|
+
if (isVideo) {
|
|
147
|
+
args.push("-vn");
|
|
148
|
+
}
|
|
145
149
|
args.push("-acodec", "pcm_s16le", "-ar", "16000", "-ac", "1", wavPath);
|
|
146
150
|
const result = await spawnWithTimeout(args, FFMPEG_TRANSCODE_TIMEOUT_MS);
|
|
147
151
|
if (result.exitCode !== 0) {
|
|
@@ -187,7 +191,9 @@ async function transcribeWithProvider(
|
|
|
187
191
|
const parts: string[] = [];
|
|
188
192
|
|
|
189
193
|
for (let i = 0; i < chunks.length; i++) {
|
|
190
|
-
if (context.signal?.aborted)
|
|
194
|
+
if (context.signal?.aborted) {
|
|
195
|
+
throw new Error("Cancelled");
|
|
196
|
+
}
|
|
191
197
|
context.onOutput?.(` Transcribing chunk ${i + 1}/${chunks.length}...\n`);
|
|
192
198
|
const audioBuffer = await readFile(chunks[i]);
|
|
193
199
|
const result = await transcriber.transcribe({
|
|
@@ -195,7 +201,9 @@ async function transcribeWithProvider(
|
|
|
195
201
|
mimeType: "audio/wav",
|
|
196
202
|
signal: AbortSignal.timeout(STT_REQUEST_TIMEOUT_MS),
|
|
197
203
|
});
|
|
198
|
-
if (result.text)
|
|
204
|
+
if (result.text) {
|
|
205
|
+
parts.push(result.text);
|
|
206
|
+
}
|
|
199
207
|
}
|
|
200
208
|
|
|
201
209
|
return parts.join(" ");
|
|
@@ -237,7 +245,9 @@ export async function run(
|
|
|
237
245
|
}
|
|
238
246
|
|
|
239
247
|
const source = await resolveSource(input);
|
|
240
|
-
if ("isError" in source)
|
|
248
|
+
if ("isError" in source) {
|
|
249
|
+
return source;
|
|
250
|
+
}
|
|
241
251
|
|
|
242
252
|
const { inputPath, isVideo } = source;
|
|
243
253
|
let wavPath: string | null = null;
|