@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,245 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Memory v2 — BM25 sparse channel
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
//
|
|
5
|
+
// Replaces the legacy TF-only sparse embedding (`generateSparseEmbedding` in
|
|
6
|
+
// `../embedding-backend.ts`) with a real Okapi BM25 implementation. Common
|
|
7
|
+
// words like "i", "am", "the" no longer dominate sparse matching the way they
|
|
8
|
+
// did when every token was weighted equally.
|
|
9
|
+
//
|
|
10
|
+
// BM25 score for document `d` and query `q`:
|
|
11
|
+
//
|
|
12
|
+
// score(d, q) = Σ_t∈q IDF(t) · TF_sat(d, t)
|
|
13
|
+
// TF_sat(d, t) = tf(d, t) · (k1 + 1)
|
|
14
|
+
// / (tf(d, t) + k1 · (1 - b + b · |d| / avg_dl))
|
|
15
|
+
// IDF(t) = log( (N - df(t) + 0.5) / (df(t) + 0.5) + 1 )
|
|
16
|
+
//
|
|
17
|
+
// `+1` inside the IDF log keeps the result non-negative even when df(t) > N/2,
|
|
18
|
+
// matching the variant Lucene uses for `BM25Similarity`.
|
|
19
|
+
//
|
|
20
|
+
// **Asymmetric encoding**: documents carry the full BM25 weight per token
|
|
21
|
+
// (IDF · TF_sat baked into the stored vector), and queries carry binary
|
|
22
|
+
// occurrence per token. Qdrant's sparse dot product then reduces to the BM25
|
|
23
|
+
// score directly. Putting BM25 on the doc side means the weights need
|
|
24
|
+
// recomputing whenever the corpus DF or avg_dl changes — operators trigger
|
|
25
|
+
// that with `assistant memory v2 reembed` after major content shifts.
|
|
26
|
+
|
|
27
|
+
import { readFile } from "node:fs/promises";
|
|
28
|
+
|
|
29
|
+
import type { SparseEmbedding } from "../embedding-types.js";
|
|
30
|
+
import {
|
|
31
|
+
SPARSE_VOCAB_SIZE,
|
|
32
|
+
tokenHash,
|
|
33
|
+
tokenizeStemmed,
|
|
34
|
+
} from "../sparse-tokenize.js";
|
|
35
|
+
import { listPages } from "./page-store.js";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Aggregate corpus statistics used to weight a BM25 document vector. Held in
|
|
39
|
+
* memory after a startup walk over `memory/concepts/`.
|
|
40
|
+
*/
|
|
41
|
+
export interface CorpusStats {
|
|
42
|
+
/** Total document count over which DF was accumulated. */
|
|
43
|
+
totalDocs: number;
|
|
44
|
+
/** hashedTokenIndex (in `[0, SPARSE_VOCAB_SIZE)`) → distinct-doc count. */
|
|
45
|
+
df: Map<number, number>;
|
|
46
|
+
/** Average document length in tokens, post-tokenize. */
|
|
47
|
+
avgDl: number;
|
|
48
|
+
/** Wall-clock millis at build time — used by diagnostics, not the formula. */
|
|
49
|
+
builtAt: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** BM25 hyperparameters. Standard Lucene/Elasticsearch defaults. */
|
|
53
|
+
export interface Bm25Params {
|
|
54
|
+
/** TF saturation curve. ~1.2 is standard. */
|
|
55
|
+
k1: number;
|
|
56
|
+
/** Length normalization. 0 = none, 1 = full. ~0.75 is standard. */
|
|
57
|
+
b: number;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
let _conceptPageStats: CorpusStats | null = null;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Latest in-memory corpus stats for `memory/concepts/`, or `null` if a build
|
|
64
|
+
* has not yet completed. Callers must handle `null` and fall back to legacy
|
|
65
|
+
* TF-only behavior so the daemon remains usable during the brief startup
|
|
66
|
+
* window before {@link rebuildConceptPageCorpusStats} finishes.
|
|
67
|
+
*/
|
|
68
|
+
export function getConceptPageCorpusStats(): CorpusStats | null {
|
|
69
|
+
return _conceptPageStats;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Walk every concept page on disk, accumulate document frequency per hashed
|
|
74
|
+
* token bucket, and average document length. Atomically swaps the result into
|
|
75
|
+
* the module-level cache when the walk succeeds. On error the previous stats
|
|
76
|
+
* stay live.
|
|
77
|
+
*
|
|
78
|
+
* Reads bodies via `readPage`-equivalent direct file reads to avoid paying for
|
|
79
|
+
* frontmatter parsing on every page (we only need the body for sparse).
|
|
80
|
+
*/
|
|
81
|
+
export async function rebuildConceptPageCorpusStats(
|
|
82
|
+
workspaceDir: string,
|
|
83
|
+
): Promise<void> {
|
|
84
|
+
const slugs = await listPages(workspaceDir);
|
|
85
|
+
if (slugs.length === 0) {
|
|
86
|
+
_conceptPageStats = {
|
|
87
|
+
totalDocs: 0,
|
|
88
|
+
df: new Map(),
|
|
89
|
+
avgDl: 0,
|
|
90
|
+
builtAt: Date.now(),
|
|
91
|
+
};
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const df = new Map<number, number>();
|
|
96
|
+
let totalTokens = 0;
|
|
97
|
+
let docsCounted = 0;
|
|
98
|
+
|
|
99
|
+
for (const slug of slugs) {
|
|
100
|
+
const body = await readPageBodyForStats(workspaceDir, slug);
|
|
101
|
+
if (body === null) continue;
|
|
102
|
+
const tokens = tokenizeStemmed(body);
|
|
103
|
+
if (tokens.length === 0) continue;
|
|
104
|
+
totalTokens += tokens.length;
|
|
105
|
+
docsCounted += 1;
|
|
106
|
+
const seen = new Set<number>();
|
|
107
|
+
for (const token of tokens) {
|
|
108
|
+
const idx = tokenHash(token, SPARSE_VOCAB_SIZE);
|
|
109
|
+
if (seen.has(idx)) continue;
|
|
110
|
+
seen.add(idx);
|
|
111
|
+
df.set(idx, (df.get(idx) ?? 0) + 1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
_conceptPageStats = {
|
|
116
|
+
totalDocs: docsCounted,
|
|
117
|
+
df,
|
|
118
|
+
avgDl: docsCounted > 0 ? totalTokens / docsCounted : 0,
|
|
119
|
+
builtAt: Date.now(),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Read just the body of a page for stats accumulation. Skips the YAML
|
|
125
|
+
* frontmatter without invoking the schema-validating `readPage` parser, since
|
|
126
|
+
* any parse failure surfaced there would abort the whole rebuild — and we
|
|
127
|
+
* only need the prose half for tokenization.
|
|
128
|
+
*/
|
|
129
|
+
async function readPageBodyForStats(
|
|
130
|
+
workspaceDir: string,
|
|
131
|
+
slug: string,
|
|
132
|
+
): Promise<string | null> {
|
|
133
|
+
const path = `${workspaceDir}/memory/concepts/${slug}.md`;
|
|
134
|
+
let raw: string;
|
|
135
|
+
try {
|
|
136
|
+
raw = await readFile(path, "utf-8");
|
|
137
|
+
} catch {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
// Strip a leading `---\n...\n---\n` block if present; otherwise return raw.
|
|
141
|
+
if (raw.startsWith("---")) {
|
|
142
|
+
const closing = raw.indexOf("\n---", 3);
|
|
143
|
+
if (closing !== -1) {
|
|
144
|
+
const after = raw.indexOf("\n", closing + 4);
|
|
145
|
+
if (after !== -1) return raw.slice(after + 1);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return raw;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Compute the BM25 IDF weight for a hashed token bucket. Returns `0` when the
|
|
153
|
+
* token's df equals the corpus size (a token in every document carries no
|
|
154
|
+
* discriminating power).
|
|
155
|
+
*/
|
|
156
|
+
function computeIdf(stats: CorpusStats, hashIdx: number): number {
|
|
157
|
+
const df = stats.df.get(hashIdx) ?? 0;
|
|
158
|
+
const numerator = stats.totalDocs - df + 0.5;
|
|
159
|
+
const denominator = df + 0.5;
|
|
160
|
+
return Math.log(numerator / denominator + 1);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Document-side BM25-weighted sparse vector. Each emitted value is
|
|
165
|
+
* `IDF(t) · TF_sat(d, t)` so the dot product against a binary query vector
|
|
166
|
+
* (see {@link generateBm25QueryEmbedding}) yields the BM25 score.
|
|
167
|
+
*
|
|
168
|
+
* Returns an empty embedding for empty input or when the corpus is empty
|
|
169
|
+
* (every IDF would be zero anyway).
|
|
170
|
+
*/
|
|
171
|
+
export function generateBm25DocEmbedding(
|
|
172
|
+
text: string,
|
|
173
|
+
stats: CorpusStats,
|
|
174
|
+
params: Bm25Params,
|
|
175
|
+
): SparseEmbedding {
|
|
176
|
+
const tokens = tokenizeStemmed(text);
|
|
177
|
+
if (tokens.length === 0 || stats.totalDocs === 0) {
|
|
178
|
+
return { indices: [], values: [] };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Per-document term frequencies, keyed by hashed bucket.
|
|
182
|
+
const tf = new Map<number, number>();
|
|
183
|
+
for (const token of tokens) {
|
|
184
|
+
const idx = tokenHash(token, SPARSE_VOCAB_SIZE);
|
|
185
|
+
tf.set(idx, (tf.get(idx) ?? 0) + 1);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const docLen = tokens.length;
|
|
189
|
+
// avg_dl can be 0 only when totalDocs is 0, which we already short-circuited.
|
|
190
|
+
const lengthFactor = 1 - params.b + (params.b * docLen) / stats.avgDl;
|
|
191
|
+
const indices: number[] = [];
|
|
192
|
+
const values: number[] = [];
|
|
193
|
+
|
|
194
|
+
for (const [idx, freq] of tf) {
|
|
195
|
+
const idf = computeIdf(stats, idx);
|
|
196
|
+
if (idf === 0) continue; // Skip tokens that contribute nothing to scores.
|
|
197
|
+
const saturated =
|
|
198
|
+
(freq * (params.k1 + 1)) / (freq + params.k1 * lengthFactor);
|
|
199
|
+
const weight = idf * saturated;
|
|
200
|
+
if (weight === 0) continue;
|
|
201
|
+
indices.push(idx);
|
|
202
|
+
values.push(weight);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return { indices, values };
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Query-side sparse vector — binary occurrence per distinct query token. The
|
|
210
|
+
* dot product `Σ_t v_q(t) · v_d(t)` against a BM25-weighted document vector
|
|
211
|
+
* is exactly the BM25 score, since `v_q(t) = 1` for tokens in the query and
|
|
212
|
+
* `0` otherwise.
|
|
213
|
+
*
|
|
214
|
+
* Stateless — does not need corpus stats, so callers can use this on every
|
|
215
|
+
* turn without coordinating with {@link rebuildConceptPageCorpusStats}.
|
|
216
|
+
*/
|
|
217
|
+
export function generateBm25QueryEmbedding(text: string): SparseEmbedding {
|
|
218
|
+
const tokens = tokenizeStemmed(text);
|
|
219
|
+
if (tokens.length === 0) {
|
|
220
|
+
return { indices: [], values: [] };
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const seen = new Set<number>();
|
|
224
|
+
const indices: number[] = [];
|
|
225
|
+
const values: number[] = [];
|
|
226
|
+
for (const token of tokens) {
|
|
227
|
+
const idx = tokenHash(token, SPARSE_VOCAB_SIZE);
|
|
228
|
+
if (seen.has(idx)) continue;
|
|
229
|
+
seen.add(idx);
|
|
230
|
+
indices.push(idx);
|
|
231
|
+
values.push(1);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return { indices, values };
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** @internal Test-only: reset module-level singletons. */
|
|
238
|
+
export function _resetCorpusStatsForTests(): void {
|
|
239
|
+
_conceptPageStats = null;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** @internal Test-only: install a fixture stats table without disk I/O. */
|
|
243
|
+
export function _setCorpusStatsForTests(stats: CorpusStats | null): void {
|
|
244
|
+
_conceptPageStats = stats;
|
|
245
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Memory v2 — Static context loader for user-message auto-injection
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
//
|
|
5
|
+
// Reads the four top-level memory files (essentials/threads/recent/buffer)
|
|
6
|
+
// and returns a concatenated, header-wrapped block ready to splice into the
|
|
7
|
+
// current user message via the injector chain.
|
|
8
|
+
//
|
|
9
|
+
// Pairs with the v2 per-turn activation block (`maybeRouteV2Injection` in
|
|
10
|
+
// `conversation-graph-memory.ts`, which threads through `injectTextBlock`)
|
|
11
|
+
// — that block carries activated concept pages selected by the activation
|
|
12
|
+
// pipeline; this static block carries the always-relevant aggregate views
|
|
13
|
+
// written by consolidation and the user. Both land on the user message so
|
|
14
|
+
// the system prompt stays cache-stable.
|
|
15
|
+
//
|
|
16
|
+
// Refresh cadence is owned by the caller: the agent loop only passes the
|
|
17
|
+
// content through when `mode === "full"` (first turn / post-compaction),
|
|
18
|
+
// matching the existing PKB auto-inject pattern.
|
|
19
|
+
|
|
20
|
+
import { isAssistantFeatureFlagEnabled } from "../../config/assistant-feature-flags.js";
|
|
21
|
+
import { loadConfig } from "../../config/loader.js";
|
|
22
|
+
import { readPromptFile } from "../../prompts/system-prompt.js";
|
|
23
|
+
import { getWorkspacePromptPath } from "../../util/platform.js";
|
|
24
|
+
|
|
25
|
+
interface MemoryV2StaticBlock {
|
|
26
|
+
heading: string;
|
|
27
|
+
file: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const MEMORY_V2_STATIC_BLOCKS: readonly MemoryV2StaticBlock[] = [
|
|
31
|
+
{ heading: "## Essentials", file: "memory/essentials.md" },
|
|
32
|
+
{ heading: "## Threads", file: "memory/threads.md" },
|
|
33
|
+
{ heading: "## Recent", file: "memory/recent.md" },
|
|
34
|
+
{ heading: "## Buffer", file: "memory/buffer.md" },
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Build the v2 static memory block, gated on `memory-v2-enabled` +
|
|
39
|
+
* `config.memory.v2.enabled`. Empty/missing files are skipped; returns
|
|
40
|
+
* `null` when the gate is off or every file is empty.
|
|
41
|
+
*/
|
|
42
|
+
export function readMemoryV2StaticContent(): string | null {
|
|
43
|
+
let config;
|
|
44
|
+
try {
|
|
45
|
+
config = loadConfig();
|
|
46
|
+
} catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
if (
|
|
50
|
+
!isAssistantFeatureFlagEnabled("memory-v2-enabled", config) ||
|
|
51
|
+
!config.memory.v2.enabled
|
|
52
|
+
) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const sections: string[] = [];
|
|
57
|
+
for (const { heading, file } of MEMORY_V2_STATIC_BLOCKS) {
|
|
58
|
+
const content = readPromptFile(getWorkspacePromptPath(file));
|
|
59
|
+
if (!content) continue;
|
|
60
|
+
sections.push(`${heading}\n\n${content}`);
|
|
61
|
+
}
|
|
62
|
+
return sections.length > 0 ? sections.join("\n\n") : null;
|
|
63
|
+
}
|
package/src/memory/v2/types.ts
CHANGED
|
@@ -20,9 +20,12 @@ import { z } from "zod";
|
|
|
20
20
|
/**
|
|
21
21
|
* YAML frontmatter at the top of a concept page (`memory/concepts/<slug>.md`).
|
|
22
22
|
*
|
|
23
|
-
* `edges` is
|
|
24
|
-
* the
|
|
25
|
-
*
|
|
23
|
+
* `edges` is the canonical list of *outgoing* directed edges from this page.
|
|
24
|
+
* Each entry is the slug of another concept page; an entry of `B` in A's
|
|
25
|
+
* `edges:` means "activating A pulls in B" — activation flows A → B but not
|
|
26
|
+
* B → A. The full graph is the union of every page's `edges:` list — there
|
|
27
|
+
* is no separate edges-index file. `ref_files` lists paths to attached media
|
|
28
|
+
* (images, audio, etc.).
|
|
26
29
|
*/
|
|
27
30
|
export const ConceptPageFrontmatterSchema = z.object({
|
|
28
31
|
edges: z.array(z.string()).default([]),
|
|
@@ -34,8 +37,10 @@ export type ConceptPageFrontmatter = z.infer<
|
|
|
34
37
|
>;
|
|
35
38
|
|
|
36
39
|
/**
|
|
37
|
-
* A single concept page on disk. The slug is the
|
|
38
|
-
*
|
|
40
|
+
* A single concept page on disk. The slug is the relative path from
|
|
41
|
+
* `memory/concepts/` minus `.md`, using forward slashes — so `alice` and
|
|
42
|
+
* `people/alice` are both valid slugs. The slug is the stable identity used
|
|
43
|
+
* in edges and activation state.
|
|
39
44
|
*/
|
|
40
45
|
export const ConceptPageSchema = z.object({
|
|
41
46
|
slug: z.string(),
|
|
@@ -45,21 +50,6 @@ export const ConceptPageSchema = z.object({
|
|
|
45
50
|
|
|
46
51
|
export type ConceptPage = z.infer<typeof ConceptPageSchema>;
|
|
47
52
|
|
|
48
|
-
// ---------------------------------------------------------------------------
|
|
49
|
-
// Edges index (`memory/edges.json`)
|
|
50
|
-
// ---------------------------------------------------------------------------
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Source of truth for v2 graph topology. Edges are unweighted, undirected,
|
|
54
|
-
* and stored as canonicalized 2-tuples (alphabetical-first slug first).
|
|
55
|
-
*/
|
|
56
|
-
export const EdgesIndexSchema = z.object({
|
|
57
|
-
version: z.literal(1),
|
|
58
|
-
edges: z.array(z.tuple([z.string(), z.string()])),
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
export type EdgesIndex = z.infer<typeof EdgesIndexSchema>;
|
|
62
|
-
|
|
63
53
|
// ---------------------------------------------------------------------------
|
|
64
54
|
// Activation state (per-conversation, persisted in SQLite)
|
|
65
55
|
// ---------------------------------------------------------------------------
|
package/src/memory/validation.ts
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* Unit interval [0, 1] — used for confidence and importance fields on memory items.
|
|
5
3
|
* Coerces out-of-range numbers to the nearest bound rather than rejecting,
|
|
6
4
|
* since LLM-generated values occasionally exceed the range.
|
|
7
5
|
*/
|
|
8
|
-
const unitInterval = z
|
|
9
|
-
.number()
|
|
10
|
-
.transform((v) => Math.min(1, Math.max(0, v)));
|
|
11
|
-
|
|
12
|
-
/** Zod schema for validating confidence/importance values on memory items. */
|
|
13
|
-
export const memoryItemScores = z.object({
|
|
14
|
-
confidence: unitInterval,
|
|
15
|
-
importance: unitInterval,
|
|
16
|
-
});
|
|
17
6
|
|
|
18
7
|
/** Clamp a numeric value to [0, 1]. */
|
|
19
8
|
export function clampUnitInterval(value: number): number {
|
|
@@ -62,12 +62,6 @@ export function createDraft(opts: {
|
|
|
62
62
|
return draft;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
export function getDraft(platform: string, id: string): Draft | null {
|
|
66
|
-
const path = getDraftPath(platform, id);
|
|
67
|
-
if (!pathExists(path)) return null;
|
|
68
|
-
return JSON.parse(readFileSync(path, "utf-8")) as Draft;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
65
|
export function listDrafts(platform: string): Draft[] {
|
|
72
66
|
const dir = getDraftsDir(platform);
|
|
73
67
|
const files = readdirSync(dir).filter((f) => f.endsWith(".json"));
|
|
@@ -41,6 +41,12 @@ export interface SearchResult {
|
|
|
41
41
|
nextCursor?: string;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
export interface HistoryPageResult {
|
|
45
|
+
messages: Message[];
|
|
46
|
+
hasMore: boolean;
|
|
47
|
+
nextCursor?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
44
50
|
export interface SendResult {
|
|
45
51
|
id: string;
|
|
46
52
|
timestamp: number;
|
|
@@ -66,6 +72,8 @@ export interface HistoryOptions {
|
|
|
66
72
|
limit?: number;
|
|
67
73
|
before?: string;
|
|
68
74
|
after?: string;
|
|
75
|
+
cursor?: string;
|
|
76
|
+
inclusive?: boolean;
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
export interface SearchOptions {
|
|
@@ -11,6 +11,7 @@ import type {
|
|
|
11
11
|
ConnectionInfo,
|
|
12
12
|
Conversation,
|
|
13
13
|
HistoryOptions,
|
|
14
|
+
HistoryPageResult,
|
|
14
15
|
ListOptions,
|
|
15
16
|
Message,
|
|
16
17
|
SearchOptions,
|
|
@@ -60,6 +61,12 @@ export interface MessagingProvider {
|
|
|
60
61
|
threadId: string,
|
|
61
62
|
options?: HistoryOptions,
|
|
62
63
|
): Promise<Message[]>;
|
|
64
|
+
getThreadRepliesPage?(
|
|
65
|
+
connection: OAuthConnection | undefined,
|
|
66
|
+
conversationId: string,
|
|
67
|
+
threadId: string,
|
|
68
|
+
options?: HistoryOptions,
|
|
69
|
+
): Promise<HistoryPageResult>;
|
|
63
70
|
markRead?(
|
|
64
71
|
connection: OAuthConnection | undefined,
|
|
65
72
|
conversationId: string,
|
|
@@ -3,12 +3,7 @@ import type {
|
|
|
3
3
|
OAuthConnectionResponse,
|
|
4
4
|
} from "../../../oauth/connection.js";
|
|
5
5
|
import type {
|
|
6
|
-
GmailAttachment,
|
|
7
6
|
GmailDraft,
|
|
8
|
-
GmailFilter,
|
|
9
|
-
GmailFilterAction,
|
|
10
|
-
GmailFilterCriteria,
|
|
11
|
-
GmailFiltersListResponse,
|
|
12
7
|
GmailLabel,
|
|
13
8
|
GmailLabelsListResponse,
|
|
14
9
|
GmailMessage,
|
|
@@ -17,7 +12,6 @@ import type {
|
|
|
17
12
|
GmailModifyRequest,
|
|
18
13
|
GmailProfile,
|
|
19
14
|
GmailThread,
|
|
20
|
-
GmailVacationSettings,
|
|
21
15
|
} from "./types.js";
|
|
22
16
|
|
|
23
17
|
const GMAIL_BATCH_URL = "https://www.googleapis.com/batch/gmail/v1";
|
|
@@ -237,7 +231,7 @@ export async function listMessages(
|
|
|
237
231
|
}
|
|
238
232
|
|
|
239
233
|
/** Get a single message by ID. */
|
|
240
|
-
|
|
234
|
+
async function getMessage(
|
|
241
235
|
connection: OAuthConnection,
|
|
242
236
|
messageId: string,
|
|
243
237
|
format: GmailMessageFormat = "full",
|
|
@@ -591,17 +585,6 @@ export async function batchModifyMessages(
|
|
|
591
585
|
});
|
|
592
586
|
}
|
|
593
587
|
|
|
594
|
-
/** Move a message to trash. */
|
|
595
|
-
export async function trashMessage(
|
|
596
|
-
connection: OAuthConnection,
|
|
597
|
-
messageId: string,
|
|
598
|
-
): Promise<GmailMessage> {
|
|
599
|
-
return request<GmailMessage>(connection, `/messages/${messageId}/trash`, {
|
|
600
|
-
method: "POST",
|
|
601
|
-
retryable: true,
|
|
602
|
-
});
|
|
603
|
-
}
|
|
604
|
-
|
|
605
588
|
/** List all labels. */
|
|
606
589
|
export async function listLabels(
|
|
607
590
|
connection: OAuthConnection,
|
|
@@ -659,17 +642,6 @@ export async function createDraftRaw(
|
|
|
659
642
|
});
|
|
660
643
|
}
|
|
661
644
|
|
|
662
|
-
/** Send an existing draft by ID. */
|
|
663
|
-
export async function sendDraft(
|
|
664
|
-
connection: OAuthConnection,
|
|
665
|
-
draftId: string,
|
|
666
|
-
): Promise<GmailMessage> {
|
|
667
|
-
return request<GmailMessage>(connection, "/drafts/send", {
|
|
668
|
-
method: "POST",
|
|
669
|
-
body: JSON.stringify({ id: draftId }),
|
|
670
|
-
});
|
|
671
|
-
}
|
|
672
|
-
|
|
673
645
|
/** Send an email. */
|
|
674
646
|
export async function sendMessage(
|
|
675
647
|
connection: OAuthConnection,
|
|
@@ -707,95 +679,3 @@ export async function getProfile(
|
|
|
707
679
|
): Promise<GmailProfile> {
|
|
708
680
|
return request<GmailProfile>(connection, "/profile");
|
|
709
681
|
}
|
|
710
|
-
|
|
711
|
-
/** Get attachment data for a message. */
|
|
712
|
-
export async function getAttachment(
|
|
713
|
-
connection: OAuthConnection,
|
|
714
|
-
messageId: string,
|
|
715
|
-
attachmentId: string,
|
|
716
|
-
): Promise<GmailAttachment> {
|
|
717
|
-
return request<GmailAttachment>(
|
|
718
|
-
connection,
|
|
719
|
-
`/messages/${messageId}/attachments/${attachmentId}`,
|
|
720
|
-
);
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
/** Send an email with a pre-built raw MIME payload (for multipart/attachments). */
|
|
724
|
-
export async function sendMessageRaw(
|
|
725
|
-
connection: OAuthConnection,
|
|
726
|
-
raw: string,
|
|
727
|
-
threadId?: string,
|
|
728
|
-
): Promise<GmailMessage> {
|
|
729
|
-
const payload: Record<string, unknown> = { raw };
|
|
730
|
-
if (threadId) payload.threadId = threadId;
|
|
731
|
-
return request<GmailMessage>(connection, "/messages/send", {
|
|
732
|
-
method: "POST",
|
|
733
|
-
body: JSON.stringify(payload),
|
|
734
|
-
});
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
/** Create a user label. */
|
|
738
|
-
export async function createLabel(
|
|
739
|
-
connection: OAuthConnection,
|
|
740
|
-
name: string,
|
|
741
|
-
opts?: {
|
|
742
|
-
messageListVisibility?: "show" | "hide";
|
|
743
|
-
labelListVisibility?: "labelShow" | "labelShowIfUnread" | "labelHide";
|
|
744
|
-
},
|
|
745
|
-
): Promise<GmailLabel> {
|
|
746
|
-
return request<GmailLabel>(connection, "/labels", {
|
|
747
|
-
method: "POST",
|
|
748
|
-
body: JSON.stringify({ name, ...opts }),
|
|
749
|
-
});
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
/** List all Gmail filters. */
|
|
753
|
-
export async function listFilters(
|
|
754
|
-
connection: OAuthConnection,
|
|
755
|
-
): Promise<GmailFilter[]> {
|
|
756
|
-
const resp = await request<GmailFiltersListResponse>(
|
|
757
|
-
connection,
|
|
758
|
-
"/settings/filters",
|
|
759
|
-
);
|
|
760
|
-
return resp.filter ?? [];
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
/** Create a Gmail filter. */
|
|
764
|
-
export async function createFilter(
|
|
765
|
-
connection: OAuthConnection,
|
|
766
|
-
criteria: GmailFilterCriteria,
|
|
767
|
-
action: GmailFilterAction,
|
|
768
|
-
): Promise<GmailFilter> {
|
|
769
|
-
return request<GmailFilter>(connection, "/settings/filters", {
|
|
770
|
-
method: "POST",
|
|
771
|
-
body: JSON.stringify({ criteria, action }),
|
|
772
|
-
});
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
/** Delete a Gmail filter. */
|
|
776
|
-
export async function deleteFilter(
|
|
777
|
-
connection: OAuthConnection,
|
|
778
|
-
filterId: string,
|
|
779
|
-
): Promise<void> {
|
|
780
|
-
await request<void>(connection, `/settings/filters/${filterId}`, {
|
|
781
|
-
method: "DELETE",
|
|
782
|
-
});
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
/** Get vacation auto-reply settings. */
|
|
786
|
-
export async function getVacation(
|
|
787
|
-
connection: OAuthConnection,
|
|
788
|
-
): Promise<GmailVacationSettings> {
|
|
789
|
-
return request<GmailVacationSettings>(connection, "/settings/vacation");
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
/** Update vacation auto-reply settings. */
|
|
793
|
-
export async function updateVacation(
|
|
794
|
-
connection: OAuthConnection,
|
|
795
|
-
settings: GmailVacationSettings,
|
|
796
|
-
): Promise<GmailVacationSettings> {
|
|
797
|
-
return request<GmailVacationSettings>(connection, "/settings/vacation", {
|
|
798
|
-
method: "PUT",
|
|
799
|
-
body: JSON.stringify(settings),
|
|
800
|
-
});
|
|
801
|
-
}
|
|
@@ -95,52 +95,3 @@ export interface GmailModifyRequest {
|
|
|
95
95
|
|
|
96
96
|
/** Message format for GET requests */
|
|
97
97
|
export type GmailMessageFormat = "minimal" | "full" | "raw" | "metadata";
|
|
98
|
-
|
|
99
|
-
/** Attachment data from the Gmail API */
|
|
100
|
-
export interface GmailAttachment {
|
|
101
|
-
size: number;
|
|
102
|
-
data: string; // base64url-encoded
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/** Gmail filter criteria */
|
|
106
|
-
export interface GmailFilterCriteria {
|
|
107
|
-
from?: string;
|
|
108
|
-
to?: string;
|
|
109
|
-
subject?: string;
|
|
110
|
-
query?: string;
|
|
111
|
-
hasAttachment?: boolean;
|
|
112
|
-
excludeChats?: boolean;
|
|
113
|
-
size?: number;
|
|
114
|
-
sizeComparison?: "larger" | "smaller";
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** Gmail filter action */
|
|
118
|
-
export interface GmailFilterAction {
|
|
119
|
-
addLabelIds?: string[];
|
|
120
|
-
removeLabelIds?: string[];
|
|
121
|
-
forward?: string;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/** Gmail filter */
|
|
125
|
-
export interface GmailFilter {
|
|
126
|
-
id: string;
|
|
127
|
-
criteria: GmailFilterCriteria;
|
|
128
|
-
action: GmailFilterAction;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/** Gmail filters list response */
|
|
132
|
-
export interface GmailFiltersListResponse {
|
|
133
|
-
filter?: GmailFilter[];
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/** Gmail vacation auto-reply settings */
|
|
137
|
-
export interface GmailVacationSettings {
|
|
138
|
-
enableAutoReply: boolean;
|
|
139
|
-
responseSubject?: string;
|
|
140
|
-
responseBodyPlainText?: string;
|
|
141
|
-
responseBodyHtml?: string;
|
|
142
|
-
restrictToContacts?: boolean;
|
|
143
|
-
restrictToDomain?: boolean;
|
|
144
|
-
startTime?: string; // epoch ms as string
|
|
145
|
-
endTime?: string; // epoch ms as string
|
|
146
|
-
}
|