@vellumai/assistant 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +38 -56
- package/Dockerfile +2 -0
- package/README.md +3 -4
- package/__tests__/permissions/gateway-threshold-reader.test.ts +88 -142
- package/bun.lock +29 -26
- package/docs/architecture/security.md +38 -16
- package/docs/plugins.md +7 -9
- package/knip.json +2 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +39 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
- package/node_modules/@vellumai/service-contracts/package.json +2 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
- package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +9 -5
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
- package/node_modules/@vellumai/slack-text/bun.lock +24 -0
- package/node_modules/@vellumai/slack-text/package.json +18 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
- package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
- package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
- package/node_modules/@vellumai/twilio-client/package.json +18 -0
- package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
- package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
- package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
- package/openapi.yaml +869 -129
- package/package.json +8 -3
- package/scripts/generate-openapi.ts +16 -111
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
- package/src/__tests__/anthropic-provider.test.ts +56 -13
- package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
- package/src/__tests__/app-bundler.test.ts +170 -1
- package/src/__tests__/app-control-flow.test.ts +374 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
- package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
- package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
- package/src/__tests__/app-conversation-ids.test.ts +151 -0
- package/src/__tests__/app-executors.test.ts +30 -43
- package/src/__tests__/approval-cascade.test.ts +0 -15
- package/src/__tests__/approval-routes-http.test.ts +29 -23
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
- package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
- package/src/__tests__/assistant-event-hub.test.ts +235 -79
- package/src/__tests__/assistant-event.test.ts +10 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +44 -17
- package/src/__tests__/assistant-feature-flags-integration.test.ts +11 -36
- package/src/__tests__/background-shell-host-bash.test.ts +46 -56
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
- package/src/__tests__/btw-routes.test.ts +13 -4
- package/src/__tests__/call-controller.test.ts +50 -2
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/channel-approval-routes.test.ts +10 -296
- package/src/__tests__/channel-approvals.test.ts +25 -17
- package/src/__tests__/channel-guardian.test.ts +100 -146
- package/src/__tests__/channel-readiness-service.test.ts +59 -1
- package/src/__tests__/checker.test.ts +23 -38
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/config-loader-backfill.test.ts +90 -155
- package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
- package/src/__tests__/config-schema-cmd.test.ts +0 -1
- package/src/__tests__/config-schema.test.ts +6 -48
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +14 -2
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contacts-write.test.ts +2 -64
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-memory-source.test.ts +120 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +49 -0
- package/src/__tests__/context-search-workspace-source.test.ts +9 -22
- package/src/__tests__/context-window-manager.test.ts +46 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
- package/src/__tests__/conversation-agent-loop.test.ts +980 -13
- package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
- package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +40 -4
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-process-callsite.test.ts +79 -2
- package/src/__tests__/conversation-queue.test.ts +3 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +7 -161
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -104
- package/src/__tests__/conversation-routes-slash-commands.test.ts +76 -66
- package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
- package/src/__tests__/conversation-slash-commands.test.ts +24 -8
- package/src/__tests__/conversation-slash-queue.test.ts +2 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-starter-routes.test.ts +79 -2
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +317 -0
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
- package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
- package/src/__tests__/conversation-usage.test.ts +253 -3
- package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
- package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
- package/src/__tests__/credential-health-service.test.ts +68 -0
- package/src/__tests__/credential-security-e2e.test.ts +4 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/credentials-cli.test.ts +5 -12
- package/src/__tests__/cu-unified-flow.test.ts +206 -27
- package/src/__tests__/daemon-assistant-events.test.ts +34 -21
- package/src/__tests__/daemon-credential-client.test.ts +102 -17
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/events-client-registration.test.ts +193 -49
- package/src/__tests__/filing-service.test.ts +58 -7
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-grant-minting.test.ts +7 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +30 -11
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -84
- package/src/__tests__/headless-browser-mode.test.ts +4 -9
- package/src/__tests__/headless-browser-navigate.test.ts +21 -20
- package/src/__tests__/heartbeat-service.test.ts +1007 -8
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/host-app-control-proxy.test.ts +602 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +270 -147
- package/src/__tests__/host-bash-routes.test.ts +294 -0
- package/src/__tests__/host-browser-proxy.test.ts +126 -198
- package/src/__tests__/host-browser-routes.test.ts +50 -54
- package/src/__tests__/host-cu-proxy.test.ts +78 -144
- package/src/__tests__/host-cu-routes-targeted.test.ts +300 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +339 -0
- package/src/__tests__/host-file-proxy.test.ts +62 -122
- package/src/__tests__/host-file-read-tool.test.ts +59 -21
- package/src/__tests__/host-file-routes-targeted.test.ts +262 -0
- package/src/__tests__/host-file-write-tool.test.ts +42 -1
- package/src/__tests__/host-proxy-base.test.ts +312 -0
- package/src/__tests__/host-shell-tool.test.ts +53 -70
- package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +583 -0
- package/src/__tests__/host-transfer-proxy.test.ts +145 -56
- package/src/__tests__/host-transfer-routes-targeted.test.ts +447 -0
- package/src/__tests__/http-user-message-parity.test.ts +1 -6
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/injector-chain.test.ts +10 -5
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -67
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -13
- package/src/__tests__/install-skill-routing.test.ts +1 -13
- package/src/__tests__/integration-status.test.ts +85 -5
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
- package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
- package/src/__tests__/llm-catalog-parity.test.ts +90 -0
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-resolver.test.ts +80 -12
- package/src/__tests__/llm-usage-store.test.ts +269 -4
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/managed-profile-guard.test.ts +225 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -11
- package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
- package/src/__tests__/migration-export-http.test.ts +33 -26
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
- package/src/__tests__/migration-import-commit-http.test.ts +172 -21
- package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
- package/src/__tests__/migration-import-from-url.test.ts +20 -6
- package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
- package/src/__tests__/migration-parity-persistence.test.ts +62 -25
- package/src/__tests__/migration-transport.test.ts +115 -23
- package/src/__tests__/migration-validate-http.test.ts +105 -80
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/non-member-access-request.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth-store.test.ts +19 -0
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +26 -21
- package/src/__tests__/prechat-onboarding-contract.test.ts +34 -8
- package/src/__tests__/pricing.test.ts +68 -4
- package/src/__tests__/process-message-background-slack.test.ts +333 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/reaction-persistence.test.ts +9 -6
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/recording-handler.test.ts +64 -81
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/relay-server.test.ts +18 -13
- package/src/__tests__/require-fresh-approval.test.ts +13 -23
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +13 -18
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
- package/src/__tests__/search-skills-unified.test.ts +9 -15
- package/src/__tests__/secret-ingress-cli.test.ts +2 -5
- package/src/__tests__/secret-ingress-http.test.ts +1 -4
- package/src/__tests__/secret-onetime-send.test.ts +4 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
- package/src/__tests__/secret-response-routing.test.ts +29 -15
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +12 -24
- package/src/__tests__/settings-routes.test.ts +1 -1
- package/src/__tests__/shell-credential-ref.test.ts +0 -8
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -57
- package/src/__tests__/skill-feature-flags.test.ts +43 -41
- package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
- package/src/__tests__/skill-load-inline-command.test.ts +0 -51
- package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -12
- package/src/__tests__/skill-tool-factory.test.ts +97 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/slack-inbound-verification.test.ts +1 -62
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +80 -83
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +115 -14
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +0 -89
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/thread-backfill.test.ts +945 -31
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -7
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -17
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -8
- package/src/__tests__/tool-executor.test.ts +12 -20
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-trace-listener.test.ts +0 -17
- package/src/__tests__/transfer-progress-screen.test.ts +63 -26
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
- package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/twilio-config.test.ts +3 -16
- package/src/__tests__/twilio-routes.test.ts +3 -5
- package/src/__tests__/twilio-validation.test.ts +93 -0
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cli.test.ts +143 -0
- package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
- package/src/__tests__/usage-routes.test.ts +150 -0
- package/src/__tests__/validation-results-screen.test.ts +39 -16
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +47 -138
- package/src/__tests__/verification-control-plane-policy.test.ts +6 -11
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/voice-session-bridge.test.ts +5 -5
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- package/src/__tests__/workspace-migration-062-drop-memory-v2-edges-json.test.ts +103 -0
- package/src/__tests__/workspace-migration-063-release-notes-dynamic-model-context.test.ts +77 -0
- package/src/__tests__/workspace-migration-064-unwind-main-agent-opus-seed.test.ts +225 -0
- package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +1 -5
- package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/acp/index.ts +0 -15
- package/src/acp/session-manager.ts +37 -34
- package/src/agent/loop.ts +16 -1
- package/src/approvals/AGENTS.md +4 -0
- package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
- package/src/approvals/guardian-request-resolvers.ts +10 -2
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +94 -177
- package/src/backup/paths.ts +2 -15
- package/src/backup/restore.ts +107 -231
- package/src/browser-session/events.ts +0 -9
- package/src/bundler/app-bundler.ts +51 -3
- package/src/calls/call-store.ts +1 -34
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/relay-server.ts +4 -68
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +31 -141
- package/src/calls/twilio-routes.ts +12 -13
- package/src/calls/voice-session-bridge.ts +7 -38
- package/src/channels/types.ts +8 -42
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/cache.test.ts +152 -5
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +18 -28
- package/src/cli/commands/__tests__/trust.test.ts +21 -387
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -1
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +153 -82
- package/src/cli/commands/clients.ts +64 -7
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +304 -76
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +15 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +13 -7
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +320 -53
- package/src/cli/commands/oauth/shared.ts +2 -29
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/status.test.ts +13 -15
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +0 -18
- package/src/cli/commands/skills.ts +77 -35
- package/src/cli/commands/trust.ts +70 -430
- package/src/cli/commands/usage.ts +25 -16
- package/src/cli/lib/daemon-credential-client.ts +115 -19
- package/src/cli/program.ts +4 -0
- package/src/cli.ts +0 -21
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/assistant-feature-flags.ts +67 -10
- package/src/config/bundled-skills/acp/SKILL.md +6 -0
- package/src/config/bundled-skills/acp/TOOLS.json +1 -22
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
- package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
- package/src/config/bundled-skills/app-control/SKILL.md +75 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
- package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
- package/src/config/bundled-skills/document/TOOLS.json +0 -8
- package/src/config/bundled-skills/followups/TOOLS.json +0 -12
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -44
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +19 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
- package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
- package/src/config/bundled-skills/settings/SKILL.md +4 -0
- package/src/config/bundled-skills/settings/TOOLS.json +0 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/subagent/SKILL.md +6 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
- package/src/config/bundled-tool-registry.ts +21 -0
- package/src/config/env-registry.ts +12 -4
- package/src/config/env.ts +22 -26
- package/src/config/feature-flag-registry.json +40 -152
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +58 -22
- package/src/config/loader.ts +76 -102
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schema.ts +2 -158
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +8 -4
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -14
- package/src/config/schemas/heartbeat.ts +63 -0
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/ingress.ts +11 -7
- package/src/config/schemas/llm.ts +34 -11
- package/src/config/schemas/memory-lifecycle.ts +77 -24
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-v2.ts +57 -4
- package/src/config/schemas/platform.ts +6 -0
- package/src/config/schemas/security.ts +1 -42
- package/src/config/schemas/services.ts +7 -21
- package/src/config/schemas/skills.ts +5 -11
- package/src/config/schemas/tts.ts +1 -1
- package/src/config/seed-inference-profiles.ts +117 -0
- package/src/config/skills.ts +0 -90
- package/src/config/types.ts +3 -6
- package/src/contacts/contact-store.ts +0 -47
- package/src/contacts/contacts-write.ts +1 -132
- package/src/context/window-manager.ts +43 -5
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +46 -51
- package/src/credential-health/credential-health-service.ts +21 -16
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +126 -5
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +4 -3
- package/src/daemon/connection-policy.ts +1 -26
- package/src/daemon/conversation-agent-loop-handlers.ts +74 -7
- package/src/daemon/conversation-agent-loop.ts +309 -64
- package/src/daemon/conversation-history.ts +8 -8
- package/src/daemon/conversation-launch.ts +20 -135
- package/src/daemon/conversation-lifecycle.ts +8 -1
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-process.ts +97 -172
- package/src/daemon/conversation-runtime-assembly.ts +219 -76
- package/src/daemon/conversation-slash.ts +47 -5
- package/src/daemon/conversation-store.ts +7 -31
- package/src/daemon/conversation-surfaces.ts +144 -29
- package/src/daemon/conversation-tool-setup.ts +18 -87
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +134 -231
- package/src/daemon/daemon-control.ts +3 -71
- package/src/daemon/daemon-skill-host.ts +8 -11
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +12 -12
- package/src/daemon/handlers/config-ingress.ts +4 -165
- package/src/daemon/handlers/config-model.ts +1 -1
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +11 -190
- package/src/daemon/handlers/recording.ts +26 -158
- package/src/daemon/handlers/shared.ts +27 -72
- package/src/daemon/handlers/skills.ts +42 -93
- package/src/daemon/host-app-control-proxy.ts +293 -0
- package/src/daemon/host-bash-proxy.ts +124 -92
- package/src/daemon/host-browser-proxy.ts +111 -88
- package/src/daemon/host-cu-proxy.ts +100 -104
- package/src/daemon/host-file-proxy.ts +136 -91
- package/src/daemon/host-proxy-base.ts +294 -0
- package/src/daemon/host-proxy-preactivation.ts +82 -0
- package/src/daemon/host-transfer-proxy.ts +303 -147
- package/src/daemon/lifecycle.ts +164 -132
- package/src/daemon/message-protocol.ts +3 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +18 -8
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +5 -0
- package/src/daemon/message-types/host-cu.ts +3 -0
- package/src/daemon/message-types/host-file.ts +5 -0
- package/src/daemon/message-types/host-transfer.ts +4 -0
- package/src/daemon/message-types/messages.ts +10 -9
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/message-types/workspace.ts +1 -1
- package/src/daemon/process-message.ts +119 -239
- package/src/daemon/server.ts +13 -462
- package/src/daemon/shutdown-handlers.ts +2 -5
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +126 -108
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +4 -9
- package/src/events/domain-events.ts +0 -8
- package/src/events/tool-audit-listener.ts +5 -2
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +0 -17
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +13 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +21 -9
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +216 -0
- package/src/heartbeat/heartbeat-run-store.ts +236 -0
- package/src/heartbeat/heartbeat-service.ts +303 -54
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +41 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/feed-writer.ts +1 -2
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +33 -95
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
- package/src/ipc/assistant-server.ts +17 -11
- package/src/ipc/cli-client.ts +32 -1
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
- package/src/ipc/routes/route-adapter.ts +1 -1
- package/src/ipc/routes/trust-rules.test.ts +0 -95
- package/src/ipc/skill-ipc-types.ts +41 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
- package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
- package/src/ipc/skill-routes/events.ts +12 -23
- package/src/ipc/skill-routes/identity.ts +4 -17
- package/src/ipc/skill-routes/index.ts +1 -1
- package/src/ipc/skill-server.ts +6 -39
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/live-voice/protocol.ts +4 -13
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- package/src/mcp/manager.ts +0 -5
- package/src/mcp/mcp-auth-orchestrator.ts +213 -0
- package/src/mcp/mcp-auth-state.ts +133 -0
- package/src/mcp/mcp-oauth-provider.ts +19 -0
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
- package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -0
- package/src/memory/app-git-service.ts +0 -32
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +6 -0
- package/src/memory/auto-analysis-constants.ts +17 -0
- package/src/memory/auto-analysis-guard.ts +5 -15
- package/src/memory/canonical-guardian-store.ts +7 -7
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
- package/src/memory/context-search/agent-protocol.ts +6 -6
- package/src/memory/context-search/agent-runner.ts +32 -7
- package/src/memory/context-search/sources/memory-v2.ts +590 -0
- package/src/memory/context-search/sources/memory.ts +5 -0
- package/src/memory/context-search/sources/pkb.ts +10 -1
- package/src/memory/context-search/sources/workspace.ts +3 -2
- package/src/memory/conversation-crud.ts +30 -5
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +18 -0
- package/src/memory/embedding-backend.ts +12 -42
- package/src/memory/embedding-gemini.ts +0 -2
- package/src/memory/embedding-local.ts +6 -6
- package/src/memory/embedding-ollama.ts +6 -6
- package/src/memory/embedding-openai.ts +6 -6
- package/src/memory/embedding-types.ts +21 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +49 -8
- package/src/memory/graph/conversation-graph-memory.ts +35 -36
- package/src/memory/graph/graph-search.ts +8 -0
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/graph/retriever.ts +28 -0
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/guardian-action-store.ts +0 -83
- package/src/memory/guardian-approvals.ts +0 -48
- package/src/memory/indexer.ts +1 -15
- package/src/memory/job-handlers/conversation-starters.ts +36 -53
- package/src/memory/job-utils.ts +0 -6
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
- package/src/memory/jobs/embed-concept-page.ts +28 -2
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
- package/src/memory/jobs-store.ts +66 -23
- package/src/memory/jobs-worker.ts +114 -79
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +129 -43
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/233-document-conversations.ts +54 -0
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
- package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
- package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
- package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
- package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
- package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
- package/src/memory/migrations/index.ts +19 -0
- package/src/memory/migrations/registry.ts +32 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +50 -20
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/conversations.ts +7 -0
- package/src/memory/schema/infrastructure.ts +40 -0
- package/src/memory/search/semantic.ts +12 -16
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/tool-usage-store.ts +2 -0
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation.test.ts +361 -180
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
- package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +424 -33
- package/src/memory/v2/__tests__/migration.test.ts +64 -36
- package/src/memory/v2/__tests__/page-store.test.ts +191 -8
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/sim.test.ts +166 -6
- package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +152 -0
- package/src/memory/v2/activation.ts +215 -163
- package/src/memory/v2/backfill-jobs.ts +15 -100
- package/src/memory/v2/consolidation-job.ts +17 -17
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +241 -84
- package/src/memory/v2/migration.ts +57 -64
- package/src/memory/v2/now-text.ts +2 -3
- package/src/memory/v2/page-store.ts +168 -31
- package/src/memory/v2/prompts/consolidation.ts +385 -88
- package/src/memory/v2/prompts/sweep.ts +3 -3
- package/src/memory/v2/qdrant.ts +99 -1
- package/src/memory/v2/sim.ts +126 -16
- package/src/memory/v2/skill-qdrant.ts +12 -3
- package/src/memory/v2/skill-store.ts +71 -8
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +63 -0
- package/src/memory/v2/types.ts +10 -20
- package/src/memory/validation.ts +0 -11
- package/src/messaging/draft-store.ts +0 -6
- package/src/messaging/provider-types.ts +8 -0
- package/src/messaging/provider.ts +7 -0
- package/src/messaging/providers/gmail/client.ts +1 -121
- package/src/messaging/providers/gmail/types.ts +0 -49
- package/src/messaging/providers/outlook/client.ts +0 -73
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +226 -0
- package/src/messaging/providers/slack/adapter.ts +123 -52
- package/src/messaging/providers/slack/backfill.test.ts +95 -6
- package/src/messaging/providers/slack/backfill.ts +89 -11
- package/src/messaging/providers/slack/client.ts +10 -124
- package/src/messaging/providers/slack/message-metadata.ts +12 -2
- package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
- package/src/messaging/providers/slack/render-transcript.ts +126 -25
- package/src/messaging/providers/slack/types.ts +1 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/oauth/connect-orchestrator.ts +4 -0
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +8 -16
- package/src/oauth/credential-token-resolver.ts +95 -0
- package/src/oauth/manual-token-connection.ts +26 -34
- package/src/oauth/oauth-store.ts +6 -4
- package/src/outbound-proxy/certs.ts +0 -7
- package/src/outbound-proxy/index.ts +1 -59
- package/src/outbound-proxy/logging.ts +1 -1
- package/src/outbound-proxy/policy.ts +6 -5
- package/src/outbound-proxy/router.ts +2 -1
- package/src/permissions/approval-policy.test.ts +6 -275
- package/src/permissions/approval-policy.ts +0 -51
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.test.ts +0 -1
- package/src/permissions/checker.ts +7 -18
- package/src/permissions/gateway-threshold-reader.ts +6 -1
- package/src/permissions/prompter.ts +43 -3
- package/src/permissions/secret-prompter.ts +25 -48
- package/src/permissions/types.ts +33 -0
- package/src/permissions/workspace-policy.ts +0 -5
- package/src/platform/sync-identity.ts +0 -8
- package/src/plugins/defaults/injectors.ts +69 -2
- package/src/plugins/defaults/overflow-reduce.ts +3 -2
- package/src/plugins/types.ts +8 -0
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/system-prompt.ts +37 -88
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/retry-callsite.test.ts +138 -1
- package/src/providers/anthropic/client.ts +72 -33
- package/src/providers/call-site-routing.ts +42 -3
- package/src/providers/gemini/client.ts +18 -2
- package/src/providers/managed-proxy/context.ts +0 -5
- package/src/providers/model-catalog.ts +105 -19
- package/src/providers/openai/chat-completions-provider.ts +6 -0
- package/src/providers/openai/responses-provider.ts +7 -1
- package/src/providers/provider-send-message.ts +45 -2
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +14 -9
- package/src/providers/retry.ts +96 -8
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/providers/types.ts +13 -0
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +10 -6
- package/src/runtime/__tests__/agent-wake.test.ts +89 -0
- package/src/runtime/agent-wake.ts +39 -2
- package/src/runtime/assistant-event-hub.ts +570 -52
- package/src/runtime/assistant-event.ts +2 -6
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/context.ts +0 -9
- package/src/runtime/auth/middleware.ts +1 -97
- package/src/runtime/auth/route-policy.ts +30 -9
- package/src/runtime/auth/token-service.ts +0 -11
- package/src/runtime/btw-sidechain.ts +2 -3
- package/src/runtime/channel-approvals.ts +6 -2
- package/src/runtime/channel-invite-transport.ts +2 -48
- package/src/runtime/channel-invite-transports/email.ts +1 -1
- package/src/runtime/channel-invite-transports/slack.ts +1 -1
- package/src/runtime/channel-invite-transports/telegram.ts +1 -1
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
- package/src/runtime/channel-invite-types.ts +54 -0
- package/src/runtime/channel-readiness-service.ts +32 -13
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/http-errors.ts +0 -34
- package/src/runtime/http-router.ts +6 -3
- package/src/runtime/http-server.ts +16 -402
- package/src/runtime/http-types.ts +5 -5
- package/src/runtime/interactive-ui.ts +0 -1
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
- package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +71 -27
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +41 -2
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +296 -80
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +421 -0
- package/src/runtime/migrations/migration-transport.ts +49 -16
- package/src/runtime/migrations/migration-wizard.ts +2 -2
- package/src/runtime/migrations/origin-mode.ts +40 -0
- package/src/runtime/migrations/vbundle-builder.ts +457 -136
- package/src/runtime/migrations/vbundle-import-analyzer.ts +13 -11
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +251 -74
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +329 -38
- package/src/runtime/migrations/vbundle-streaming-validator.ts +203 -28
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +328 -41
- package/src/runtime/pending-interactions.ts +48 -13
- package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
- package/src/runtime/routes/__tests__/backup-routes.test.ts +49 -168
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +333 -0
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
- package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/acp-routes.test.ts +0 -3
- package/src/runtime/routes/acp-routes.ts +3 -7
- package/src/runtime/routes/app-management-routes.ts +18 -9
- package/src/runtime/routes/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-routes.ts +55 -14
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/avatar-routes.ts +3 -5
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/browser-routes.ts +1 -15
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +3 -7
- package/src/runtime/routes/channel-route-shared.ts +2 -28
- package/src/runtime/routes/client-routes.ts +46 -12
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/conversation-list-routes.ts +12 -29
- package/src/runtime/routes/conversation-management-routes.ts +14 -51
- package/src/runtime/routes/conversation-query-routes.ts +156 -9
- package/src/runtime/routes/conversation-routes.ts +72 -539
- package/src/runtime/routes/conversation-starter-routes.ts +19 -40
- package/src/runtime/routes/document-pdf-renderer.ts +165 -0
- package/src/runtime/routes/documents-routes.ts +83 -18
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +68 -94
- package/src/runtime/routes/filing-routes.ts +18 -1
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- package/src/runtime/routes/guardian-action-routes.ts +4 -9
- package/src/runtime/routes/guardian-approval-interception.ts +2 -8
- package/src/runtime/routes/heartbeat-routes.ts +103 -38
- package/src/runtime/routes/host-app-control-routes.ts +134 -0
- package/src/runtime/routes/host-bash-routes.ts +37 -6
- package/src/runtime/routes/host-browser-routes.ts +96 -25
- package/src/runtime/routes/host-cu-routes.ts +48 -13
- package/src/runtime/routes/host-file-routes.ts +35 -11
- package/src/runtime/routes/host-transfer-routes.ts +73 -37
- package/src/runtime/routes/http-adapter.ts +1 -0
- package/src/runtime/routes/identity-intro-cache.ts +30 -0
- package/src/runtime/routes/identity-routes.ts +93 -49
- package/src/runtime/routes/inbound-message-handler.ts +581 -146
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -95
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
- package/src/runtime/routes/index.ts +12 -0
- package/src/runtime/routes/integrations/slack/channel.ts +0 -24
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +451 -16
- package/src/runtime/routes/migration-routes.ts +284 -31
- package/src/runtime/routes/playground/guard.ts +1 -1
- package/src/runtime/routes/playground/index.ts +0 -2
- package/src/runtime/routes/recording-routes.ts +4 -24
- package/src/runtime/routes/rename-conversation-routes.ts +2 -6
- package/src/runtime/routes/schedule-routes.ts +10 -6
- package/src/runtime/routes/secret-routes.ts +87 -18
- package/src/runtime/routes/settings-routes.ts +29 -28
- package/src/runtime/routes/skills-routes.ts +12 -31
- package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
- package/src/runtime/routes/task-routes.ts +6 -6
- package/src/runtime/routes/trust-rules-routes.ts +3 -94
- package/src/runtime/routes/types.ts +4 -4
- package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
- package/src/runtime/routes/usage-routes.ts +87 -10
- package/src/runtime/routes/user-routes.ts +17 -31
- package/src/runtime/routes/work-items-routes.ts +1 -4
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
- package/src/runtime/services/analyze-conversation.ts +7 -17
- package/src/runtime/services/conversation-serializer.ts +2 -4
- package/src/runtime/verification-outbound-actions.ts +1 -1
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/runtime/verification-templates.ts +4 -7
- package/src/schedule/integration-status.ts +66 -2
- package/src/schedule/recurrence-engine.ts +4 -1
- package/src/schedule/retry-backoff.ts +18 -0
- package/src/schedule/retry-policy.ts +82 -0
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -18
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +63 -38
- package/src/security/oauth-callback-registry.ts +8 -0
- package/src/security/secret-scanner.ts +14 -547
- package/src/security/secure-keys.ts +31 -11
- package/src/security/token-manager.ts +7 -3
- package/src/sequence/analytics.ts +5 -5
- package/src/sequence/engine.ts +1 -1
- package/src/signals/cancel.ts +16 -25
- package/src/signals/conversation-undo.ts +2 -27
- package/src/signals/emit-event.ts +1 -2
- package/src/signals/user-message.ts +108 -22
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/catalog-install.ts +1 -0
- package/src/skills/clawhub.ts +2 -2
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/skills/remote-skill-policy.ts +5 -5
- package/src/skills/skill-file-provider.ts +1 -1
- package/src/skills/skill-file-types.ts +13 -0
- package/src/skills/skillssh-audit-types.ts +28 -0
- package/src/skills/skillssh-registry.ts +8 -21
- package/src/subagent/manager.ts +67 -84
- package/src/tasks/task-store.ts +1 -28
- package/src/telemetry/types.ts +8 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +59 -15
- package/src/telemetry/usage-telemetry-reporter.ts +4 -5
- package/src/tools/acp/spawn.test.ts +1 -2
- package/src/tools/acp/steer.test.ts +1 -2
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/browser/__tests__/browser-status.test.ts +55 -135
- package/src/tools/browser/browser-execution.ts +31 -147
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +145 -70
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +62 -91
- package/src/tools/browser/cdp-client/index.ts +1 -27
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +46 -31
- package/src/tools/host-filesystem/edit.ts +29 -2
- package/src/tools/host-filesystem/read.ts +29 -2
- package/src/tools/host-filesystem/transfer.test.ts +45 -42
- package/src/tools/host-filesystem/transfer.ts +35 -4
- package/src/tools/host-filesystem/write.ts +29 -2
- package/src/tools/host-terminal/host-shell.ts +62 -3
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +66 -1
- package/src/tools/schedule/create.ts +6 -0
- package/src/tools/schedule/list.ts +2 -0
- package/src/tools/schedule/update.ts +10 -0
- package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
- package/src/tools/shared/filesystem/path-policy.ts +25 -1
- package/src/tools/skills/load.ts +0 -32
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/terminal/shell.ts +2 -78
- package/src/tools/tool-approval-handler.ts +1 -5
- package/src/tools/types.ts +16 -39
- package/src/tts/__tests__/provider-catalog.test.ts +2 -2
- package/src/tts/provider-catalog.ts +1 -1
- package/src/usage/actors.ts +2 -1
- package/src/usage/attribution.ts +185 -0
- package/src/usage/pricing.ts +166 -0
- package/src/usage/types.ts +14 -0
- package/src/util/json.ts +13 -0
- package/src/util/logger.ts +3 -3
- package/src/util/pricing.ts +50 -3
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/migrations/003-seed-device-id.ts +1 -1
- package/src/workspace/migrations/006-services-config.ts +8 -5
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +6 -4
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +54 -0
- package/src/workspace/migrations/062-drop-memory-v2-edges-json.ts +27 -0
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +70 -0
- package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +64 -0
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/migrations/utils.ts +21 -0
- package/src/workspace/provider-commit-message-generator.ts +3 -3
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -904
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -296
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -431
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
- package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
- package/src/__tests__/secret-detection-handler.test.ts +0 -67
- package/src/__tests__/secret-scanner-executor.test.ts +0 -450
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/__tests__/twilio-rest.test.ts +0 -34
- package/src/backup/__tests__/backup-key.test.ts +0 -152
- package/src/backup/__tests__/backup-worker.test.ts +0 -754
- package/src/backup/__tests__/offsite-writer.test.ts +0 -641
- package/src/backup/__tests__/stream-crypt.test.ts +0 -228
- package/src/backup/backup-key.ts +0 -137
- package/src/backup/backup-worker.ts +0 -438
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
- package/src/memory/v2/__tests__/edges.test.ts +0 -435
- package/src/memory/v2/edges.ts +0 -217
- package/src/outbound-proxy/config.ts +0 -94
- package/src/outbound-proxy/health.ts +0 -62
- package/src/outbound-proxy/types.ts +0 -150
- package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -271
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -254
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
- package/src/signals/mcp-reload.ts +0 -18
- package/src/tools/secret-detection-handler.ts +0 -269
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { type LLMCallSite } from "./llm.js";
|
|
2
|
+
|
|
3
|
+
export const CALL_SITE_DOMAINS = [
|
|
4
|
+
{ id: "agentLoop", displayName: "Agent Loop" },
|
|
5
|
+
{ id: "memory", displayName: "Memory" },
|
|
6
|
+
{ id: "workspace", displayName: "Workspace" },
|
|
7
|
+
{ id: "ui", displayName: "UI" },
|
|
8
|
+
{ id: "notifications", displayName: "Notifications" },
|
|
9
|
+
{ id: "skills", displayName: "Skills" },
|
|
10
|
+
] as const;
|
|
11
|
+
|
|
12
|
+
export type CallSiteDomainId = (typeof CALL_SITE_DOMAINS)[number]["id"];
|
|
13
|
+
|
|
14
|
+
export interface CallSiteDomainEntry {
|
|
15
|
+
id: CallSiteDomainId;
|
|
16
|
+
displayName: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface CallSiteEntry {
|
|
20
|
+
id: LLMCallSite;
|
|
21
|
+
displayName: string;
|
|
22
|
+
description: string;
|
|
23
|
+
domain: CallSiteDomainId;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Keyed by every member of LLMCallSite. TypeScript enforces exhaustiveness:
|
|
28
|
+
* adding or removing a value from LLMCallSiteEnum without updating this object
|
|
29
|
+
* is a compile error — no runtime drift guard needed.
|
|
30
|
+
*/
|
|
31
|
+
type CatalogRecord = {
|
|
32
|
+
[K in LLMCallSite]: {
|
|
33
|
+
id: K;
|
|
34
|
+
displayName: string;
|
|
35
|
+
description: string;
|
|
36
|
+
domain: CallSiteDomainId;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const CATALOG_RECORD: CatalogRecord = {
|
|
41
|
+
// agentLoop
|
|
42
|
+
mainAgent: {
|
|
43
|
+
id: "mainAgent",
|
|
44
|
+
displayName: "Main Agent",
|
|
45
|
+
description: "The primary conversation agent that handles user messages.",
|
|
46
|
+
domain: "agentLoop",
|
|
47
|
+
},
|
|
48
|
+
subagentSpawn: {
|
|
49
|
+
id: "subagentSpawn",
|
|
50
|
+
displayName: "Subagent Spawn",
|
|
51
|
+
description: "Spawns a subagent to handle a delegated subtask.",
|
|
52
|
+
domain: "agentLoop",
|
|
53
|
+
},
|
|
54
|
+
heartbeatAgent: {
|
|
55
|
+
id: "heartbeatAgent",
|
|
56
|
+
displayName: "Heartbeat Agent",
|
|
57
|
+
description: "Runs background tasks and proactive checks on a schedule.",
|
|
58
|
+
domain: "agentLoop",
|
|
59
|
+
},
|
|
60
|
+
filingAgent: {
|
|
61
|
+
id: "filingAgent",
|
|
62
|
+
displayName: "Filing Agent",
|
|
63
|
+
description:
|
|
64
|
+
"Files memories and updates the knowledge base after conversations.",
|
|
65
|
+
domain: "agentLoop",
|
|
66
|
+
},
|
|
67
|
+
compactionAgent: {
|
|
68
|
+
id: "compactionAgent",
|
|
69
|
+
displayName: "Compaction Agent",
|
|
70
|
+
description: "Compacts conversation history to stay within context limits.",
|
|
71
|
+
domain: "agentLoop",
|
|
72
|
+
},
|
|
73
|
+
analyzeConversation: {
|
|
74
|
+
id: "analyzeConversation",
|
|
75
|
+
displayName: "Analyze Conversation",
|
|
76
|
+
description: "Analyzes conversation content for summaries and insights.",
|
|
77
|
+
domain: "agentLoop",
|
|
78
|
+
},
|
|
79
|
+
callAgent: {
|
|
80
|
+
id: "callAgent",
|
|
81
|
+
displayName: "Call Agent",
|
|
82
|
+
description: "Handles voice call conversations.",
|
|
83
|
+
domain: "agentLoop",
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
// memory
|
|
87
|
+
memoryExtraction: {
|
|
88
|
+
id: "memoryExtraction",
|
|
89
|
+
displayName: "Memory Extraction",
|
|
90
|
+
description: "Extracts memorable facts from conversation turns.",
|
|
91
|
+
domain: "memory",
|
|
92
|
+
},
|
|
93
|
+
memoryConsolidation: {
|
|
94
|
+
id: "memoryConsolidation",
|
|
95
|
+
displayName: "Memory Consolidation",
|
|
96
|
+
description: "Merges and deduplicates related memories.",
|
|
97
|
+
domain: "memory",
|
|
98
|
+
},
|
|
99
|
+
memoryRetrieval: {
|
|
100
|
+
id: "memoryRetrieval",
|
|
101
|
+
displayName: "Memory Retrieval",
|
|
102
|
+
description: "Retrieves relevant memories to augment the agent context.",
|
|
103
|
+
domain: "memory",
|
|
104
|
+
},
|
|
105
|
+
memoryV2Migration: {
|
|
106
|
+
id: "memoryV2Migration",
|
|
107
|
+
displayName: "Memory V2 Migration",
|
|
108
|
+
description: "One-time migration of memories to the V2 storage format.",
|
|
109
|
+
domain: "memory",
|
|
110
|
+
},
|
|
111
|
+
memoryV2Sweep: {
|
|
112
|
+
id: "memoryV2Sweep",
|
|
113
|
+
displayName: "Memory V2 Sweep",
|
|
114
|
+
description: "Background sweep pass for V2 memory maintenance.",
|
|
115
|
+
domain: "memory",
|
|
116
|
+
},
|
|
117
|
+
recall: {
|
|
118
|
+
id: "recall",
|
|
119
|
+
displayName: "Recall",
|
|
120
|
+
description: "Searches memory to answer a specific question during a turn.",
|
|
121
|
+
domain: "memory",
|
|
122
|
+
},
|
|
123
|
+
narrativeRefinement: {
|
|
124
|
+
id: "narrativeRefinement",
|
|
125
|
+
displayName: "Narrative Refinement",
|
|
126
|
+
description: "Refines the autobiographical narrative stored in memory.",
|
|
127
|
+
domain: "memory",
|
|
128
|
+
},
|
|
129
|
+
patternScan: {
|
|
130
|
+
id: "patternScan",
|
|
131
|
+
displayName: "Pattern Scan",
|
|
132
|
+
description: "Scans memories for recurring behavioral patterns.",
|
|
133
|
+
domain: "memory",
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
// workspace
|
|
137
|
+
conversationSummarization: {
|
|
138
|
+
id: "conversationSummarization",
|
|
139
|
+
displayName: "Conversation Summarization",
|
|
140
|
+
description: "Generates a summary of a completed conversation.",
|
|
141
|
+
domain: "workspace",
|
|
142
|
+
},
|
|
143
|
+
commitMessage: {
|
|
144
|
+
id: "commitMessage",
|
|
145
|
+
displayName: "Commit Message",
|
|
146
|
+
description: "Generates a git commit message for staged changes.",
|
|
147
|
+
domain: "workspace",
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
// ui
|
|
151
|
+
conversationStarters: {
|
|
152
|
+
id: "conversationStarters",
|
|
153
|
+
displayName: "Conversation Starters",
|
|
154
|
+
description:
|
|
155
|
+
"Generates suggested conversation openers for the home screen.",
|
|
156
|
+
domain: "ui",
|
|
157
|
+
},
|
|
158
|
+
conversationTitle: {
|
|
159
|
+
id: "conversationTitle",
|
|
160
|
+
displayName: "Conversation Title",
|
|
161
|
+
description: "Generates a title for a conversation from its content.",
|
|
162
|
+
domain: "ui",
|
|
163
|
+
},
|
|
164
|
+
identityIntro: {
|
|
165
|
+
id: "identityIntro",
|
|
166
|
+
displayName: "Identity Intro",
|
|
167
|
+
description: "Generates the assistant's introductory identity text.",
|
|
168
|
+
domain: "ui",
|
|
169
|
+
},
|
|
170
|
+
emptyStateGreeting: {
|
|
171
|
+
id: "emptyStateGreeting",
|
|
172
|
+
displayName: "Empty State Greeting",
|
|
173
|
+
description: "Generates a greeting shown on the empty conversation screen.",
|
|
174
|
+
domain: "ui",
|
|
175
|
+
},
|
|
176
|
+
guardianQuestionCopy: {
|
|
177
|
+
id: "guardianQuestionCopy",
|
|
178
|
+
displayName: "Guardian Question Copy",
|
|
179
|
+
description: "Generates copy for guardian onboarding questions.",
|
|
180
|
+
domain: "ui",
|
|
181
|
+
},
|
|
182
|
+
approvalCopy: {
|
|
183
|
+
id: "approvalCopy",
|
|
184
|
+
displayName: "Approval Copy",
|
|
185
|
+
description: "Generates copy for tool approval prompts shown to the user.",
|
|
186
|
+
domain: "ui",
|
|
187
|
+
},
|
|
188
|
+
approvalConversation: {
|
|
189
|
+
id: "approvalConversation",
|
|
190
|
+
displayName: "Approval Conversation",
|
|
191
|
+
description: "Handles conversational approval flows.",
|
|
192
|
+
domain: "ui",
|
|
193
|
+
},
|
|
194
|
+
feedEventCopy: {
|
|
195
|
+
id: "feedEventCopy",
|
|
196
|
+
displayName: "Feed Event Copy",
|
|
197
|
+
description: "Generates copy for home feed event cards.",
|
|
198
|
+
domain: "ui",
|
|
199
|
+
},
|
|
200
|
+
trustRuleSuggestion: {
|
|
201
|
+
id: "trustRuleSuggestion",
|
|
202
|
+
displayName: "Trust Rule Suggestion",
|
|
203
|
+
description:
|
|
204
|
+
"Suggests a trust rule pattern when the user creates a new rule.",
|
|
205
|
+
domain: "ui",
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
// notifications
|
|
209
|
+
notificationDecision: {
|
|
210
|
+
id: "notificationDecision",
|
|
211
|
+
displayName: "Notification Decision",
|
|
212
|
+
description:
|
|
213
|
+
"Decides whether a background event warrants sending a notification.",
|
|
214
|
+
domain: "notifications",
|
|
215
|
+
},
|
|
216
|
+
preferenceExtraction: {
|
|
217
|
+
id: "preferenceExtraction",
|
|
218
|
+
displayName: "Preference Extraction",
|
|
219
|
+
description:
|
|
220
|
+
"Extracts notification and communication preferences from messages.",
|
|
221
|
+
domain: "notifications",
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
// skills
|
|
225
|
+
interactionClassifier: {
|
|
226
|
+
id: "interactionClassifier",
|
|
227
|
+
displayName: "Interaction Classifier",
|
|
228
|
+
description: "Classifies the type of interaction to route it correctly.",
|
|
229
|
+
domain: "skills",
|
|
230
|
+
},
|
|
231
|
+
styleAnalyzer: {
|
|
232
|
+
id: "styleAnalyzer",
|
|
233
|
+
displayName: "Style Analyzer",
|
|
234
|
+
description: "Analyzes the user's communication style for personalization.",
|
|
235
|
+
domain: "skills",
|
|
236
|
+
},
|
|
237
|
+
inviteInstructionGenerator: {
|
|
238
|
+
id: "inviteInstructionGenerator",
|
|
239
|
+
displayName: "Invite Instruction Generator",
|
|
240
|
+
description: "Generates setup instructions for new skill invites.",
|
|
241
|
+
domain: "skills",
|
|
242
|
+
},
|
|
243
|
+
skillCategoryInference: {
|
|
244
|
+
id: "skillCategoryInference",
|
|
245
|
+
displayName: "Skill Category Inference",
|
|
246
|
+
description: "Infers the category of a skill from its description.",
|
|
247
|
+
domain: "skills",
|
|
248
|
+
},
|
|
249
|
+
meetConsentMonitor: {
|
|
250
|
+
id: "meetConsentMonitor",
|
|
251
|
+
displayName: "Meet Consent Monitor",
|
|
252
|
+
description: "Monitors meeting consent signals during live calls.",
|
|
253
|
+
domain: "skills",
|
|
254
|
+
},
|
|
255
|
+
meetChatOpportunity: {
|
|
256
|
+
id: "meetChatOpportunity",
|
|
257
|
+
displayName: "Meet Chat Opportunity",
|
|
258
|
+
description: "Identifies opportunities to engage in meeting chat.",
|
|
259
|
+
domain: "skills",
|
|
260
|
+
},
|
|
261
|
+
inference: {
|
|
262
|
+
id: "inference",
|
|
263
|
+
displayName: "Inference",
|
|
264
|
+
description: "General-purpose LLM inference call site for skill use.",
|
|
265
|
+
domain: "skills",
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// Source of truth for call-site display metadata. API responses and usage
|
|
270
|
+
// display paths should reuse this catalog instead of defining separate labels.
|
|
271
|
+
export const CALL_SITE_CATALOG: CallSiteEntry[] = Object.values(CATALOG_RECORD);
|
|
@@ -5,7 +5,7 @@ export const VALID_CALLER_IDENTITY_MODES = [
|
|
|
5
5
|
"assistant_number",
|
|
6
6
|
"user_number",
|
|
7
7
|
] as const;
|
|
8
|
-
|
|
8
|
+
const CallsDisclosureConfigSchema = z
|
|
9
9
|
.object({
|
|
10
10
|
enabled: z
|
|
11
11
|
.boolean({ error: "calls.disclosure.enabled must be a boolean" })
|
|
@@ -26,7 +26,7 @@ export const CallsDisclosureConfigSchema = z
|
|
|
26
26
|
"Controls whether and how the assistant discloses its nature at the start of a phone call",
|
|
27
27
|
);
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
const CallsSafetyConfigSchema = z
|
|
30
30
|
.object({
|
|
31
31
|
denyCategories: z
|
|
32
32
|
.array(
|
|
@@ -41,7 +41,7 @@ export const CallsSafetyConfigSchema = z
|
|
|
41
41
|
})
|
|
42
42
|
.describe("Safety guardrails for phone calls");
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
const CallsVoiceConfigSchema = z
|
|
45
45
|
.object({
|
|
46
46
|
language: z
|
|
47
47
|
.string({ error: "calls.voice.language must be a string" })
|
|
@@ -65,7 +65,7 @@ export const CallsVoiceConfigSchema = z
|
|
|
65
65
|
})
|
|
66
66
|
.describe("Voice and speech settings for phone calls");
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
const CallerIdentityConfigSchema = z
|
|
69
69
|
.object({
|
|
70
70
|
allowPerCallOverride: z
|
|
71
71
|
.boolean({
|
|
@@ -82,7 +82,7 @@ export const CallerIdentityConfigSchema = z
|
|
|
82
82
|
})
|
|
83
83
|
.describe("Controls which phone number is shown as the caller ID");
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
const CallsVerificationConfigSchema = z
|
|
86
86
|
.object({
|
|
87
87
|
enabled: z
|
|
88
88
|
.boolean({ error: "calls.verification.enabled must be a boolean" })
|
|
@@ -232,12 +232,3 @@ export const CallsConfigSchema = z
|
|
|
232
232
|
.describe(
|
|
233
233
|
"Phone call configuration — controls telephony, voice, safety, and call behavior",
|
|
234
234
|
);
|
|
235
|
-
|
|
236
|
-
export type CallsConfig = z.infer<typeof CallsConfigSchema>;
|
|
237
|
-
export type CallsDisclosureConfig = z.infer<typeof CallsDisclosureConfigSchema>;
|
|
238
|
-
export type CallsSafetyConfig = z.infer<typeof CallsSafetyConfigSchema>;
|
|
239
|
-
export type CallsVoiceConfig = z.infer<typeof CallsVoiceConfigSchema>;
|
|
240
|
-
export type CallerIdentityConfig = z.infer<typeof CallerIdentityConfigSchema>;
|
|
241
|
-
export type CallsVerificationConfig = z.infer<
|
|
242
|
-
typeof CallsVerificationConfigSchema
|
|
243
|
-
>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Cron } from "croner";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
|
|
3
4
|
export const HeartbeatConfigSchema = z
|
|
@@ -12,6 +13,20 @@ export const HeartbeatConfigSchema = z
|
|
|
12
13
|
.positive("heartbeat.intervalMs must be a positive integer")
|
|
13
14
|
.default(6 * 3_600_000)
|
|
14
15
|
.describe("Time between heartbeat checks in milliseconds"),
|
|
16
|
+
cronExpression: z
|
|
17
|
+
.string()
|
|
18
|
+
.nullable()
|
|
19
|
+
.default(null)
|
|
20
|
+
.describe(
|
|
21
|
+
"Cron expression for heartbeat timing. When set, heartbeats fire at the specified clock times instead of using intervalMs.",
|
|
22
|
+
),
|
|
23
|
+
timezone: z
|
|
24
|
+
.string()
|
|
25
|
+
.nullable()
|
|
26
|
+
.default(null)
|
|
27
|
+
.describe(
|
|
28
|
+
"Timezone for cron expression evaluation, e.g. 'America/New_York'. Ignored when cronExpression is null.",
|
|
29
|
+
),
|
|
15
30
|
activeHoursStart: z
|
|
16
31
|
.number({ error: "heartbeat.activeHoursStart must be a number" })
|
|
17
32
|
.int("heartbeat.activeHoursStart must be an integer")
|
|
@@ -80,6 +95,54 @@ export const HeartbeatConfigSchema = z
|
|
|
80
95
|
message,
|
|
81
96
|
});
|
|
82
97
|
}
|
|
98
|
+
|
|
99
|
+
// Validate cronExpression and timezone when cronExpression is set.
|
|
100
|
+
// Separate the validations so timezone errors are attributed to the
|
|
101
|
+
// timezone path — if both paths point at cronExpression, the config
|
|
102
|
+
// loader's delete-and-retry would strip cronExpression but leave the
|
|
103
|
+
// invalid timezone, cascading to a full defaults reset.
|
|
104
|
+
if (config.cronExpression != null) {
|
|
105
|
+
try {
|
|
106
|
+
new Cron(config.cronExpression, { maxRuns: 0 });
|
|
107
|
+
} catch (err) {
|
|
108
|
+
ctx.addIssue({
|
|
109
|
+
code: z.ZodIssueCode.custom,
|
|
110
|
+
path: ["cronExpression"],
|
|
111
|
+
message: err instanceof Error ? err.message : String(err),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (config.timezone != null) {
|
|
115
|
+
try {
|
|
116
|
+
new Cron(config.cronExpression, {
|
|
117
|
+
maxRuns: 0,
|
|
118
|
+
timezone: config.timezone,
|
|
119
|
+
});
|
|
120
|
+
} catch {
|
|
121
|
+
// The cron expression itself is valid (or already flagged above),
|
|
122
|
+
// so a failure here is from the timezone.
|
|
123
|
+
try {
|
|
124
|
+
Intl.DateTimeFormat(undefined, { timeZone: config.timezone });
|
|
125
|
+
} catch (tzErr) {
|
|
126
|
+
ctx.addIssue({
|
|
127
|
+
code: z.ZodIssueCode.custom,
|
|
128
|
+
path: ["timezone"],
|
|
129
|
+
message: tzErr instanceof Error ? tzErr.message : String(tzErr),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
} else if (config.timezone != null) {
|
|
135
|
+
// cronExpression is null but timezone is set — validate timezone independently
|
|
136
|
+
try {
|
|
137
|
+
Intl.DateTimeFormat(undefined, { timeZone: config.timezone });
|
|
138
|
+
} catch (err) {
|
|
139
|
+
ctx.addIssue({
|
|
140
|
+
code: z.ZodIssueCode.custom,
|
|
141
|
+
path: ["timezone"],
|
|
142
|
+
message: err instanceof Error ? err.message : String(err),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
83
146
|
});
|
|
84
147
|
|
|
85
148
|
export type HeartbeatConfig = z.infer<typeof HeartbeatConfigSchema>;
|
|
@@ -98,7 +98,7 @@ export const ContextWindowConfigSchema = z
|
|
|
98
98
|
.positive("contextWindow.maxInputTokens must be a positive integer")
|
|
99
99
|
.default(200000)
|
|
100
100
|
.describe(
|
|
101
|
-
"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)`.
|
|
101
|
+
"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)`. Increase this value to opt into larger model-native windows where supported.",
|
|
102
102
|
),
|
|
103
103
|
targetBudgetRatio: z
|
|
104
104
|
.number({ error: "contextWindow.targetBudgetRatio must be a number" })
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
+
function emptyOrAbsoluteHttpUrl(fieldPath: string) {
|
|
4
|
+
return z
|
|
5
|
+
.string({ error: `${fieldPath} must be a string` })
|
|
6
|
+
.refine(
|
|
7
|
+
(val) => val === "" || /^https?:\/\//i.test(val),
|
|
8
|
+
`${fieldPath} must be an absolute URL starting with http:// or https://`,
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
3
12
|
const IngressWebhookConfigSchema = z
|
|
4
13
|
.object({
|
|
5
14
|
secret: z
|
|
@@ -39,7 +48,7 @@ const IngressWebhookConfigSchema = z
|
|
|
39
48
|
})
|
|
40
49
|
.describe("Webhook configuration for ingress event delivery");
|
|
41
50
|
|
|
42
|
-
|
|
51
|
+
const IngressRateLimitConfigSchema = z
|
|
43
52
|
.object({
|
|
44
53
|
maxRequestsPerMinute: z
|
|
45
54
|
.number({
|
|
@@ -74,12 +83,7 @@ const IngressBaseSchema = z
|
|
|
74
83
|
.boolean({ error: "ingress.enabled must be a boolean" })
|
|
75
84
|
.optional()
|
|
76
85
|
.describe("Whether the ingress HTTP server is enabled"),
|
|
77
|
-
publicBaseUrl:
|
|
78
|
-
.string({ error: "ingress.publicBaseUrl must be a string" })
|
|
79
|
-
.refine(
|
|
80
|
-
(val) => val === "" || /^https?:\/\//i.test(val),
|
|
81
|
-
"ingress.publicBaseUrl must be an absolute URL starting with http:// or https://",
|
|
82
|
-
)
|
|
86
|
+
publicBaseUrl: emptyOrAbsoluteHttpUrl("ingress.publicBaseUrl")
|
|
83
87
|
.default("")
|
|
84
88
|
.describe(
|
|
85
89
|
"Public-facing base URL for the ingress server (used in webhook callbacks)",
|
|
@@ -91,7 +91,6 @@ export type LLMCallSite = z.infer<typeof LLMCallSiteEnum>;
|
|
|
91
91
|
* mapping table.
|
|
92
92
|
*/
|
|
93
93
|
const EffortEnum = z.enum(["none", "low", "medium", "high", "xhigh", "max"]);
|
|
94
|
-
export type Effort = z.infer<typeof EffortEnum>;
|
|
95
94
|
|
|
96
95
|
export const SpeedEnum = z.enum(["standard", "fast"]);
|
|
97
96
|
export type Speed = z.infer<typeof SpeedEnum>;
|
|
@@ -102,7 +101,6 @@ export type Speed = z.infer<typeof SpeedEnum>;
|
|
|
102
101
|
* are stripped in `retry.ts` normalization.
|
|
103
102
|
*/
|
|
104
103
|
const VerbosityEnum = z.enum(["low", "medium", "high"]);
|
|
105
|
-
export type Verbosity = z.infer<typeof VerbosityEnum>;
|
|
106
104
|
|
|
107
105
|
// ---------------------------------------------------------------------------
|
|
108
106
|
// Leaf primitives (shared between LLMConfigBase and LLMConfigFragment)
|
|
@@ -150,7 +148,6 @@ const ThinkingSchema = z.object({
|
|
|
150
148
|
enabled: ThinkingEnabledSchema.default(true),
|
|
151
149
|
streamThinking: ThinkingStreamThinkingSchema.default(true),
|
|
152
150
|
});
|
|
153
|
-
export type Thinking = z.infer<typeof ThinkingSchema>;
|
|
154
151
|
|
|
155
152
|
// Fragment view: every field optional, no defaults injected. Defining this
|
|
156
153
|
// separately (rather than `ThinkingSchema.partial()`) avoids having Zod
|
|
@@ -193,6 +190,8 @@ const ContextOverflowRecoveryFragmentSchema = z.object({
|
|
|
193
190
|
|
|
194
191
|
// Leaf primitives for context-window fields.
|
|
195
192
|
const ContextEnabledSchema = z.boolean();
|
|
193
|
+
export const DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS = 200000;
|
|
194
|
+
|
|
196
195
|
const ContextMaxInputTokensSchema = z.number().int().positive();
|
|
197
196
|
const ContextTargetBudgetRatioSchema = z.number().finite().gt(0).lte(1);
|
|
198
197
|
const ContextCompactThresholdSchema = z.number().finite().gt(0).lte(1);
|
|
@@ -200,7 +199,9 @@ const ContextSummaryBudgetRatioSchema = z.number().finite().gt(0).lte(1);
|
|
|
200
199
|
|
|
201
200
|
const ContextWindowSchema = z.object({
|
|
202
201
|
enabled: ContextEnabledSchema.default(true),
|
|
203
|
-
maxInputTokens: ContextMaxInputTokensSchema.default(
|
|
202
|
+
maxInputTokens: ContextMaxInputTokensSchema.default(
|
|
203
|
+
DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS,
|
|
204
|
+
),
|
|
204
205
|
targetBudgetRatio: ContextTargetBudgetRatioSchema.default(0.3),
|
|
205
206
|
compactThreshold: ContextCompactThresholdSchema.default(0.8),
|
|
206
207
|
summaryBudgetRatio: ContextSummaryBudgetRatioSchema.default(0.05),
|
|
@@ -239,12 +240,22 @@ const OpenRouterOnlyItemSchema = z.string().min(1);
|
|
|
239
240
|
const OpenRouterSchema = z.object({
|
|
240
241
|
only: z.array(OpenRouterOnlyItemSchema).default([]),
|
|
241
242
|
});
|
|
242
|
-
export type OpenRouter = z.infer<typeof OpenRouterSchema>;
|
|
243
243
|
|
|
244
244
|
const OpenRouterDeepPartialSchema = z.object({
|
|
245
245
|
only: z.array(OpenRouterOnlyItemSchema).optional(),
|
|
246
246
|
});
|
|
247
247
|
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// Profile metadata
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Distinguishes daemon-managed profiles (overwritten on every startup) from
|
|
254
|
+
* user-created ones (never touched by the daemon).
|
|
255
|
+
*/
|
|
256
|
+
const ProfileSource = z.enum(["managed", "user"]);
|
|
257
|
+
type ProfileSource = z.infer<typeof ProfileSource>;
|
|
258
|
+
|
|
248
259
|
// ---------------------------------------------------------------------------
|
|
249
260
|
// Pricing overrides
|
|
250
261
|
// ---------------------------------------------------------------------------
|
|
@@ -255,7 +266,6 @@ const PricingOverrideSchema = z.object({
|
|
|
255
266
|
inputPer1M: z.number().nonnegative(),
|
|
256
267
|
outputPer1M: z.number().nonnegative(),
|
|
257
268
|
});
|
|
258
|
-
export type PricingOverride = z.infer<typeof PricingOverrideSchema>;
|
|
259
269
|
|
|
260
270
|
// ---------------------------------------------------------------------------
|
|
261
271
|
// Base config (all fields defaulted) and Fragment (all fields optional)
|
|
@@ -287,7 +297,7 @@ export type LLMConfigBase = z.infer<typeof LLMConfigBase>;
|
|
|
287
297
|
* objects so callers can override individual leaves (e.g. `{ thinking:
|
|
288
298
|
* { enabled: false } }`).
|
|
289
299
|
*/
|
|
290
|
-
|
|
300
|
+
const LLMConfigFragment = z.object({
|
|
291
301
|
provider: LLMProvider.optional(),
|
|
292
302
|
model: ModelSchema.optional(),
|
|
293
303
|
maxTokens: MaxTokensSchema.optional(),
|
|
@@ -299,17 +309,30 @@ export const LLMConfigFragment = z.object({
|
|
|
299
309
|
contextWindow: ContextWindowDeepPartialSchema.optional(),
|
|
300
310
|
openrouter: OpenRouterDeepPartialSchema.optional(),
|
|
301
311
|
});
|
|
302
|
-
|
|
312
|
+
type LLMConfigFragment = z.infer<typeof LLMConfigFragment>;
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* A named profile entry: an `LLMConfigFragment` augmented with
|
|
316
|
+
* presentation/ownership metadata. These fields are intentionally kept off
|
|
317
|
+
* `LLMConfigFragment` so they don't leak into `LLMCallSiteConfig` or the
|
|
318
|
+
* resolver's deep-merge output.
|
|
319
|
+
*/
|
|
320
|
+
export const ProfileEntry = LLMConfigFragment.extend({
|
|
321
|
+
source: ProfileSource.optional(),
|
|
322
|
+
label: z.string().min(1).optional(),
|
|
323
|
+
description: z.string().optional(),
|
|
324
|
+
});
|
|
325
|
+
export type ProfileEntry = z.infer<typeof ProfileEntry>;
|
|
303
326
|
|
|
304
327
|
/**
|
|
305
328
|
* Per-call-site config: a fragment plus an optional `profile` reference.
|
|
306
329
|
* The resolver merges in the named profile (if any) before applying
|
|
307
330
|
* call-site-level overrides.
|
|
308
331
|
*/
|
|
309
|
-
|
|
332
|
+
const LLMCallSiteConfig = LLMConfigFragment.extend({
|
|
310
333
|
profile: z.string().min(1).optional(),
|
|
311
334
|
});
|
|
312
|
-
|
|
335
|
+
type LLMCallSiteConfig = z.infer<typeof LLMCallSiteConfig>;
|
|
313
336
|
|
|
314
337
|
// ---------------------------------------------------------------------------
|
|
315
338
|
// Top-level LLM schema
|
|
@@ -318,7 +341,7 @@ export type LLMCallSiteConfig = z.infer<typeof LLMCallSiteConfig>;
|
|
|
318
341
|
export const LLMSchema = z
|
|
319
342
|
.object({
|
|
320
343
|
default: LLMConfigBase.default(LLMConfigBase.parse({})),
|
|
321
|
-
profiles: z.record(z.string().min(1),
|
|
344
|
+
profiles: z.record(z.string().min(1), ProfileEntry).default({}),
|
|
322
345
|
// Presentation-only order for named profiles. The resolver ignores this;
|
|
323
346
|
// clients use it to render profile pickers consistently.
|
|
324
347
|
profileOrder: z.array(z.string().min(1)).default([]),
|
|
@@ -1,29 +1,82 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
3
|
+
const DEFAULT_WORKER_CONCURRENCY = 2;
|
|
4
|
+
const DEFAULT_SLOW_LLM_CONCURRENCY = 1;
|
|
5
|
+
const DEFAULT_FAST_CONCURRENCY = 2;
|
|
6
|
+
const DEFAULT_EMBED_CONCURRENCY = 2;
|
|
7
|
+
|
|
8
|
+
const positiveInt = (field: string) =>
|
|
9
|
+
z
|
|
10
|
+
.number({ error: `memory.jobs.${field} must be a number` })
|
|
11
|
+
.int(`memory.jobs.${field} must be an integer`)
|
|
12
|
+
.positive(`memory.jobs.${field} must be a positive integer`);
|
|
13
|
+
|
|
14
|
+
// Input shape allows all fields to be omitted so we can distinguish
|
|
15
|
+
// "user explicitly set workerConcurrency" from "user accepted the default"
|
|
16
|
+
// when deriving lane caps. The output shape (after transform) always has
|
|
17
|
+
// all four fields populated.
|
|
18
|
+
const MemoryJobsConfigInputSchema = z.object({
|
|
19
|
+
workerConcurrency: positiveInt("workerConcurrency")
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Number of concurrent workers processing memory jobs"),
|
|
22
|
+
stalledJobTimeoutMs: positiveInt("stalledJobTimeoutMs")
|
|
23
|
+
.default(30 * 60 * 1000)
|
|
24
|
+
.describe(
|
|
25
|
+
"Timeout in milliseconds after which a stalled memory job is considered failed",
|
|
26
|
+
),
|
|
27
|
+
slowLlmConcurrency: positiveInt("slowLlmConcurrency")
|
|
28
|
+
.optional()
|
|
29
|
+
.describe(
|
|
30
|
+
"Concurrent slow LLM-bound jobs (graph consolidation, narrative refine, etc.)",
|
|
31
|
+
),
|
|
32
|
+
fastConcurrency: positiveInt("fastConcurrency")
|
|
33
|
+
.optional()
|
|
34
|
+
.describe(
|
|
35
|
+
"Concurrent fast jobs (concept-page embed, prunes, media processing, etc.)",
|
|
36
|
+
),
|
|
37
|
+
embedConcurrency: positiveInt("embedConcurrency")
|
|
38
|
+
.optional()
|
|
39
|
+
.describe(
|
|
40
|
+
"Concurrent segment-embed jobs (gated by Qdrant circuit breaker)",
|
|
41
|
+
),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export const MemoryJobsConfigSchema = MemoryJobsConfigInputSchema.transform(
|
|
45
|
+
(input) => {
|
|
46
|
+
// When `workerConcurrency` is explicitly set but lane caps are not,
|
|
47
|
+
// derive lane caps so existing user configs gain the per-lane fix
|
|
48
|
+
// without edits. Explicit lane caps always win.
|
|
49
|
+
const workerConcurrencyExplicit = input.workerConcurrency !== undefined;
|
|
50
|
+
const workerConcurrency =
|
|
51
|
+
input.workerConcurrency ?? DEFAULT_WORKER_CONCURRENCY;
|
|
52
|
+
|
|
53
|
+
const slowLlmConcurrency =
|
|
54
|
+
input.slowLlmConcurrency ??
|
|
55
|
+
(workerConcurrencyExplicit
|
|
56
|
+
? Math.max(1, Math.floor(workerConcurrency / 2))
|
|
57
|
+
: DEFAULT_SLOW_LLM_CONCURRENCY);
|
|
58
|
+
|
|
59
|
+
const fastConcurrency =
|
|
60
|
+
input.fastConcurrency ??
|
|
61
|
+
(workerConcurrencyExplicit
|
|
62
|
+
? workerConcurrency
|
|
63
|
+
: DEFAULT_FAST_CONCURRENCY);
|
|
64
|
+
|
|
65
|
+
const embedConcurrency =
|
|
66
|
+
input.embedConcurrency ??
|
|
67
|
+
(workerConcurrencyExplicit
|
|
68
|
+
? workerConcurrency
|
|
69
|
+
: DEFAULT_EMBED_CONCURRENCY);
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
workerConcurrency,
|
|
73
|
+
stalledJobTimeoutMs: input.stalledJobTimeoutMs,
|
|
74
|
+
slowLlmConcurrency,
|
|
75
|
+
fastConcurrency,
|
|
76
|
+
embedConcurrency,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
).describe("Memory background job processing configuration");
|
|
27
80
|
|
|
28
81
|
export const MemoryRetentionConfigSchema = z
|
|
29
82
|
.object({
|