@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const MemoryDynamicBudgetConfigSchema = z
|
|
4
4
|
.object({
|
|
5
5
|
enabled: z
|
|
6
6
|
.boolean({
|
|
@@ -271,7 +271,7 @@ const MemoryPerTurnInjectionSchema = z
|
|
|
271
271
|
})
|
|
272
272
|
.describe("Memory injection limits for mid-conversation turns");
|
|
273
273
|
|
|
274
|
-
|
|
274
|
+
const MemoryInjectionConfigSchema = z
|
|
275
275
|
.object({
|
|
276
276
|
contextLoad: MemoryContextLoadInjectionSchema.default(
|
|
277
277
|
MemoryContextLoadInjectionSchema.parse({}),
|
|
@@ -87,6 +87,15 @@ export const MemoryV2ConfigSchema = z
|
|
|
87
87
|
.describe(
|
|
88
88
|
"Number of top-activation concept pages considered for injection per turn",
|
|
89
89
|
),
|
|
90
|
+
ann_candidate_limit: z
|
|
91
|
+
.number({ error: "memory.v2.ann_candidate_limit must be a number" })
|
|
92
|
+
.int("memory.v2.ann_candidate_limit must be an integer")
|
|
93
|
+
.positive("memory.v2.ann_candidate_limit must be a positive integer")
|
|
94
|
+
.nullable()
|
|
95
|
+
.default(null)
|
|
96
|
+
.describe(
|
|
97
|
+
"Per-channel cap on the unrestricted ANN candidate query (dense and sparse each return up to this many hits before they are unioned and fed into the activation pipeline). `null` = unlimited (every page in the v2 collection is eligible). Increase or null this out to surface more candidates at the cost of higher per-turn embedding/scoring work.",
|
|
98
|
+
),
|
|
90
99
|
top_k_skills: z
|
|
91
100
|
.number({ error: "memory.v2.top_k_skills must be a number" })
|
|
92
101
|
.int()
|
|
@@ -107,17 +116,52 @@ export const MemoryV2ConfigSchema = z
|
|
|
107
116
|
.number({ error: "memory.v2.dense_weight must be a number" })
|
|
108
117
|
.min(0, "memory.v2.dense_weight must be >= 0")
|
|
109
118
|
.max(1, "memory.v2.dense_weight must be <= 1")
|
|
110
|
-
.default(0.
|
|
119
|
+
.default(0.85)
|
|
111
120
|
.describe(
|
|
112
|
-
"Weight on dense (cosine) similarity in the hybrid retrieval score",
|
|
121
|
+
"Weight on dense (cosine) similarity in the hybrid retrieval score — dense embeddings dominate the score.",
|
|
113
122
|
),
|
|
114
123
|
sparse_weight: z
|
|
115
124
|
.number({ error: "memory.v2.sparse_weight must be a number" })
|
|
116
125
|
.min(0, "memory.v2.sparse_weight must be >= 0")
|
|
117
126
|
.max(1, "memory.v2.sparse_weight must be <= 1")
|
|
118
|
-
.default(0.
|
|
127
|
+
.default(0.15)
|
|
128
|
+
.describe(
|
|
129
|
+
"Weight on sparse (BM25-style) similarity in the hybrid retrieval score — sparse acts as a discriminator for keyword-rich queries.",
|
|
130
|
+
),
|
|
131
|
+
// Adaptive sparse-weighting knobs. Both fields are intentionally
|
|
132
|
+
// optional with no default — the schema serialiser drops absent
|
|
133
|
+
// optionals so these stay invisible to operators who never tune them.
|
|
134
|
+
// The defaults live in `effectiveWeights` (sim.ts).
|
|
135
|
+
min_sparse_spread: z
|
|
136
|
+
.number({ error: "memory.v2.min_sparse_spread must be a number" })
|
|
137
|
+
.min(0, "memory.v2.min_sparse_spread must be >= 0")
|
|
138
|
+
.max(1, "memory.v2.min_sparse_spread must be <= 1")
|
|
139
|
+
.optional()
|
|
140
|
+
.describe(
|
|
141
|
+
"Adaptive sparse weighting: when the spread (max - min) of normalized sparse scores across the candidate hit set falls below this, sparse contribution collapses to 0. Linear interpolation between this and `full_sparse_spread`. Optional escape hatch — leave unset to use the built-in default.",
|
|
142
|
+
),
|
|
143
|
+
full_sparse_spread: z
|
|
144
|
+
.number({ error: "memory.v2.full_sparse_spread must be a number" })
|
|
145
|
+
.min(0, "memory.v2.full_sparse_spread must be >= 0")
|
|
146
|
+
.max(1, "memory.v2.full_sparse_spread must be <= 1")
|
|
147
|
+
.optional()
|
|
119
148
|
.describe(
|
|
120
|
-
"
|
|
149
|
+
"Adaptive sparse weighting: at or above this spread, sparse weight stays at the configured `sparse_weight`. Optional escape hatch — leave unset to use the built-in default.",
|
|
150
|
+
),
|
|
151
|
+
bm25_k1: z
|
|
152
|
+
.number({ error: "memory.v2.bm25_k1 must be a number" })
|
|
153
|
+
.min(0, "memory.v2.bm25_k1 must be >= 0")
|
|
154
|
+
.default(1.2)
|
|
155
|
+
.describe(
|
|
156
|
+
"BM25 term-frequency saturation parameter. Standard Lucene default — increase to make repeated mentions of a term matter more, decrease to flatten the curve.",
|
|
157
|
+
),
|
|
158
|
+
bm25_b: z
|
|
159
|
+
.number({ error: "memory.v2.bm25_b must be a number" })
|
|
160
|
+
.min(0, "memory.v2.bm25_b must be >= 0")
|
|
161
|
+
.max(1, "memory.v2.bm25_b must be <= 1")
|
|
162
|
+
.default(0.4)
|
|
163
|
+
.describe(
|
|
164
|
+
"BM25 document-length normalization. 0 disables length normalization, 1 fully normalizes. Lucene's default is 0.75 (tuned for narrative/web corpora); we run lower because concept-page collections include structured list pages with high information density per word — full Lucene normalization over-penalizes them.",
|
|
121
165
|
),
|
|
122
166
|
consolidation_interval_hours: z
|
|
123
167
|
.number({
|
|
@@ -139,6 +183,15 @@ export const MemoryV2ConfigSchema = z
|
|
|
139
183
|
.describe(
|
|
140
184
|
"Soft upper bound on concept-page body length — pages exceeding this are flagged for split during consolidation",
|
|
141
185
|
),
|
|
186
|
+
consolidation_prompt_path: z
|
|
187
|
+
.string({
|
|
188
|
+
error: "memory.v2.consolidation_prompt_path must be a string",
|
|
189
|
+
})
|
|
190
|
+
.nullable()
|
|
191
|
+
.default(null)
|
|
192
|
+
.describe(
|
|
193
|
+
"Optional path to a file whose contents replace the bundled consolidation prompt. Absolute paths are used as-is, a leading `~/` is expanded to the home directory, otherwise the path is resolved under the workspace root. The loaded contents may include `{{CUTOFF}}`, which is substituted with the run's ISO-8601 cutoff timestamp. If the file is missing, unreadable, or empty, the bundled prompt is used and a warning is logged.",
|
|
194
|
+
),
|
|
142
195
|
})
|
|
143
196
|
.describe(
|
|
144
197
|
"Memory v2 — concept-page activation model with hourly LLM-driven consolidation",
|
|
@@ -10,6 +10,12 @@ export const PlatformConfigSchema = z
|
|
|
10
10
|
)
|
|
11
11
|
.default("")
|
|
12
12
|
.describe("Base URL of the Vellum platform API"),
|
|
13
|
+
subdomain: z
|
|
14
|
+
.string({ error: "platform.subdomain must be a string" })
|
|
15
|
+
.default("")
|
|
16
|
+
.describe(
|
|
17
|
+
"Registered subdomain on vellum.me (e.g. 'apollobot' → apollobot.vellum.me). Set automatically by 'assistant domain register'.",
|
|
18
|
+
),
|
|
13
19
|
})
|
|
14
20
|
.describe("Vellum platform connection settings");
|
|
15
21
|
|
|
@@ -1,46 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
const VALID_SECRET_ACTIONS = ["redact", "warn", "block", "prompt"] as const;
|
|
4
|
-
|
|
5
|
-
const CustomSecretPatternSchema = z
|
|
6
|
-
.object({
|
|
7
|
-
label: z
|
|
8
|
-
.string({
|
|
9
|
-
error: "secretDetection.customPatterns[].label must be a string",
|
|
10
|
-
})
|
|
11
|
-
.describe("Human-readable label for this secret pattern"),
|
|
12
|
-
pattern: z
|
|
13
|
-
.string({
|
|
14
|
-
error: "secretDetection.customPatterns[].pattern must be a string",
|
|
15
|
-
})
|
|
16
|
-
.describe("Regular expression pattern to match secrets"),
|
|
17
|
-
})
|
|
18
|
-
.describe("Custom pattern for detecting secrets in messages");
|
|
19
|
-
|
|
20
3
|
export const SecretDetectionConfigSchema = z
|
|
21
4
|
.object({
|
|
22
5
|
enabled: z
|
|
23
6
|
.boolean({ error: "secretDetection.enabled must be a boolean" })
|
|
24
7
|
.default(true)
|
|
25
8
|
.describe("Whether automatic secret detection is enabled"),
|
|
26
|
-
action: z
|
|
27
|
-
.enum(VALID_SECRET_ACTIONS, {
|
|
28
|
-
error: `secretDetection.action must be one of: ${VALID_SECRET_ACTIONS.join(
|
|
29
|
-
", ",
|
|
30
|
-
)}`,
|
|
31
|
-
})
|
|
32
|
-
.default("redact")
|
|
33
|
-
.describe(
|
|
34
|
-
"Action to take when a secret is detected: redact (replace with placeholder), warn (log a warning), block (reject the message), or prompt (ask the user)",
|
|
35
|
-
),
|
|
36
|
-
entropyThreshold: z
|
|
37
|
-
.number({ error: "secretDetection.entropyThreshold must be a number" })
|
|
38
|
-
.finite("secretDetection.entropyThreshold must be finite")
|
|
39
|
-
.positive("secretDetection.entropyThreshold must be a positive number")
|
|
40
|
-
.default(4.0)
|
|
41
|
-
.describe(
|
|
42
|
-
"Shannon entropy threshold for detecting high-entropy strings as potential secrets",
|
|
43
|
-
),
|
|
44
9
|
blockIngress: z
|
|
45
10
|
.boolean({ error: "secretDetection.blockIngress must be a boolean" })
|
|
46
11
|
.default(true)
|
|
@@ -53,15 +18,9 @@ export const SecretDetectionConfigSchema = z
|
|
|
53
18
|
.describe(
|
|
54
19
|
"Whether to allow sending a detected secret once (with user confirmation) before redacting future occurrences",
|
|
55
20
|
),
|
|
56
|
-
customPatterns: z
|
|
57
|
-
.array(CustomSecretPatternSchema)
|
|
58
|
-
.optional()
|
|
59
|
-
.describe(
|
|
60
|
-
"Additional regex patterns for detecting domain-specific secrets",
|
|
61
|
-
),
|
|
62
21
|
})
|
|
63
22
|
.describe(
|
|
64
|
-
"
|
|
23
|
+
"Prefix-based secret detection at user-message ingress, plus one-time-send override for the secure credential prompt",
|
|
65
24
|
);
|
|
66
25
|
|
|
67
26
|
export type SecretDetectionConfig = z.infer<typeof SecretDetectionConfigSchema>;
|
|
@@ -3,8 +3,8 @@ import { z } from "zod";
|
|
|
3
3
|
import { SttServiceSchema } from "./stt.js";
|
|
4
4
|
import { TtsServiceSchema } from "./tts.js";
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const ServiceModeSchema = z.enum(["managed", "your-own"]);
|
|
7
|
+
type ServiceMode = z.infer<typeof ServiceModeSchema>;
|
|
8
8
|
|
|
9
9
|
export const VALID_INFERENCE_PROVIDERS = [
|
|
10
10
|
"anthropic",
|
|
@@ -15,9 +15,9 @@ export const VALID_INFERENCE_PROVIDERS = [
|
|
|
15
15
|
"openrouter",
|
|
16
16
|
] as const;
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
const VALID_IMAGE_GEN_PROVIDERS = ["gemini", "openai"] as const;
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const VALID_WEB_SEARCH_PROVIDERS = [
|
|
21
21
|
"perplexity",
|
|
22
22
|
"brave",
|
|
23
23
|
"inference-provider-native",
|
|
@@ -26,7 +26,6 @@ export const VALID_WEB_SEARCH_PROVIDERS = [
|
|
|
26
26
|
const BaseServiceSchema = z.object({
|
|
27
27
|
mode: ServiceModeSchema.default("your-own"),
|
|
28
28
|
});
|
|
29
|
-
export type BaseService = z.infer<typeof BaseServiceSchema>;
|
|
30
29
|
|
|
31
30
|
/**
|
|
32
31
|
* Inference service entry. Carries only the routing `mode`
|
|
@@ -36,53 +35,42 @@ export type BaseService = z.infer<typeof BaseServiceSchema>;
|
|
|
36
35
|
* legacy configs that still carry them have those keys stripped by
|
|
37
36
|
* workspace migration `039-drop-legacy-llm-keys`.
|
|
38
37
|
*/
|
|
39
|
-
|
|
40
|
-
export type InferenceService = z.infer<typeof InferenceServiceSchema>;
|
|
38
|
+
const InferenceServiceSchema = BaseServiceSchema;
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
const ImageGenerationServiceSchema = BaseServiceSchema.extend({
|
|
43
41
|
provider: z.enum(VALID_IMAGE_GEN_PROVIDERS).default("gemini"),
|
|
44
42
|
model: z.string().default("gemini-3.1-flash-image-preview"),
|
|
45
43
|
});
|
|
46
|
-
export type ImageGenerationService = z.infer<
|
|
47
|
-
typeof ImageGenerationServiceSchema
|
|
48
|
-
>;
|
|
49
44
|
|
|
50
|
-
|
|
45
|
+
const WebSearchServiceSchema = BaseServiceSchema.extend({
|
|
51
46
|
provider: z
|
|
52
47
|
.enum(VALID_WEB_SEARCH_PROVIDERS)
|
|
53
48
|
.default("inference-provider-native"),
|
|
54
49
|
});
|
|
55
|
-
export type WebSearchService = z.infer<typeof WebSearchServiceSchema>;
|
|
56
50
|
|
|
57
51
|
const GoogleOAuthServiceSchema = BaseServiceSchema.extend({
|
|
58
52
|
mode: ServiceModeSchema.default("your-own"),
|
|
59
53
|
});
|
|
60
|
-
export type GoogleOAuthService = z.infer<typeof GoogleOAuthServiceSchema>;
|
|
61
54
|
|
|
62
55
|
const OutlookOAuthServiceSchema = BaseServiceSchema.extend({
|
|
63
56
|
mode: ServiceModeSchema.default("your-own"),
|
|
64
57
|
});
|
|
65
|
-
export type OutlookOAuthService = z.infer<typeof OutlookOAuthServiceSchema>;
|
|
66
58
|
|
|
67
59
|
const LinearOAuthServiceSchema = BaseServiceSchema.extend({
|
|
68
60
|
mode: ServiceModeSchema.default("your-own"),
|
|
69
61
|
});
|
|
70
|
-
export type LinearOAuthService = z.infer<typeof LinearOAuthServiceSchema>;
|
|
71
62
|
|
|
72
63
|
const GitHubOAuthServiceSchema = BaseServiceSchema.extend({
|
|
73
64
|
mode: ServiceModeSchema.default("your-own"),
|
|
74
65
|
});
|
|
75
|
-
export type GitHubOAuthService = z.infer<typeof GitHubOAuthServiceSchema>;
|
|
76
66
|
|
|
77
67
|
const NotionOAuthServiceSchema = BaseServiceSchema.extend({
|
|
78
68
|
mode: ServiceModeSchema.default("your-own"),
|
|
79
69
|
});
|
|
80
|
-
export type NotionOAuthService = z.infer<typeof NotionOAuthServiceSchema>;
|
|
81
70
|
|
|
82
71
|
const TwitterOAuthServiceSchema = BaseServiceSchema.extend({
|
|
83
72
|
mode: ServiceModeSchema.default("your-own"),
|
|
84
73
|
});
|
|
85
|
-
export type TwitterOAuthService = z.infer<typeof TwitterOAuthServiceSchema>;
|
|
86
74
|
|
|
87
75
|
/**
|
|
88
76
|
* `services.meet.host.*` — daemon-side knobs for the externalized meet-join
|
|
@@ -106,7 +94,6 @@ const MeetHostConfigSchema = z
|
|
|
106
94
|
),
|
|
107
95
|
})
|
|
108
96
|
.describe("Daemon-side configuration for the external meet-join skill host");
|
|
109
|
-
export type MeetHostConfig = z.infer<typeof MeetHostConfigSchema>;
|
|
110
97
|
|
|
111
98
|
/**
|
|
112
99
|
* Daemon-side `services.meet` block. Intentionally distinct from the
|
|
@@ -120,7 +107,6 @@ const MeetDaemonServiceSchema = z
|
|
|
120
107
|
host: MeetHostConfigSchema.default(MeetHostConfigSchema.parse({})),
|
|
121
108
|
})
|
|
122
109
|
.describe("meet-join skill daemon-side configuration");
|
|
123
|
-
export type MeetDaemonService = z.infer<typeof MeetDaemonServiceSchema>;
|
|
124
110
|
|
|
125
111
|
export const ServicesSchema = z.object({
|
|
126
112
|
inference: InferenceServiceSchema.default(InferenceServiceSchema.parse({})),
|
|
@@ -24,7 +24,7 @@ export const SkillEntryConfigSchema = z
|
|
|
24
24
|
})
|
|
25
25
|
.describe("Configuration for an individual skill");
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
const SkillsLoadConfigSchema = z
|
|
28
28
|
.object({
|
|
29
29
|
extraDirs: z
|
|
30
30
|
.array(
|
|
@@ -49,7 +49,7 @@ export const SkillsLoadConfigSchema = z
|
|
|
49
49
|
})
|
|
50
50
|
.describe("Controls how skills are discovered and loaded");
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
const SkillsInstallConfigSchema = z
|
|
53
53
|
.object({
|
|
54
54
|
nodeManager: z
|
|
55
55
|
.enum(["npm", "pnpm", "yarn", "bun"], {
|
|
@@ -61,7 +61,7 @@ export const SkillsInstallConfigSchema = z
|
|
|
61
61
|
})
|
|
62
62
|
.describe("Skill dependency installation settings");
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
const RemoteProviderConfigSchema = z
|
|
65
65
|
.object({
|
|
66
66
|
enabled: z
|
|
67
67
|
.boolean({
|
|
@@ -72,7 +72,7 @@ export const RemoteProviderConfigSchema = z
|
|
|
72
72
|
})
|
|
73
73
|
.describe("Configuration for a remote skill provider");
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
const RemoteProvidersConfigSchema = z
|
|
76
76
|
.object({
|
|
77
77
|
skillssh: RemoteProviderConfigSchema.default(
|
|
78
78
|
RemoteProviderConfigSchema.parse({}),
|
|
@@ -93,7 +93,7 @@ const VALID_MAX_RISK_LEVELS = [
|
|
|
93
93
|
"critical",
|
|
94
94
|
] as const;
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
const RemotePolicyConfigSchema = z
|
|
97
97
|
.object({
|
|
98
98
|
blockSuspicious: z
|
|
99
99
|
.boolean({
|
|
@@ -149,9 +149,3 @@ export const SkillsConfigSchema = z
|
|
|
149
149
|
);
|
|
150
150
|
|
|
151
151
|
export type SkillEntryConfig = z.infer<typeof SkillEntryConfigSchema>;
|
|
152
|
-
export type SkillsLoadConfig = z.infer<typeof SkillsLoadConfigSchema>;
|
|
153
|
-
export type SkillsInstallConfig = z.infer<typeof SkillsInstallConfigSchema>;
|
|
154
|
-
export type RemoteProviderConfig = z.infer<typeof RemoteProviderConfigSchema>;
|
|
155
|
-
export type RemoteProvidersConfig = z.infer<typeof RemoteProvidersConfigSchema>;
|
|
156
|
-
export type RemotePolicyConfig = z.infer<typeof RemotePolicyConfigSchema>;
|
|
157
|
-
export type SkillsConfig = z.infer<typeof SkillsConfigSchema>;
|
|
@@ -220,7 +220,7 @@ export const TtsXaiProviderConfigSchema = z
|
|
|
220
220
|
|
|
221
221
|
export type TtsXaiProviderConfig = z.infer<typeof TtsXaiProviderConfigSchema>;
|
|
222
222
|
|
|
223
|
-
|
|
223
|
+
const TtsProvidersSchema = z.object({
|
|
224
224
|
elevenlabs: TtsElevenLabsProviderConfigSchema.default(
|
|
225
225
|
TtsElevenLabsProviderConfigSchema.parse({}),
|
|
226
226
|
),
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { loadRawConfig, saveRawConfig } from "./loader.js";
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS,
|
|
4
|
+
type ProfileEntry,
|
|
5
|
+
} from "./schemas/llm.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Declarative seed data for daemon-managed inference profiles.
|
|
9
|
+
*
|
|
10
|
+
* These profiles are overwritten on every startup so upstream model
|
|
11
|
+
* updates propagate automatically. User-created profiles (keyed by
|
|
12
|
+
* different names) are never touched.
|
|
13
|
+
*/
|
|
14
|
+
const MANAGED_PROFILE_SEED_DATA: Record<string, ProfileEntry> = {
|
|
15
|
+
balanced: {
|
|
16
|
+
source: "managed",
|
|
17
|
+
label: "Balanced",
|
|
18
|
+
description: "Good balance of quality, cost, and speed",
|
|
19
|
+
provider: "anthropic",
|
|
20
|
+
model: "claude-sonnet-4-6",
|
|
21
|
+
maxTokens: 16000,
|
|
22
|
+
effort: "high",
|
|
23
|
+
thinking: { enabled: true, streamThinking: true },
|
|
24
|
+
contextWindow: { maxInputTokens: DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS },
|
|
25
|
+
},
|
|
26
|
+
"quality-optimized": {
|
|
27
|
+
source: "managed",
|
|
28
|
+
label: "Quality",
|
|
29
|
+
description: "Best results with the most capable model",
|
|
30
|
+
provider: "anthropic",
|
|
31
|
+
model: "claude-opus-4-7",
|
|
32
|
+
maxTokens: 32000,
|
|
33
|
+
effort: "max",
|
|
34
|
+
thinking: { enabled: true, streamThinking: true },
|
|
35
|
+
contextWindow: { maxInputTokens: DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS },
|
|
36
|
+
},
|
|
37
|
+
"cost-optimized": {
|
|
38
|
+
source: "managed",
|
|
39
|
+
label: "Speed",
|
|
40
|
+
description: "Fastest responses at lower cost",
|
|
41
|
+
provider: "anthropic",
|
|
42
|
+
model: "claude-haiku-4-5-20251001",
|
|
43
|
+
maxTokens: 8192,
|
|
44
|
+
effort: "low",
|
|
45
|
+
thinking: { enabled: false, streamThinking: false },
|
|
46
|
+
contextWindow: { maxInputTokens: DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS },
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const MANAGED_PROFILE_NAMES = new Set(
|
|
51
|
+
Object.keys(MANAGED_PROFILE_SEED_DATA),
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Seed managed inference profiles into the workspace config.
|
|
56
|
+
*
|
|
57
|
+
* Called on every daemon startup after workspace migrations and before
|
|
58
|
+
* the first `loadConfig()`. Managed profiles are overwritten entirely
|
|
59
|
+
* (replace, not merge) so upstream model/effort changes propagate.
|
|
60
|
+
* User-created profiles are never touched; pre-existing profiles
|
|
61
|
+
* without a `source` field get `source: "user"` backfilled.
|
|
62
|
+
*
|
|
63
|
+
* No-op when `VELLUM_DEFAULT_WORKSPACE_CONFIG_PATH` is set (same guard
|
|
64
|
+
* as migration 052) because the platform-provided default-config overlay
|
|
65
|
+
* is the authoritative source for profile seeds.
|
|
66
|
+
*/
|
|
67
|
+
export function seedInferenceProfiles(): void {
|
|
68
|
+
if (process.env.VELLUM_DEFAULT_WORKSPACE_CONFIG_PATH) return;
|
|
69
|
+
|
|
70
|
+
const config = loadRawConfig();
|
|
71
|
+
|
|
72
|
+
if (config.llm == null || typeof config.llm !== "object") {
|
|
73
|
+
config.llm = {};
|
|
74
|
+
}
|
|
75
|
+
const llm = config.llm as Record<string, unknown>;
|
|
76
|
+
|
|
77
|
+
if (llm.profiles == null || typeof llm.profiles !== "object") {
|
|
78
|
+
llm.profiles = {};
|
|
79
|
+
}
|
|
80
|
+
const profiles = llm.profiles as Record<string, Record<string, unknown>>;
|
|
81
|
+
|
|
82
|
+
for (const [name, seed] of Object.entries(MANAGED_PROFILE_SEED_DATA)) {
|
|
83
|
+
profiles[name] = { ...seed };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Reset to the default managed profile when the current value is missing.
|
|
87
|
+
if (
|
|
88
|
+
typeof llm.activeProfile !== "string" ||
|
|
89
|
+
!(llm.activeProfile in profiles)
|
|
90
|
+
) {
|
|
91
|
+
llm.activeProfile = "balanced";
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const profileOrder = Array.isArray(llm.profileOrder)
|
|
95
|
+
? (llm.profileOrder as string[])
|
|
96
|
+
: [];
|
|
97
|
+
const orderSet = new Set(profileOrder);
|
|
98
|
+
for (const name of MANAGED_PROFILE_NAMES) {
|
|
99
|
+
if (!orderSet.has(name)) {
|
|
100
|
+
profileOrder.push(name);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
llm.profileOrder = profileOrder;
|
|
104
|
+
|
|
105
|
+
for (const [name, profile] of Object.entries(profiles)) {
|
|
106
|
+
if (MANAGED_PROFILE_NAMES.has(name)) continue;
|
|
107
|
+
if (
|
|
108
|
+
profile != null &&
|
|
109
|
+
typeof profile === "object" &&
|
|
110
|
+
!("source" in profile)
|
|
111
|
+
) {
|
|
112
|
+
profile.source = "user";
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
saveRawConfig(config);
|
|
117
|
+
}
|
package/src/config/skills.ts
CHANGED
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
readFileSync,
|
|
6
6
|
realpathSync,
|
|
7
7
|
statSync,
|
|
8
|
-
writeFileSync,
|
|
9
8
|
} from "node:fs";
|
|
10
9
|
import {
|
|
11
10
|
basename,
|
|
@@ -22,11 +21,6 @@ import {
|
|
|
22
21
|
getPluginContributedSkillDefinition,
|
|
23
22
|
getPluginContributedSkillSummaries,
|
|
24
23
|
} from "../plugins/plugin-skill-contributions.js";
|
|
25
|
-
import {
|
|
26
|
-
extractAllText,
|
|
27
|
-
getConfiguredProvider,
|
|
28
|
-
userMessage,
|
|
29
|
-
} from "../providers/provider-send-message.js";
|
|
30
24
|
import { parseFrontmatterFields } from "../skills/frontmatter.js";
|
|
31
25
|
import type { InlineCommandExpansion } from "../skills/inline-command-expansions.js";
|
|
32
26
|
import { parseInlineCommandExpansions } from "../skills/inline-command-expansions.js";
|
|
@@ -1232,87 +1226,3 @@ export function loadSkillBySelector(
|
|
|
1232
1226
|
}
|
|
1233
1227
|
|
|
1234
1228
|
// ─── Icon generation ─────────────────────────────────────────────────────────
|
|
1235
|
-
|
|
1236
|
-
async function generateSkillIcon(
|
|
1237
|
-
name: string,
|
|
1238
|
-
description: string,
|
|
1239
|
-
): Promise<string> {
|
|
1240
|
-
const provider = await getConfiguredProvider("skillCategoryInference");
|
|
1241
|
-
if (!provider) {
|
|
1242
|
-
throw new Error("Configured provider unavailable for icon generation");
|
|
1243
|
-
}
|
|
1244
|
-
|
|
1245
|
-
const response = await provider.sendMessage(
|
|
1246
|
-
[
|
|
1247
|
-
userMessage(
|
|
1248
|
-
`Create a 16x16 pixel art SVG icon representing this skill:\nName: ${name}\nDescription: ${description}`,
|
|
1249
|
-
),
|
|
1250
|
-
],
|
|
1251
|
-
undefined,
|
|
1252
|
-
'You are a pixel art icon designer. When asked, return ONLY a single <svg> element — no explanation, no markdown, no code fences. The SVG must be a 16x16 grid pixel art icon using <rect> elements. Use a limited palette (3-5 colors). Keep it under 2KB. The viewBox should be "0 0 16 16" with each pixel being a 1x1 rect.',
|
|
1253
|
-
{
|
|
1254
|
-
config: {
|
|
1255
|
-
callSite: "skillCategoryInference",
|
|
1256
|
-
max_tokens: 1024,
|
|
1257
|
-
},
|
|
1258
|
-
},
|
|
1259
|
-
);
|
|
1260
|
-
|
|
1261
|
-
const text = extractAllText(response);
|
|
1262
|
-
|
|
1263
|
-
const svgMatch = text.match(/<svg[\s\S]*<\/svg>/i);
|
|
1264
|
-
if (!svgMatch) {
|
|
1265
|
-
throw new Error("No <svg> element found in response");
|
|
1266
|
-
}
|
|
1267
|
-
|
|
1268
|
-
return svgMatch[0];
|
|
1269
|
-
}
|
|
1270
|
-
|
|
1271
|
-
/**
|
|
1272
|
-
* Synchronously read a cached icon if it exists on disk. Returns undefined if not cached yet.
|
|
1273
|
-
*/
|
|
1274
|
-
export function readCachedSkillIcon(directoryPath: string): string | undefined {
|
|
1275
|
-
const iconPath = join(directoryPath, "icon.svg");
|
|
1276
|
-
if (existsSync(iconPath)) {
|
|
1277
|
-
try {
|
|
1278
|
-
return readFileSync(iconPath, "utf-8");
|
|
1279
|
-
} catch {
|
|
1280
|
-
return undefined;
|
|
1281
|
-
}
|
|
1282
|
-
}
|
|
1283
|
-
return undefined;
|
|
1284
|
-
}
|
|
1285
|
-
|
|
1286
|
-
export async function ensureSkillIcon(
|
|
1287
|
-
directoryPath: string,
|
|
1288
|
-
name: string,
|
|
1289
|
-
description: string,
|
|
1290
|
-
): Promise<string | undefined> {
|
|
1291
|
-
const iconPath = join(directoryPath, "icon.svg");
|
|
1292
|
-
|
|
1293
|
-
if (existsSync(iconPath)) {
|
|
1294
|
-
try {
|
|
1295
|
-
return readFileSync(iconPath, "utf-8");
|
|
1296
|
-
} catch {
|
|
1297
|
-
log.warn({ iconPath }, "Failed to read existing icon.svg");
|
|
1298
|
-
return undefined;
|
|
1299
|
-
}
|
|
1300
|
-
}
|
|
1301
|
-
|
|
1302
|
-
try {
|
|
1303
|
-
const svg = await generateSkillIcon(name, description);
|
|
1304
|
-
try {
|
|
1305
|
-
writeFileSync(iconPath, svg, "utf-8");
|
|
1306
|
-
log.info({ iconPath }, "Generated skill icon");
|
|
1307
|
-
} catch (writeErr) {
|
|
1308
|
-
log.warn(
|
|
1309
|
-
{ err: writeErr, iconPath },
|
|
1310
|
-
"Failed to cache icon.svg (returning generated icon anyway)",
|
|
1311
|
-
);
|
|
1312
|
-
}
|
|
1313
|
-
return svg;
|
|
1314
|
-
} catch (err) {
|
|
1315
|
-
log.warn({ err, iconPath }, "Failed to generate skill icon");
|
|
1316
|
-
return undefined;
|
|
1317
|
-
}
|
|
1318
|
-
}
|
package/src/config/types.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
MemoryConfig,
|
|
5
|
-
RateLimitConfig,
|
|
6
|
-
} from "./schema.js";
|
|
1
|
+
export type { AssistantConfig, ContextWindowConfig } from "./schema.js";
|
|
2
|
+
export type { MemoryConfig } from "./schemas/memory.js";
|
|
3
|
+
export type { RateLimitConfig } from "./schemas/timeouts.js";
|
|
@@ -839,23 +839,6 @@ export function findContactChannel(params: {
|
|
|
839
839
|
return null;
|
|
840
840
|
}
|
|
841
841
|
|
|
842
|
-
/**
|
|
843
|
-
* Find the guardian contact regardless of channel.
|
|
844
|
-
* Returns the first contact with role='guardian', or null if none exists.
|
|
845
|
-
*/
|
|
846
|
-
export function findGuardianContact(): ContactWithChannels | null {
|
|
847
|
-
const db = getDb();
|
|
848
|
-
const row = db
|
|
849
|
-
.select()
|
|
850
|
-
.from(contacts)
|
|
851
|
-
.where(eq(contacts.role, "guardian"))
|
|
852
|
-
.orderBy(asc(contacts.createdAt))
|
|
853
|
-
.limit(1)
|
|
854
|
-
.get();
|
|
855
|
-
if (!row) return null;
|
|
856
|
-
return withChannels(parseContact(row));
|
|
857
|
-
}
|
|
858
|
-
|
|
859
842
|
/**
|
|
860
843
|
* Find the guardian contact and their specific channel entry for a given channel type.
|
|
861
844
|
* This is the contacts-based equivalent of getGuardianBinding(assistantId, channel).
|
|
@@ -978,19 +961,6 @@ export function updateChannelStatus(
|
|
|
978
961
|
return parseChannel(existing);
|
|
979
962
|
}
|
|
980
963
|
|
|
981
|
-
/**
|
|
982
|
-
* Update the lastSeenAt timestamp on a contact channel by its primary key.
|
|
983
|
-
* Optimized for the hot path — single UPDATE with no prior SELECT.
|
|
984
|
-
*/
|
|
985
|
-
export function updateChannelLastSeenById(channelId: string): void {
|
|
986
|
-
const db = getDb();
|
|
987
|
-
const now = Date.now();
|
|
988
|
-
db.update(contactChannels)
|
|
989
|
-
.set({ lastSeenAt: now, updatedAt: now })
|
|
990
|
-
.where(eq(contactChannels.id, channelId))
|
|
991
|
-
.run();
|
|
992
|
-
}
|
|
993
|
-
|
|
994
964
|
/**
|
|
995
965
|
* Update a guardian contact's principalId and its channel's identity fields.
|
|
996
966
|
* Used for healing guardian binding drift when the JWT principal no longer
|
|
@@ -1054,23 +1024,6 @@ export function updateContactPrincipalAndChannel(
|
|
|
1054
1024
|
return true;
|
|
1055
1025
|
}
|
|
1056
1026
|
|
|
1057
|
-
/**
|
|
1058
|
-
* Atomically increment interactionCount and set lastInteraction on a contact channel.
|
|
1059
|
-
* Optimized for the hot path — single UPDATE with no prior SELECT.
|
|
1060
|
-
*/
|
|
1061
|
-
export function updateChannelInteraction(channelId: string): void {
|
|
1062
|
-
const db = getDb();
|
|
1063
|
-
const now = Date.now();
|
|
1064
|
-
db.update(contactChannels)
|
|
1065
|
-
.set({
|
|
1066
|
-
lastInteraction: now,
|
|
1067
|
-
interactionCount: sql`${contactChannels.interactionCount} + 1`,
|
|
1068
|
-
updatedAt: now,
|
|
1069
|
-
})
|
|
1070
|
-
.where(eq(contactChannels.id, channelId))
|
|
1071
|
-
.run();
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
1027
|
// ── Assistant Contact Metadata ──────────────────────────────────────
|
|
1075
1028
|
|
|
1076
1029
|
function parseAssistantMetadata(
|