@vellumai/assistant 0.6.4 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +5 -0
- package/AGENTS.md +9 -1
- package/ARCHITECTURE.md +43 -49
- package/Dockerfile +17 -3
- package/README.md +3 -4
- package/__tests__/permissions/gateway-threshold-reader.test.ts +283 -0
- package/bun.lock +8 -3
- package/docs/architecture/integrations.md +33 -59
- package/docs/architecture/memory.md +25 -30
- package/docs/architecture/security.md +19 -18
- package/docs/browser-use-architecture-phase2.md +63 -20
- package/docs/error-handling.md +111 -0
- package/docs/plugins.md +761 -0
- package/docs/skills.md +10 -10
- package/docs/stt-provider-onboarding.md +2 -1
- package/examples/plugins/echo/README.md +132 -0
- package/examples/plugins/echo/package.json +17 -0
- package/examples/plugins/echo/register.ts +187 -0
- package/knip.json +9 -2
- package/node_modules/@vellumai/ces-contracts/package.json +2 -1
- package/node_modules/@vellumai/ces-contracts/src/__tests__/trust-rules.test.ts +471 -0
- package/node_modules/@vellumai/ces-contracts/src/trust-rules.ts +398 -4
- package/node_modules/@vellumai/credential-storage/bun.lock +2 -2
- package/node_modules/@vellumai/credential-storage/package.json +2 -2
- package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +20 -2
- package/node_modules/@vellumai/egress-proxy/bun.lock +2 -2
- package/node_modules/@vellumai/egress-proxy/package.json +2 -2
- package/node_modules/@vellumai/egress-proxy/src/types.ts +19 -0
- package/openapi.yaml +334 -78
- package/package.json +6 -3
- package/scripts/generate-openapi.ts +50 -11
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +318 -0
- package/src/__tests__/agent-loop-sentry-hygiene.test.ts +137 -0
- package/src/__tests__/agent-loop.test.ts +112 -1
- package/src/__tests__/anthropic-error-formatting.test.ts +98 -0
- package/src/__tests__/anthropic-provider.test.ts +171 -2
- package/src/__tests__/app-compiler.test.ts +57 -0
- package/src/__tests__/approval-cascade.test.ts +36 -10
- package/src/__tests__/approval-routes-http.test.ts +134 -10
- package/src/__tests__/assistant-attachments.test.ts +44 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +29 -0
- package/src/__tests__/auto-analysis-end-to-end.test.ts +1 -0
- package/src/__tests__/avatar-generator.test.ts +4 -2
- package/src/__tests__/browser-fill-credential.test.ts +1 -1
- package/src/__tests__/browser-identifier-parity-guard.test.ts +53 -0
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +23 -33
- package/src/__tests__/browser-skill-endstate.test.ts +51 -182
- package/src/__tests__/btw-routes.test.ts +47 -1
- package/src/__tests__/bundled-asset.test.ts +6 -6
- package/src/__tests__/call-controller.test.ts +1 -2
- package/src/__tests__/call-site-routing-provider.test.ts +214 -0
- package/src/__tests__/catalog-cache.test.ts +96 -4
- package/src/__tests__/channel-approval-routes.test.ts +4 -4
- package/src/__tests__/channel-reply-delivery.test.ts +300 -2
- package/src/__tests__/checker.test.ts +870 -655
- package/src/__tests__/circuit-breaker-pipeline.test.ts +406 -0
- package/src/__tests__/cli-command-risk-guard.test.ts +30 -33
- package/src/__tests__/compaction-events.test.ts +501 -0
- package/src/__tests__/compaction-pipeline.test.ts +210 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +181 -0
- package/src/__tests__/compaction-timeout-recovery.test.ts +262 -0
- package/src/__tests__/compaction.benchmark.test.ts +1 -1
- package/src/__tests__/config-analysis.test.ts +11 -28
- package/src/__tests__/config-loader-backfill.test.ts +174 -0
- package/src/__tests__/config-loader-corrupt.test.ts +183 -0
- package/src/__tests__/config-loader-quarantine-bulletin.test.ts +202 -0
- package/src/__tests__/config-model-image-provider.test.ts +110 -0
- package/src/__tests__/config-schema-cmd.test.ts +11 -5
- package/src/__tests__/config-schema.test.ts +440 -114
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -4
- package/src/__tests__/config-watcher.test.ts +2 -2
- package/src/__tests__/contact-store-user-file.test.ts +72 -73
- package/src/__tests__/contacts-tools.test.ts +26 -0
- package/src/__tests__/contacts-write.test.ts +4 -4
- package/src/__tests__/context-overflow-policy.test.ts +7 -7
- package/src/__tests__/context-token-estimator.test.ts +191 -1
- package/src/__tests__/context-window-manager.test.ts +883 -4
- package/src/__tests__/conversation-abort-tool-results.test.ts +32 -15
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +86 -46
- package/src/__tests__/conversation-agent-loop.test.ts +435 -216
- package/src/__tests__/conversation-attachments.test.ts +1 -1
- package/src/__tests__/conversation-confirmation-signals.test.ts +36 -10
- package/src/__tests__/conversation-error.test.ts +37 -6
- package/src/__tests__/conversation-history-web-search.test.ts +7 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +34 -12
- package/src/__tests__/conversation-lifecycle.test.ts +336 -0
- package/src/__tests__/conversation-load-history-repair.test.ts +27 -10
- package/src/__tests__/conversation-pairing.test.ts +174 -10
- package/src/__tests__/conversation-pre-run-repair.test.ts +32 -15
- package/src/__tests__/conversation-process-callsite.test.ts +309 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +44 -21
- package/src/__tests__/conversation-queue.test.ts +68 -38
- package/src/__tests__/conversation-routes-disk-view.test.ts +36 -7
- package/src/__tests__/conversation-routes-slash-commands.test.ts +31 -3
- package/src/__tests__/conversation-runtime-assembly.test.ts +2877 -152
- package/src/__tests__/conversation-runtime-workspace.test.ts +35 -50
- package/src/__tests__/conversation-seed-composer.test.ts +2 -2
- package/src/__tests__/conversation-skill-tools.test.ts +12 -146
- package/src/__tests__/conversation-slash-queue.test.ts +39 -19
- package/src/__tests__/conversation-slash-unknown.test.ts +53 -16
- package/src/__tests__/conversation-speed-override.test.ts +36 -12
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +1035 -0
- package/src/__tests__/conversation-surfaces-standalone.test.ts +630 -0
- package/src/__tests__/conversation-title-service.test.ts +118 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +41 -2
- package/src/__tests__/conversation-tool-setup-batch-authorized.test.ts +1 -1
- package/src/__tests__/conversation-unread-route.test.ts +2 -2
- package/src/__tests__/conversation-usage.test.ts +4 -2
- package/src/__tests__/conversation-workspace-cache-state.test.ts +33 -9
- package/src/__tests__/conversation-workspace-injection.test.ts +46 -15
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +46 -15
- package/src/__tests__/credential-broker-browser-fill.test.ts +110 -0
- package/src/__tests__/credential-health-service.test.ts +78 -9
- package/src/__tests__/credential-security-invariants.test.ts +5 -2
- package/src/__tests__/credential-storage-oauth-compat.test.ts +18 -0
- package/src/__tests__/credential-storage-static-compat.test.ts +28 -0
- package/src/__tests__/credential-vault-unit.test.ts +135 -19
- package/src/__tests__/credentials-cli.test.ts +1 -9
- package/src/__tests__/cross-provider-web-search.test.ts +84 -0
- package/src/__tests__/daemon-server-persist-and-process-callsite.test.ts +92 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +1 -0
- package/src/__tests__/delete-propagation.test.ts +437 -0
- package/src/__tests__/dm-backfill.test.ts +417 -0
- package/src/__tests__/dm-persistence.test.ts +227 -0
- package/src/__tests__/edit-propagation.test.ts +280 -0
- package/src/__tests__/empty-response-pipeline.test.ts +305 -0
- package/src/__tests__/ephemeral-permissions.test.ts +93 -3
- package/src/__tests__/estimator-calibration-integration.test.ts +208 -0
- package/src/__tests__/estimator-calibration.test.ts +213 -0
- package/src/__tests__/extension-id-sync-guard.test.ts +29 -10
- package/src/__tests__/file-write-tool.test.ts +151 -1
- package/src/__tests__/filing-service.test.ts +255 -0
- package/src/__tests__/first-greeting.test.ts +247 -5
- package/src/__tests__/gemini-provider.test.ts +0 -3
- package/src/__tests__/guardian-grant-minting.test.ts +8 -0
- package/src/__tests__/headless-browser-interactions.test.ts +1 -1
- package/src/__tests__/headless-browser-mode.test.ts +57 -0
- package/src/__tests__/heartbeat-service.test.ts +96 -15
- package/src/__tests__/history-repair-pipeline.test.ts +399 -0
- package/src/__tests__/host-browser-e2e-cloud.test.ts +307 -0
- package/src/__tests__/host-browser-e2e-self-hosted.test.ts +3 -3
- package/src/__tests__/host-proxy-interface.test.ts +36 -2
- package/src/__tests__/host-shell-tool.test.ts +124 -18
- package/src/__tests__/http-user-message-parity.test.ts +29 -1
- package/src/__tests__/image-credentials.test.ts +137 -0
- package/src/__tests__/image-service-dispatcher.test.ts +186 -0
- package/src/__tests__/inbound-slack-persistence.test.ts +340 -0
- package/src/__tests__/injector-chain.test.ts +526 -0
- package/src/__tests__/intent-routing.test.ts +1 -66
- package/src/__tests__/llm-call-pipeline.test.ts +285 -0
- package/src/__tests__/llm-catalog-parity.test.ts +174 -0
- package/src/__tests__/llm-context-normalization.test.ts +121 -0
- package/src/__tests__/llm-resolver.test.ts +214 -0
- package/src/__tests__/llm-schema.test.ts +223 -0
- package/src/__tests__/managed-proxy-context.test.ts +6 -2
- package/src/__tests__/media-generate-image.test.ts +119 -13
- package/src/__tests__/memory-retrieval-pipeline.test.ts +401 -0
- package/src/__tests__/memory-upsert-concurrency.test.ts +1 -0
- package/src/__tests__/messaging-skill-split.test.ts +3 -34
- package/src/__tests__/migration-import-from-url.test.ts +621 -0
- package/src/__tests__/model-intents.test.ts +11 -83
- package/src/__tests__/notification-broadcaster.test.ts +3 -3
- package/src/__tests__/notification-decision-fallback.test.ts +0 -10
- package/src/__tests__/notification-decision-identity.test.ts +0 -9
- package/src/__tests__/notification-decision-recipient-context.test.ts +0 -9
- package/src/__tests__/notification-decision-strategy.test.ts +0 -11
- package/src/__tests__/notification-schedule-notify-dedup.test.ts +108 -0
- package/src/__tests__/oauth-apps-routes.test.ts +1 -1
- package/src/__tests__/oauth-cli.test.ts +14 -12
- package/src/__tests__/oauth-connect-orchestrator.test.ts +4 -13
- package/src/__tests__/oauth-provider-serializer.test.ts +6 -4
- package/src/__tests__/oauth-provider-visibility.test.ts +3 -5
- package/src/__tests__/oauth-providers-routes.test.ts +3 -2
- package/src/__tests__/oauth-store.test.ts +46 -78
- package/src/__tests__/oauth2-gateway-transport.test.ts +8 -3
- package/src/__tests__/oauth2-refresh-retry.test.ts +279 -0
- package/src/__tests__/onboarding-template-contract.test.ts +16 -64
- package/src/__tests__/openai-image-service.test.ts +368 -0
- package/src/__tests__/openai-provider.test.ts +7 -0
- package/src/__tests__/openai-responses-provider.test.ts +396 -0
- package/src/__tests__/openrouter-provider-only.test.ts +135 -0
- package/src/__tests__/outbound-slack-persistence.test.ts +293 -0
- package/src/__tests__/overflow-reduce-pipeline.test.ts +676 -0
- package/src/__tests__/permission-checker-host-gate.test.ts +1 -25
- package/src/__tests__/permission-mode.test.ts +16 -0
- package/src/__tests__/permission-types.test.ts +0 -1
- package/src/__tests__/persist-onboarding-artifacts.test.ts +266 -0
- package/src/__tests__/persistence-pipeline.test.ts +377 -0
- package/src/__tests__/persona-resolver.test.ts +13 -13
- package/src/__tests__/pipeline-runner.test.ts +565 -0
- package/src/__tests__/pkb-autoinject.test.ts +37 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +1 -1
- package/src/__tests__/platform.test.ts +5 -2
- package/src/__tests__/plugin-bootstrap.test.ts +483 -0
- package/src/__tests__/plugin-registry.test.ts +273 -0
- package/src/__tests__/plugin-route-contribution.test.ts +288 -0
- package/src/__tests__/plugin-skill-contribution.test.ts +367 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +286 -0
- package/src/__tests__/plugin-types.test.ts +320 -0
- package/src/__tests__/pricing.test.ts +93 -14
- package/src/__tests__/profiler-routes.test.ts +1 -1
- package/src/__tests__/provider-commit-message-generator.test.ts +14 -84
- package/src/__tests__/provider-env-vars-scope.test.ts +52 -0
- package/src/__tests__/provider-error-scenarios.test.ts +135 -6
- package/src/__tests__/provider-managed-proxy-integration.test.ts +42 -11
- package/src/__tests__/provider-registry-ollama.test.ts +1 -2
- package/src/__tests__/proxy-approval-callback.test.ts +69 -9
- package/src/__tests__/reaction-persistence.test.ts +561 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +0 -2
- package/src/__tests__/relay-server.test.ts +1 -1
- package/src/__tests__/require-fresh-approval.test.ts +1 -1
- package/src/__tests__/retry-openrouter-only-normalization.test.ts +136 -0
- package/src/__tests__/retry-thinking-tool-choice.test.ts +226 -0
- package/src/__tests__/risk-classifier-parity.test.ts +230 -0
- package/src/__tests__/sanitize-config-for-transfer.test.ts +78 -1
- package/src/__tests__/schedule-routes.test.ts +131 -1
- package/src/__tests__/scheduler-recurrence.test.ts +14 -70
- package/src/__tests__/scheduler-reuse-conversation.test.ts +10 -50
- package/src/__tests__/secret-detection-handler.test.ts +0 -10
- package/src/__tests__/secret-ingress-http.test.ts +28 -0
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +125 -0
- package/src/__tests__/secret-routes-managed-proxy.test.ts +2 -3
- package/src/__tests__/secret-scanner-executor.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +29 -1
- package/src/__tests__/server-history-render.test.ts +31 -0
- package/src/__tests__/shell-identity.test.ts +0 -134
- package/src/__tests__/shell-parser-property.test.ts +13 -13
- package/src/__tests__/skill-cache-store.test.ts +182 -0
- package/src/__tests__/skills.test.ts +19 -33
- package/src/__tests__/slack-app-setup-skill-regression.test.ts +3 -1
- package/src/__tests__/slack-skill.test.ts +3 -8
- package/src/__tests__/starter-bundle.test.ts +35 -0
- package/src/__tests__/subagent-call-site-routing.test.ts +280 -0
- package/src/__tests__/suggestion-routes.test.ts +259 -3
- package/src/__tests__/system-prompt.test.ts +22 -35
- package/src/__tests__/task-memory-cleanup.test.ts +1 -0
- package/src/__tests__/task-runner.test.ts +3 -1
- package/src/__tests__/task-scheduler.test.ts +3 -15
- package/src/__tests__/tcc-sandbox-deny.test.ts +198 -0
- package/src/__tests__/terminal-tools.test.ts +8 -0
- package/src/__tests__/test-preload.ts +11 -0
- package/src/__tests__/test-support/browser-skill-harness.ts +2 -52
- package/src/__tests__/thread-backfill.test.ts +941 -0
- package/src/__tests__/title-generate-pipeline.test.ts +224 -0
- package/src/__tests__/token-estimate-pipeline.test.ts +431 -0
- package/src/__tests__/tool-error-pipeline.test.ts +244 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +431 -0
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -8
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +2 -2
- package/src/__tests__/tool-executor-shell-integration.test.ts +7 -10
- package/src/__tests__/tool-executor.test.ts +201 -94
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +356 -0
- package/src/__tests__/tool-result-truncation.test.ts +0 -110
- package/src/__tests__/trust-store.test.ts +442 -109
- package/src/__tests__/update-bulletin-job.test.ts +389 -0
- package/src/__tests__/usage-cache-backfill-migration.test.ts +3 -1
- package/src/__tests__/user-plugin-loader.test.ts +191 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +1 -22
- package/src/__tests__/voice-session-bridge.test.ts +39 -0
- package/src/__tests__/volume-security-guard.test.ts +3 -2
- package/src/__tests__/web-search-history.test.ts +337 -0
- package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +343 -0
- package/src/__tests__/workspace-migration-043-release-notes-latex-rendering.test.ts +202 -0
- package/src/__tests__/workspace-migration-045-release-notes-meet-avatar.test.ts +210 -0
- package/src/__tests__/workspace-migration-046-seed-conversation-starters-callsite.test.ts +185 -0
- package/src/__tests__/workspace-migration-049-release-notes-default-sonnet.test.ts +100 -0
- package/src/__tests__/workspace-migration-050-seed-main-agent-opus-callsite.test.ts +171 -0
- package/src/__tests__/workspace-migration-051-seed-conversation-summarization-callsite.test.ts +252 -0
- package/src/__tests__/workspace-migration-drop-user-md.test.ts +11 -11
- package/src/__tests__/workspace-migration-remove-hooks.test.ts +99 -0
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +841 -0
- package/src/__tests__/workspace-policy.test.ts +22 -16
- package/src/acp/client-handler.ts +1 -2
- package/src/agent/loop.ts +545 -115
- package/src/approvals/__tests__/guardian-feed-event.test.ts +304 -0
- package/src/approvals/guardian-request-resolvers.ts +80 -0
- package/src/avatar/resvg-lazy.test.ts +136 -0
- package/src/avatar/resvg-lazy.ts +82 -9
- package/src/avatar/traits-png-sync.ts +21 -1
- package/src/backup/__tests__/backup-worker.test.ts +2 -13
- package/src/backup/backup-worker.ts +3 -15
- package/src/browser/__tests__/operations.test.ts +163 -0
- package/src/browser/identifiers.ts +51 -0
- package/src/browser/operations.ts +660 -0
- package/src/browser/types.ts +81 -0
- package/src/bundler/app-compiler.ts +84 -1
- package/src/calls/call-state.ts +2 -2
- package/src/calls/guardian-question-copy.ts +2 -2
- package/src/calls/telephony-stt-routing.ts +1 -1
- package/src/calls/voice-session-bridge.ts +1 -0
- package/src/channels/__tests__/types.test.ts +3 -3
- package/src/channels/types.ts +6 -4
- package/src/cli/AGENTS.md +1 -1
- package/src/cli/__tests__/notifications.test.ts +87 -211
- package/src/cli/commands/__tests__/attachment.test.ts +438 -0
- package/src/cli/commands/__tests__/backup.test.ts +1 -1
- package/src/cli/commands/__tests__/browser.test.ts +554 -0
- package/src/cli/commands/__tests__/cache.test.ts +623 -0
- package/src/cli/commands/__tests__/email-list.test.ts +6 -0
- package/src/cli/commands/__tests__/email-send.test.ts +93 -1
- package/src/cli/commands/__tests__/image-generation.test.ts +886 -0
- package/src/cli/commands/__tests__/inference-send.test.ts +463 -0
- package/src/cli/commands/__tests__/stt-transcribe.test.ts +454 -0
- package/src/cli/commands/__tests__/task.test.ts +913 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +606 -0
- package/src/cli/commands/__tests__/ui-confirm.test.ts +650 -0
- package/src/cli/commands/__tests__/ui.test.ts +1215 -0
- package/src/cli/commands/__tests__/watchers.test.ts +716 -0
- package/src/cli/commands/attachment.ts +182 -0
- package/src/cli/commands/backup.ts +2 -2
- package/src/cli/commands/browser.ts +350 -0
- package/src/cli/commands/cache.ts +341 -0
- package/src/cli/commands/clients.ts +138 -0
- package/src/cli/commands/completions.ts +2 -12
- package/src/cli/commands/config.ts +6 -6
- package/src/cli/commands/conversations-import.ts +347 -0
- package/src/cli/commands/conversations.ts +69 -8
- package/src/cli/commands/email.ts +234 -194
- package/src/cli/commands/image-generation.ts +299 -0
- package/src/cli/commands/inference.ts +200 -0
- package/src/cli/commands/memory.ts +127 -17
- package/src/cli/commands/notifications.ts +68 -103
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +1 -1
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +1 -1
- package/src/cli/commands/oauth/connect.ts +2 -2
- package/src/cli/commands/oauth/providers.ts +176 -8
- package/src/cli/commands/oauth/status.ts +46 -36
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/status.test.ts +0 -1
- package/src/cli/commands/skills.ts +3 -4
- package/src/cli/commands/stt.ts +339 -0
- package/src/cli/commands/task.ts +795 -0
- package/src/cli/commands/trust.ts +50 -19
- package/src/cli/commands/tts.ts +273 -0
- package/src/cli/commands/ui.ts +670 -0
- package/src/cli/commands/watchers.ts +509 -0
- package/src/cli/lib/daemon-credential-client.ts +0 -19
- package/src/cli/program.ts +39 -24
- package/src/cli.ts +0 -37
- package/src/config/__tests__/backup-schema.test.ts +7 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +2 -2
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +10 -10
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +66 -87
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +28 -51
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +22 -40
- package/src/config/bundled-skills/image-studio/SKILL.md +2 -1
- package/src/config/bundled-skills/image-studio/TOOLS.json +2 -1
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +23 -39
- package/src/config/bundled-skills/media-processing/services/reduce.ts +1 -1
- package/src/config/bundled-skills/messaging/SKILL.md +5 -5
- package/src/config/bundled-skills/messaging/TOOLS.json +4 -0
- package/src/config/bundled-skills/messaging/tools/__tests__/messaging-feed-events.test.ts +207 -0
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +20 -1
- package/src/config/bundled-skills/messaging/tools/messaging-read.ts +15 -1
- package/src/config/bundled-skills/messaging/tools/messaging-search.ts +21 -1
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +69 -12
- package/src/config/bundled-skills/phone-calls/references/CONFIG.md +9 -8
- package/src/config/bundled-skills/schedule/SKILL.md +8 -3
- package/src/config/bundled-skills/schedule/TOOLS.json +15 -7
- package/src/config/bundled-skills/schedule/references/SCRIPT_MODE_PATTERNS.md +59 -0
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-tool-registry.ts +0 -190
- package/src/config/env.ts +7 -2
- package/src/config/feature-flag-registry.json +42 -10
- package/src/config/llm-resolver.ts +128 -0
- package/src/config/loader.ts +194 -10
- package/src/config/raw-config-utils.ts +30 -2
- package/src/config/sanitize-for-transfer.ts +35 -0
- package/src/config/schema.ts +49 -41
- package/src/config/schemas/analysis.ts +3 -22
- package/src/config/schemas/backup.ts +1 -1
- package/src/config/schemas/calls.ts +0 -4
- package/src/config/schemas/conversations.ts +16 -0
- package/src/config/schemas/filing.ts +2 -7
- package/src/config/schemas/heartbeat.ts +0 -5
- package/src/config/schemas/inference.ts +3 -23
- package/src/config/schemas/llm.ts +317 -0
- package/src/config/schemas/memory-processing.ts +1 -9
- package/src/config/schemas/notifications.ts +4 -11
- package/src/config/schemas/platform.ts +3 -9
- package/src/config/schemas/security.ts +33 -0
- package/src/config/schemas/services.ts +9 -4
- package/src/config/schemas/stt.ts +1 -0
- package/src/config/schemas/tts.ts +64 -0
- package/src/config/schemas/updates.ts +1 -1
- package/src/config/schemas/workspace-git.ts +3 -40
- package/src/config/skill-state.ts +6 -2
- package/src/config/skills.ts +96 -7
- package/src/context/__tests__/compact-prompt.test.ts +63 -0
- package/src/context/__tests__/microcompact.test.ts +805 -0
- package/src/context/estimator-calibration.ts +136 -0
- package/src/context/microcompact.ts +443 -0
- package/src/context/prompts/compact.md +26 -0
- package/src/context/token-estimator.ts +61 -3
- package/src/context/tool-result-truncation.ts +3 -63
- package/src/context/window-manager.ts +417 -39
- package/src/credential-execution/approval-bridge.ts +0 -1
- package/src/credential-execution/executable-discovery.ts +19 -8
- package/src/credential-execution/process-manager.test.ts +109 -0
- package/src/credential-execution/process-manager.ts +65 -2
- package/src/credential-health/credential-health-service.ts +19 -6
- package/src/daemon/__tests__/conversation-feed-event.test.ts +317 -0
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +4 -12
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +14 -15
- package/src/daemon/approval-generators.ts +29 -4
- package/src/daemon/assistant-attachments.ts +24 -13
- package/src/daemon/classifier.ts +2 -2
- package/src/daemon/config-watcher.ts +0 -3
- package/src/daemon/context-overflow-policy.ts +4 -13
- package/src/daemon/context-overflow-reducer.ts +4 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +162 -34
- package/src/daemon/conversation-agent-loop.ts +1282 -599
- package/src/daemon/conversation-attachments.ts +2 -6
- package/src/daemon/conversation-error.ts +36 -1
- package/src/daemon/conversation-history.ts +10 -19
- package/src/daemon/conversation-lifecycle.ts +59 -17
- package/src/daemon/conversation-messaging.ts +73 -4
- package/src/daemon/conversation-notifiers.ts +2 -110
- package/src/daemon/conversation-process.ts +24 -11
- package/src/daemon/conversation-queue-manager.ts +3 -0
- package/src/daemon/conversation-runtime-assembly.ts +1063 -211
- package/src/daemon/conversation-slash.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +389 -1
- package/src/daemon/conversation-tool-setup.ts +51 -9
- package/src/daemon/conversation-usage.ts +1 -1
- package/src/daemon/conversation.ts +197 -64
- package/src/daemon/external-plugins-bootstrap.ts +478 -0
- package/src/daemon/external-skills-bootstrap.ts +41 -0
- package/src/daemon/first-greeting.ts +191 -14
- package/src/daemon/guardian-action-generators.ts +34 -14
- package/src/daemon/handlers/config-model.test.ts +86 -0
- package/src/daemon/handlers/config-model.ts +65 -12
- package/src/daemon/handlers/conversations.ts +9 -2
- package/src/daemon/handlers/shared.ts +39 -11
- package/src/daemon/handlers/skills.ts +7 -3
- package/src/daemon/handlers/slack-channel-oauth-install.ts +197 -0
- package/src/daemon/lifecycle.ts +109 -82
- package/src/daemon/message-types/computer-use.ts +2 -34
- package/src/daemon/message-types/conversations.ts +63 -0
- package/src/daemon/message-types/messages.ts +21 -1
- package/src/daemon/message-types/trust.ts +0 -2
- package/src/daemon/parse-actual-tokens-from-error.test.ts +57 -1
- package/src/daemon/parse-actual-tokens-from-error.ts +66 -0
- package/src/daemon/pkb-context-tracker.test.ts +169 -0
- package/src/daemon/pkb-context-tracker.ts +125 -0
- package/src/daemon/pkb-reminder-builder.test.ts +70 -0
- package/src/daemon/pkb-reminder-builder.ts +31 -0
- package/src/daemon/providers-setup.ts +6 -0
- package/src/daemon/server.ts +122 -12
- package/src/daemon/shutdown-handlers.ts +2 -12
- package/src/daemon/tool-side-effects.ts +14 -65
- package/src/daemon/web-search-history.ts +126 -0
- package/src/events/domain-events.ts +0 -1
- package/src/filing/filing-service.ts +9 -10
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +160 -0
- package/src/heartbeat/heartbeat-service.ts +99 -28
- package/src/home/__tests__/feed-population-integration.test.ts +312 -0
- package/src/home/__tests__/feed-scheduler.test.ts +39 -11
- package/src/home/__tests__/rollup-producer.test.ts +44 -0
- package/src/home/assistant-feed-authoring.ts +4 -0
- package/src/home/emit-feed-event.ts +11 -0
- package/src/home/feed-scheduler.ts +20 -4
- package/src/home/feed-types.ts +97 -4
- package/src/home/relationship-state-writer.ts +2 -2
- package/src/home/rewrite-command-preview.ts +66 -0
- package/src/home/rollup-producer.ts +34 -5
- package/src/home/suggested-prompts.ts +101 -0
- package/src/ipc/__tests__/attachment-ipc.test.ts +213 -0
- package/src/ipc/__tests__/browser-ipc.test.ts +339 -0
- package/src/ipc/__tests__/cache-ipc.test.ts +266 -0
- package/src/ipc/__tests__/socket-path.test.ts +34 -0
- package/src/ipc/__tests__/task-ipc.test.ts +577 -0
- package/src/ipc/__tests__/ui-request-route.test.ts +495 -0
- package/src/ipc/__tests__/watcher-ipc.test.ts +295 -0
- package/src/ipc/cli-client.ts +2 -1
- package/src/ipc/cli-server.ts +26 -8
- package/src/ipc/gateway-client.ts +6 -3
- package/src/ipc/routes/attachment.ts +114 -0
- package/src/ipc/routes/browser-context.ts +63 -0
- package/src/ipc/routes/browser.ts +97 -0
- package/src/ipc/routes/cache.ts +96 -0
- package/src/ipc/routes/get-contact.ts +16 -0
- package/src/ipc/routes/index.ts +31 -1
- package/src/ipc/routes/list-clients.ts +31 -0
- package/src/ipc/routes/merge-contacts.ts +17 -0
- package/src/ipc/routes/notification.ts +133 -0
- package/src/ipc/routes/rename-conversation.ts +59 -0
- package/src/ipc/routes/search-contacts.ts +19 -0
- package/src/ipc/routes/task-queue.ts +226 -0
- package/src/ipc/routes/task.ts +173 -0
- package/src/ipc/routes/ui-request.ts +50 -0
- package/src/ipc/routes/upsert-contact.ts +25 -0
- package/src/ipc/routes/watcher.ts +203 -0
- package/src/ipc/socket-path.ts +76 -0
- package/src/media/app-icon-generator.ts +23 -46
- package/src/media/avatar-router.ts +26 -41
- package/src/media/gemini-image-service.ts +8 -41
- package/src/media/image-credentials.ts +73 -0
- package/src/media/image-service.ts +85 -0
- package/src/media/openai-image-service.ts +131 -0
- package/src/media/types.ts +46 -0
- package/src/memory/__tests__/conversation-analyze-job.test.ts +9 -8
- package/src/memory/__tests__/conversation-group-migration.test.ts +99 -0
- package/src/memory/admin.ts +18 -0
- package/src/memory/conversation-analyze-job.ts +14 -13
- package/src/memory/conversation-attention-store.ts +13 -6
- package/src/memory/conversation-crud.ts +133 -3
- package/src/memory/conversation-group-migration.ts +38 -6
- package/src/memory/conversation-queries.ts +57 -4
- package/src/memory/conversation-title-service.ts +32 -4
- package/src/memory/db-init.ts +10 -0
- package/src/memory/embedding-backend.ts +1 -1
- package/src/memory/embedding-gemini.test.ts +41 -2
- package/src/memory/embedding-gemini.ts +6 -1
- package/src/memory/graph/bootstrap.test.ts +282 -0
- package/src/memory/graph/bootstrap.ts +8 -5
- package/src/memory/graph/compaction.ts +299 -0
- package/src/memory/graph/consolidation.ts +4 -4
- package/src/memory/graph/conversation-graph-memory.ts +89 -29
- package/src/memory/graph/extraction.test.ts +272 -2
- package/src/memory/graph/extraction.ts +183 -53
- package/src/memory/graph/graph-search.test.ts +93 -0
- package/src/memory/graph/graph-search.ts +4 -1
- package/src/memory/graph/inspect.ts +2 -2
- package/src/memory/graph/narrative.ts +2 -2
- package/src/memory/graph/pattern-scan.ts +2 -2
- package/src/memory/graph/retriever.test.ts +459 -0
- package/src/memory/graph/retriever.ts +237 -48
- package/src/memory/graph/store.ts +41 -0
- package/src/memory/graph/tool-handlers.ts +27 -0
- package/src/memory/graph/tools.ts +6 -1
- package/src/memory/indexer.ts +5 -5
- package/src/memory/job-handlers/conversation-starters.ts +23 -20
- package/src/memory/job-handlers/summarization.ts +2 -2
- package/src/memory/job-utils.ts +7 -1
- package/src/memory/jobs/embed-pkb-file.test.ts +168 -0
- package/src/memory/jobs/embed-pkb-file.ts +54 -0
- package/src/memory/jobs-store.ts +44 -3
- package/src/memory/jobs-worker.ts +4 -0
- package/src/memory/migrations/041-approval-prompt-ts-tracker.ts +26 -0
- package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +1 -1
- package/src/memory/migrations/149-oauth-tables.ts +1 -0
- package/src/memory/migrations/220-normalize-user-file-by-principal.ts +2 -2
- package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +82 -0
- package/src/memory/migrations/223-schedule-script-column.ts +11 -0
- package/src/memory/migrations/224-oauth-providers-managed-service-is-paid.ts +24 -0
- package/src/memory/migrations/225-oauth-providers-available-scopes.ts +13 -0
- package/src/memory/migrations/index.ts +5 -0
- package/src/memory/pkb/pkb-index.test.ts +369 -0
- package/src/memory/pkb/pkb-index.ts +255 -0
- package/src/memory/pkb/pkb-reconcile.test.ts +252 -0
- package/src/memory/pkb/pkb-reconcile.ts +148 -0
- package/src/memory/pkb/pkb-search.test.ts +499 -0
- package/src/memory/pkb/pkb-search.ts +159 -0
- package/src/memory/pkb/types.ts +53 -0
- package/src/memory/qdrant-client.test.ts +60 -0
- package/src/memory/qdrant-client.ts +147 -1
- package/src/memory/schema/infrastructure.ts +1 -0
- package/src/memory/schema/oauth.ts +4 -1
- package/src/memory/slack-thread-store.ts +37 -0
- package/src/messaging/providers/gmail/adapter.ts +6 -16
- package/src/messaging/providers/gmail/client.ts +22 -0
- package/src/messaging/providers/gmail/types.ts +7 -0
- package/src/messaging/providers/slack/adapter.ts +14 -2
- package/src/messaging/providers/slack/backfill.test.ts +257 -0
- package/src/messaging/providers/slack/backfill.ts +101 -0
- package/src/messaging/providers/slack/message-metadata.test.ts +316 -0
- package/src/messaging/providers/slack/message-metadata.ts +123 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +1421 -0
- package/src/messaging/providers/slack/render-transcript.ts +501 -0
- package/src/messaging/style-analyzer.ts +5 -2
- package/src/notifications/README.md +9 -5
- package/src/notifications/conversation-pairing.ts +78 -19
- package/src/notifications/copy-composer.ts +0 -5
- package/src/notifications/decision-engine.ts +3 -9
- package/src/notifications/emit-signal.ts +1 -1
- package/src/notifications/preference-extractor.ts +2 -6
- package/src/notifications/signal.ts +1 -2
- package/src/oauth/AGENTS.md +1 -1
- package/src/oauth/__tests__/identity-verifier.test.ts +2 -1
- package/src/oauth/connect-orchestrator.ts +8 -34
- package/src/oauth/connect-types.ts +6 -10
- package/src/oauth/manual-token-connection.ts +23 -0
- package/src/oauth/oauth-store.ts +31 -14
- package/src/oauth/platform-connection.test.ts +47 -0
- package/src/oauth/platform-connection.ts +15 -5
- package/src/oauth/provider-serializer.ts +6 -1
- package/src/oauth/seed-providers.ts +56 -106
- package/src/outbound-proxy/http-forwarder.ts +9 -0
- package/src/permissions/approval-policy.test.ts +1223 -0
- package/src/permissions/approval-policy.ts +309 -0
- package/src/permissions/arg-parser.test.ts +161 -0
- package/src/permissions/arg-parser.ts +141 -0
- package/src/permissions/bash-risk-classifier.test.ts +1620 -0
- package/src/permissions/bash-risk-classifier.ts +950 -0
- package/src/permissions/checker.ts +348 -711
- package/src/permissions/command-registry.test.ts +774 -0
- package/src/permissions/command-registry.ts +1005 -0
- package/src/permissions/defaults.ts +28 -79
- package/src/permissions/file-risk-classifier.test.ts +535 -0
- package/src/permissions/file-risk-classifier.ts +274 -0
- package/src/permissions/gateway-threshold-reader.ts +196 -0
- package/src/permissions/prompter.ts +4 -0
- package/src/permissions/risk-types.ts +262 -0
- package/src/permissions/schedule-risk-classifier.test.ts +129 -0
- package/src/permissions/schedule-risk-classifier.ts +85 -0
- package/src/permissions/secret-prompter.ts +53 -2
- package/src/permissions/shell-identity.ts +2 -42
- package/src/permissions/skill-risk-classifier.test.ts +311 -0
- package/src/permissions/skill-risk-classifier.ts +214 -0
- package/src/permissions/trust-client.ts +52 -25
- package/src/permissions/trust-store-interface.ts +1 -6
- package/src/permissions/trust-store.ts +161 -62
- package/src/permissions/types.ts +25 -14
- package/src/permissions/web-risk-classifier.test.ts +170 -0
- package/src/permissions/web-risk-classifier.ts +89 -0
- package/src/permissions/workspace-policy.ts +9 -19
- package/src/platform/client.ts +19 -1
- package/src/plugins/defaults/circuit-breaker.ts +146 -0
- package/src/plugins/defaults/compaction.ts +145 -0
- package/src/plugins/defaults/empty-response.ts +126 -0
- package/src/plugins/defaults/history-repair.ts +85 -0
- package/src/plugins/defaults/index.ts +116 -0
- package/src/plugins/defaults/injectors.ts +491 -0
- package/src/plugins/defaults/llm-call.ts +82 -0
- package/src/plugins/defaults/memory-retrieval.ts +226 -0
- package/src/plugins/defaults/overflow-reduce.ts +181 -0
- package/src/plugins/defaults/persistence.ts +129 -0
- package/src/plugins/defaults/title-generate.ts +95 -0
- package/src/plugins/defaults/token-estimate.ts +104 -0
- package/src/plugins/defaults/tool-error.ts +126 -0
- package/src/plugins/defaults/tool-execute.ts +89 -0
- package/src/plugins/defaults/tool-result-truncate.ts +88 -0
- package/src/plugins/pipeline.ts +316 -0
- package/src/plugins/plugin-skill-contributions.ts +292 -0
- package/src/plugins/registry.ts +241 -0
- package/src/plugins/types.ts +1134 -0
- package/src/plugins/user-loader.ts +177 -0
- package/src/prompts/persona-resolver.ts +3 -3
- package/src/prompts/system-prompt.ts +19 -20
- package/src/prompts/templates/BOOTSTRAP.md +27 -77
- package/src/prompts/templates/SOUL.md +2 -2
- package/src/prompts/update-bulletin-job.ts +190 -0
- package/src/providers/__tests__/context-overflow-error.test.ts +328 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +102 -0
- package/src/providers/__tests__/retry-callsite.test.ts +424 -0
- package/src/providers/anthropic/client.ts +183 -14
- package/src/providers/call-site-routing.ts +71 -0
- package/src/providers/gemini/client.ts +65 -2
- package/src/providers/managed-proxy/constants.ts +2 -1
- package/src/providers/model-catalog.ts +524 -33
- package/src/providers/model-intents.ts +4 -4
- package/src/providers/openai/chat-completions-provider.ts +57 -1
- package/src/providers/openai/responses-provider.ts +86 -9
- package/src/providers/openrouter/client.ts +80 -9
- package/src/providers/provider-env-vars.ts +56 -0
- package/src/providers/provider-send-message.ts +22 -5
- package/src/providers/ratelimit.ts +4 -0
- package/src/providers/registry.ts +19 -8
- package/src/providers/retry.ts +174 -39
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +55 -0
- package/src/providers/speech-to-text/deepgram-realtime.test.ts +61 -0
- package/src/providers/speech-to-text/deepgram-realtime.ts +57 -0
- package/src/providers/speech-to-text/google-gemini-live-stream.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +17 -0
- package/src/providers/speech-to-text/resolve.ts +7 -0
- package/src/providers/speech-to-text/xai-realtime.test.ts +646 -0
- package/src/providers/speech-to-text/xai-realtime.ts +821 -0
- package/src/providers/speech-to-text/xai.test.ts +155 -0
- package/src/providers/speech-to-text/xai.ts +97 -0
- package/src/providers/types.ts +93 -3
- package/src/runtime/AGENTS.md +27 -18
- package/src/runtime/__tests__/agent-wake.test.ts +43 -2
- package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +3 -3
- package/src/runtime/__tests__/client-registry.test.ts +293 -0
- package/src/runtime/__tests__/interactive-ui.test.ts +673 -0
- package/src/runtime/agent-wake.ts +63 -22
- package/src/runtime/auth/route-policy.ts +4 -0
- package/src/runtime/btw-sidechain.ts +13 -3
- package/src/runtime/channel-reply-delivery.ts +106 -2
- package/src/runtime/client-registry.ts +261 -0
- package/src/runtime/decision-token.ts +116 -0
- package/src/runtime/gateway-client.ts +2 -2
- package/src/runtime/http-router.ts +32 -0
- package/src/runtime/http-server.ts +129 -9
- package/src/runtime/http-types.ts +23 -3
- package/src/runtime/interactive-ui.ts +362 -0
- package/src/runtime/invite-instruction-generator.ts +2 -2
- package/src/runtime/migrations/__tests__/gcs-signed-url.test.ts +176 -0
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +390 -0
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +221 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +1540 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +453 -0
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +222 -0
- package/src/runtime/migrations/gcs-signed-url.ts +162 -0
- package/src/runtime/migrations/vbundle-builder.ts +1 -22
- package/src/runtime/migrations/vbundle-importer.ts +154 -9
- package/src/runtime/migrations/vbundle-metadata-merge.ts +124 -0
- package/src/runtime/migrations/vbundle-streaming-importer.ts +2522 -0
- package/src/runtime/migrations/vbundle-streaming-validator.ts +244 -0
- package/src/runtime/migrations/vbundle-tar-stream.ts +217 -0
- package/src/runtime/migrations/vbundle-validator.ts +15 -6
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +111 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +114 -75
- package/src/runtime/routes/__tests__/migration-vellum-metadata-reconcile.test.ts +246 -0
- package/src/runtime/routes/approval-prompt-ts-tracker.ts +78 -0
- package/src/runtime/routes/approval-routes.ts +29 -17
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +9 -0
- package/src/runtime/routes/avatar-routes.ts +20 -4
- package/src/runtime/routes/browser-extension-pair-routes.ts +27 -8
- package/src/runtime/routes/btw-routes.ts +1 -4
- package/src/runtime/routes/conversation-management-routes.ts +20 -2
- package/src/runtime/routes/conversation-routes.ts +351 -138
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/diagnostics-routes.ts +6 -4
- package/src/runtime/routes/events-routes.ts +16 -0
- package/src/runtime/routes/guardian-approval-interception.ts +33 -3
- package/src/runtime/routes/guardian-approval-prompt.ts +13 -3
- package/src/runtime/routes/home-feed-routes.ts +120 -2
- package/src/runtime/routes/inbound-message-handler.ts +987 -2
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +113 -2
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +61 -3
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +129 -6
- package/src/runtime/routes/integrations/slack/channel.ts +25 -3
- package/src/runtime/routes/llm-context-normalization.ts +23 -1
- package/src/runtime/routes/memory-item-routes.test.ts +1 -0
- package/src/runtime/routes/migration-routes.ts +720 -127
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +284 -0
- package/src/runtime/routes/playground/__tests__/guard.test.ts +80 -0
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +294 -0
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +271 -0
- package/src/runtime/routes/playground/__tests__/seed-conversation.test.ts +202 -0
- package/src/runtime/routes/playground/__tests__/seeded-conversations.test.ts +309 -0
- package/src/runtime/routes/playground/__tests__/state.test.ts +224 -0
- package/src/runtime/routes/playground/conversation-not-found.ts +29 -0
- package/src/runtime/routes/playground/deps.ts +56 -0
- package/src/runtime/routes/playground/force-compact.ts +73 -0
- package/src/runtime/routes/playground/guard.ts +37 -0
- package/src/runtime/routes/playground/index.ts +28 -0
- package/src/runtime/routes/playground/inject-failures.ts +159 -0
- package/src/runtime/routes/playground/reset-circuit.ts +115 -0
- package/src/runtime/routes/playground/seed-conversation.ts +139 -0
- package/src/runtime/routes/playground/seeded-conversations.ts +78 -0
- package/src/runtime/routes/playground/state.ts +78 -0
- package/src/runtime/routes/schedule-routes.ts +89 -8
- package/src/runtime/routes/settings-routes.ts +4 -2
- package/src/runtime/routes/trust-rules-routes.ts +30 -14
- package/src/runtime/routes/work-items-routes.test.ts +1 -1
- package/src/runtime/routes/work-items-routes.ts +3 -2
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +25 -43
- package/src/runtime/services/analyze-conversation.ts +12 -16
- package/src/runtime/skill-route-registry.ts +97 -15
- package/src/schedule/run-script.ts +68 -0
- package/src/schedule/schedule-store.ts +7 -1
- package/src/schedule/scheduler.ts +56 -8
- package/src/security/__tests__/provider-key-env-fallback.test.ts +119 -0
- package/src/security/__tests__/untrusted-content.test.ts +109 -0
- package/src/security/oauth2.ts +98 -35
- package/src/security/secure-keys.ts +7 -8
- package/src/security/token-manager.ts +27 -13
- package/src/security/untrusted-content.ts +102 -0
- package/src/skills/catalog-cache.ts +35 -9
- package/src/skills/catalog-install.ts +31 -3
- package/src/skills/skill-cache-store.ts +97 -0
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +76 -0
- package/src/stt/daemon-batch-transcriber.ts +33 -0
- package/src/stt/stt-stream-session.ts +8 -1
- package/src/stt/types.ts +5 -1
- package/src/subagent/manager.ts +41 -13
- package/src/tasks/ephemeral-permissions.ts +9 -4
- package/src/telemetry/usage-telemetry-reporter.ts +27 -5
- package/src/tools/browser/__tests__/browser-status.test.ts +234 -2
- package/src/tools/browser/browser-execution.ts +150 -54
- package/src/tools/browser/cdp-client/__tests__/extension-cdp-client.test.ts +230 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +146 -3
- package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +22 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +54 -3
- package/src/tools/browser/cdp-client/factory.ts +15 -4
- package/src/tools/credentials/tool-policy.ts +39 -5
- package/src/tools/credentials/vault.ts +9 -4
- package/src/tools/executor.ts +129 -73
- package/src/tools/filesystem/write.ts +52 -0
- package/src/tools/host-terminal/host-shell.ts +45 -5
- package/src/tools/memory/register.test.ts +185 -0
- package/src/tools/memory/register.ts +3 -1
- package/src/tools/network/script-proxy/session-manager.ts +37 -1
- package/src/tools/network/web-fetch.ts +20 -10
- package/src/tools/network/web-search.ts +19 -4
- package/src/tools/permission-checker.ts +116 -46
- package/src/tools/policy-context.ts +29 -8
- package/src/tools/registry.ts +195 -6
- package/src/tools/schedule/create.ts +23 -8
- package/src/tools/schedule/update.ts +3 -1
- package/src/tools/secret-detection-handler.ts +0 -51
- package/src/tools/side-effects.ts +0 -11
- package/src/tools/skills/execute.ts +2 -2
- package/src/tools/skills/sandbox-runner.ts +5 -2
- package/src/tools/system/avatar-generator.ts +6 -2
- package/src/tools/terminal/backends/native.ts +51 -2
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +1 -0
- package/src/tools/tool-manifest.ts +6 -21
- package/src/tools/types.ts +40 -5
- package/src/tools/verification-control-plane-policy.ts +1 -1
- package/src/tts/__tests__/provider-adapters.test.ts +240 -13
- package/src/tts/provider-catalog.ts +18 -0
- package/src/tts/providers/index.ts +2 -0
- package/src/tts/providers/xai-provider.ts +224 -0
- package/src/tts/types.ts +46 -0
- package/src/types/tar-stream.d.ts +66 -0
- package/src/util/json.ts +17 -0
- package/src/util/platform.ts +9 -4
- package/src/util/pricing.ts +41 -8
- package/src/watcher/engine.ts +1 -1
- package/src/watcher/providers/google-calendar.ts +134 -8
- package/src/watcher/providers/outlook-calendar.ts +42 -2
- package/src/workspace/git-service.ts +23 -4
- package/src/workspace/migrations/006-services-config.ts +2 -4
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +2 -3
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +516 -0
- package/src/workspace/migrations/039-drop-legacy-llm-keys.ts +171 -0
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +154 -0
- package/src/workspace/migrations/041-backfill-google-gmail-settings-scope.ts +56 -0
- package/src/workspace/migrations/042-fix-backfill-google-gmail-settings-scope.ts +70 -0
- package/src/workspace/migrations/043-release-notes-latex-rendering.ts +75 -0
- package/src/workspace/migrations/044-bump-stale-provider-stream-timeout.ts +51 -0
- package/src/workspace/migrations/045-release-notes-meet-avatar.ts +130 -0
- package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +108 -0
- package/src/workspace/migrations/047-remove-watch-callsites.ts +54 -0
- package/src/workspace/migrations/048-remove-workspace-hooks.ts +81 -0
- package/src/workspace/migrations/049-release-notes-default-sonnet.ts +80 -0
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +86 -0
- package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +128 -0
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/registry.ts +28 -0
- package/src/workspace/provider-commit-message-generator.ts +19 -38
- package/tsconfig.json +1 -1
- package/hook-templates/debug-prompt-logger/hook.json +0 -7
- package/hook-templates/debug-prompt-logger/run.sh +0 -66
- package/src/__tests__/context-overflow-approval.test.ts +0 -156
- package/src/__tests__/gmail-archive-fallback.test.ts +0 -193
- package/src/__tests__/gmail-archive-gate.test.ts +0 -246
- package/src/__tests__/gmail-preferences.test.ts +0 -117
- package/src/__tests__/hooks-blocking.test.ts +0 -178
- package/src/__tests__/hooks-cli.test.ts +0 -182
- package/src/__tests__/hooks-config.test.ts +0 -108
- package/src/__tests__/hooks-discovery.test.ts +0 -211
- package/src/__tests__/hooks-integration.test.ts +0 -196
- package/src/__tests__/hooks-manager.test.ts +0 -226
- package/src/__tests__/hooks-runner.test.ts +0 -175
- package/src/__tests__/hooks-settings.test.ts +0 -160
- package/src/__tests__/hooks-templates.test.ts +0 -169
- package/src/__tests__/hooks-ts-runner.test.ts +0 -170
- package/src/__tests__/hooks-watch.test.ts +0 -112
- package/src/__tests__/notification-schedule-dedup.test.ts +0 -213
- package/src/__tests__/oauth-scope-policy.test.ts +0 -180
- package/src/__tests__/outlook-attachments.test.ts +0 -301
- package/src/__tests__/outlook-automation-tools.test.ts +0 -425
- package/src/__tests__/outlook-categories.test.ts +0 -212
- package/src/__tests__/outlook-compose-tools.test.ts +0 -325
- package/src/__tests__/outlook-declutter-tools.test.ts +0 -585
- package/src/__tests__/outlook-follow-up.test.ts +0 -196
- package/src/__tests__/outlook-trash.test.ts +0 -77
- package/src/__tests__/outlook-unsubscribe.test.ts +0 -279
- package/src/__tests__/send-notification-tool.test.ts +0 -83
- package/src/__tests__/update-bulletin-format.test.ts +0 -181
- package/src/__tests__/update-bulletin-state.test.ts +0 -135
- package/src/__tests__/update-bulletin.test.ts +0 -478
- package/src/__tests__/update-template-contract.test.ts +0 -29
- package/src/cli/commands/doctor.ts +0 -341
- package/src/cli/commands/shotgun.ts +0 -266
- package/src/config/bundled-skills/browser/SKILL.md +0 -88
- package/src/config/bundled-skills/browser/TOOLS.json +0 -516
- package/src/config/bundled-skills/browser/tools/browser-attach.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-click.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-close.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-detach.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-extract.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-fill-credential.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-hover.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-navigate.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-press-key.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-screenshot.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-scroll.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-select-option.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-snapshot.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-status.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-type.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +0 -49
- package/src/config/bundled-skills/browser/tools/browser-wait-for.ts +0 -12
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +0 -27
- package/src/config/bundled-skills/chatgpt-import/TOOLS.json +0 -27
- package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +0 -378
- package/src/config/bundled-skills/conversations/SKILL.md +0 -20
- package/src/config/bundled-skills/conversations/TOOLS.json +0 -23
- package/src/config/bundled-skills/conversations/tools/rename-conversation.ts +0 -66
- package/src/config/bundled-skills/gmail/SKILL.md +0 -221
- package/src/config/bundled-skills/gmail/TOOLS.json +0 -588
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +0 -256
- package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +0 -112
- package/src/config/bundled-skills/gmail/tools/gmail-draft.ts +0 -44
- package/src/config/bundled-skills/gmail/tools/gmail-filters.ts +0 -81
- package/src/config/bundled-skills/gmail/tools/gmail-follow-up.ts +0 -108
- package/src/config/bundled-skills/gmail/tools/gmail-forward.ts +0 -146
- package/src/config/bundled-skills/gmail/tools/gmail-label.ts +0 -53
- package/src/config/bundled-skills/gmail/tools/gmail-outreach-scan.ts +0 -347
- package/src/config/bundled-skills/gmail/tools/gmail-preferences-tool.ts +0 -59
- package/src/config/bundled-skills/gmail/tools/gmail-preferences.ts +0 -82
- package/src/config/bundled-skills/gmail/tools/gmail-send-draft.ts +0 -26
- package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +0 -347
- package/src/config/bundled-skills/gmail/tools/gmail-trash.ts +0 -29
- package/src/config/bundled-skills/gmail/tools/gmail-unsubscribe.ts +0 -122
- package/src/config/bundled-skills/gmail/tools/gmail-vacation.ts +0 -67
- package/src/config/bundled-skills/gmail/tools/scan-result-store.ts +0 -100
- package/src/config/bundled-skills/gmail/tools/shared.ts +0 -47
- package/src/config/bundled-skills/google-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/google-calendar/TOOLS.json +0 -226
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +0 -223
- package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +0 -27
- package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +0 -48
- package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +0 -19
- package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +0 -36
- package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +0 -58
- package/src/config/bundled-skills/google-calendar/tools/shared.ts +0 -17
- package/src/config/bundled-skills/google-calendar/types.ts +0 -97
- package/src/config/bundled-skills/heartbeat/SKILL.md +0 -43
- package/src/config/bundled-skills/notifications/SKILL.md +0 -40
- package/src/config/bundled-skills/notifications/TOOLS.json +0 -80
- package/src/config/bundled-skills/notifications/tools/send-notification.ts +0 -152
- package/src/config/bundled-skills/notifications/tools/shared.ts +0 -13
- package/src/config/bundled-skills/outlook/SKILL.md +0 -196
- package/src/config/bundled-skills/outlook/TOOLS.json +0 -530
- package/src/config/bundled-skills/outlook/tools/outlook-attachments.ts +0 -85
- package/src/config/bundled-skills/outlook/tools/outlook-categories.ts +0 -77
- package/src/config/bundled-skills/outlook/tools/outlook-draft.ts +0 -84
- package/src/config/bundled-skills/outlook/tools/outlook-follow-up.ts +0 -94
- package/src/config/bundled-skills/outlook/tools/outlook-forward.ts +0 -49
- package/src/config/bundled-skills/outlook/tools/outlook-outreach-scan.ts +0 -237
- package/src/config/bundled-skills/outlook/tools/outlook-rules.ts +0 -161
- package/src/config/bundled-skills/outlook/tools/outlook-send-draft.ts +0 -32
- package/src/config/bundled-skills/outlook/tools/outlook-sender-digest.ts +0 -272
- package/src/config/bundled-skills/outlook/tools/outlook-trash.ts +0 -29
- package/src/config/bundled-skills/outlook/tools/outlook-unsubscribe.ts +0 -129
- package/src/config/bundled-skills/outlook/tools/outlook-vacation.ts +0 -87
- package/src/config/bundled-skills/outlook/tools/shared.ts +0 -20
- package/src/config/bundled-skills/outlook-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/outlook-calendar/TOOLS.json +0 -221
- package/src/config/bundled-skills/outlook-calendar/calendar-client.ts +0 -252
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-check-availability.ts +0 -53
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-create-event.ts +0 -74
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-get-event.ts +0 -18
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-list-events.ts +0 -46
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-rsvp.ts +0 -36
- package/src/config/bundled-skills/outlook-calendar/tools/shared.ts +0 -17
- package/src/config/bundled-skills/outlook-calendar/types.ts +0 -120
- package/src/config/bundled-skills/screen-watch/SKILL.md +0 -27
- package/src/config/bundled-skills/screen-watch/TOOLS.json +0 -35
- package/src/config/bundled-skills/screen-watch/tools/start-screen-watch.ts +0 -12
- package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -84
- package/src/config/bundled-skills/slack/SKILL.md +0 -108
- package/src/config/bundled-skills/tasks/SKILL.md +0 -37
- package/src/config/bundled-skills/tasks/TOOLS.json +0 -353
- package/src/config/bundled-skills/tasks/icon.svg +0 -34
- package/src/config/bundled-skills/tasks/tools/task-delete.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-add.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-show.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-update.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-queue-run.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-run.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-save.ts +0 -12
- package/src/config/bundled-skills/watcher/SKILL.md +0 -31
- package/src/config/bundled-skills/watcher/TOOLS.json +0 -167
- package/src/config/bundled-skills/watcher/tools/watcher-create.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-list.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-update.ts +0 -12
- package/src/daemon/context-overflow-approval.ts +0 -52
- package/src/daemon/watch-handler.ts +0 -399
- package/src/hooks/cli.ts +0 -253
- package/src/hooks/config.ts +0 -100
- package/src/hooks/discovery.ts +0 -135
- package/src/hooks/manager.ts +0 -179
- package/src/hooks/runner.ts +0 -117
- package/src/hooks/templates.ts +0 -77
- package/src/hooks/types.ts +0 -75
- package/src/oauth/scope-policy.ts +0 -89
- package/src/prompts/templates/UPDATES.md +0 -50
- package/src/prompts/update-bulletin-format.ts +0 -85
- package/src/prompts/update-bulletin-state.ts +0 -58
- package/src/prompts/update-bulletin-template-path.ts +0 -13
- package/src/prompts/update-bulletin.ts +0 -139
- package/src/runtime/gateway-internal-client.ts +0 -94
- package/src/runtime/routes/watch-routes.ts +0 -156
- package/src/shared/provider-env-vars.ts +0 -19
- package/src/signals/shotgun.ts +0 -203
- package/src/tools/watch/screen-watch.ts +0 -144
- package/src/tools/watch/watch-state.ts +0 -142
- package/src/tools/watcher/create.ts +0 -86
- package/src/tools/watcher/delete.ts +0 -36
- package/src/tools/watcher/digest.ts +0 -54
- package/src/tools/watcher/list.ts +0 -83
- package/src/tools/watcher/update.ts +0 -71
|
@@ -25,28 +25,6 @@ export const ThinkingConfigSchema = z
|
|
|
25
25
|
})
|
|
26
26
|
.describe("Extended thinking (chain-of-thought) configuration");
|
|
27
27
|
|
|
28
|
-
export const EffortSchema = z
|
|
29
|
-
.enum(["low", "medium", "high", "max"], {
|
|
30
|
-
error: 'effort must be "low", "medium", "high", or "max"',
|
|
31
|
-
})
|
|
32
|
-
.default("max")
|
|
33
|
-
.describe(
|
|
34
|
-
"How much effort the model should put into its response — lower effort is faster and cheaper",
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
export type Effort = z.infer<typeof EffortSchema>;
|
|
38
|
-
|
|
39
|
-
export const SpeedSchema = z
|
|
40
|
-
.enum(["standard", "fast"], {
|
|
41
|
-
error: 'speed must be "standard" or "fast"',
|
|
42
|
-
})
|
|
43
|
-
.default("standard")
|
|
44
|
-
.describe(
|
|
45
|
-
'Inference speed mode — "fast" enables higher output token throughput on supported models (Opus 4.6, Opus 4.7) at premium pricing',
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
export type Speed = z.infer<typeof SpeedSchema>;
|
|
49
|
-
|
|
50
28
|
export const ContextOverflowRecoveryConfigSchema = z
|
|
51
29
|
.object({
|
|
52
30
|
enabled: z
|
|
@@ -121,7 +99,9 @@ export const ContextWindowConfigSchema = z
|
|
|
121
99
|
.int("contextWindow.maxInputTokens must be an integer")
|
|
122
100
|
.positive("contextWindow.maxInputTokens must be a positive integer")
|
|
123
101
|
.default(200000)
|
|
124
|
-
.describe(
|
|
102
|
+
.describe(
|
|
103
|
+
"Conservative cap on input tokens allowed in the context window. Acts as an override that further constrains the model's catalog `contextWindow`; the effective budget is `min(catalog.contextWindow, maxInputTokens)`. Leave at the default to use the model's full native window.",
|
|
104
|
+
),
|
|
125
105
|
targetBudgetRatio: z
|
|
126
106
|
.number({ error: "contextWindow.targetBudgetRatio must be a number" })
|
|
127
107
|
.finite("contextWindow.targetBudgetRatio must be finite")
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unified LLM configuration schema.
|
|
5
|
+
*
|
|
6
|
+
* Defines the shape of the top-level `llm` config block that consolidates
|
|
7
|
+
* provider/model/effort/speed/thinking/contextWindow/pricingOverrides for all
|
|
8
|
+
* call sites in the assistant. Wired into `AssistantConfigSchema` as the `llm`
|
|
9
|
+
* field and consumed by `resolveCallSiteConfig` in `llm-resolver.ts`.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Provider enum
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
export const LLMProvider = z.enum([
|
|
17
|
+
"anthropic",
|
|
18
|
+
"openai",
|
|
19
|
+
"gemini",
|
|
20
|
+
"ollama",
|
|
21
|
+
"fireworks",
|
|
22
|
+
"openrouter",
|
|
23
|
+
]);
|
|
24
|
+
export type LLMProvider = z.infer<typeof LLMProvider>;
|
|
25
|
+
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Call-site enum
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The complete set of LLM call-site identifiers the assistant emits.
|
|
32
|
+
*
|
|
33
|
+
* Each ID corresponds to a logical place in the codebase that produces an LLM
|
|
34
|
+
* request. Adding or removing a call site is a config-schema change — keep
|
|
35
|
+
* this list in sync with the resolver and registry (introduced in PR 2).
|
|
36
|
+
*/
|
|
37
|
+
export const LLMCallSiteEnum = z.enum([
|
|
38
|
+
"mainAgent",
|
|
39
|
+
"subagentSpawn",
|
|
40
|
+
"heartbeatAgent",
|
|
41
|
+
"filingAgent",
|
|
42
|
+
"analyzeConversation",
|
|
43
|
+
"callAgent",
|
|
44
|
+
"memoryExtraction",
|
|
45
|
+
"memoryConsolidation",
|
|
46
|
+
"memoryRetrieval",
|
|
47
|
+
"narrativeRefinement",
|
|
48
|
+
"patternScan",
|
|
49
|
+
"conversationSummarization",
|
|
50
|
+
"conversationStarters",
|
|
51
|
+
"conversationTitle",
|
|
52
|
+
"commitMessage",
|
|
53
|
+
"identityIntro",
|
|
54
|
+
"emptyStateGreeting",
|
|
55
|
+
"notificationDecision",
|
|
56
|
+
"preferenceExtraction",
|
|
57
|
+
"guardianQuestionCopy",
|
|
58
|
+
"approvalCopy",
|
|
59
|
+
"approvalConversation",
|
|
60
|
+
"interactionClassifier",
|
|
61
|
+
"styleAnalyzer",
|
|
62
|
+
"inviteInstructionGenerator",
|
|
63
|
+
"skillCategoryInference",
|
|
64
|
+
"meetConsentMonitor",
|
|
65
|
+
"meetChatOpportunity",
|
|
66
|
+
"inference",
|
|
67
|
+
"feedEventCopy",
|
|
68
|
+
]);
|
|
69
|
+
export type LLMCallSite = z.infer<typeof LLMCallSiteEnum>;
|
|
70
|
+
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Effort & Speed
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
|
|
75
|
+
export const EffortEnum = z.enum(["low", "medium", "high", "xhigh", "max"]);
|
|
76
|
+
export type Effort = z.infer<typeof EffortEnum>;
|
|
77
|
+
|
|
78
|
+
export const SpeedEnum = z.enum(["standard", "fast"]);
|
|
79
|
+
export type Speed = z.infer<typeof SpeedEnum>;
|
|
80
|
+
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Leaf primitives (shared between LLMConfigBase and LLMConfigFragment)
|
|
83
|
+
//
|
|
84
|
+
// Each primitive is a Zod schema with no defaults attached. `LLMConfigBase`
|
|
85
|
+
// composes them with `.default(...)` so `LLMConfigBase.parse({})` returns a
|
|
86
|
+
// fully-defaulted object; `LLMConfigFragment` composes them with `.optional()`
|
|
87
|
+
// so absent fields stay absent. Centralizing the validation rules here keeps
|
|
88
|
+
// the two views consistent.
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
|
|
91
|
+
const ModelSchema = z.string().min(1);
|
|
92
|
+
const MaxTokensSchema = z.number().int().positive();
|
|
93
|
+
const TemperatureSchema = z.number().min(0).max(2).nullable();
|
|
94
|
+
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
// Thinking & ContextWindow
|
|
97
|
+
//
|
|
98
|
+
// These mirror the shapes already declared in `schemas/inference.ts` but are
|
|
99
|
+
// redeclared here so the new `llm` namespace owns its own types. PRs 3 and
|
|
100
|
+
// beyond will deprecate the legacy declarations once the resolver is the
|
|
101
|
+
// single source of truth.
|
|
102
|
+
//
|
|
103
|
+
// Every leaf in the defaulted view carries a `.default(...)`, so
|
|
104
|
+
// `Schema.parse({})` returns a fully-defaulted object. This is critical for
|
|
105
|
+
// the loader's leaf-deletion recovery path: if any leaf in the user's config
|
|
106
|
+
// is invalid, the loader strips that leaf and re-parses; without
|
|
107
|
+
// schema-level defaults the parse would fail on missing required siblings,
|
|
108
|
+
// and the loader would fall back to `cloneDefaultConfig()`, discarding the
|
|
109
|
+
// user's other valid settings.
|
|
110
|
+
//
|
|
111
|
+
// Each defaulted schema has a sibling "fragment" schema with the same leaves
|
|
112
|
+
// wrapped in `.optional()` instead of `.default(...)`. The fragment view is
|
|
113
|
+
// used by `LLMConfigFragment` so partial overrides remain partial — Zod
|
|
114
|
+
// would inject defaults for absent fields if we used `Schema.partial()`, and
|
|
115
|
+
// the fragment contract is "any field may be absent and stays absent".
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
|
|
118
|
+
// Leaf primitives for thinking fields — defined once and reused by both the
|
|
119
|
+
// defaulted (`ThinkingSchema`) and fragment (`ThinkingFragmentSchema`) views.
|
|
120
|
+
const ThinkingEnabledSchema = z.boolean();
|
|
121
|
+
const ThinkingStreamThinkingSchema = z.boolean();
|
|
122
|
+
|
|
123
|
+
export const ThinkingSchema = z.object({
|
|
124
|
+
enabled: ThinkingEnabledSchema.default(true),
|
|
125
|
+
streamThinking: ThinkingStreamThinkingSchema.default(true),
|
|
126
|
+
});
|
|
127
|
+
export type Thinking = z.infer<typeof ThinkingSchema>;
|
|
128
|
+
|
|
129
|
+
// Fragment view: every field optional, no defaults injected. Defining this
|
|
130
|
+
// separately (rather than `ThinkingSchema.partial()`) avoids having Zod
|
|
131
|
+
// inject defaults for absent fields when a partial override is parsed —
|
|
132
|
+
// the fragment contract is "any field may be absent and stays absent".
|
|
133
|
+
const ThinkingFragmentSchema = z.object({
|
|
134
|
+
enabled: ThinkingEnabledSchema.optional(),
|
|
135
|
+
streamThinking: ThinkingStreamThinkingSchema.optional(),
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Leaf primitives for context-overflow recovery.
|
|
139
|
+
const OverflowEnabledSchema = z.boolean();
|
|
140
|
+
const OverflowSafetyMarginRatioSchema = z.number().finite().gt(0).lt(1);
|
|
141
|
+
const OverflowMaxAttemptsSchema = z.number().int().positive();
|
|
142
|
+
const OverflowLatestTurnCompressionSchema = z.enum([
|
|
143
|
+
"truncate",
|
|
144
|
+
"summarize",
|
|
145
|
+
"drop",
|
|
146
|
+
]);
|
|
147
|
+
|
|
148
|
+
const ContextOverflowRecoverySchema = z.object({
|
|
149
|
+
enabled: OverflowEnabledSchema.default(true),
|
|
150
|
+
safetyMarginRatio: OverflowSafetyMarginRatioSchema.default(0.05),
|
|
151
|
+
maxAttempts: OverflowMaxAttemptsSchema.default(3),
|
|
152
|
+
interactiveLatestTurnCompression:
|
|
153
|
+
OverflowLatestTurnCompressionSchema.default("summarize"),
|
|
154
|
+
nonInteractiveLatestTurnCompression:
|
|
155
|
+
OverflowLatestTurnCompressionSchema.default("truncate"),
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
const ContextOverflowRecoveryFragmentSchema = z.object({
|
|
159
|
+
enabled: OverflowEnabledSchema.optional(),
|
|
160
|
+
safetyMarginRatio: OverflowSafetyMarginRatioSchema.optional(),
|
|
161
|
+
maxAttempts: OverflowMaxAttemptsSchema.optional(),
|
|
162
|
+
interactiveLatestTurnCompression:
|
|
163
|
+
OverflowLatestTurnCompressionSchema.optional(),
|
|
164
|
+
nonInteractiveLatestTurnCompression:
|
|
165
|
+
OverflowLatestTurnCompressionSchema.optional(),
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// Leaf primitives for context-window fields.
|
|
169
|
+
const ContextEnabledSchema = z.boolean();
|
|
170
|
+
const ContextMaxInputTokensSchema = z.number().int().positive();
|
|
171
|
+
const ContextTargetBudgetRatioSchema = z.number().finite().gt(0).lte(1);
|
|
172
|
+
const ContextCompactThresholdSchema = z.number().finite().gt(0).lte(1);
|
|
173
|
+
const ContextSummaryBudgetRatioSchema = z.number().finite().gt(0).lte(1);
|
|
174
|
+
|
|
175
|
+
export const ContextWindowSchema = z.object({
|
|
176
|
+
enabled: ContextEnabledSchema.default(true),
|
|
177
|
+
maxInputTokens: ContextMaxInputTokensSchema.default(200000),
|
|
178
|
+
targetBudgetRatio: ContextTargetBudgetRatioSchema.default(0.3),
|
|
179
|
+
compactThreshold: ContextCompactThresholdSchema.default(0.8),
|
|
180
|
+
summaryBudgetRatio: ContextSummaryBudgetRatioSchema.default(0.05),
|
|
181
|
+
overflowRecovery: ContextOverflowRecoverySchema.default(
|
|
182
|
+
ContextOverflowRecoverySchema.parse({}),
|
|
183
|
+
),
|
|
184
|
+
});
|
|
185
|
+
export type ContextWindow = z.infer<typeof ContextWindowSchema>;
|
|
186
|
+
|
|
187
|
+
// Fragment view of `ContextWindowSchema` — all fields optional and no defaults
|
|
188
|
+
// injected. Nested `overflowRecovery` likewise uses its fragment view, so a
|
|
189
|
+
// partial override like `{ overflowRecovery: { maxAttempts: 5 } }` produces
|
|
190
|
+
// exactly that and nothing else.
|
|
191
|
+
const ContextWindowDeepPartialSchema = z.object({
|
|
192
|
+
enabled: ContextEnabledSchema.optional(),
|
|
193
|
+
maxInputTokens: ContextMaxInputTokensSchema.optional(),
|
|
194
|
+
targetBudgetRatio: ContextTargetBudgetRatioSchema.optional(),
|
|
195
|
+
compactThreshold: ContextCompactThresholdSchema.optional(),
|
|
196
|
+
summaryBudgetRatio: ContextSummaryBudgetRatioSchema.optional(),
|
|
197
|
+
overflowRecovery: ContextOverflowRecoveryFragmentSchema.optional(),
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// OpenRouter provider-routing preferences
|
|
202
|
+
//
|
|
203
|
+
// OpenRouter's `/v1/chat/completions` and `/v1/messages` endpoints both accept
|
|
204
|
+
// a `provider: { only: [...] }` body field that restricts which upstream
|
|
205
|
+
// providers (Anthropic, Google, etc.) may fulfill a request. Exposed here so
|
|
206
|
+
// users can pin routing via config without touching the wire-format knobs
|
|
207
|
+
// directly. Nested shape keeps room for sibling OpenRouter knobs (`order`,
|
|
208
|
+
// `allow_fallbacks`, …) to be added later without another schema reshape.
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
|
|
211
|
+
const OpenRouterOnlyItemSchema = z.string().min(1);
|
|
212
|
+
|
|
213
|
+
export const OpenRouterSchema = z.object({
|
|
214
|
+
only: z.array(OpenRouterOnlyItemSchema).default([]),
|
|
215
|
+
});
|
|
216
|
+
export type OpenRouter = z.infer<typeof OpenRouterSchema>;
|
|
217
|
+
|
|
218
|
+
const OpenRouterDeepPartialSchema = z.object({
|
|
219
|
+
only: z.array(OpenRouterOnlyItemSchema).optional(),
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Pricing overrides
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
|
|
226
|
+
export const PricingOverrideSchema = z.object({
|
|
227
|
+
provider: z.string(),
|
|
228
|
+
modelPattern: z.string(),
|
|
229
|
+
inputPer1M: z.number().nonnegative(),
|
|
230
|
+
outputPer1M: z.number().nonnegative(),
|
|
231
|
+
});
|
|
232
|
+
export type PricingOverride = z.infer<typeof PricingOverrideSchema>;
|
|
233
|
+
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
// Base config (all fields defaulted) and Fragment (all fields optional)
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Fully specified LLM config. Used for `llm.default` — every knob has a
|
|
240
|
+
* schema-level default, so `LLMConfigBase.parse({})` returns a complete
|
|
241
|
+
* fallback object. This is essential for the loader's leaf-deletion recovery
|
|
242
|
+
* path; see the comment on `ThinkingSchema` above.
|
|
243
|
+
*/
|
|
244
|
+
export const LLMConfigBase = z.object({
|
|
245
|
+
provider: LLMProvider.default("anthropic"),
|
|
246
|
+
model: ModelSchema.default("claude-sonnet-4-6"),
|
|
247
|
+
maxTokens: MaxTokensSchema.default(64000),
|
|
248
|
+
effort: EffortEnum.default("max"),
|
|
249
|
+
speed: SpeedEnum.default("standard"),
|
|
250
|
+
temperature: TemperatureSchema.default(null),
|
|
251
|
+
thinking: ThinkingSchema.default(ThinkingSchema.parse({})),
|
|
252
|
+
contextWindow: ContextWindowSchema.default(ContextWindowSchema.parse({})),
|
|
253
|
+
openrouter: OpenRouterSchema.default(OpenRouterSchema.parse({})),
|
|
254
|
+
});
|
|
255
|
+
export type LLMConfigBase = z.infer<typeof LLMConfigBase>;
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Partial LLM config used for profiles and call-site overrides. Each top-level
|
|
259
|
+
* field is optional; nested `thinking` and `contextWindow` accept partial
|
|
260
|
+
* objects so callers can override individual leaves (e.g. `{ thinking:
|
|
261
|
+
* { enabled: false } }`).
|
|
262
|
+
*/
|
|
263
|
+
export const LLMConfigFragment = z.object({
|
|
264
|
+
provider: LLMProvider.optional(),
|
|
265
|
+
model: ModelSchema.optional(),
|
|
266
|
+
maxTokens: MaxTokensSchema.optional(),
|
|
267
|
+
effort: EffortEnum.optional(),
|
|
268
|
+
speed: SpeedEnum.optional(),
|
|
269
|
+
temperature: TemperatureSchema.optional(),
|
|
270
|
+
thinking: ThinkingFragmentSchema.optional(),
|
|
271
|
+
contextWindow: ContextWindowDeepPartialSchema.optional(),
|
|
272
|
+
openrouter: OpenRouterDeepPartialSchema.optional(),
|
|
273
|
+
});
|
|
274
|
+
export type LLMConfigFragment = z.infer<typeof LLMConfigFragment>;
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Per-call-site config: a fragment plus an optional `profile` reference.
|
|
278
|
+
* The resolver merges in the named profile (if any) before applying
|
|
279
|
+
* call-site-level overrides.
|
|
280
|
+
*/
|
|
281
|
+
export const LLMCallSiteConfig = LLMConfigFragment.extend({
|
|
282
|
+
profile: z.string().min(1).optional(),
|
|
283
|
+
});
|
|
284
|
+
export type LLMCallSiteConfig = z.infer<typeof LLMCallSiteConfig>;
|
|
285
|
+
|
|
286
|
+
// ---------------------------------------------------------------------------
|
|
287
|
+
// Top-level LLM schema
|
|
288
|
+
// ---------------------------------------------------------------------------
|
|
289
|
+
|
|
290
|
+
export const LLMSchema = z
|
|
291
|
+
.object({
|
|
292
|
+
default: LLMConfigBase.default(LLMConfigBase.parse({})),
|
|
293
|
+
profiles: z.record(z.string().min(1), LLMConfigFragment).default({}),
|
|
294
|
+
// `partialRecord` (vs `record`) makes call-site keys optional while still
|
|
295
|
+
// rejecting keys that aren't members of `LLMCallSiteEnum` — exactly the
|
|
296
|
+
// behavior we want (typo detection without requiring callers to declare
|
|
297
|
+
// every call site). Latency-optimized defaults for background call sites
|
|
298
|
+
// are seeded into the user's on-disk config by migration 040, not at
|
|
299
|
+
// schema level, so `LLMSchema.parse({})` yields an empty map.
|
|
300
|
+
callSites: z.partialRecord(LLMCallSiteEnum, LLMCallSiteConfig).default({}),
|
|
301
|
+
pricingOverrides: z.array(PricingOverrideSchema).default([]),
|
|
302
|
+
})
|
|
303
|
+
.superRefine((config, ctx) => {
|
|
304
|
+
const profileNames = new Set(Object.keys(config.profiles ?? {}));
|
|
305
|
+
for (const [siteId, siteConfig] of Object.entries(config.callSites ?? {})) {
|
|
306
|
+
if (siteConfig?.profile == null) continue;
|
|
307
|
+
if (!profileNames.has(siteConfig.profile)) {
|
|
308
|
+
ctx.addIssue({
|
|
309
|
+
code: "custom",
|
|
310
|
+
path: ["callSites", siteId, "profile"],
|
|
311
|
+
message: `Profile "${siteConfig.profile}" referenced by call site "${siteId}" is not defined in llm.profiles`,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
export type LLMConfig = z.infer<typeof LLMSchema>;
|
|
@@ -43,17 +43,9 @@ export const MemorySummarizationConfigSchema = z
|
|
|
43
43
|
.describe(
|
|
44
44
|
"Whether to use an LLM for summarizing and consolidating memory items",
|
|
45
45
|
),
|
|
46
|
-
modelIntent: z
|
|
47
|
-
.enum(["latency-optimized", "quality-optimized", "vision-optimized"], {
|
|
48
|
-
error: "memory.summarization.modelIntent must be a valid model intent",
|
|
49
|
-
})
|
|
50
|
-
.default("quality-optimized")
|
|
51
|
-
.describe(
|
|
52
|
-
"Model selection strategy for summarization — trade off speed vs quality",
|
|
53
|
-
),
|
|
54
46
|
})
|
|
55
47
|
.describe(
|
|
56
|
-
"Controls how memory items are summarized and consolidated over time",
|
|
48
|
+
"Controls how memory items are summarized and consolidated over time. Model selection lives under llm.callSites.conversationSummarization.",
|
|
57
49
|
);
|
|
58
50
|
|
|
59
51
|
export type MemoryExtractionConfig = z.infer<
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
3
|
export const NotificationsConfigSchema = z
|
|
4
|
-
.object({
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
})
|
|
9
|
-
.default("latency-optimized")
|
|
10
|
-
.describe(
|
|
11
|
-
"Model selection strategy for deciding whether to send a notification",
|
|
12
|
-
),
|
|
13
|
-
})
|
|
14
|
-
.describe("Notification delivery configuration");
|
|
4
|
+
.object({})
|
|
5
|
+
.describe(
|
|
6
|
+
"Notification delivery configuration. Model selection lives under llm.callSites.notificationDecision and llm.callSites.preferenceExtraction.",
|
|
7
|
+
);
|
|
15
8
|
|
|
16
9
|
export type NotificationsConfig = z.infer<typeof NotificationsConfigSchema>;
|
|
@@ -56,16 +56,10 @@ export const UiConfigSchema = z
|
|
|
56
56
|
.describe(
|
|
57
57
|
"IANA timezone identifier for displaying dates and times (e.g. 'America/New_York')",
|
|
58
58
|
),
|
|
59
|
-
greetingModelIntent: z
|
|
60
|
-
.enum(["latency-optimized", "quality-optimized"], {
|
|
61
|
-
error: "ui.greetingModelIntent must be 'latency-optimized' or 'quality-optimized'",
|
|
62
|
-
})
|
|
63
|
-
.default("latency-optimized")
|
|
64
|
-
.describe(
|
|
65
|
-
"Model intent for empty-state greeting generation (latency-optimized = fast/small model, quality-optimized = primary model)",
|
|
66
|
-
),
|
|
67
59
|
})
|
|
68
|
-
.describe(
|
|
60
|
+
.describe(
|
|
61
|
+
"User interface display settings. Empty-state greeting model selection lives under llm.callSites.emptyStateGreeting.",
|
|
62
|
+
);
|
|
69
63
|
|
|
70
64
|
export type DaemonConfig = z.infer<typeof DaemonConfigSchema>;
|
|
71
65
|
export type UiConfig = z.infer<typeof UiConfigSchema>;
|
|
@@ -87,6 +87,39 @@ export const PermissionsConfigSchema = z
|
|
|
87
87
|
.describe(
|
|
88
88
|
"Whether the assistant can execute commands on the host machine without prompting",
|
|
89
89
|
),
|
|
90
|
+
autoApproveUpTo: z
|
|
91
|
+
.union([
|
|
92
|
+
z.enum(["none", "low", "medium", "high"], {
|
|
93
|
+
error:
|
|
94
|
+
"permissions.autoApproveUpTo must be one of: none, low, medium, high",
|
|
95
|
+
}),
|
|
96
|
+
z.object({
|
|
97
|
+
conversation: z
|
|
98
|
+
.enum(["none", "low", "medium", "high"])
|
|
99
|
+
.default("low")
|
|
100
|
+
.describe(
|
|
101
|
+
"Threshold for interactive conversation sessions (default: low)",
|
|
102
|
+
),
|
|
103
|
+
background: z
|
|
104
|
+
.enum(["none", "low", "medium", "high"])
|
|
105
|
+
.default("medium")
|
|
106
|
+
.describe(
|
|
107
|
+
"Threshold for non-interactive guardian sessions (default: medium)",
|
|
108
|
+
),
|
|
109
|
+
headless: z
|
|
110
|
+
.enum(["none", "low", "medium", "high"])
|
|
111
|
+
.default("none")
|
|
112
|
+
.describe(
|
|
113
|
+
"Threshold for non-interactive non-guardian sessions (default: none)",
|
|
114
|
+
),
|
|
115
|
+
}),
|
|
116
|
+
])
|
|
117
|
+
.default({ conversation: "low", background: "medium", headless: "none" })
|
|
118
|
+
.describe(
|
|
119
|
+
"Auto-approve tools at or below this risk level without prompting. " +
|
|
120
|
+
"Accepts a scalar ('none', 'low', 'medium', 'high') applied to all contexts, " +
|
|
121
|
+
"or an object with per-context overrides: { conversation, background, headless }.",
|
|
122
|
+
),
|
|
90
123
|
})
|
|
91
124
|
.describe("Permission enforcement mode for tool operations");
|
|
92
125
|
|
|
@@ -28,10 +28,15 @@ export const BaseServiceSchema = z.object({
|
|
|
28
28
|
});
|
|
29
29
|
export type BaseService = z.infer<typeof BaseServiceSchema>;
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
})
|
|
31
|
+
/**
|
|
32
|
+
* Inference service entry. Carries only the routing `mode`
|
|
33
|
+
* (`managed` vs `your-own`) — the provider and model live under
|
|
34
|
+
* `llm.default.{provider, model}` (see `schemas/llm.ts`). PR 19 of the
|
|
35
|
+
* unify-llm-callsites plan removed the `provider` and `model` fields here;
|
|
36
|
+
* legacy configs that still carry them have those keys stripped by
|
|
37
|
+
* workspace migration `039-drop-legacy-llm-keys`.
|
|
38
|
+
*/
|
|
39
|
+
export const InferenceServiceSchema = BaseServiceSchema;
|
|
35
40
|
export type InferenceService = z.infer<typeof InferenceServiceSchema>;
|
|
36
41
|
|
|
37
42
|
export const ImageGenerationServiceSchema = BaseServiceSchema.extend({
|
|
@@ -167,6 +167,59 @@ export type TtsDeepgramProviderConfig = z.infer<
|
|
|
167
167
|
typeof TtsDeepgramProviderConfigSchema
|
|
168
168
|
>;
|
|
169
169
|
|
|
170
|
+
export const TtsXaiProviderConfigSchema = z
|
|
171
|
+
.object({
|
|
172
|
+
voiceId: z
|
|
173
|
+
.string({
|
|
174
|
+
error: "services.tts.providers.xai.voiceId must be a string",
|
|
175
|
+
})
|
|
176
|
+
.transform((v) => v || "eve")
|
|
177
|
+
.default("eve")
|
|
178
|
+
.describe(
|
|
179
|
+
"xAI voice ID — one of: eve, ara, rex, sal, leo (case-insensitive)",
|
|
180
|
+
),
|
|
181
|
+
language: z
|
|
182
|
+
.string({
|
|
183
|
+
error: "services.tts.providers.xai.language must be a string",
|
|
184
|
+
})
|
|
185
|
+
.transform((v) => v || "auto")
|
|
186
|
+
.default("auto")
|
|
187
|
+
.describe(
|
|
188
|
+
"BCP-47 language code (e.g. 'en-US') or 'auto' for auto-detection",
|
|
189
|
+
),
|
|
190
|
+
format: z
|
|
191
|
+
.enum(["mp3", "wav"], {
|
|
192
|
+
error: "services.tts.providers.xai.format must be one of: mp3, wav",
|
|
193
|
+
})
|
|
194
|
+
.default("mp3")
|
|
195
|
+
.describe("Output audio format for call/runtime playback"),
|
|
196
|
+
sampleRate: z
|
|
197
|
+
.number({
|
|
198
|
+
error: "services.tts.providers.xai.sampleRate must be a number",
|
|
199
|
+
})
|
|
200
|
+
.int("services.tts.providers.xai.sampleRate must be an integer")
|
|
201
|
+
.refine((v) => [8000, 16000, 22050, 24000, 44100, 48000].includes(v), {
|
|
202
|
+
message:
|
|
203
|
+
"services.tts.providers.xai.sampleRate must be one of: 8000, 16000, 22050, 24000, 44100, 48000",
|
|
204
|
+
})
|
|
205
|
+
.default(24000)
|
|
206
|
+
.describe("Output sample rate in Hz"),
|
|
207
|
+
bitRate: z
|
|
208
|
+
.number({
|
|
209
|
+
error: "services.tts.providers.xai.bitRate must be a number",
|
|
210
|
+
})
|
|
211
|
+
.int("services.tts.providers.xai.bitRate must be an integer")
|
|
212
|
+
.refine((v) => [32000, 64000, 96000, 128000, 192000].includes(v), {
|
|
213
|
+
message:
|
|
214
|
+
"services.tts.providers.xai.bitRate must be one of: 32000, 64000, 96000, 128000, 192000",
|
|
215
|
+
})
|
|
216
|
+
.default(128000)
|
|
217
|
+
.describe("MP3 bit rate (ignored for non-MP3 codecs)"),
|
|
218
|
+
})
|
|
219
|
+
.describe("xAI provider configuration under services.tts");
|
|
220
|
+
|
|
221
|
+
export type TtsXaiProviderConfig = z.infer<typeof TtsXaiProviderConfigSchema>;
|
|
222
|
+
|
|
170
223
|
export const TtsProvidersSchema = z.object({
|
|
171
224
|
elevenlabs: TtsElevenLabsProviderConfigSchema.default(
|
|
172
225
|
TtsElevenLabsProviderConfigSchema.parse({}),
|
|
@@ -177,6 +230,7 @@ export const TtsProvidersSchema = z.object({
|
|
|
177
230
|
deepgram: TtsDeepgramProviderConfigSchema.default(
|
|
178
231
|
TtsDeepgramProviderConfigSchema.parse({}),
|
|
179
232
|
),
|
|
233
|
+
xai: TtsXaiProviderConfigSchema.default(TtsXaiProviderConfigSchema.parse({})),
|
|
180
234
|
});
|
|
181
235
|
export type TtsProviders = z.infer<typeof TtsProvidersSchema>;
|
|
182
236
|
|
|
@@ -197,6 +251,16 @@ for (const id of VALID_TTS_PROVIDERS) {
|
|
|
197
251
|
);
|
|
198
252
|
}
|
|
199
253
|
}
|
|
254
|
+
const catalogKeys = new Set<string>(VALID_TTS_PROVIDERS);
|
|
255
|
+
for (const id of schemaKeys) {
|
|
256
|
+
if (!catalogKeys.has(id)) {
|
|
257
|
+
throw new Error(
|
|
258
|
+
`TTS provider "${id}" has a schema entry in TtsProvidersSchema but ` +
|
|
259
|
+
`is not registered in the provider catalog. Add it to ` +
|
|
260
|
+
`provider-catalog.ts or remove it from TtsProvidersSchema.`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
200
264
|
|
|
201
265
|
/**
|
|
202
266
|
* Canonical TTS service configuration.
|
|
@@ -6,7 +6,7 @@ export const UpdatesConfigSchema = z
|
|
|
6
6
|
.boolean({ error: "updates.enabled must be a boolean" })
|
|
7
7
|
.default(true)
|
|
8
8
|
.describe(
|
|
9
|
-
"Whether
|
|
9
|
+
"Whether to dispatch a background conversation when <workspace>/UPDATES.md has unprocessed content. When false, release-update bulletins are written by migrations but never processed by the agent.",
|
|
10
10
|
),
|
|
11
11
|
})
|
|
12
12
|
.describe("Release update bulletin configuration");
|
|
@@ -74,21 +74,6 @@ export const WorkspaceGitConfigSchema = z
|
|
|
74
74
|
})
|
|
75
75
|
.default(false)
|
|
76
76
|
.describe("Whether to use an LLM to generate commit messages"),
|
|
77
|
-
useConfiguredProvider: z
|
|
78
|
-
.boolean({
|
|
79
|
-
error:
|
|
80
|
-
"workspaceGit.commitMessageLLM.useConfiguredProvider must be a boolean",
|
|
81
|
-
})
|
|
82
|
-
.default(true)
|
|
83
|
-
.describe(
|
|
84
|
-
"Whether to use the globally configured LLM provider for commit messages",
|
|
85
|
-
),
|
|
86
|
-
providerFastModelOverrides: z
|
|
87
|
-
.record(z.string(), z.string())
|
|
88
|
-
.default({} as Record<string, string>)
|
|
89
|
-
.describe(
|
|
90
|
-
"Map of provider names to fast model overrides for commit message generation",
|
|
91
|
-
),
|
|
92
77
|
timeoutMs: z
|
|
93
78
|
.number({
|
|
94
79
|
error: "workspaceGit.commitMessageLLM.timeoutMs must be a number",
|
|
@@ -99,26 +84,6 @@ export const WorkspaceGitConfigSchema = z
|
|
|
99
84
|
)
|
|
100
85
|
.default(600)
|
|
101
86
|
.describe("Timeout for LLM commit message generation (ms)"),
|
|
102
|
-
maxTokens: z
|
|
103
|
-
.number({
|
|
104
|
-
error: "workspaceGit.commitMessageLLM.maxTokens must be a number",
|
|
105
|
-
})
|
|
106
|
-
.int("workspaceGit.commitMessageLLM.maxTokens must be an integer")
|
|
107
|
-
.positive(
|
|
108
|
-
"workspaceGit.commitMessageLLM.maxTokens must be a positive integer",
|
|
109
|
-
)
|
|
110
|
-
.default(120)
|
|
111
|
-
.describe("Maximum number of tokens in the generated commit message"),
|
|
112
|
-
temperature: z
|
|
113
|
-
.number({
|
|
114
|
-
error: "workspaceGit.commitMessageLLM.temperature must be a number",
|
|
115
|
-
})
|
|
116
|
-
.min(0, "workspaceGit.commitMessageLLM.temperature must be >= 0")
|
|
117
|
-
.max(2, "workspaceGit.commitMessageLLM.temperature must be <= 2")
|
|
118
|
-
.default(0.2)
|
|
119
|
-
.describe(
|
|
120
|
-
"LLM sampling temperature for commit message generation (lower = more deterministic)",
|
|
121
|
-
),
|
|
122
87
|
maxFilesInPrompt: z
|
|
123
88
|
.number({
|
|
124
89
|
error:
|
|
@@ -203,11 +168,7 @@ export const WorkspaceGitConfigSchema = z
|
|
|
203
168
|
})
|
|
204
169
|
.default({
|
|
205
170
|
enabled: false,
|
|
206
|
-
useConfiguredProvider: true,
|
|
207
|
-
providerFastModelOverrides: {},
|
|
208
171
|
timeoutMs: 600,
|
|
209
|
-
maxTokens: 120,
|
|
210
|
-
temperature: 0.2,
|
|
211
172
|
maxFilesInPrompt: 30,
|
|
212
173
|
maxDiffBytes: 12000,
|
|
213
174
|
minRemainingTurnBudgetMs: 1000,
|
|
@@ -217,7 +178,9 @@ export const WorkspaceGitConfigSchema = z
|
|
|
217
178
|
backoffMaxMs: 60000,
|
|
218
179
|
},
|
|
219
180
|
})
|
|
220
|
-
.describe(
|
|
181
|
+
.describe(
|
|
182
|
+
"LLM-powered commit message generation operational settings. Provider/model/maxTokens/temperature live under llm.callSites.commitMessage.",
|
|
183
|
+
),
|
|
221
184
|
})
|
|
222
185
|
.describe(
|
|
223
186
|
"Workspace git integration — auto-commits, enrichment, and LLM-generated commit messages",
|
|
@@ -54,8 +54,12 @@ export function resolveSkillStates(
|
|
|
54
54
|
if (entry && typeof entry.enabled === "boolean") {
|
|
55
55
|
isEnabled = entry.enabled;
|
|
56
56
|
} else {
|
|
57
|
-
// Default: bundled
|
|
58
|
-
|
|
57
|
+
// Default: bundled, managed (user-installed), and plugin-contributed
|
|
58
|
+
// skills are enabled. Others (workspace, extra) are disabled by default.
|
|
59
|
+
isEnabled =
|
|
60
|
+
skill.source === "bundled" ||
|
|
61
|
+
skill.source === "managed" ||
|
|
62
|
+
skill.source === "plugin";
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
if (!isEnabled) {
|