@vellumai/assistant 0.6.2 → 0.6.4
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 +273 -10
- package/Dockerfile +2 -3
- package/bun.lock +41 -49
- package/bunfig.toml +3 -0
- package/docs/architecture/memory.md +1 -1
- package/docs/backup-troubleshooting.md +52 -0
- package/docs/browser-use-architecture-phase2.md +174 -0
- package/docs/stt-provider-onboarding.md +120 -0
- package/knip.json +12 -2
- package/node_modules/@vellumai/ces-contracts/bun.lock +8 -6
- package/node_modules/@vellumai/ces-contracts/package.json +3 -3
- package/node_modules/@vellumai/ces-contracts/src/rpc.ts +42 -0
- package/openapi.yaml +1111 -86
- package/package.json +40 -42
- package/scripts/generate-openapi.ts +0 -2
- package/scripts/test.sh +73 -18
- package/src/__tests__/acp-session.test.ts +43 -0
- package/src/__tests__/agent-image-optimize.test.ts +28 -0
- package/src/__tests__/agent-loop.test.ts +123 -0
- package/src/__tests__/anthropic-provider.test.ts +263 -10
- package/src/__tests__/app-builder-tool-scripts.test.ts +1 -0
- package/src/__tests__/app-executors.test.ts +1 -0
- package/src/__tests__/app-source-watcher.test.ts +37 -11
- package/src/__tests__/approval-routes-http.test.ts +178 -1
- package/src/__tests__/auto-analysis-end-to-end.test.ts +550 -0
- package/src/__tests__/auto-analysis-prompt.test.ts +50 -0
- package/src/__tests__/browser-fill-credential.test.ts +240 -94
- package/src/__tests__/browser-manager.test.ts +40 -27
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +2 -2
- package/src/__tests__/browser-skill-endstate.test.ts +31 -7
- package/src/__tests__/btw-routes.test.ts +7 -0
- package/src/__tests__/call-controller.test.ts +581 -20
- package/src/__tests__/catalog-files.test.ts +1000 -0
- package/src/__tests__/channel-approvals.test.ts +53 -0
- package/src/__tests__/channel-invite-transport.test.ts +2 -2
- package/src/__tests__/channel-readiness-routes.test.ts +16 -20
- package/src/__tests__/channel-readiness-service.test.ts +12 -7
- package/src/__tests__/checker.test.ts +157 -10
- package/src/__tests__/clawhub-files.test.ts +347 -0
- package/src/__tests__/commit-message-enrichment-service.test.ts +36 -19
- package/src/__tests__/config-analysis.test.ts +100 -0
- package/src/__tests__/config-managed-gemini-defaults.test.ts +326 -0
- package/src/__tests__/config-schema-cmd.test.ts +2 -2
- package/src/__tests__/config-schema.test.ts +1248 -224
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +339 -0
- package/src/__tests__/config-watcher.test.ts +43 -8
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +23 -0
- package/src/__tests__/contact-store-user-file.test.ts +512 -0
- package/src/__tests__/contacts-write.test.ts +197 -0
- package/src/__tests__/context-overflow-approval.test.ts +16 -1
- package/src/__tests__/context-window-manager.test.ts +88 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop.test.ts +99 -3
- package/src/__tests__/conversation-analysis-routes.test.ts +2 -2
- package/src/__tests__/conversation-attachments.test.ts +80 -4
- package/src/__tests__/conversation-confirmation-signals.test.ts +290 -0
- package/src/__tests__/conversation-error.test.ts +70 -0
- package/src/__tests__/conversation-fork-crud.test.ts +17 -0
- package/src/__tests__/conversation-history-web-search.test.ts +12 -4
- package/src/__tests__/conversation-host-access-routes.test.ts +229 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +6 -1
- package/src/__tests__/conversation-inject-context.test.ts +103 -0
- package/src/__tests__/conversation-launcher-skill-regression.test.ts +51 -0
- package/src/__tests__/conversation-list-source.test.ts +145 -0
- package/src/__tests__/conversation-pre-run-repair.test.ts +2 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +2 -0
- package/src/__tests__/conversation-queue.test.ts +946 -62
- package/src/__tests__/conversation-routes-disk-view.test.ts +275 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +16 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +324 -46
- package/src/__tests__/conversation-skill-tools.test.ts +7 -4
- package/src/__tests__/conversation-slash-commands.test.ts +33 -0
- package/src/__tests__/conversation-slash-queue.test.ts +89 -18
- package/src/__tests__/conversation-slash-unknown.test.ts +2 -0
- package/src/__tests__/conversation-starter-routes.test.ts +126 -0
- package/src/__tests__/conversation-starters-cadence.test.ts +161 -0
- package/src/__tests__/conversation-store.test.ts +195 -0
- package/src/__tests__/conversation-tool-setup-batch-authorized.test.ts +226 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +193 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +2 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +2 -0
- package/src/__tests__/credential-execution-approval-bridge.test.ts +32 -1
- package/src/__tests__/credential-health-service.test.ts +352 -0
- package/src/__tests__/credential-security-invariants.test.ts +6 -3
- package/src/__tests__/credential-vault-unit.test.ts +383 -7
- package/src/__tests__/credential-vault.test.ts +152 -13
- package/src/__tests__/credentials-cli.test.ts +42 -18
- package/src/__tests__/cross-provider-web-search.test.ts +146 -35
- package/src/__tests__/date-context.test.ts +4 -4
- package/src/__tests__/deterministic-verification-control-plane.test.ts +10 -1
- package/src/__tests__/device-id.test.ts +112 -0
- package/src/__tests__/docker-signing-key-bootstrap.test.ts +167 -4
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +1 -3
- package/src/__tests__/email-html-renderer.test.ts +71 -0
- package/src/__tests__/email-invite-adapter.test.ts +36 -32
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +256 -0
- package/src/__tests__/emit-event-signal.test.ts +71 -0
- package/src/__tests__/extension-id-sync-guard.test.ts +222 -0
- package/src/__tests__/fixtures/mock-chrome-extension.ts +386 -0
- package/src/__tests__/gateway-only-enforcement.test.ts +206 -1
- package/src/__tests__/gateway-only-guard.test.ts +2 -0
- package/src/__tests__/gemini-provider.test.ts +66 -2
- package/src/__tests__/get-skill-detail-audit.test.ts +325 -0
- package/src/__tests__/gmail-archive-fallback.test.ts +193 -0
- package/src/__tests__/gmail-archive-gate.test.ts +246 -0
- package/src/__tests__/gmail-preferences.test.ts +117 -0
- package/src/__tests__/guardian-routing-invariants.test.ts +70 -2
- package/src/__tests__/headless-browser-interactions.test.ts +738 -359
- package/src/__tests__/headless-browser-mode.test.ts +614 -0
- package/src/__tests__/headless-browser-navigate.test.ts +528 -49
- package/src/__tests__/headless-browser-read-tools.test.ts +274 -100
- package/src/__tests__/headless-browser-snapshot.test.ts +250 -77
- package/src/__tests__/heartbeat-service.test.ts +70 -17
- package/src/__tests__/home-state-routes.test.ts +162 -0
- package/src/__tests__/host-bash-proxy.test.ts +145 -1
- package/src/__tests__/host-browser-e2e-cloud.test.ts +596 -0
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +286 -0
- package/src/__tests__/host-browser-e2e-self-hosted.test.ts +374 -0
- package/src/__tests__/host-browser-event-routes.test.ts +350 -0
- package/src/__tests__/host-browser-proxy.test.ts +444 -0
- package/src/__tests__/host-browser-routes.test.ts +198 -0
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +423 -0
- package/src/__tests__/host-cu-proxy.test.ts +166 -1
- package/src/__tests__/host-file-proxy.test.ts +185 -1
- package/src/__tests__/host-file-read-tool.test.ts +52 -0
- package/src/__tests__/host-proxy-interface.test.ts +165 -0
- package/src/__tests__/host-shell-tool.test.ts +1 -11
- package/src/__tests__/http-user-message-parity.test.ts +1 -0
- package/src/__tests__/identity-intro-cache.test.ts +40 -10
- package/src/__tests__/init-feature-flag-overrides.test.ts +38 -112
- package/src/__tests__/integration-status.test.ts +6 -7
- package/src/__tests__/jobs-store-upsert-debounced.test.ts +141 -0
- package/src/__tests__/list-messages-tool-merge.test.ts +37 -12
- package/src/__tests__/llm-context-normalization.test.ts +488 -0
- package/src/__tests__/llm-context-route-provider.test.ts +86 -5
- package/src/__tests__/llm-usage-store.test.ts +363 -0
- package/src/__tests__/mcp-client-auth.test.ts +40 -4
- package/src/__tests__/mcp-health-check.test.ts +10 -3
- package/src/__tests__/media-stream-output.test.ts +555 -0
- package/src/__tests__/media-stream-parser.test.ts +374 -0
- package/src/__tests__/media-stream-server-integration.test.ts +1234 -0
- package/src/__tests__/media-stream-stt-session.test.ts +588 -0
- package/src/__tests__/media-turn-detector.test.ts +440 -0
- package/src/__tests__/message-queue.test.ts +125 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +3 -1
- package/src/__tests__/migration-export-http.test.ts +67 -8
- package/src/__tests__/migration-export-streaming.test.ts +66 -0
- package/src/__tests__/migration-import-commit-http.test.ts +109 -7
- package/src/__tests__/migration-import-preflight-http.test.ts +6 -5
- package/src/__tests__/migration-validate-http.test.ts +3 -3
- package/src/__tests__/mock-gateway-ipc.ts +151 -0
- package/src/__tests__/model-intents.test.ts +2 -2
- package/src/__tests__/native-host-marker-sync-guard.test.ts +157 -0
- package/src/__tests__/oauth-apps-routes.test.ts +18 -12
- package/src/__tests__/oauth-cli.test.ts +709 -60
- package/src/__tests__/oauth-connect-orchestrator.test.ts +118 -24
- package/src/__tests__/oauth-provider-seed-logos.test.ts +23 -0
- package/src/__tests__/oauth-provider-serializer.test.ts +147 -10
- package/src/__tests__/oauth-provider-visibility.test.ts +19 -21
- package/src/__tests__/oauth-providers-routes.test.ts +52 -14
- package/src/__tests__/oauth-store.test.ts +1465 -176
- package/src/__tests__/oauth2-gateway-transport.test.ts +460 -26
- package/src/__tests__/onboarding-template-contract.test.ts +81 -70
- package/src/__tests__/openai-provider.test.ts +178 -2
- package/src/__tests__/openai-responses-cutover-guard.test.ts +184 -0
- package/src/__tests__/openai-responses-provider.test.ts +1105 -0
- package/src/__tests__/openrouter-token-estimation.test.ts +100 -0
- package/src/__tests__/outlook-categories.test.ts +1 -1
- package/src/__tests__/outlook-client-automation.test.ts +1 -1
- package/src/__tests__/outlook-compose-tools.test.ts +1 -1
- package/src/__tests__/outlook-email-watcher.test.ts +1 -1
- package/src/__tests__/outlook-follow-up.test.ts +1 -1
- package/src/__tests__/outlook-messaging-provider.test.ts +2 -2
- package/src/__tests__/outlook-trash.test.ts +1 -1
- package/src/__tests__/outlook-unsubscribe.test.ts +32 -3
- package/src/__tests__/permission-checker-host-gate.test.ts +74 -14
- package/src/__tests__/permission-mode.test.ts +28 -56
- package/src/__tests__/persona-resolver.test.ts +251 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +4 -0
- package/src/__tests__/platform-callback-registration.test.ts +19 -0
- package/src/__tests__/platform.test.ts +92 -1
- package/src/__tests__/post-turn-tool-result-truncation.test.ts +343 -0
- package/src/__tests__/prechat-onboarding-contract.test.ts +267 -0
- package/src/__tests__/pricing.test.ts +174 -0
- package/src/__tests__/proxy-approval-callback.test.ts +18 -0
- package/src/__tests__/qdrant-manager.test.ts +29 -8
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +194 -0
- package/src/__tests__/relationship-state-contract.test.ts +175 -0
- package/src/__tests__/relay-server.test.ts +423 -5
- package/src/__tests__/require-fresh-approval.test.ts +40 -1
- package/src/__tests__/sanitize-config-for-transfer.test.ts +132 -0
- package/src/__tests__/schedule-routes.test.ts +162 -0
- package/src/__tests__/search-skills-unified.test.ts +118 -0
- package/src/__tests__/secret-detection-handler.test.ts +84 -0
- package/src/__tests__/secret-ingress-http.test.ts +1 -0
- package/src/__tests__/secret-scanner-executor.test.ts +4 -0
- package/src/__tests__/secure-keys.test.ts +107 -0
- package/src/__tests__/send-endpoint-busy.test.ts +8 -1
- package/src/__tests__/sequence-store.test.ts +1 -1
- package/src/__tests__/server-history-render.test.ts +49 -0
- package/src/__tests__/set-permission-mode.test.ts +13 -250
- package/src/__tests__/settings-routes.test.ts +201 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +801 -0
- package/src/__tests__/skills-files-catalog-fallback.test.ts +738 -0
- package/src/__tests__/skills.test.ts +5 -2
- package/src/__tests__/skillssh-files.test.ts +446 -0
- package/src/__tests__/slack-block-formatting.test.ts +110 -0
- package/src/__tests__/slack-channel-config.test.ts +576 -16
- package/src/__tests__/stt-catalog-parity.test.ts +282 -0
- package/src/__tests__/stt-stream-session.test.ts +535 -0
- package/src/__tests__/subagent-detail.test.ts +44 -2
- package/src/__tests__/subagent-disposal.test.ts +1 -0
- package/src/__tests__/subagent-fork-notifications.test.ts +291 -0
- package/src/__tests__/subagent-fork-spawn.test.ts +384 -0
- package/src/__tests__/subagent-manager-notify.test.ts +1 -0
- package/src/__tests__/subagent-notify-parent.test.ts +1 -0
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +411 -0
- package/src/__tests__/subagent-tools.test.ts +1 -0
- package/src/__tests__/subagent-types.test.ts +1 -0
- package/src/__tests__/system-prompt-ask-mode.test.ts +27 -71
- package/src/__tests__/system-prompt.test.ts +184 -27
- package/src/__tests__/task-scheduler.test.ts +32 -6
- package/src/__tests__/telegram-config.test.ts +10 -13
- package/src/__tests__/telephony-stt-routing.test.ts +329 -0
- package/src/__tests__/terminal-tools.test.ts +25 -5
- package/src/__tests__/test-preload.ts +18 -0
- package/src/__tests__/test-support/browser-skill-harness.ts +4 -1
- package/src/__tests__/tool-approval-handler.test.ts +73 -0
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +9 -5
- package/src/__tests__/tool-executor-shell-integration.test.ts +4 -0
- package/src/__tests__/tool-executor.test.ts +33 -24
- package/src/__tests__/tool-result-truncation.test.ts +36 -0
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +22 -0
- package/src/__tests__/top-level-renderer.test.ts +73 -1
- package/src/__tests__/transport-hints-queue.test.ts +14 -29
- package/src/__tests__/trust-store.test.ts +7 -1
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +1 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +109 -0
- package/src/__tests__/tts-catalog-parity.test.ts +345 -0
- package/src/__tests__/twilio-routes-twiml.test.ts +512 -114
- package/src/__tests__/twilio-routes.test.ts +376 -0
- package/src/__tests__/unicode.test.ts +293 -0
- package/src/__tests__/update-bulletin-format.test.ts +59 -0
- package/src/__tests__/update-bulletin.test.ts +206 -5
- package/src/__tests__/usage-routes.test.ts +25 -4
- package/src/__tests__/user-reference.test.ts +46 -61
- package/src/__tests__/v2-consent-policy.test.ts +103 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -0
- package/src/__tests__/voice-config-update.test.ts +403 -0
- package/src/__tests__/voice-quality.test.ts +434 -19
- package/src/__tests__/workspace-heartbeat-service.test.ts +7 -0
- package/src/__tests__/workspace-migration-033-stt-service-explicit-config.test.ts +547 -0
- package/src/__tests__/workspace-migration-034-remove-calls-voice-transcription-provider.test.ts +596 -0
- package/src/__tests__/workspace-migration-drop-user-md.test.ts +368 -0
- package/src/__tests__/workspace-migration-meets.test.ts +244 -0
- package/src/__tests__/workspace-migration-seed-device-id.test.ts +14 -20
- package/src/__tests__/workspace-policy.test.ts +2 -0
- package/src/acp/client-handler.ts +30 -4
- package/src/agent/image-optimize.ts +24 -12
- package/src/agent/loop.ts +55 -9
- package/src/approvals/guardian-request-resolvers.ts +21 -15
- package/src/backup/__tests__/backup-key.test.ts +152 -0
- package/src/backup/__tests__/backup-worker.test.ts +767 -0
- package/src/backup/__tests__/list-snapshots.test.ts +87 -0
- package/src/backup/__tests__/local-writer.test.ts +218 -0
- package/src/backup/__tests__/offsite-writer.test.ts +641 -0
- package/src/backup/__tests__/paths.test.ts +300 -0
- package/src/backup/__tests__/restore.test.ts +498 -0
- package/src/backup/__tests__/snapshot-lock.test.ts +352 -0
- package/src/backup/__tests__/stream-crypt.test.ts +228 -0
- package/src/backup/backup-key.ts +137 -0
- package/src/backup/backup-worker.ts +459 -0
- package/src/backup/list-snapshots.ts +147 -0
- package/src/backup/local-writer.ts +133 -0
- package/src/backup/offsite-writer.ts +222 -0
- package/src/backup/paths.ts +226 -0
- package/src/backup/restore.ts +322 -0
- package/src/backup/snapshot-lock.ts +431 -0
- package/src/backup/stream-crypt.ts +263 -0
- package/src/browser-session/__tests__/manager.test.ts +297 -0
- package/src/browser-session/backends/cdp-inspect.ts +30 -0
- package/src/browser-session/backends/extension.ts +26 -0
- package/src/browser-session/backends/local.ts +24 -0
- package/src/browser-session/events.ts +164 -0
- package/src/browser-session/index.ts +27 -0
- package/src/browser-session/manager.ts +159 -0
- package/src/browser-session/types.ts +28 -0
- package/src/bundler/package-resolver.ts +4 -0
- package/src/calls/audio-store.ts +11 -5
- package/src/calls/call-controller.ts +226 -71
- package/src/calls/call-domain.ts +9 -0
- package/src/calls/call-speech-output.ts +190 -0
- package/src/calls/call-transport.ts +77 -0
- package/src/calls/media-stream-audio-transcode.ts +173 -0
- package/src/calls/media-stream-output.ts +660 -0
- package/src/calls/media-stream-parser.ts +300 -0
- package/src/calls/media-stream-protocol.ts +166 -0
- package/src/calls/media-stream-server.ts +592 -0
- package/src/calls/media-stream-stt-session.ts +460 -0
- package/src/calls/media-turn-detector.ts +230 -0
- package/src/calls/relay-server.ts +90 -75
- package/src/calls/resolve-call-tts-provider.ts +136 -0
- package/src/calls/telephony-stt-routing.ts +145 -0
- package/src/calls/tts-call-strategy.ts +161 -0
- package/src/calls/tts-text-sanitizer.ts +32 -16
- package/src/calls/twilio-routes.ts +281 -17
- package/src/calls/voice-quality.ts +78 -35
- package/src/calls/voice-session-bridge.ts +8 -1
- package/src/channels/__tests__/types.test.ts +134 -0
- package/src/channels/types.ts +69 -3
- package/src/cli/__tests__/run-assistant-command.ts +11 -1
- package/src/cli/commands/__tests__/backup.test.ts +1165 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +234 -0
- package/src/cli/commands/__tests__/domain-status.test.ts +132 -0
- package/src/cli/commands/__tests__/email-attachment.test.ts +422 -0
- package/src/cli/commands/__tests__/email-download.test.ts +16 -1
- package/src/cli/commands/__tests__/email-list.test.ts +22 -4
- package/src/cli/commands/__tests__/email-register.test.ts +4 -4
- package/src/cli/commands/__tests__/email-send.test.ts +37 -4
- package/src/cli/commands/__tests__/email-status.test.ts +5 -1
- package/src/cli/commands/__tests__/email-unregister.test.ts +34 -5
- package/src/cli/commands/backup.ts +993 -0
- package/src/cli/commands/conversations.ts +77 -0
- package/src/cli/commands/credentials.ts +3 -4
- package/src/cli/commands/domain.ts +210 -0
- package/src/cli/commands/email.ts +273 -16
- package/src/cli/commands/mcp.ts +16 -4
- package/src/cli/commands/oauth/__tests__/connect.test.ts +56 -44
- package/src/cli/commands/oauth/__tests__/disconnect.test.ts +21 -21
- package/src/cli/commands/oauth/__tests__/mode.test.ts +17 -17
- package/src/cli/commands/oauth/__tests__/ping.test.ts +16 -16
- package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +32 -33
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +330 -0
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +117 -12
- package/src/cli/commands/oauth/__tests__/status.test.ts +10 -10
- package/src/cli/commands/oauth/__tests__/token.test.ts +7 -7
- package/src/cli/commands/oauth/apps.ts +7 -4
- package/src/cli/commands/oauth/connect.ts +6 -3
- package/src/cli/commands/oauth/disconnect.ts +1 -1
- package/src/cli/commands/oauth/mode.ts +12 -3
- package/src/cli/commands/oauth/providers.ts +215 -36
- package/src/cli/commands/oauth/shared.ts +7 -6
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +254 -0
- package/src/cli/commands/platform/__tests__/connect.test.ts +6 -0
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +7 -1
- package/src/cli/commands/platform/__tests__/status.test.ts +6 -0
- package/src/cli/commands/platform/index.ts +107 -10
- package/src/cli/commands/usage.ts +10 -9
- package/src/cli/lib/daemon-credential-client.ts +4 -0
- package/src/cli/program.ts +30 -4
- package/src/config/__tests__/backup-schema.test.ts +134 -0
- package/src/config/assistant-feature-flags.ts +61 -62
- package/src/config/bundled-skills/app-builder/SKILL.md +26 -249
- package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +141 -0
- package/src/config/bundled-skills/app-builder/references/INTERACTION_HOOKS.md +56 -0
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +125 -0
- package/src/config/bundled-skills/browser/SKILL.md +30 -5
- package/src/config/bundled-skills/browser/TOOLS.json +123 -0
- package/src/config/bundled-skills/browser/tools/browser-attach.ts +12 -0
- package/src/config/bundled-skills/browser/tools/browser-detach.ts +12 -0
- package/src/config/bundled-skills/browser/tools/browser-status.ts +12 -0
- package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +17 -0
- package/src/config/bundled-skills/contacts/SKILL.md +5 -2
- package/src/config/bundled-skills/document/SKILL.md +4 -0
- package/src/config/bundled-skills/gmail/SKILL.md +54 -8
- package/src/config/bundled-skills/gmail/TOOLS.json +33 -3
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +116 -9
- package/src/config/bundled-skills/gmail/tools/gmail-outreach-scan.ts +138 -11
- package/src/config/bundled-skills/gmail/tools/gmail-preferences-tool.ts +59 -0
- package/src/config/bundled-skills/gmail/tools/gmail-preferences.ts +82 -0
- package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +113 -17
- package/src/config/bundled-skills/gmail/tools/gmail-unsubscribe.ts +2 -2
- package/src/config/bundled-skills/media-processing/SKILL.md +3 -9
- package/src/config/bundled-skills/media-processing/TOOLS.json +1 -6
- package/src/config/bundled-skills/media-processing/__tests__/audio-transcribe.test.ts +125 -0
- package/src/config/bundled-skills/media-processing/__tests__/extract-keyframes.test.ts +181 -0
- package/src/config/bundled-skills/media-processing/__tests__/preprocess-audio.test.ts +141 -0
- package/src/config/bundled-skills/media-processing/services/audio-transcribe.ts +32 -87
- package/src/config/bundled-skills/media-processing/services/preprocess.ts +8 -4
- package/src/config/bundled-skills/media-processing/tools/extract-keyframes.ts +0 -10
- package/src/config/bundled-skills/messaging/SKILL.md +3 -3
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +2 -2
- package/src/config/bundled-skills/outlook/SKILL.md +9 -2
- package/src/config/bundled-skills/outlook/tools/outlook-unsubscribe.ts +2 -2
- package/src/config/bundled-skills/phone-calls/SKILL.md +2 -2
- package/src/config/bundled-skills/phone-calls/references/CONFIG.md +27 -18
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +3 -3
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +26 -22
- package/src/config/bundled-skills/slack/SKILL.md +1 -0
- package/src/config/bundled-skills/subagent/SKILL.md +21 -0
- package/src/config/bundled-skills/subagent/TOOLS.json +8 -4
- package/src/config/bundled-skills/tasks/SKILL.md +5 -0
- package/src/config/bundled-skills/transcribe/SKILL.md +9 -14
- package/src/config/bundled-skills/transcribe/TOOLS.json +2 -7
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.test.ts +256 -0
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +38 -188
- package/src/config/bundled-tool-registry.ts +8 -0
- package/src/config/env-registry.ts +38 -0
- package/src/config/env.ts +49 -4
- package/src/config/feature-flag-registry.json +85 -14
- package/src/config/loader.ts +82 -13
- package/src/config/sanitize-for-transfer.ts +47 -0
- package/src/config/schema.ts +81 -15
- package/src/config/schemas/__tests__/stt.test.ts +43 -0
- package/src/config/schemas/analysis.ts +51 -0
- package/src/config/schemas/backup.ts +72 -0
- package/src/config/schemas/calls.ts +1 -26
- package/src/config/schemas/elevenlabs.ts +0 -59
- package/src/config/schemas/filing.ts +47 -7
- package/src/config/schemas/heartbeat.ts +27 -5
- package/src/config/schemas/host-browser.ts +112 -0
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/memory-lifecycle.ts +14 -2
- package/src/config/schemas/memory-retrieval.ts +103 -0
- package/src/config/schemas/security.ts +0 -6
- package/src/config/schemas/services.ts +52 -0
- package/src/config/schemas/stt.ts +59 -0
- package/src/config/schemas/tts.ts +230 -0
- package/src/config/schemas/updates.ts +14 -0
- package/src/config/skills.ts +4 -0
- package/src/config/types.ts +4 -1
- package/src/contacts/contact-store.ts +56 -11
- package/src/contacts/contacts-write.ts +38 -1
- package/src/context/post-turn-tool-result-truncation.ts +177 -0
- package/src/context/tool-result-truncation.ts +2 -1
- package/src/context/window-manager.ts +61 -10
- package/src/credential-execution/approval-bridge.ts +49 -15
- package/src/credential-execution/executable-discovery.ts +12 -2
- package/src/credential-execution/process-manager.ts +33 -2
- package/src/credential-health/credential-health-service.ts +366 -0
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +324 -0
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +497 -0
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +195 -0
- package/src/daemon/__tests__/lifecycle-startup-ordering.test.ts +127 -0
- package/src/daemon/app-source-watcher.ts +35 -0
- package/src/daemon/config-watcher.ts +99 -5
- package/src/daemon/context-overflow-approval.ts +5 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +23 -2
- package/src/daemon/conversation-agent-loop.ts +153 -42
- package/src/daemon/conversation-attachments.ts +40 -0
- package/src/daemon/conversation-error.ts +11 -0
- package/src/daemon/conversation-history.ts +40 -6
- package/src/daemon/conversation-launch.ts +220 -0
- package/src/daemon/conversation-lifecycle.ts +59 -9
- package/src/daemon/conversation-messaging.ts +37 -3
- package/src/daemon/conversation-notifiers.ts +5 -0
- package/src/daemon/conversation-process.ts +622 -13
- package/src/daemon/conversation-queue-manager.ts +24 -0
- package/src/daemon/conversation-runtime-assembly.ts +128 -36
- package/src/daemon/conversation-slash.ts +36 -0
- package/src/daemon/conversation-surfaces.ts +131 -40
- package/src/daemon/conversation-tool-setup.ts +99 -8
- package/src/daemon/conversation-usage.ts +7 -4
- package/src/daemon/conversation-workspace.ts +12 -0
- package/src/daemon/conversation.ts +292 -16
- package/src/daemon/date-context.ts +10 -10
- package/src/daemon/first-greeting.ts +3 -2
- package/src/daemon/handlers/config-slack-channel.ts +269 -94
- package/src/daemon/handlers/conversations.ts +13 -141
- package/src/daemon/handlers/shared.ts +80 -0
- package/src/daemon/handlers/skills.ts +483 -44
- package/src/daemon/host-bash-proxy.ts +48 -13
- package/src/daemon/host-browser-proxy.ts +192 -0
- package/src/daemon/host-cu-proxy.ts +36 -11
- package/src/daemon/host-file-proxy.ts +57 -9
- package/src/daemon/lifecycle.ts +179 -28
- package/src/daemon/message-protocol.ts +13 -0
- package/src/daemon/message-types/conversations.ts +89 -14
- package/src/daemon/message-types/home.ts +40 -0
- package/src/daemon/message-types/host-browser.ts +100 -0
- package/src/daemon/message-types/meet.ts +143 -0
- package/src/daemon/message-types/messages.ts +19 -5
- package/src/daemon/message-types/schedules.ts +34 -2
- package/src/daemon/message-types/skills.ts +26 -0
- package/src/daemon/message-types/subagents.ts +2 -0
- package/src/daemon/message-types/surfaces.ts +2 -0
- package/src/daemon/server.ts +439 -14
- package/src/daemon/shutdown-handlers.ts +32 -4
- package/src/daemon/shutdown-registry.ts +40 -0
- package/src/daemon/tool-side-effects.ts +15 -0
- package/src/daemon/transport-hints.ts +5 -24
- package/src/email/html-renderer.ts +76 -0
- package/src/heartbeat/heartbeat-service.ts +93 -7
- package/src/home/__tests__/assistant-feed-authoring.test.ts +156 -0
- package/src/home/__tests__/emit-feed-event.test.ts +169 -0
- package/src/home/__tests__/feed-scheduler.test.ts +194 -0
- package/src/home/__tests__/feed-types.test.ts +275 -0
- package/src/home/__tests__/feed-writer.test.ts +688 -0
- package/src/home/__tests__/phase5-exit-criteria.test.ts +212 -0
- package/src/home/__tests__/platform-gmail-digest.test.ts +222 -0
- package/src/home/__tests__/progress-formula.test.ts +213 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +740 -0
- package/src/home/__tests__/rollup-producer.test.ts +398 -0
- package/src/home/assistant-feed-authoring.ts +124 -0
- package/src/home/emit-feed-event.ts +158 -0
- package/src/home/feed-scheduler.ts +247 -0
- package/src/home/feed-types.ts +181 -0
- package/src/home/feed-writer.ts +469 -0
- package/src/home/platform-gmail-digest.ts +163 -0
- package/src/home/progress-formula.ts +86 -0
- package/src/home/relationship-state-writer.ts +824 -0
- package/src/home/relationship-state.ts +143 -0
- package/src/home/rollup-producer.ts +384 -0
- package/src/hooks/runner.ts +7 -0
- package/src/inbound/platform-callback-registration.ts +30 -20
- package/src/inbound/public-ingress-urls.ts +12 -0
- package/src/instrument.ts +1 -1
- package/src/ipc/__tests__/cli-ipc.test.ts +200 -0
- package/src/ipc/cli-client.ts +151 -0
- package/src/ipc/cli-server.ts +234 -0
- package/src/ipc/gateway-client.ts +180 -0
- package/src/ipc/routes/index.ts +5 -0
- package/src/ipc/routes/wake-conversation.ts +19 -0
- package/src/mcp/client.ts +59 -24
- package/src/memory/__tests__/auto-analysis-enqueue.test.ts +356 -0
- package/src/memory/__tests__/auto-analysis-guard.test.ts +57 -0
- package/src/memory/__tests__/conversation-analyze-job.test.ts +232 -0
- package/src/memory/__tests__/find-analysis-conversation.test.ts +196 -0
- package/src/memory/app-store.ts +31 -1
- package/src/memory/attachments-store.ts +70 -0
- package/src/memory/auto-analysis-enqueue.ts +127 -0
- package/src/memory/auto-analysis-guard.ts +27 -0
- package/src/memory/cleanup-schedule-state.ts +37 -0
- package/src/memory/conversation-analyze-job.ts +73 -0
- package/src/memory/conversation-crud.ts +122 -0
- package/src/memory/conversation-disk-view.ts +7 -0
- package/src/memory/conversation-group-migration.ts +34 -2
- package/src/memory/conversation-queries.ts +6 -5
- package/src/memory/conversation-starters-cadence.ts +76 -0
- package/src/memory/conversation-title-service.ts +5 -2
- package/src/memory/db-init.ts +18 -0
- package/src/memory/db-maintenance.ts +108 -0
- package/src/memory/db.ts +1 -0
- package/src/memory/embedding-backend.test.ts +75 -0
- package/src/memory/embedding-backend.ts +131 -5
- package/src/memory/embedding-gemini.test.ts +54 -0
- package/src/memory/embedding-gemini.ts +20 -9
- package/src/memory/embedding-local.ts +176 -17
- package/src/memory/graph/consolidation.ts +10 -23
- package/src/memory/graph/conversation-graph-memory.ts +15 -0
- package/src/memory/graph/extraction-job.ts +15 -0
- package/src/memory/graph/extraction.test.ts +23 -0
- package/src/memory/graph/extraction.ts +8 -0
- package/src/memory/graph/retriever.ts +67 -40
- package/src/memory/graph/scoring.test.ts +186 -0
- package/src/memory/graph/scoring.ts +31 -1
- package/src/memory/graph/store.test.ts +7 -3
- package/src/memory/graph/store.ts +47 -12
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/group-crud.ts +6 -1
- package/src/memory/indexer.ts +95 -16
- package/src/memory/job-handlers/cleanup.ts +11 -8
- package/src/memory/job-handlers/conversation-starters.ts +16 -10
- package/src/memory/jobs-store.ts +64 -4
- package/src/memory/jobs-worker.ts +22 -9
- package/src/memory/llm-usage-store.ts +137 -60
- package/src/memory/migrations/213-oauth-providers-scope-separator.ts +13 -0
- package/src/memory/migrations/214-oauth-providers-refresh-url.ts +11 -0
- package/src/memory/migrations/215-oauth-providers-revoke.ts +14 -0
- package/src/memory/migrations/216-oauth-providers-token-auth-method.ts +30 -0
- package/src/memory/migrations/217-conversation-host-access.ts +40 -0
- package/src/memory/migrations/218-oauth-providers-logo-url.ts +11 -0
- package/src/memory/migrations/219-oauth-providers-token-exchange-body-format.ts +15 -0
- package/src/memory/migrations/220-normalize-user-file-by-principal.ts +190 -0
- package/src/memory/migrations/221-conversations-archived-at.ts +16 -0
- package/src/memory/migrations/index.ts +12 -0
- package/src/memory/migrations/registry.ts +16 -0
- package/src/memory/qdrant-manager.ts +43 -16
- package/src/memory/schema/conversations.ts +3 -0
- package/src/memory/schema/oauth.ts +21 -13
- package/src/memory/usage-buckets.ts +396 -0
- package/src/messaging/providers/gmail/client.ts +57 -6
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +282 -0
- package/src/messaging/providers/slack/adapter.ts +143 -38
- package/src/messaging/providers/slack/client.ts +16 -0
- package/src/messaging/providers/slack/types.ts +4 -0
- package/src/notifications/decision-engine.ts +3 -3
- package/src/notifications/signal.ts +5 -0
- package/src/oauth/AGENTS.md +76 -0
- package/src/oauth/__tests__/identity-verifier.test.ts +25 -19
- package/src/oauth/__tests__/seed-providers-managed.test.ts +32 -0
- package/src/oauth/byo-connection.test.ts +26 -9
- package/src/oauth/byo-connection.ts +10 -8
- package/src/oauth/connect-orchestrator.ts +25 -21
- package/src/oauth/connect-types.ts +3 -3
- package/src/oauth/connection-resolver.test.ts +17 -4
- package/src/oauth/connection-resolver.ts +22 -18
- package/src/oauth/connection.ts +3 -1
- package/src/oauth/manual-token-connection.ts +13 -13
- package/src/oauth/oauth-store.ts +223 -100
- package/src/oauth/platform-connection.test.ts +101 -3
- package/src/oauth/platform-connection.ts +56 -35
- package/src/oauth/provider-serializer.ts +31 -5
- package/src/oauth/revoke.ts +76 -0
- package/src/oauth/seed-providers.ts +133 -87
- package/src/oauth/token-persistence.ts +1 -1
- package/src/permissions/checker.ts +16 -6
- package/src/permissions/defaults.ts +49 -1
- package/src/permissions/permission-mode.ts +4 -11
- package/src/permissions/prompter.ts +13 -1
- package/src/permissions/trust-store.ts +3 -3
- package/src/permissions/v2-consent-policy.ts +87 -0
- package/src/permissions/workspace-policy.ts +3 -0
- package/src/platform/client.test.ts +10 -0
- package/src/platform/sync-identity.ts +129 -0
- package/src/prompts/persona-resolver.ts +126 -2
- package/src/prompts/system-prompt.ts +76 -38
- package/src/prompts/templates/BOOTSTRAP-REFERENCE.md +3 -65
- package/src/prompts/templates/BOOTSTRAP.md +59 -105
- package/src/prompts/templates/SOUL.md +3 -1
- package/src/prompts/templates/UPDATES.md +12 -0
- package/src/prompts/templates/channels/slack.md +20 -0
- package/src/prompts/update-bulletin-format.ts +26 -9
- package/src/prompts/update-bulletin.ts +34 -23
- package/src/prompts/user-reference.ts +20 -17
- package/src/providers/__tests__/provider-secret-catalog.test.ts +42 -0
- package/src/providers/anthropic/client.ts +157 -60
- package/src/providers/fireworks/client.ts +2 -2
- package/src/providers/gemini/client.ts +9 -1
- package/src/providers/model-catalog.ts +6 -0
- package/src/providers/model-intents.ts +4 -4
- package/src/providers/ollama/client.ts +2 -2
- package/src/providers/openai/chat-completions-provider.ts +474 -0
- package/src/providers/openai/client.ts +25 -440
- package/src/providers/openai/responses-provider.ts +502 -0
- package/src/providers/openrouter/client.ts +101 -4
- package/src/providers/provider-secret-catalog.ts +139 -0
- package/src/providers/registry.ts +2 -2
- package/src/providers/retry.ts +14 -3
- package/src/providers/speech-to-text/__tests__/provider-catalog.test.ts +251 -0
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +828 -0
- package/src/providers/speech-to-text/deepgram-realtime.test.ts +980 -0
- package/src/providers/speech-to-text/deepgram-realtime.ts +767 -0
- package/src/providers/speech-to-text/deepgram.test.ts +332 -0
- package/src/providers/speech-to-text/deepgram.ts +115 -0
- package/src/providers/speech-to-text/google-gemini-live-stream.test.ts +743 -0
- package/src/providers/speech-to-text/google-gemini-live-stream.ts +625 -0
- package/src/providers/speech-to-text/google-gemini.test.ts +226 -0
- package/src/providers/speech-to-text/google-gemini.ts +101 -0
- package/src/providers/speech-to-text/openai-whisper-stream.test.ts +564 -0
- package/src/providers/speech-to-text/openai-whisper-stream.ts +381 -0
- package/src/providers/speech-to-text/openai-whisper.test.ts +1 -37
- package/src/providers/speech-to-text/openai-whisper.ts +63 -33
- package/src/providers/speech-to-text/provider-catalog.ts +306 -0
- package/src/providers/speech-to-text/resolve.ts +386 -6
- package/src/providers/types.ts +10 -1
- package/src/runtime/AGENTS.md +65 -0
- package/src/runtime/__tests__/agent-wake.test.ts +831 -0
- package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +715 -0
- package/src/runtime/__tests__/capability-tokens.test.ts +258 -0
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +518 -0
- package/src/runtime/__tests__/runtime-mode.test.ts +62 -0
- package/src/runtime/__tests__/slack-block-formatting.test.ts +481 -0
- package/src/runtime/agent-wake.ts +512 -0
- package/src/runtime/assistant-event-hub.ts +2 -2
- package/src/runtime/auth/__tests__/guard-tests.test.ts +1 -0
- package/src/runtime/auth/__tests__/middleware.test.ts +116 -1
- package/src/runtime/auth/__tests__/route-policy.test.ts +48 -0
- package/src/runtime/auth/middleware.ts +98 -0
- package/src/runtime/auth/route-policy.ts +33 -9
- package/src/runtime/auth/token-service.ts +56 -1
- package/src/runtime/btw-sidechain.ts +2 -0
- package/src/runtime/capability-tokens.ts +414 -0
- package/src/runtime/channel-approvals.ts +18 -5
- package/src/runtime/channel-invite-transport.ts +1 -1
- package/src/runtime/channel-invite-transports/email.ts +14 -6
- package/src/runtime/channel-readiness-service.ts +12 -22
- package/src/runtime/chrome-extension-registry.ts +368 -0
- package/src/runtime/confirmation-request-guardian-bridge.ts +6 -0
- package/src/runtime/guardian-decision-types.ts +7 -0
- package/src/runtime/http-server.ts +815 -75
- package/src/runtime/http-types.ts +6 -2
- package/src/runtime/migrations/__tests__/rebind-secrets-credentials.test.ts +172 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +276 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +198 -0
- package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +360 -0
- package/src/runtime/migrations/migration-transport.ts +7 -0
- package/src/runtime/migrations/migration-wizard.ts +23 -2
- package/src/runtime/migrations/rebind-secrets-screen.ts +76 -15
- package/src/runtime/migrations/vbundle-builder.ts +145 -38
- package/src/runtime/migrations/vbundle-import-analyzer.ts +96 -1
- package/src/runtime/migrations/vbundle-importer.ts +89 -5
- package/src/runtime/pending-interactions.ts +18 -13
- package/src/runtime/routes/__tests__/backup-routes.test.ts +967 -0
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +507 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +208 -0
- package/src/runtime/routes/__tests__/stt-routes.test.ts +406 -0
- package/src/runtime/routes/__tests__/tts-routes.test.ts +474 -0
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +148 -17
- package/src/runtime/routes/app-management-routes.ts +12 -18
- package/src/runtime/routes/approval-routes.ts +90 -16
- package/src/runtime/routes/attachment-routes.test.ts +9 -3
- package/src/runtime/routes/attachment-routes.ts +216 -17
- package/src/runtime/routes/backup-routes.ts +519 -0
- package/src/runtime/routes/browser-extension-pair-routes.ts +556 -0
- package/src/runtime/routes/btw-routes.ts +8 -6
- package/src/runtime/routes/contact-routes.test.ts +298 -0
- package/src/runtime/routes/contact-routes.ts +132 -5
- package/src/runtime/routes/conversation-analysis-routes.ts +22 -141
- package/src/runtime/routes/conversation-management-routes.ts +223 -0
- package/src/runtime/routes/conversation-routes.ts +598 -103
- package/src/runtime/routes/conversation-starter-routes.ts +78 -16
- package/src/runtime/routes/filing-routes.ts +93 -0
- package/src/runtime/routes/guardian-action-routes.ts +24 -13
- package/src/runtime/routes/home-feed-routes.ts +334 -0
- package/src/runtime/routes/home-state-routes.ts +138 -0
- package/src/runtime/routes/host-browser-routes.ts +268 -0
- package/src/runtime/routes/host-file-routes.ts +9 -1
- package/src/runtime/routes/identity-intro-cache.ts +7 -3
- package/src/runtime/routes/identity-routes.ts +262 -33
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +46 -39
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +15 -15
- package/src/runtime/routes/integrations/slack/__tests__/channel.test.ts +137 -0
- package/src/runtime/routes/integrations/slack/__tests__/share.test.ts +179 -0
- package/src/runtime/routes/integrations/slack/channel.ts +11 -3
- package/src/runtime/routes/integrations/slack/share.ts +45 -7
- package/src/runtime/routes/llm-context-normalization.ts +303 -0
- package/src/runtime/routes/log-export-routes.ts +42 -22
- package/src/runtime/routes/memory-item-routes.test.ts +3 -2
- package/src/runtime/routes/memory-item-routes.ts +1 -7
- package/src/runtime/routes/migration-routes.ts +122 -2
- package/src/runtime/routes/oauth-apps.ts +15 -17
- package/src/runtime/routes/oauth-providers.ts +4 -0
- package/src/runtime/routes/schedule-routes.ts +24 -11
- package/src/runtime/routes/settings-routes.ts +31 -102
- package/src/runtime/routes/skills-routes.ts +128 -9
- package/src/runtime/routes/stt-routes.ts +233 -0
- package/src/runtime/routes/subagents-routes.ts +14 -10
- package/src/runtime/routes/surface-action-routes.ts +41 -2
- package/src/runtime/routes/tts-routes.ts +108 -24
- package/src/runtime/routes/usage-routes.ts +38 -9
- package/src/runtime/routes/user-route-dispatcher.ts +50 -5
- package/src/runtime/routes/user-routes.ts +13 -1
- package/src/runtime/routes/work-items-routes.ts +8 -1
- package/src/runtime/routes/workspace-routes.test.ts +22 -0
- package/src/runtime/routes/workspace-routes.ts +8 -1
- package/src/runtime/routes/workspace-utils.ts +2 -0
- package/src/runtime/runtime-mode.ts +33 -0
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +444 -0
- package/src/runtime/services/__tests__/analyze-deps-singleton.test.ts +67 -0
- package/src/runtime/services/__tests__/auto-analysis-prompt.test.ts +53 -0
- package/src/runtime/services/__tests__/manual-analysis-prompt.test.ts +41 -0
- package/src/runtime/services/analyze-conversation.ts +344 -0
- package/src/runtime/services/analyze-deps-singleton.ts +32 -0
- package/src/runtime/services/auto-analysis-prompt.ts +55 -0
- package/src/runtime/skill-route-registry.ts +49 -0
- package/src/runtime/slack-block-formatting.ts +437 -10
- package/src/schedule/scheduler.ts +57 -5
- package/src/security/ces-credential-client.ts +20 -0
- package/src/security/ces-rpc-credential-backend.ts +17 -0
- package/src/security/credential-backend.ts +5 -0
- package/src/security/oauth2.ts +68 -29
- package/src/security/secure-keys.ts +143 -27
- package/src/security/token-manager.ts +31 -10
- package/src/sequence/engine.ts +23 -0
- package/src/sequence/types.ts +1 -1
- package/src/skills/catalog-files.ts +554 -0
- package/src/skills/category-inference.ts +122 -0
- package/src/skills/clawhub-files.ts +213 -0
- package/src/skills/clawhub.ts +84 -23
- package/src/skills/skill-file-provider.ts +40 -0
- package/src/skills/skillssh-files.ts +395 -0
- package/src/skills/skillssh-registry.ts +4 -4
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +392 -0
- package/src/stt/__tests__/types.test.ts +89 -0
- package/src/stt/daemon-batch-transcriber.ts +195 -0
- package/src/stt/stt-stream-session.ts +499 -0
- package/src/stt/types.ts +330 -0
- package/src/stt/wav-encoder.test.ts +373 -0
- package/src/stt/wav-encoder.ts +175 -0
- package/src/subagent/manager.ts +169 -40
- package/src/subagent/types.ts +19 -0
- package/src/tools/apps/executors.ts +11 -2
- package/src/tools/browser/__tests__/auth-detector.test.ts +202 -108
- package/src/tools/browser/__tests__/browser-mode.test.ts +119 -0
- package/src/tools/browser/__tests__/browser-status.test.ts +123 -0
- package/src/tools/browser/auth-detector.ts +43 -12
- package/src/tools/browser/browser-execution.ts +1787 -342
- package/src/tools/browser/browser-manager.ts +81 -12
- package/src/tools/browser/browser-mode-constants.ts +12 -0
- package/src/tools/browser/browser-mode.ts +92 -0
- package/src/tools/browser/browser-status-constants.ts +33 -0
- package/src/tools/browser/cdp-client/__tests__/accessibility-snapshot.test.ts +318 -0
- package/src/tools/browser/cdp-client/__tests__/cdp-dom-helpers.test.ts +1175 -0
- package/src/tools/browser/cdp-client/__tests__/cdp-inspect-client.test.ts +1263 -0
- package/src/tools/browser/cdp-client/__tests__/extension-cdp-client.test.ts +359 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +1993 -0
- package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-nested-frames.json +64 -0
- package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-simple.json +69 -0
- package/src/tools/browser/cdp-client/__tests__/local-cdp-client.test.ts +310 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +96 -0
- package/src/tools/browser/cdp-client/accessibility-snapshot.ts +387 -0
- package/src/tools/browser/cdp-client/cdp-dom-helpers.ts +695 -0
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/discovery.test.ts +1007 -0
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +580 -0
- package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +744 -0
- package/src/tools/browser/cdp-client/cdp-inspect/ws-transport.ts +579 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +868 -0
- package/src/tools/browser/cdp-client/errors.ts +49 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +148 -0
- package/src/tools/browser/cdp-client/factory.ts +914 -0
- package/src/tools/browser/cdp-client/index.ts +28 -0
- package/src/tools/browser/cdp-client/local-cdp-client.ts +187 -0
- package/src/tools/browser/cdp-client/types.ts +120 -0
- package/src/tools/credentials/vault.ts +35 -6
- package/src/tools/filesystem/edit.ts +1 -1
- package/src/tools/filesystem/list.ts +1 -1
- package/src/tools/filesystem/read.ts +1 -1
- package/src/tools/filesystem/write.ts +2 -1
- package/src/tools/host-filesystem/edit.ts +1 -1
- package/src/tools/host-filesystem/read.ts +12 -15
- package/src/tools/host-filesystem/write.ts +1 -1
- package/src/tools/host-terminal/host-shell.ts +21 -16
- package/src/tools/network/web-fetch.ts +5 -2
- package/src/tools/network/web-search.ts +5 -2
- package/src/tools/permission-checker.ts +77 -82
- package/src/tools/registry.ts +0 -2
- package/src/tools/secret-detection-handler.ts +34 -0
- package/src/tools/shared/filesystem/image-read.ts +61 -40
- package/src/tools/shared/shell-output.ts +3 -1
- package/src/tools/side-effects.ts +2 -0
- package/src/tools/skills/sandbox-runner.ts +3 -2
- package/src/tools/subagent/spawn.ts +47 -3
- package/src/tools/subagent/status.ts +2 -0
- package/src/tools/system/register.ts +2 -16
- package/src/tools/terminal/safe-env.ts +15 -0
- package/src/tools/terminal/shell.ts +36 -20
- package/src/tools/tool-approval-handler.ts +48 -2
- package/src/tools/tool-manifest.ts +21 -0
- package/src/tools/types.ts +19 -0
- package/src/tools/ui-surface/definitions.ts +6 -1
- package/src/tts/__tests__/provider-adapters.test.ts +834 -0
- package/src/tts/__tests__/provider-catalog-consistency.test.ts +196 -0
- package/src/tts/__tests__/provider-catalog.test.ts +183 -0
- package/src/tts/__tests__/provider-registry.test.ts +90 -0
- package/src/tts/provider-catalog.ts +201 -0
- package/src/tts/provider-registry.ts +73 -0
- package/src/tts/providers/deepgram-provider.ts +219 -0
- package/src/tts/providers/elevenlabs-provider.ts +211 -0
- package/src/tts/providers/fish-audio-provider.ts +183 -0
- package/src/tts/providers/index.ts +42 -0
- package/src/tts/providers/register-builtins.ts +130 -0
- package/src/tts/synthesize-text.ts +110 -0
- package/src/tts/tts-config-resolver.ts +78 -0
- package/src/tts/types.ts +153 -0
- package/src/types/onboarding-context.ts +7 -0
- package/src/util/abort-reasons.ts +58 -0
- package/src/util/device-id.ts +32 -16
- package/src/util/errors.ts +9 -1
- package/src/util/platform.ts +63 -24
- package/src/util/pricing.ts +66 -3
- package/src/util/spawn.ts +1 -1
- package/src/util/truncate.ts +4 -2
- package/src/util/unicode.ts +201 -0
- package/src/version.ts +19 -24
- package/src/watcher/engine.ts +23 -0
- package/src/watcher/watcher-store.ts +31 -0
- package/src/workspace/migrations/003-seed-device-id.ts +9 -3
- package/src/workspace/migrations/017-seed-persona-dirs.ts +68 -4
- package/src/workspace/migrations/029-seed-pkb.ts +1 -1
- package/src/workspace/migrations/031-drop-user-md.ts +317 -0
- package/src/workspace/migrations/031-llm-log-retention-zero-to-null.ts +73 -0
- package/src/workspace/migrations/032-tts-provider-unification.ts +227 -0
- package/src/workspace/migrations/033-stt-service-explicit-config.ts +122 -0
- package/src/workspace/migrations/034-remove-calls-voice-transcription-provider.ts +215 -0
- package/src/workspace/migrations/035-seed-slack-channel-persona.ts +50 -0
- package/src/workspace/migrations/036-update-pkb-index-bar.ts +37 -0
- package/src/workspace/migrations/037-create-meets-dir.ts +61 -0
- package/src/workspace/migrations/registry.ts +16 -0
- package/src/workspace/top-level-renderer.ts +31 -1
- package/src/workspace/turn-commit.ts +31 -0
- package/src/__tests__/chrome-cdp.test.ts +0 -419
- package/src/__tests__/email-cli.test.ts +0 -297
- package/src/__tests__/email-service-config-fallback.test.ts +0 -102
- package/src/__tests__/permission-mode-sse.test.ts +0 -418
- package/src/__tests__/permission-mode-store.test.ts +0 -277
- package/src/browser-extension-relay/protocol.ts +0 -63
- package/src/browser-extension-relay/server.ts +0 -203
- package/src/cli/commands/browser-relay.ts +0 -536
- package/src/config/schemas/sandbox.ts +0 -14
- package/src/email/guardrails.ts +0 -221
- package/src/email/provider.ts +0 -117
- package/src/email/providers/agentmail.ts +0 -361
- package/src/email/providers/index.ts +0 -65
- package/src/email/service.ts +0 -384
- package/src/email/types.ts +0 -126
- package/src/permissions/permission-mode-store.ts +0 -180
- package/src/prompts/templates/USER.md +0 -13
- package/src/providers/speech-to-text/types.ts +0 -17
- package/src/tools/browser/chrome-cdp.ts +0 -239
- package/src/tools/system/set-permission-mode.ts +0 -103
|
@@ -24,26 +24,66 @@ export const FilingConfigSchema = z
|
|
|
24
24
|
.int("filing.activeHoursStart must be an integer")
|
|
25
25
|
.min(0, "filing.activeHoursStart must be >= 0")
|
|
26
26
|
.max(23, "filing.activeHoursStart must be <= 23")
|
|
27
|
-
.
|
|
28
|
-
.
|
|
27
|
+
.nullable()
|
|
28
|
+
.default(null)
|
|
29
|
+
.describe(
|
|
30
|
+
"Hour of the day (0-23) when filing runs begin, or null to disable active hours restriction",
|
|
31
|
+
),
|
|
29
32
|
activeHoursEnd: z
|
|
30
33
|
.number({ error: "filing.activeHoursEnd must be a number" })
|
|
31
34
|
.int("filing.activeHoursEnd must be an integer")
|
|
32
35
|
.min(0, "filing.activeHoursEnd must be >= 0")
|
|
33
36
|
.max(23, "filing.activeHoursEnd must be <= 23")
|
|
34
|
-
.
|
|
35
|
-
.
|
|
37
|
+
.nullable()
|
|
38
|
+
.default(null)
|
|
39
|
+
.describe(
|
|
40
|
+
"Hour of the day (0-23) when filing runs stop, or null to disable active hours restriction",
|
|
41
|
+
),
|
|
36
42
|
})
|
|
37
43
|
.describe(
|
|
38
44
|
"Periodic PKB (personal knowledge base) filing — processes the buffer into topic files and maintains knowledge organization",
|
|
39
45
|
)
|
|
40
46
|
.superRefine((config, ctx) => {
|
|
41
|
-
|
|
47
|
+
const startNull = config.activeHoursStart == null;
|
|
48
|
+
const endNull = config.activeHoursEnd == null;
|
|
49
|
+
if (startNull !== endNull) {
|
|
50
|
+
// Emit on both fields so validateWithSchema's delete-and-retry repair
|
|
51
|
+
// can strip whichever side was set (and no-op the null side), letting
|
|
52
|
+
// the config fall back to both-null defaults without a full reset.
|
|
53
|
+
const message =
|
|
54
|
+
"filing.activeHoursStart and filing.activeHoursEnd must both be set or both be null";
|
|
55
|
+
ctx.addIssue({
|
|
56
|
+
code: z.ZodIssueCode.custom,
|
|
57
|
+
path: ["activeHoursStart"],
|
|
58
|
+
message,
|
|
59
|
+
});
|
|
60
|
+
ctx.addIssue({
|
|
61
|
+
code: z.ZodIssueCode.custom,
|
|
62
|
+
path: ["activeHoursEnd"],
|
|
63
|
+
message,
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (
|
|
68
|
+
config.activeHoursStart != null &&
|
|
69
|
+
config.activeHoursEnd != null &&
|
|
70
|
+
config.activeHoursStart === config.activeHoursEnd
|
|
71
|
+
) {
|
|
72
|
+
// Emit on both fields. Filing's defaults are null/null, so single-emit
|
|
73
|
+
// on one side would cascade: delete-and-retry strips one key, the null
|
|
74
|
+
// default recreates a new mismatch, and the loader falls back to full
|
|
75
|
+
// defaults — wiping unrelated fields like maxTokens.
|
|
76
|
+
const message =
|
|
77
|
+
"filing.activeHoursStart and filing.activeHoursEnd must not be equal (would create an empty window)";
|
|
78
|
+
ctx.addIssue({
|
|
79
|
+
code: z.ZodIssueCode.custom,
|
|
80
|
+
path: ["activeHoursStart"],
|
|
81
|
+
message,
|
|
82
|
+
});
|
|
42
83
|
ctx.addIssue({
|
|
43
84
|
code: z.ZodIssueCode.custom,
|
|
44
85
|
path: ["activeHoursEnd"],
|
|
45
|
-
message
|
|
46
|
-
"filing.activeHoursStart and filing.activeHoursEnd must not be equal (would create an empty window)",
|
|
86
|
+
message,
|
|
47
87
|
});
|
|
48
88
|
}
|
|
49
89
|
});
|
|
@@ -43,11 +43,23 @@ export const HeartbeatConfigSchema = z
|
|
|
43
43
|
const startNull = config.activeHoursStart == null;
|
|
44
44
|
const endNull = config.activeHoursEnd == null;
|
|
45
45
|
if (startNull !== endNull) {
|
|
46
|
+
// Emit on both fields so validateWithSchema's delete-and-retry strips
|
|
47
|
+
// both sides in one pass. Single-emit on the null side can cascade when
|
|
48
|
+
// the explicit value happens to equal the opposite default (e.g.
|
|
49
|
+
// { start: null, end: 8 } → strip start → default 8 → equal check fires
|
|
50
|
+
// → loader falls back to full defaults, wiping unrelated keys like
|
|
51
|
+
// maxTokens).
|
|
52
|
+
const message =
|
|
53
|
+
"heartbeat.activeHoursStart and heartbeat.activeHoursEnd must both be set or both be null";
|
|
46
54
|
ctx.addIssue({
|
|
47
55
|
code: z.ZodIssueCode.custom,
|
|
48
|
-
path: [
|
|
49
|
-
message
|
|
50
|
-
|
|
56
|
+
path: ["activeHoursStart"],
|
|
57
|
+
message,
|
|
58
|
+
});
|
|
59
|
+
ctx.addIssue({
|
|
60
|
+
code: z.ZodIssueCode.custom,
|
|
61
|
+
path: ["activeHoursEnd"],
|
|
62
|
+
message,
|
|
51
63
|
});
|
|
52
64
|
return;
|
|
53
65
|
}
|
|
@@ -56,11 +68,21 @@ export const HeartbeatConfigSchema = z
|
|
|
56
68
|
config.activeHoursEnd != null &&
|
|
57
69
|
config.activeHoursStart === config.activeHoursEnd
|
|
58
70
|
) {
|
|
71
|
+
// Emit on both fields. Single-emit would strip one side and the default
|
|
72
|
+
// for that side could recreate a new mismatch (e.g. { start: 22, end: 22 }
|
|
73
|
+
// → strip end → default 22 → equal again), cascading to a full defaults
|
|
74
|
+
// reset that wipes unrelated fields.
|
|
75
|
+
const message =
|
|
76
|
+
"heartbeat.activeHoursStart and heartbeat.activeHoursEnd must not be equal (would create an empty window)";
|
|
77
|
+
ctx.addIssue({
|
|
78
|
+
code: z.ZodIssueCode.custom,
|
|
79
|
+
path: ["activeHoursStart"],
|
|
80
|
+
message,
|
|
81
|
+
});
|
|
59
82
|
ctx.addIssue({
|
|
60
83
|
code: z.ZodIssueCode.custom,
|
|
61
84
|
path: ["activeHoursEnd"],
|
|
62
|
-
message
|
|
63
|
-
"heartbeat.activeHoursStart and heartbeat.activeHoursEnd must not be equal (would create an empty window)",
|
|
85
|
+
message,
|
|
64
86
|
});
|
|
65
87
|
}
|
|
66
88
|
});
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for the automatic cdp-inspect attempt on macOS. When a macOS
|
|
5
|
+
* turn reaches the CDP factory and `desktopAuto.enabled` is true, the factory
|
|
6
|
+
* includes cdp-inspect as a candidate even when the top-level `enabled` flag
|
|
7
|
+
* is false. This lets macOS users benefit from direct Chrome attach without
|
|
8
|
+
* requiring manual `hostBrowser.cdpInspect.enabled = true`.
|
|
9
|
+
*
|
|
10
|
+
* If the cdp-inspect probe fails (e.g. Chrome was not launched with
|
|
11
|
+
* `--remote-debugging-port`), the factory records a cooldown timestamp and
|
|
12
|
+
* skips the probe for subsequent calls until the cooldown expires. This bounds
|
|
13
|
+
* the per-call latency penalty to `probeTimeoutMs` once per cooldown window.
|
|
14
|
+
*/
|
|
15
|
+
export const DesktopAutoCdpInspectConfigSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
enabled: z
|
|
18
|
+
.boolean({
|
|
19
|
+
error: "hostBrowser.cdpInspect.desktopAuto.enabled must be a boolean",
|
|
20
|
+
})
|
|
21
|
+
.default(true)
|
|
22
|
+
.describe(
|
|
23
|
+
"Whether macOS turns automatically attempt cdp-inspect before falling back to the local Playwright backend. When true (default on macOS), the factory inserts a cdp-inspect candidate between the extension and local backends even when the top-level `cdpInspect.enabled` is false.",
|
|
24
|
+
),
|
|
25
|
+
cooldownMs: z
|
|
26
|
+
.number({
|
|
27
|
+
error: "hostBrowser.cdpInspect.desktopAuto.cooldownMs must be a number",
|
|
28
|
+
})
|
|
29
|
+
.int("hostBrowser.cdpInspect.desktopAuto.cooldownMs must be an integer")
|
|
30
|
+
.min(0, "hostBrowser.cdpInspect.desktopAuto.cooldownMs must be >= 0")
|
|
31
|
+
.max(
|
|
32
|
+
300_000,
|
|
33
|
+
"hostBrowser.cdpInspect.desktopAuto.cooldownMs must be <= 300000",
|
|
34
|
+
)
|
|
35
|
+
.default(30_000)
|
|
36
|
+
.describe(
|
|
37
|
+
"Duration (in milliseconds) to suppress automatic cdp-inspect probes after a transport-level failure. While on cooldown the factory skips the cdp-inspect candidate and goes straight to the local backend. Set to 0 to disable cooldown (always probe).",
|
|
38
|
+
),
|
|
39
|
+
})
|
|
40
|
+
.describe("Auto-attempt policy for cdp-inspect on macOS-originated turns.");
|
|
41
|
+
|
|
42
|
+
export type DesktopAutoCdpInspectConfig = z.infer<
|
|
43
|
+
typeof DesktopAutoCdpInspectConfigSchema
|
|
44
|
+
>;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Configuration for the `cdp-inspect` browser backend — connects directly
|
|
48
|
+
* to a host Chrome instance that was launched with `--remote-debugging-port`
|
|
49
|
+
* (e.g. `chrome://inspect`-style remote debugging) as an alternative to the
|
|
50
|
+
* extension or local Playwright backend.
|
|
51
|
+
*/
|
|
52
|
+
export const HostBrowserCdpInspectConfigSchema = z
|
|
53
|
+
.object({
|
|
54
|
+
enabled: z
|
|
55
|
+
.boolean({ error: "hostBrowser.cdpInspect.enabled must be a boolean" })
|
|
56
|
+
.default(false)
|
|
57
|
+
.describe(
|
|
58
|
+
"Whether the cdp-inspect backend is enabled. When true, the factory will route browser tool calls through the configured host/port instead of the local Playwright backend.",
|
|
59
|
+
),
|
|
60
|
+
host: z
|
|
61
|
+
.string({ error: "hostBrowser.cdpInspect.host must be a string" })
|
|
62
|
+
.transform((v) => v || "localhost")
|
|
63
|
+
.default("localhost")
|
|
64
|
+
.describe(
|
|
65
|
+
"Host name or IP address where the host Chrome instance exposes its remote debugging endpoint.",
|
|
66
|
+
),
|
|
67
|
+
port: z
|
|
68
|
+
.number({ error: "hostBrowser.cdpInspect.port must be a number" })
|
|
69
|
+
.int("hostBrowser.cdpInspect.port must be an integer")
|
|
70
|
+
.min(1, "hostBrowser.cdpInspect.port must be >= 1")
|
|
71
|
+
.max(65535, "hostBrowser.cdpInspect.port must be <= 65535")
|
|
72
|
+
.default(9222)
|
|
73
|
+
.describe(
|
|
74
|
+
"TCP port for the host Chrome remote-debugging endpoint (matches `--remote-debugging-port`).",
|
|
75
|
+
),
|
|
76
|
+
probeTimeoutMs: z
|
|
77
|
+
.number({
|
|
78
|
+
error: "hostBrowser.cdpInspect.probeTimeoutMs must be a number",
|
|
79
|
+
})
|
|
80
|
+
.int("hostBrowser.cdpInspect.probeTimeoutMs must be an integer")
|
|
81
|
+
.min(50, "hostBrowser.cdpInspect.probeTimeoutMs must be >= 50")
|
|
82
|
+
.max(5000, "hostBrowser.cdpInspect.probeTimeoutMs must be <= 5000")
|
|
83
|
+
.default(500)
|
|
84
|
+
.describe(
|
|
85
|
+
"Timeout (in milliseconds) for the backend availability probe. Kept small so browser tool calls fail fast when the endpoint is unreachable.",
|
|
86
|
+
),
|
|
87
|
+
desktopAuto: DesktopAutoCdpInspectConfigSchema.default(
|
|
88
|
+
DesktopAutoCdpInspectConfigSchema.parse({}),
|
|
89
|
+
),
|
|
90
|
+
})
|
|
91
|
+
.describe(
|
|
92
|
+
"Settings for the cdp-inspect backend that connects to a host Chrome instance via its remote-debugging endpoint.",
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
export type HostBrowserCdpInspectConfig = z.infer<
|
|
96
|
+
typeof HostBrowserCdpInspectConfigSchema
|
|
97
|
+
>;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Top-level configuration for host-browser backends. Currently only exposes
|
|
101
|
+
* `cdpInspect`, but the shape leaves room for additional host-browser knobs
|
|
102
|
+
* (e.g. extension-specific settings) without another namespace churn.
|
|
103
|
+
*/
|
|
104
|
+
export const HostBrowserConfigSchema = z
|
|
105
|
+
.object({
|
|
106
|
+
cdpInspect: HostBrowserCdpInspectConfigSchema.default(
|
|
107
|
+
HostBrowserCdpInspectConfigSchema.parse({}),
|
|
108
|
+
),
|
|
109
|
+
})
|
|
110
|
+
.describe("Host-browser backend configuration (cdp-inspect, etc.)");
|
|
111
|
+
|
|
112
|
+
export type HostBrowserConfig = z.infer<typeof HostBrowserConfigSchema>;
|
|
@@ -42,7 +42,7 @@ export const SpeedSchema = z
|
|
|
42
42
|
})
|
|
43
43
|
.default("standard")
|
|
44
44
|
.describe(
|
|
45
|
-
'Inference speed mode — "fast" enables higher output token throughput on supported models (Opus 4.6) at premium pricing',
|
|
45
|
+
'Inference speed mode — "fast" enables higher output token throughput on supported models (Opus 4.6, Opus 4.7) at premium pricing',
|
|
46
46
|
);
|
|
47
47
|
|
|
48
48
|
export type Speed = z.infer<typeof SpeedSchema>;
|
|
@@ -80,9 +80,21 @@ export const MemoryCleanupConfigSchema = z
|
|
|
80
80
|
.nonnegative(
|
|
81
81
|
"memory.cleanup.llmRequestLogRetentionMs must be non-negative",
|
|
82
82
|
)
|
|
83
|
-
|
|
83
|
+
// Upper bound must match gateway MAX_LLM_REQUEST_LOG_RETENTION_MS in
|
|
84
|
+
// gateway/src/http/routes/privacy-config.ts. If a manually edited
|
|
85
|
+
// config.json sets a value larger than this, the gateway GET would
|
|
86
|
+
// return it and the macOS picker would snap it to its largest known
|
|
87
|
+
// option, and the next PATCH would silently truncate the value —
|
|
88
|
+
// causing quiet data loss. Enforcing the same cap here prevents the
|
|
89
|
+
// daemon from accepting out-of-range values in the first place.
|
|
90
|
+
.max(
|
|
91
|
+
365 * 24 * 60 * 60 * 1000,
|
|
92
|
+
"memory.cleanup.llmRequestLogRetentionMs must be <= 365 days in ms",
|
|
93
|
+
)
|
|
94
|
+
.nullable()
|
|
95
|
+
.default(1 * 60 * 60 * 1000)
|
|
84
96
|
.describe(
|
|
85
|
-
"Retention period for LLM request/response logs in milliseconds (0
|
|
97
|
+
"Retention period for LLM request/response logs in milliseconds (null keeps forever, 0 prunes immediately)",
|
|
86
98
|
),
|
|
87
99
|
})
|
|
88
100
|
.describe("Automatic memory cleanup and garbage collection settings");
|
|
@@ -184,6 +184,106 @@ const MemoryFreshnessConfigSchema = z
|
|
|
184
184
|
"Freshness-based ranking for memory retrieval — down-ranks old items unless recently reinforced",
|
|
185
185
|
);
|
|
186
186
|
|
|
187
|
+
const MemoryContextLoadInjectionSchema = z
|
|
188
|
+
.object({
|
|
189
|
+
maxNodes: z
|
|
190
|
+
.number({
|
|
191
|
+
error:
|
|
192
|
+
"memory.retrieval.injection.contextLoad.maxNodes must be a number",
|
|
193
|
+
})
|
|
194
|
+
.int("memory.retrieval.injection.contextLoad.maxNodes must be an integer")
|
|
195
|
+
.positive(
|
|
196
|
+
"memory.retrieval.injection.contextLoad.maxNodes must be a positive integer",
|
|
197
|
+
)
|
|
198
|
+
.default(25)
|
|
199
|
+
.describe("Maximum number of memory nodes to load at conversation start"),
|
|
200
|
+
serendipitySlots: z
|
|
201
|
+
.number({
|
|
202
|
+
error:
|
|
203
|
+
"memory.retrieval.injection.contextLoad.serendipitySlots must be a number",
|
|
204
|
+
})
|
|
205
|
+
.int(
|
|
206
|
+
"memory.retrieval.injection.contextLoad.serendipitySlots must be an integer",
|
|
207
|
+
)
|
|
208
|
+
.nonnegative(
|
|
209
|
+
"memory.retrieval.injection.contextLoad.serendipitySlots must be non-negative",
|
|
210
|
+
)
|
|
211
|
+
.default(5)
|
|
212
|
+
.describe("Number of random wildcard memory picks at conversation start"),
|
|
213
|
+
capabilityReserve: z
|
|
214
|
+
.number({
|
|
215
|
+
error:
|
|
216
|
+
"memory.retrieval.injection.contextLoad.capabilityReserve must be a number",
|
|
217
|
+
})
|
|
218
|
+
.int(
|
|
219
|
+
"memory.retrieval.injection.contextLoad.capabilityReserve must be an integer",
|
|
220
|
+
)
|
|
221
|
+
.nonnegative(
|
|
222
|
+
"memory.retrieval.injection.contextLoad.capabilityReserve must be non-negative",
|
|
223
|
+
)
|
|
224
|
+
.default(5)
|
|
225
|
+
.describe(
|
|
226
|
+
"Reserved slots for skill/CLI capability nodes at conversation start",
|
|
227
|
+
),
|
|
228
|
+
})
|
|
229
|
+
.describe("Memory injection limits at conversation start");
|
|
230
|
+
|
|
231
|
+
const MemoryPerTurnInjectionSchema = z
|
|
232
|
+
.object({
|
|
233
|
+
maxNodes: z
|
|
234
|
+
.number({
|
|
235
|
+
error: "memory.retrieval.injection.perTurn.maxNodes must be a number",
|
|
236
|
+
})
|
|
237
|
+
.int("memory.retrieval.injection.perTurn.maxNodes must be an integer")
|
|
238
|
+
.positive(
|
|
239
|
+
"memory.retrieval.injection.perTurn.maxNodes must be a positive integer",
|
|
240
|
+
)
|
|
241
|
+
.default(6)
|
|
242
|
+
.describe(
|
|
243
|
+
"Maximum total memory nodes injected per turn (general + capability + serendipity)",
|
|
244
|
+
),
|
|
245
|
+
serendipitySlots: z
|
|
246
|
+
.number({
|
|
247
|
+
error:
|
|
248
|
+
"memory.retrieval.injection.perTurn.serendipitySlots must be a number",
|
|
249
|
+
})
|
|
250
|
+
.int(
|
|
251
|
+
"memory.retrieval.injection.perTurn.serendipitySlots must be an integer",
|
|
252
|
+
)
|
|
253
|
+
.nonnegative(
|
|
254
|
+
"memory.retrieval.injection.perTurn.serendipitySlots must be non-negative",
|
|
255
|
+
)
|
|
256
|
+
.default(1)
|
|
257
|
+
.describe("Number of random wildcard memory picks per turn"),
|
|
258
|
+
capabilityReserve: z
|
|
259
|
+
.number({
|
|
260
|
+
error:
|
|
261
|
+
"memory.retrieval.injection.perTurn.capabilityReserve must be a number",
|
|
262
|
+
})
|
|
263
|
+
.int(
|
|
264
|
+
"memory.retrieval.injection.perTurn.capabilityReserve must be an integer",
|
|
265
|
+
)
|
|
266
|
+
.nonnegative(
|
|
267
|
+
"memory.retrieval.injection.perTurn.capabilityReserve must be non-negative",
|
|
268
|
+
)
|
|
269
|
+
.default(2)
|
|
270
|
+
.describe("Reserved slots for skill/CLI capability nodes per turn"),
|
|
271
|
+
})
|
|
272
|
+
.describe("Memory injection limits for mid-conversation turns");
|
|
273
|
+
|
|
274
|
+
export const MemoryInjectionConfigSchema = z
|
|
275
|
+
.object({
|
|
276
|
+
contextLoad: MemoryContextLoadInjectionSchema.default(
|
|
277
|
+
MemoryContextLoadInjectionSchema.parse({}),
|
|
278
|
+
),
|
|
279
|
+
perTurn: MemoryPerTurnInjectionSchema.default(
|
|
280
|
+
MemoryPerTurnInjectionSchema.parse({}),
|
|
281
|
+
),
|
|
282
|
+
})
|
|
283
|
+
.describe(
|
|
284
|
+
"Controls how many memory items are injected at conversation start and per turn",
|
|
285
|
+
);
|
|
286
|
+
|
|
187
287
|
export const MemoryRetrievalConfigSchema = z
|
|
188
288
|
.object({
|
|
189
289
|
maxInjectTokens: z
|
|
@@ -209,6 +309,9 @@ export const MemoryRetrievalConfigSchema = z
|
|
|
209
309
|
dynamicBudget: MemoryDynamicBudgetConfigSchema.default(
|
|
210
310
|
MemoryDynamicBudgetConfigSchema.parse({}),
|
|
211
311
|
),
|
|
312
|
+
injection: MemoryInjectionConfigSchema.default(
|
|
313
|
+
MemoryInjectionConfigSchema.parse({}),
|
|
314
|
+
),
|
|
212
315
|
})
|
|
213
316
|
.describe(
|
|
214
317
|
"Controls how memories are retrieved and injected into conversations",
|
|
@@ -79,12 +79,6 @@ export const PermissionsConfigSchema = z
|
|
|
79
79
|
.describe(
|
|
80
80
|
"Permission mode — 'strict' requires explicit approval for all operations, 'workspace' allows operations within the workspace",
|
|
81
81
|
),
|
|
82
|
-
askBeforeActing: z
|
|
83
|
-
.boolean({
|
|
84
|
-
error: "permissions.askBeforeActing must be a boolean",
|
|
85
|
-
})
|
|
86
|
-
.default(true)
|
|
87
|
-
.describe("Whether the assistant should check in before taking actions"),
|
|
88
82
|
hostAccess: z
|
|
89
83
|
.boolean({
|
|
90
84
|
error: "permissions.hostAccess must be a boolean",
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
+
import { SttServiceSchema } from "./stt.js";
|
|
4
|
+
import { TtsServiceSchema } from "./tts.js";
|
|
5
|
+
|
|
3
6
|
export const ServiceModeSchema = z.enum(["managed", "your-own"]);
|
|
4
7
|
export type ServiceMode = z.infer<typeof ServiceModeSchema>;
|
|
5
8
|
|
|
@@ -61,6 +64,21 @@ export const LinearOAuthServiceSchema = BaseServiceSchema.extend({
|
|
|
61
64
|
});
|
|
62
65
|
export type LinearOAuthService = z.infer<typeof LinearOAuthServiceSchema>;
|
|
63
66
|
|
|
67
|
+
export const GitHubOAuthServiceSchema = BaseServiceSchema.extend({
|
|
68
|
+
mode: ServiceModeSchema.default("your-own"),
|
|
69
|
+
});
|
|
70
|
+
export type GitHubOAuthService = z.infer<typeof GitHubOAuthServiceSchema>;
|
|
71
|
+
|
|
72
|
+
export const NotionOAuthServiceSchema = BaseServiceSchema.extend({
|
|
73
|
+
mode: ServiceModeSchema.default("your-own"),
|
|
74
|
+
});
|
|
75
|
+
export type NotionOAuthService = z.infer<typeof NotionOAuthServiceSchema>;
|
|
76
|
+
|
|
77
|
+
export const TwitterOAuthServiceSchema = BaseServiceSchema.extend({
|
|
78
|
+
mode: ServiceModeSchema.default("your-own"),
|
|
79
|
+
});
|
|
80
|
+
export type TwitterOAuthService = z.infer<typeof TwitterOAuthServiceSchema>;
|
|
81
|
+
|
|
64
82
|
export const ServicesSchema = z.object({
|
|
65
83
|
inference: InferenceServiceSchema.default(InferenceServiceSchema.parse({})),
|
|
66
84
|
"image-generation": ImageGenerationServiceSchema.default(
|
|
@@ -69,6 +87,12 @@ export const ServicesSchema = z.object({
|
|
|
69
87
|
"web-search": WebSearchServiceSchema.default(
|
|
70
88
|
WebSearchServiceSchema.parse({}),
|
|
71
89
|
),
|
|
90
|
+
stt: SttServiceSchema.default({
|
|
91
|
+
mode: "your-own" as const,
|
|
92
|
+
provider: "deepgram" as const,
|
|
93
|
+
providers: {},
|
|
94
|
+
}),
|
|
95
|
+
tts: TtsServiceSchema.default(TtsServiceSchema.parse({})),
|
|
72
96
|
"google-oauth": GoogleOAuthServiceSchema.default(
|
|
73
97
|
GoogleOAuthServiceSchema.parse({}),
|
|
74
98
|
),
|
|
@@ -78,5 +102,33 @@ export const ServicesSchema = z.object({
|
|
|
78
102
|
"linear-oauth": LinearOAuthServiceSchema.default(
|
|
79
103
|
LinearOAuthServiceSchema.parse({}),
|
|
80
104
|
),
|
|
105
|
+
"github-oauth": GitHubOAuthServiceSchema.default(
|
|
106
|
+
GitHubOAuthServiceSchema.parse({}),
|
|
107
|
+
),
|
|
108
|
+
"notion-oauth": NotionOAuthServiceSchema.default(
|
|
109
|
+
NotionOAuthServiceSchema.parse({}),
|
|
110
|
+
),
|
|
111
|
+
"twitter-oauth": TwitterOAuthServiceSchema.default(
|
|
112
|
+
TwitterOAuthServiceSchema.parse({}),
|
|
113
|
+
),
|
|
81
114
|
});
|
|
82
115
|
export type Services = z.infer<typeof ServicesSchema>;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Safely read the `mode` of a `services.*` entry.
|
|
119
|
+
*
|
|
120
|
+
* Most service entries (OAuth providers, inference, etc.) extend
|
|
121
|
+
* `BaseServiceSchema` and therefore carry a `mode: "managed" | "your-own"`
|
|
122
|
+
* field.
|
|
123
|
+
*
|
|
124
|
+
* Returns `undefined` when the requested service entry has no `mode` field,
|
|
125
|
+
* so callers can treat those entries as implicitly "your-own" without the
|
|
126
|
+
* compiler tripping on a union widened by non-BaseService members.
|
|
127
|
+
*/
|
|
128
|
+
export function getServiceMode(
|
|
129
|
+
services: Services,
|
|
130
|
+
key: keyof Services,
|
|
131
|
+
): ServiceMode | undefined {
|
|
132
|
+
const entry = services[key] as { mode?: ServiceMode };
|
|
133
|
+
return entry.mode;
|
|
134
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Valid STT provider identifiers. New providers append here and register
|
|
5
|
+
* an adapter.
|
|
6
|
+
*/
|
|
7
|
+
export const VALID_STT_PROVIDERS = [
|
|
8
|
+
"deepgram",
|
|
9
|
+
"google-gemini",
|
|
10
|
+
"openai-whisper",
|
|
11
|
+
] as const;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Sparse provider config map under `services.stt.providers`.
|
|
15
|
+
*
|
|
16
|
+
* This is a forward-compatible record that accepts any provider ID as key
|
|
17
|
+
* with an object value. All provider entries — known (`openai-whisper`,
|
|
18
|
+
* `deepgram`, `google-gemini`) and unknown — are accepted with generic object
|
|
19
|
+
* validation. Adding a new provider ID does not require a migration to seed
|
|
20
|
+
* `services.stt.providers.<id>`.
|
|
21
|
+
*
|
|
22
|
+
* The map only holds entries the user has explicitly configured — it is
|
|
23
|
+
* NOT required to enumerate every known provider.
|
|
24
|
+
*/
|
|
25
|
+
export const SttProvidersSchema = z.record(
|
|
26
|
+
z.string(),
|
|
27
|
+
z.record(z.string(), z.unknown()).default({}),
|
|
28
|
+
);
|
|
29
|
+
export type SttProviders = z.infer<typeof SttProvidersSchema>;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Canonical STT service configuration.
|
|
33
|
+
*
|
|
34
|
+
* `mode` is locked to `"your-own"` -- managed STT is not supported.
|
|
35
|
+
* Attempting to set `mode: "managed"` will fail schema validation.
|
|
36
|
+
*/
|
|
37
|
+
export const SttServiceSchema = z
|
|
38
|
+
.object({
|
|
39
|
+
mode: z
|
|
40
|
+
.literal("your-own", {
|
|
41
|
+
error:
|
|
42
|
+
'services.stt.mode must be "your-own" -- managed STT is not supported',
|
|
43
|
+
})
|
|
44
|
+
.default("your-own" as const)
|
|
45
|
+
.describe(
|
|
46
|
+
'STT service mode -- only "your-own" is supported (managed STT is not available)',
|
|
47
|
+
),
|
|
48
|
+
provider: z
|
|
49
|
+
.enum(VALID_STT_PROVIDERS, {
|
|
50
|
+
error: `services.stt.provider must be one of: ${VALID_STT_PROVIDERS.join(", ")}`,
|
|
51
|
+
})
|
|
52
|
+
.describe("Active STT provider used for speech-to-text transcription"),
|
|
53
|
+
providers: SttProvidersSchema.default({}),
|
|
54
|
+
})
|
|
55
|
+
.describe(
|
|
56
|
+
"Speech-to-text service configuration -- provider selection and per-provider settings",
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
export type SttService = z.infer<typeof SttServiceSchema>;
|