@vellumai/assistant 0.7.1 → 0.7.3
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 +48 -50
- package/Dockerfile +1 -0
- package/README.md +1 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +9 -3
- package/bun.lock +26 -26
- package/docs/architecture/memory.md +5 -2
- package/docs/architecture/security.md +20 -0
- package/docs/plugins.md +7 -9
- package/knip.json +1 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +52 -5
- 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/slack-text/src/index.test.ts +18 -35
- package/node_modules/@vellumai/slack-text/src/index.ts +2 -48
- 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 +1020 -40
- package/package.json +6 -3
- 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 +384 -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-executors.test.ts +30 -43
- package/src/__tests__/approval-routes-http.test.ts +23 -6
- 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 +157 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +29 -7
- package/src/__tests__/auto-analysis-end-to-end.test.ts +62 -1
- package/src/__tests__/background-shell-host-bash.test.ts +14 -15
- package/src/__tests__/background-workers-disk-pressure.test.ts +268 -0
- 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 +49 -1
- package/src/__tests__/call-conversation-messages.test.ts +8 -2
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/channel-inbound-disk-pressure.test.ts +537 -0
- package/src/__tests__/channel-readiness-service.test.ts +62 -2
- package/src/__tests__/checker.test.ts +3 -4
- package/src/__tests__/config-loader-backfill.test.ts +461 -147
- 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 +1 -0
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +20 -11
- package/src/__tests__/config-watcher.test.ts +142 -71
- package/src/__tests__/context-search-agent-runner.test.ts +61 -3
- package/src/__tests__/context-search-conversations-source.test.ts +0 -24
- package/src/__tests__/context-search-fanout.test.ts +0 -1
- package/src/__tests__/context-search-memory-source.test.ts +3 -7
- package/src/__tests__/context-search-memory-v2-source.test.ts +0 -2
- package/src/__tests__/context-search-pkb-source.test.ts +0 -1
- package/src/__tests__/context-search-workspace-source.test.ts +0 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +223 -0
- package/src/__tests__/conversation-agent-loop.test.ts +454 -5
- 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-error.test.ts +150 -3
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +36 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-process-callsite.test.ts +43 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +6 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -72
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +65 -0
- package/src/__tests__/conversation-slash-commands.test.ts +0 -4
- package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-store.test.ts +0 -18
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +328 -0
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +404 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +2 -5
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
- 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__/credentials-cli.test.ts +12 -12
- package/src/__tests__/cu-unified-flow.test.ts +351 -23
- package/src/__tests__/daemon-credential-client.test.ts +101 -19
- package/src/__tests__/date-context.test.ts +164 -2
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/disk-pressure-guard.test.ts +262 -0
- package/src/__tests__/disk-pressure-lifecycle.test.ts +168 -0
- package/src/__tests__/disk-pressure-policy.test.ts +241 -0
- package/src/__tests__/disk-pressure-routes.test.ts +379 -0
- package/src/__tests__/disk-pressure-tools.test.ts +277 -0
- package/src/__tests__/disk-usage.test.ts +150 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/events-client-registration.test.ts +52 -0
- package/src/__tests__/events-dev-bypass-actor.test.ts +162 -0
- package/src/__tests__/file-write-tool.test.ts +4 -10
- package/src/__tests__/filing-service.test.ts +3 -4
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -2
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +183 -0
- package/src/__tests__/heartbeat-service.test.ts +968 -2
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/host-app-control-proxy.test.ts +772 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +439 -47
- package/src/__tests__/host-bash-routes.test.ts +459 -0
- package/src/__tests__/host-browser-proxy.test.ts +24 -22
- package/src/__tests__/host-browser-routes.test.ts +39 -13
- package/src/__tests__/host-cu-proxy.test.ts +248 -52
- package/src/__tests__/host-cu-routes-targeted.test.ts +429 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +378 -0
- package/src/__tests__/host-file-proxy.test.ts +301 -45
- package/src/__tests__/host-file-read-tool.test.ts +17 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +420 -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 +22 -4
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +932 -0
- package/src/__tests__/host-transfer-proxy.test.ts +121 -22
- package/src/__tests__/host-transfer-routes-targeted.test.ts +662 -0
- package/src/__tests__/http-user-message-parity.test.ts +108 -1
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/injector-chain.test.ts +18 -6
- package/src/__tests__/injector-disk-pressure.test.ts +224 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -1
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -11
- 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__/managed-profile-guard.test.ts +18 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -1
- package/src/__tests__/mcp-abort-signal.test.ts +130 -0
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-admin-recall.test.ts +3 -11
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/memory-retrieval-pipeline.test.ts +22 -1
- package/src/__tests__/migration-import-commit-http.test.ts +108 -2
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/normalize-onboarding.test.ts +180 -0
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth-connect-routes.test.ts +316 -0
- package/src/__tests__/oauth-provider-seed-logos.test.ts +24 -2
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/onboarding-persona-write.test.ts +308 -0
- package/src/__tests__/openai-provider.test.ts +45 -8
- package/src/__tests__/persist-onboarding-artifacts.test.ts +44 -64
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +5 -9
- package/src/__tests__/platform-callback-registration.test.ts +21 -4
- package/src/__tests__/platform.test.ts +2 -1
- package/src/__tests__/playbook-execution.test.ts +0 -43
- package/src/__tests__/plugin-tool-contribution.test.ts +47 -0
- package/src/__tests__/prechat-onboarding-contract.test.ts +214 -25
- package/src/__tests__/process-message-background-slack.test.ts +2 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/provider-tool-name.test.ts +23 -0
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/relay-server.test.ts +15 -4
- package/src/__tests__/require-fresh-approval.test.ts +0 -1
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-events-sse.test.ts +2 -2
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/scheduler-disk-pressure.test.ts +148 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
- package/src/__tests__/secret-ingress-http.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +3 -0
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -1
- 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 -1
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/suggestion-routes.test.ts +46 -0
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- 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__/vellum-self-knowledge-inline-command.test.ts +1 -4
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -4
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- package/src/__tests__/workspace-migration-065-bump-stale-heartbeat-interval.test.ts +122 -0
- package/src/__tests__/workspace-migration-066-seed-heartbeat-callsite-cost-default.test.ts +285 -0
- package/src/__tests__/workspace-migration-068-release-notes-local-timezone.test.ts +90 -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-safe-storage-limits-release.test.ts +90 -0
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/approvals/guardian-decision-primitive.ts +13 -0
- package/src/approvals/guardian-request-resolvers.ts +16 -17
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +51 -151
- package/src/backup/paths.ts +2 -18
- package/src/backup/restore.ts +107 -231
- package/src/backup/snapshot-lock.ts +2 -27
- package/src/bundler/app-bundler.ts +51 -3
- package/src/bundler/compiler-tools.ts +3 -2
- package/src/calls/call-conversation-messages.ts +46 -10
- package/src/calls/relay-server.ts +4 -44
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +33 -105
- package/src/calls/twilio-routes.ts +11 -12
- package/src/channels/types.ts +8 -7
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +4 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -5
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/bash.ts +35 -108
- package/src/cli/commands/clients.ts +36 -37
- package/src/cli/commands/contacts.ts +137 -25
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +71 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +9 -6
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +303 -7
- package/src/cli/commands/oauth/__tests__/connect.test.ts +437 -1
- package/src/cli/commands/oauth/connect.ts +127 -1
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -4
- package/src/cli/commands/platform/__tests__/connect.test.ts +7 -3
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +7 -3
- package/src/cli/commands/platform/__tests__/status.test.ts +116 -21
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +16 -25
- package/src/cli/commands/status.ts +57 -0
- package/src/cli/lib/daemon-credential-client.ts +110 -28
- package/src/cli/program.ts +6 -2
- package/src/config/assistant-feature-flags.ts +79 -12
- 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 +0 -40
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -3
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +25 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +2 -2
- 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 +0 -2
- package/src/config/env.ts +19 -20
- package/src/config/feature-flag-registry.json +47 -135
- package/src/config/loader.ts +197 -104
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +17 -9
- package/src/config/schemas/call-site-catalog.ts +14 -0
- package/src/config/schemas/calls.ts +0 -9
- package/src/config/schemas/channels.ts +0 -5
- package/src/config/schemas/heartbeat.ts +64 -1
- package/src/config/schemas/ingress.ts +10 -6
- package/src/config/schemas/llm.ts +7 -10
- package/src/config/schemas/memory-lifecycle.ts +90 -24
- package/src/config/schemas/memory-v2.ts +121 -13
- package/src/config/schemas/platform.ts +49 -3
- package/src/config/schemas/services.ts +29 -15
- package/src/config/schemas/skills.ts +0 -6
- package/src/config/seed-inference-profiles.ts +230 -33
- package/src/contacts/contact-store.ts +0 -55
- package/src/contacts/contacts-write.ts +0 -27
- package/src/context/window-manager.ts +1 -2
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +12 -41
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +187 -5
- package/src/daemon/assistant-attachments.ts +4 -4
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +89 -60
- package/src/daemon/conversation-agent-loop-handlers.ts +27 -3
- package/src/daemon/conversation-agent-loop.ts +202 -61
- package/src/daemon/conversation-error.ts +87 -15
- package/src/daemon/conversation-lifecycle.ts +9 -4
- package/src/daemon/conversation-process.ts +24 -11
- package/src/daemon/conversation-runtime-assembly.ts +28 -2
- package/src/daemon/conversation-store.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +305 -4
- package/src/daemon/conversation-tool-setup.ts +66 -62
- package/src/daemon/conversation.ts +38 -24
- package/src/daemon/date-context.ts +71 -22
- package/src/daemon/disk-pressure-background-gate.ts +73 -0
- package/src/daemon/disk-pressure-guard.ts +343 -0
- package/src/daemon/disk-pressure-policy.ts +163 -0
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/handlers/shared.ts +4 -2
- package/src/daemon/handlers/skills.ts +3 -4
- package/src/daemon/host-app-control-proxy.ts +389 -0
- package/src/daemon/host-bash-proxy.ts +117 -82
- package/src/daemon/host-browser-proxy.ts +67 -82
- package/src/daemon/host-cu-proxy.ts +127 -86
- package/src/daemon/host-file-proxy.ts +129 -69
- 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 +338 -129
- package/src/daemon/lifecycle.ts +194 -145
- package/src/daemon/meet-host-supervisor.ts +4 -4
- package/src/daemon/meet-manifest-loader.ts +0 -1
- package/src/daemon/memory-v2-startup.ts +14 -4
- package/src/daemon/message-protocol.ts +6 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +15 -8
- package/src/daemon/message-types/disk-pressure.ts +9 -0
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +4 -0
- package/src/daemon/message-types/host-cu.ts +2 -0
- package/src/daemon/message-types/host-file.ts +4 -0
- package/src/daemon/message-types/host-transfer.ts +3 -0
- package/src/daemon/message-types/messages.ts +3 -0
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/process-message.ts +18 -1
- package/src/daemon/profiler-run-store.ts +5 -5
- package/src/daemon/shutdown-handlers.ts +0 -3
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/documents/document-store.ts +85 -0
- package/src/events/tool-audit-listener.ts +2 -1
- package/src/filing/filing-service.ts +30 -5
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +24 -23
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +252 -0
- package/src/heartbeat/heartbeat-run-store.ts +249 -0
- package/src/heartbeat/heartbeat-service.ts +459 -54
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +11 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/feed-scheduler.ts +18 -0
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +17 -92
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/platform-callback-registration.ts +8 -15
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/clients-list-ipc.test.ts +169 -0
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/assistant-server.ts +70 -3
- package/src/ipc/cli-client.ts +32 -1
- package/src/ipc/gateway-client.ts +37 -3
- package/src/live-voice/live-voice-archive.ts +4 -4
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/live-voice/protocol.ts +5 -7
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- 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/media/image-service.ts +1 -7
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +21 -13
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +52 -22
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +0 -6
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +272 -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/admin.ts +5 -9
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -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 +51 -9
- package/src/memory/context-search/sources/conversations.ts +2 -11
- package/src/memory/context-search/sources/memory-v2.ts +22 -9
- package/src/memory/context-search/sources/memory.ts +0 -1
- package/src/memory/context-search/types.ts +0 -1
- package/src/memory/conversation-crud.ts +5 -13
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/db-init.ts +6 -0
- package/src/memory/embedding-backend.ts +9 -21
- package/src/memory/embedding-runtime-manager.ts +119 -5
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +81 -25
- package/src/memory/graph/conversation-graph-memory.ts +43 -78
- package/src/memory/graph/extraction.ts +1 -3
- package/src/memory/graph/graph-search.test.ts +10 -67
- package/src/memory/graph/graph-search.ts +9 -20
- package/src/memory/graph/retriever.test.ts +6 -0
- package/src/memory/graph/retriever.ts +34 -10
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/indexer.ts +54 -45
- package/src/memory/job-handlers/backfill.ts +2 -11
- package/src/memory/job-handlers/cleanup.ts +43 -0
- package/src/memory/job-handlers/embedding.ts +6 -8
- package/src/memory/job-handlers/summarization.ts +2 -7
- 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 +114 -22
- package/src/memory/jobs-worker.ts +193 -106
- package/src/memory/memory-v2-activation-log-store.ts +33 -15
- package/src/memory/memory-v2-concept-frequency.ts +169 -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/239-trace-events-created-at-index.ts +18 -0
- package/src/memory/migrations/index.ts +6 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/pkb/pkb-search.test.ts +6 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +49 -32
- package/src/memory/rerank-local.ts +374 -0
- package/src/memory/schema/infrastructure.ts +15 -0
- package/src/memory/search/semantic.ts +13 -67
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/trace-event-store.ts +1 -17
- package/src/memory/v2/__tests__/activation.test.ts +387 -344
- package/src/memory/v2/__tests__/consolidation-job.test.ts +40 -8
- package/src/memory/v2/__tests__/injection.test.ts +181 -169
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +61 -2
- package/src/memory/v2/__tests__/qdrant.test.ts +16 -0
- package/src/memory/v2/__tests__/reranker.test.ts +338 -0
- package/src/memory/v2/__tests__/sim.test.ts +154 -188
- package/src/memory/v2/__tests__/skill-store.test.ts +71 -65
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +76 -2
- package/src/memory/v2/activation.ts +213 -239
- package/src/memory/v2/consolidation-job.ts +65 -17
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/injection.ts +123 -103
- package/src/memory/v2/prompts/consolidation.ts +348 -92
- package/src/memory/v2/qdrant.ts +198 -1
- package/src/memory/v2/reranker.ts +177 -0
- package/src/memory/v2/sim.ts +113 -77
- package/src/memory/v2/skill-content.ts +4 -3
- package/src/memory/v2/skill-store.ts +91 -53
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +28 -5
- package/src/memory/v2/types.ts +10 -10
- package/src/messaging/providers/gmail/types.ts +0 -49
- package/src/messaging/providers/slack/adapter.ts +1 -31
- package/src/messaging/providers/slack/types.ts +0 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/copy-composer.ts +13 -0
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/notifications/signal.ts +4 -0
- package/src/oauth/AGENTS.md +3 -1
- package/src/oauth/__tests__/oauth-connect-state.test.ts +137 -0
- package/src/oauth/connect-orchestrator.ts +6 -0
- package/src/oauth/connection-resolver.test.ts +66 -1
- package/src/oauth/connection-resolver.ts +55 -1
- package/src/oauth/credential-token-resolver.ts +1 -3
- package/src/oauth/manual-token-connection.ts +0 -4
- package/src/oauth/oauth-connect-state.ts +77 -0
- package/src/oauth/seed-providers.ts +58 -1
- package/src/outbound-proxy/index.ts +1 -37
- 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/checker.test.ts +0 -1
- package/src/permissions/checker.ts +3 -17
- package/src/permissions/gateway-threshold-reader.ts +2 -0
- package/src/permissions/prompter.ts +34 -1
- package/src/permissions/secret-prompter.ts +6 -2
- package/src/plugins/defaults/injectors.ts +35 -2
- package/src/plugins/defaults/memory-retrieval.ts +5 -6
- package/src/plugins/types.ts +7 -0
- package/src/proactive-artifact/aux-message-injector.ts +74 -0
- package/src/proactive-artifact/decision.test.ts +226 -0
- package/src/proactive-artifact/decision.ts +165 -0
- package/src/proactive-artifact/index.ts +7 -0
- package/src/proactive-artifact/job.test.ts +867 -0
- package/src/proactive-artifact/job.ts +352 -0
- package/src/proactive-artifact/message-copy.ts +41 -0
- package/src/proactive-artifact/trigger-state.test.ts +277 -0
- package/src/proactive-artifact/trigger-state.ts +119 -0
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/normalize-onboarding.ts +80 -0
- package/src/prompts/persona-resolver.ts +101 -9
- package/src/prompts/system-prompt.ts +23 -24
- package/src/prompts/templates/BOOTSTRAP.md +13 -5
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/providers/__tests__/retry-callsite.test.ts +222 -1
- package/src/providers/model-intents.ts +7 -0
- package/src/providers/openrouter/client.ts +8 -0
- package/src/providers/retry.ts +50 -0
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/providers/types.ts +1 -0
- package/src/runtime/__tests__/agent-wake.test.ts +456 -3
- package/src/runtime/agent-wake.ts +238 -100
- package/src/runtime/assistant-event-hub.ts +151 -99
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/__tests__/route-policy.test.ts +64 -0
- package/src/runtime/auth/middleware.ts +0 -96
- package/src/runtime/auth/route-policy.ts +32 -0
- package/src/runtime/auth/same-actor.ts +216 -0
- package/src/runtime/btw-sidechain.ts +2 -3
- 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-retry-sweep.ts +65 -1
- package/src/runtime/guardian-reply-router.ts +10 -0
- package/src/runtime/http-server.ts +3 -329
- package/src/runtime/http-types.ts +0 -5
- package/src/runtime/local-actor-identity.ts +52 -11
- 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-streaming-importer.test.ts +153 -1
- 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-validator-v1-schema.test.ts +51 -1
- package/src/runtime/migrations/migration-transport.ts +7 -7
- package/src/runtime/migrations/vbundle-builder.ts +327 -60
- package/src/runtime/migrations/vbundle-import-analyzer.ts +4 -4
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +245 -68
- package/src/runtime/migrations/vbundle-streaming-importer.ts +326 -35
- package/src/runtime/migrations/vbundle-streaming-validator.ts +157 -4
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +114 -0
- package/src/runtime/pending-interactions.ts +43 -9
- package/src/runtime/routes/__tests__/backup-routes.test.ts +22 -150
- package/src/runtime/routes/__tests__/client-routes.test.ts +155 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -5
- 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/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/client-routes.ts +21 -2
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/contact-routes.ts +0 -25
- package/src/runtime/routes/conversation-query-routes.ts +36 -1
- package/src/runtime/routes/conversation-routes.ts +65 -39
- package/src/runtime/routes/debug-bash-routes.ts +163 -0
- package/src/runtime/routes/disk-pressure-routes.ts +121 -0
- package/src/runtime/routes/document-pdf-renderer.ts +169 -0
- package/src/runtime/routes/documents-routes.ts +32 -75
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +38 -0
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- 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 +56 -6
- package/src/runtime/routes/host-browser-routes.ts +108 -13
- package/src/runtime/routes/host-cu-routes.ts +66 -9
- package/src/runtime/routes/host-file-routes.ts +54 -5
- package/src/runtime/routes/host-transfer-routes.ts +122 -19
- 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 +21 -180
- package/src/runtime/routes/inbound-message-handler.ts +78 -21
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +0 -7
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +3 -0
- 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 +14 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.test.ts +41 -15
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +474 -1
- package/src/runtime/routes/migration-routes.ts +96 -0
- package/src/runtime/routes/oauth-connect-routes.ts +153 -0
- package/src/runtime/routes/schedule-routes.ts +7 -0
- package/src/runtime/verification-outbound-actions.ts +4 -4
- 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/run-script.ts +37 -5
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -2
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +83 -39
- package/src/security/encrypted-store.ts +2 -0
- package/src/security/oauth-callback-registry.ts +8 -0
- package/src/security/secure-keys.ts +55 -0
- package/src/sequence/analytics.ts +5 -5
- package/src/sequence/engine.ts +1 -1
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/remote-skill-policy.ts +10 -16
- 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/index.ts +1 -7
- package/src/subagent/manager.ts +1 -15
- package/src/tasks/task-runner.ts +0 -1
- package/src/tasks/task-store.ts +0 -3
- package/src/telemetry/types.ts +2 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +21 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/background-tool-registry.ts +17 -3
- package/src/tools/browser/__tests__/browser-status.test.ts +21 -18
- package/src/tools/browser/browser-execution.ts +2 -2
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +55 -4
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +23 -24
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +2 -0
- package/src/tools/host-filesystem/edit.test.ts +151 -0
- package/src/tools/host-filesystem/edit.ts +68 -0
- package/src/tools/host-filesystem/read.test.ts +129 -0
- package/src/tools/host-filesystem/read.ts +68 -0
- package/src/tools/host-filesystem/transfer.test.ts +127 -2
- package/src/tools/host-filesystem/transfer.ts +78 -3
- package/src/tools/host-filesystem/write.test.ts +134 -0
- package/src/tools/host-filesystem/write.ts +68 -0
- package/src/tools/host-terminal/host-shell.ts +66 -1
- package/src/tools/mcp/mcp-tool-factory.ts +2 -1
- package/src/tools/memory/register.test.ts +12 -9
- package/src/tools/memory/register.ts +1 -2
- package/src/tools/provider-tool-name.ts +28 -0
- package/src/tools/registry.ts +30 -9
- 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/terminal/shell.ts +9 -1
- package/src/tools/tool-approval-handler.ts +32 -11
- package/src/tools/types.ts +28 -2
- package/src/tts/provider-catalog.ts +3 -5
- package/src/usage/pricing.ts +1 -1
- package/src/util/disk-usage.ts +138 -0
- package/src/util/platform.ts +21 -11
- package/src/util/process-liveness.ts +26 -0
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/heartbeat-service.ts +19 -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 +2 -1
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +3 -8
- package/src/workspace/migrations/065-bump-stale-heartbeat-interval.ts +60 -0
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +146 -0
- package/src/workspace/migrations/067-release-notes-safe-storage-limits.ts +72 -0
- package/src/workspace/migrations/068-release-notes-local-timezone.ts +65 -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/__tests__/conversation-tool-setup-memory-scope.test.ts +0 -167
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -443
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -226
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -427
- 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 -782
- 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 -472
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/memory/v2/__tests__/skill-qdrant.test.ts +0 -657
- package/src/memory/v2/skill-qdrant.ts +0 -395
- package/src/outbound-proxy/config.ts +0 -20
- package/src/outbound-proxy/health.ts +0 -18
- package/src/outbound-proxy/types.ts +0 -150
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/signals/bash.ts +0 -198
- package/src/signals/mcp-reload.ts +0 -18
|
@@ -40,11 +40,23 @@
|
|
|
40
40
|
* integration is wired up by `MeetSessionManager` (see PR 7).
|
|
41
41
|
*/
|
|
42
42
|
|
|
43
|
-
import type {
|
|
43
|
+
import type {
|
|
44
|
+
AgentEvent,
|
|
45
|
+
AgentLoop,
|
|
46
|
+
CheckpointDecision,
|
|
47
|
+
CheckpointInfo,
|
|
48
|
+
} from "../agent/loop.js";
|
|
49
|
+
import type { InterfaceId } from "../channels/types.js";
|
|
44
50
|
import { resolveEffectiveContextWindow } from "../config/llm-context-resolution.js";
|
|
45
51
|
import { getConfig } from "../config/loader.js";
|
|
52
|
+
import { getDiskPressureStatus } from "../daemon/disk-pressure-guard.js";
|
|
53
|
+
import {
|
|
54
|
+
classifyDiskPressureTurnPolicy,
|
|
55
|
+
type DiskPressureTurnPolicyDecision,
|
|
56
|
+
} from "../daemon/disk-pressure-policy.js";
|
|
46
57
|
import type { TrustContext } from "../daemon/trust-context.js";
|
|
47
58
|
import { getConversationOverrideProfile } from "../memory/conversation-crud.js";
|
|
59
|
+
import type { TurnContext } from "../plugins/types.js";
|
|
48
60
|
import type { Message } from "../providers/types.js";
|
|
49
61
|
import { getLogger } from "../util/logger.js";
|
|
50
62
|
|
|
@@ -164,6 +176,13 @@ export interface WakeOptions {
|
|
|
164
176
|
* assistant-self-maintenance jobs.
|
|
165
177
|
*/
|
|
166
178
|
trustContext?: TrustContext;
|
|
179
|
+
/**
|
|
180
|
+
* Explicit local-owner metadata for rare direct wakes that are allowed to run
|
|
181
|
+
* in cleanup mode. Omit for background jobs; they are paused under disk
|
|
182
|
+
* pressure even when they otherwise carry internal guardian trust.
|
|
183
|
+
*/
|
|
184
|
+
sourceChannel?: TrustContext["sourceChannel"];
|
|
185
|
+
sourceInterface?: InterfaceId | "vellum";
|
|
167
186
|
}
|
|
168
187
|
|
|
169
188
|
/**
|
|
@@ -176,7 +195,8 @@ export type WakeSkipReason =
|
|
|
176
195
|
| "not_found"
|
|
177
196
|
| "archived"
|
|
178
197
|
| "timeout"
|
|
179
|
-
| "no_resolver"
|
|
198
|
+
| "no_resolver"
|
|
199
|
+
| "disk_pressure";
|
|
180
200
|
|
|
181
201
|
export interface WakeResult {
|
|
182
202
|
invoked: boolean;
|
|
@@ -294,6 +314,48 @@ async function waitUntilIdle(
|
|
|
294
314
|
return !target.isProcessing();
|
|
295
315
|
}
|
|
296
316
|
|
|
317
|
+
function classifyWakeDiskPressurePolicy(opts: WakeOptions): {
|
|
318
|
+
decision: DiskPressureTurnPolicyDecision;
|
|
319
|
+
status: ReturnType<typeof getDiskPressureStatus>;
|
|
320
|
+
} {
|
|
321
|
+
const status = getDiskPressureStatus();
|
|
322
|
+
const decision = classifyDiskPressureTurnPolicy(status, {
|
|
323
|
+
conversationSource: opts.source,
|
|
324
|
+
callSite: "mainAgent",
|
|
325
|
+
isDirectWake: true,
|
|
326
|
+
sourceChannel: opts.sourceChannel ?? opts.trustContext?.sourceChannel,
|
|
327
|
+
sourceInterface: opts.sourceInterface,
|
|
328
|
+
trustContext: opts.trustContext
|
|
329
|
+
? {
|
|
330
|
+
sourceChannel: opts.trustContext.sourceChannel,
|
|
331
|
+
trustClass: opts.trustContext.trustClass,
|
|
332
|
+
}
|
|
333
|
+
: null,
|
|
334
|
+
});
|
|
335
|
+
return { decision, status };
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function buildWakeTurnContext(
|
|
339
|
+
opts: WakeOptions,
|
|
340
|
+
decision: DiskPressureTurnPolicyDecision,
|
|
341
|
+
): TurnContext | undefined {
|
|
342
|
+
if (decision.action !== "allow-cleanup-mode") return undefined;
|
|
343
|
+
return {
|
|
344
|
+
requestId: `wake:${opts.source}`,
|
|
345
|
+
conversationId: opts.conversationId,
|
|
346
|
+
turnIndex: 0,
|
|
347
|
+
trust:
|
|
348
|
+
opts.trustContext ??
|
|
349
|
+
({
|
|
350
|
+
sourceChannel: opts.sourceChannel ?? "vellum",
|
|
351
|
+
trustClass: "guardian",
|
|
352
|
+
} satisfies TrustContext),
|
|
353
|
+
injectionInputs: {
|
|
354
|
+
diskPressureContext: { cleanupModeActive: true },
|
|
355
|
+
},
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
|
|
297
359
|
/**
|
|
298
360
|
* Inspect the post-run history slice to decide whether the wake produced
|
|
299
361
|
* output worth persisting/emitting, and collect any tool-use names from
|
|
@@ -382,6 +444,30 @@ export async function wakeAgentForOpportunity(
|
|
|
382
444
|
}
|
|
383
445
|
const target = resolved;
|
|
384
446
|
|
|
447
|
+
const { decision: diskPressureDecision, status: diskPressureStatus } =
|
|
448
|
+
classifyWakeDiskPressurePolicy(opts);
|
|
449
|
+
if (diskPressureDecision.action === "block") {
|
|
450
|
+
log.warn(
|
|
451
|
+
{
|
|
452
|
+
conversationId,
|
|
453
|
+
source,
|
|
454
|
+
reason: "disk_pressure",
|
|
455
|
+
diskPressureReason: diskPressureDecision.reason,
|
|
456
|
+
thresholdPercent: diskPressureStatus.thresholdPercent,
|
|
457
|
+
usagePercent: diskPressureStatus.usagePercent,
|
|
458
|
+
blockedCapability: "background-work",
|
|
459
|
+
lockId: diskPressureStatus.lockId,
|
|
460
|
+
path: diskPressureStatus.path,
|
|
461
|
+
},
|
|
462
|
+
"agent-wake: blocked by disk pressure cleanup mode",
|
|
463
|
+
);
|
|
464
|
+
return {
|
|
465
|
+
invoked: false,
|
|
466
|
+
producedToolCalls: false,
|
|
467
|
+
reason: "disk_pressure" as const,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
|
|
385
471
|
const idle = await waitUntilIdle(target, nowFn);
|
|
386
472
|
if (!idle) {
|
|
387
473
|
log.warn(
|
|
@@ -399,6 +485,13 @@ export async function wakeAgentForOpportunity(
|
|
|
399
485
|
}
|
|
400
486
|
|
|
401
487
|
const baseline = target.getMessages();
|
|
488
|
+
// Snapshot the baseline length BEFORE the run starts. Incremental
|
|
489
|
+
// persistence calls `target.pushMessage` mid-run, which grows the
|
|
490
|
+
// live history array `baseline` aliases. Reading `baseline.length`
|
|
491
|
+
// post-run would therefore include the tail we just pushed and the
|
|
492
|
+
// tail-slice math would skip every message.
|
|
493
|
+
const baselineLength = baseline.length;
|
|
494
|
+
const wakeTurnContext = buildWakeTurnContext(opts, diskPressureDecision);
|
|
402
495
|
const hintContent = `[opportunity:${source}] ${hint}`;
|
|
403
496
|
// Sandwich the hint as an assistant message between two hardcoded
|
|
404
497
|
// user messages. The assistant role prevents prompt injection — LLMs
|
|
@@ -423,15 +516,114 @@ export async function wakeAgentForOpportunity(
|
|
|
423
516
|
];
|
|
424
517
|
const runInput: Message[] = [...baseline, ...wakeMessages];
|
|
425
518
|
|
|
426
|
-
//
|
|
427
|
-
//
|
|
428
|
-
//
|
|
429
|
-
//
|
|
430
|
-
//
|
|
431
|
-
// `
|
|
519
|
+
// Event handling runs in two modes. While `mode === "buffering"`,
|
|
520
|
+
// events accumulate in `buffered` so that a wake which ultimately
|
|
521
|
+
// produces nothing leaves no trace. As soon as we have evidence the
|
|
522
|
+
// wake is producing output (first `onCheckpoint` after a tool turn,
|
|
523
|
+
// or — for tool-free wakes — post-run inspection finds visible text),
|
|
524
|
+
// we transition to `"live"`: flush the buffer, inject the ui_surface
|
|
525
|
+
// card, and from that point forward emit each event directly so a
|
|
526
|
+
// long-running wake (e.g. memory consolidation, often 5-30 minutes
|
|
527
|
+
// and many turns) is observable in real time instead of materializing
|
|
528
|
+
// only after `agentLoop.run()` returns.
|
|
529
|
+
let mode: "buffering" | "live" = "buffering";
|
|
432
530
|
const buffered: AgentEvent[] = [];
|
|
531
|
+
const safeEmit = (event: AgentEvent): void => {
|
|
532
|
+
try {
|
|
533
|
+
target.emitAgentEvent(event);
|
|
534
|
+
} catch (err) {
|
|
535
|
+
log.warn(
|
|
536
|
+
{ conversationId, source, err },
|
|
537
|
+
"agent-wake: client emitter threw; continuing",
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
};
|
|
433
541
|
const onEvent = (event: AgentEvent): void => {
|
|
434
|
-
|
|
542
|
+
if (mode === "buffering") {
|
|
543
|
+
buffered.push(event);
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
safeEmit(event);
|
|
547
|
+
};
|
|
548
|
+
|
|
549
|
+
const wakeSurfaceId = `wake-${conversationId}-${nowFn()}`;
|
|
550
|
+
let surfaceInjected = false;
|
|
551
|
+
let persistedTailIndex = 0;
|
|
552
|
+
|
|
553
|
+
// Transition from buffered to live emission. Idempotent — only the
|
|
554
|
+
// first call has an effect. Mutates the first assistant message in
|
|
555
|
+
// the tail to prepend the ui_surface block, emits the live
|
|
556
|
+
// ui_surface event, then drains the buffered events through the
|
|
557
|
+
// target's translator. The translator is what stamps `conversationId`
|
|
558
|
+
// and renames `text_delta` → `assistant_text_delta`; bypassing it
|
|
559
|
+
// would ship malformed wire frames.
|
|
560
|
+
const goLive = (currentHistory: Message[]): void => {
|
|
561
|
+
if (mode === "live") return;
|
|
562
|
+
if (!surfaceInjected) {
|
|
563
|
+
const tailStart = baselineLength + WAKE_HINT_MESSAGE_COUNT;
|
|
564
|
+
const tail = currentHistory.slice(tailStart);
|
|
565
|
+
const firstAssistant = tail.find((m) => m.role === "assistant");
|
|
566
|
+
if (firstAssistant && Array.isArray(firstAssistant.content)) {
|
|
567
|
+
firstAssistant.content.unshift({
|
|
568
|
+
type: "ui_surface",
|
|
569
|
+
surfaceId: wakeSurfaceId,
|
|
570
|
+
surfaceType: "card",
|
|
571
|
+
title: "Conversation Woke",
|
|
572
|
+
data: {
|
|
573
|
+
title: "Conversation Woke",
|
|
574
|
+
body: hint,
|
|
575
|
+
metadata: [{ label: "Source", value: source }],
|
|
576
|
+
},
|
|
577
|
+
display: "inline",
|
|
578
|
+
} as never);
|
|
579
|
+
}
|
|
580
|
+
surfaceInjected = true;
|
|
581
|
+
}
|
|
582
|
+
if (target.onWakeProducedOutput) {
|
|
583
|
+
try {
|
|
584
|
+
target.onWakeProducedOutput(source, hint, wakeSurfaceId);
|
|
585
|
+
} catch (err) {
|
|
586
|
+
log.warn(
|
|
587
|
+
{ conversationId, source, err },
|
|
588
|
+
"agent-wake: onWakeProducedOutput threw; continuing",
|
|
589
|
+
);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
for (const event of buffered) {
|
|
593
|
+
safeEmit(event);
|
|
594
|
+
}
|
|
595
|
+
buffered.length = 0;
|
|
596
|
+
mode = "live";
|
|
597
|
+
};
|
|
598
|
+
|
|
599
|
+
// Push + persist any tail messages produced since the last call.
|
|
600
|
+
// Pushes precede persists across the whole batch (matching the
|
|
601
|
+
// canonical post-run ordering) so a queued user message draining
|
|
602
|
+
// mid-flush still sees a consistent in-memory history before any DB
|
|
603
|
+
// row lands. The persist guard mirrors the original post-run loop —
|
|
604
|
+
// a single message persistence failure logs and continues so we
|
|
605
|
+
// don't strand the rest of the tail.
|
|
606
|
+
const flushPendingTail = async (
|
|
607
|
+
currentHistory: Message[],
|
|
608
|
+
): Promise<void> => {
|
|
609
|
+
const start =
|
|
610
|
+
baselineLength + WAKE_HINT_MESSAGE_COUNT + persistedTailIndex;
|
|
611
|
+
if (start >= currentHistory.length) return;
|
|
612
|
+
const newMessages = currentHistory.slice(start);
|
|
613
|
+
for (const msg of newMessages) {
|
|
614
|
+
target.pushMessage(msg);
|
|
615
|
+
}
|
|
616
|
+
for (const msg of newMessages) {
|
|
617
|
+
try {
|
|
618
|
+
await target.persistTailMessage(msg);
|
|
619
|
+
} catch (err) {
|
|
620
|
+
log.warn(
|
|
621
|
+
{ conversationId, source, err, role: msg.role },
|
|
622
|
+
"agent-wake: failed to persist wake-tail message",
|
|
623
|
+
);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
persistedTailIndex += newMessages.length;
|
|
435
627
|
};
|
|
436
628
|
|
|
437
629
|
// Honor the conversation's pinned inference-profile override (if any).
|
|
@@ -456,6 +648,20 @@ export async function wakeAgentForOpportunity(
|
|
|
456
648
|
// interleave writes to `conversation.messages`).
|
|
457
649
|
target.markProcessing(true);
|
|
458
650
|
|
|
651
|
+
// Fires after each tool-execution turn finalizes (assistant message
|
|
652
|
+
// + matching tool_result user message both in history). A single
|
|
653
|
+
// tool turn is unambiguous evidence of output — promote to live
|
|
654
|
+
// mode and persist what's been produced so far so a client opening
|
|
655
|
+
// the conversation mid-run can fetchHistory and see real content
|
|
656
|
+
// instead of the empty-state welcome view.
|
|
657
|
+
const onCheckpoint = async (
|
|
658
|
+
checkpoint: CheckpointInfo,
|
|
659
|
+
): Promise<CheckpointDecision> => {
|
|
660
|
+
goLive(checkpoint.history);
|
|
661
|
+
await flushPendingTail(checkpoint.history);
|
|
662
|
+
return "continue";
|
|
663
|
+
};
|
|
664
|
+
|
|
459
665
|
let runError: Error | null = null;
|
|
460
666
|
let producedToolCalls = false;
|
|
461
667
|
let toolUseNames: string[] = [];
|
|
@@ -469,14 +675,14 @@ export async function wakeAgentForOpportunity(
|
|
|
469
675
|
onEvent,
|
|
470
676
|
undefined, // no external abort signal
|
|
471
677
|
`wake:${source}`,
|
|
472
|
-
|
|
678
|
+
onCheckpoint,
|
|
473
679
|
// Route through `mainAgent` — same as a normal user turn on this
|
|
474
680
|
// conversation. Without an explicit callSite, the resolver in
|
|
475
681
|
// `RetryProvider` and the routing in `CallSiteRoutingProvider`
|
|
476
682
|
// short-circuit and silently drop both `llm.callSites.mainAgent`
|
|
477
683
|
// config and the pinned `overrideProfile` below.
|
|
478
684
|
"mainAgent",
|
|
479
|
-
|
|
685
|
+
wakeTurnContext,
|
|
480
686
|
overrideProfile,
|
|
481
687
|
effectiveContextWindow.maxInputTokens,
|
|
482
688
|
);
|
|
@@ -489,110 +695,42 @@ export async function wakeAgentForOpportunity(
|
|
|
489
695
|
return { invoked: true, producedToolCalls: false };
|
|
490
696
|
}
|
|
491
697
|
|
|
492
|
-
// Run completed cleanly.
|
|
493
|
-
//
|
|
494
|
-
//
|
|
495
|
-
//
|
|
496
|
-
//
|
|
497
|
-
//
|
|
498
|
-
//
|
|
499
|
-
//
|
|
500
|
-
//
|
|
501
|
-
// DB row that lands out of chronological order (queued user msg
|
|
502
|
-
// before the wake's just-produced assistant outputs).
|
|
698
|
+
// Run completed cleanly. The canonical user-turn pattern
|
|
699
|
+
// (conversation-agent-loop.ts:1860, 2106-2126) updates
|
|
700
|
+
// `ctx.messages` first, then resets `ctx.processing = false`, then
|
|
701
|
+
// calls `ctx.drainQueue(...)`. We mirror that order so a message
|
|
702
|
+
// queued during the wake dequeues against an already-updated
|
|
703
|
+
// history — otherwise `drainSingleMessage` reads `ctx.messages`
|
|
704
|
+
// mid-tail and writes a DB row that lands out of chronological
|
|
705
|
+
// order (queued user msg before the wake's just-produced assistant
|
|
706
|
+
// outputs).
|
|
503
707
|
const {
|
|
504
708
|
tailMessages,
|
|
505
709
|
hasVisibleText,
|
|
506
710
|
toolUseNames: names,
|
|
507
|
-
} = inspectWakeOutput(
|
|
711
|
+
} = inspectWakeOutput(baselineLength, updatedHistory);
|
|
508
712
|
toolUseNames = names;
|
|
509
713
|
producedToolCalls = names.length > 0;
|
|
510
714
|
const producedOutput = producedToolCalls || hasVisibleText;
|
|
511
715
|
|
|
512
716
|
if (!producedOutput || tailMessages.length === 0) {
|
|
513
717
|
// Silent no-op: drop buffered events, push nothing, persist
|
|
514
|
-
// nothing, emit nothing.
|
|
515
|
-
//
|
|
718
|
+
// nothing, emit nothing. (No checkpoint fired during the run
|
|
719
|
+
// since checkpoints only fire after tool turns and there were
|
|
720
|
+
// none.) The finally still runs drainQueue so a racy queued
|
|
721
|
+
// message isn't stranded.
|
|
516
722
|
return { invoked: true, producedToolCalls: false };
|
|
517
723
|
}
|
|
518
724
|
|
|
519
725
|
tailMessageCount = tailMessages.length;
|
|
520
726
|
|
|
521
|
-
//
|
|
522
|
-
//
|
|
523
|
-
//
|
|
524
|
-
//
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
firstAssistant.content.unshift({
|
|
529
|
-
type: "ui_surface",
|
|
530
|
-
surfaceId: wakeSurfaceId,
|
|
531
|
-
surfaceType: "card",
|
|
532
|
-
title: "Conversation Woke",
|
|
533
|
-
data: {
|
|
534
|
-
title: "Conversation Woke",
|
|
535
|
-
body: hint,
|
|
536
|
-
metadata: [{ label: "Source", value: source }],
|
|
537
|
-
},
|
|
538
|
-
display: "inline",
|
|
539
|
-
} as never);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// Emit a live SSE event so connected clients see the card
|
|
543
|
-
// immediately. Uses the same surfaceId as the persisted block
|
|
544
|
-
// so the client doesn't render duplicates on reconciliation.
|
|
545
|
-
if (target.onWakeProducedOutput) {
|
|
546
|
-
try {
|
|
547
|
-
target.onWakeProducedOutput(source, hint, wakeSurfaceId);
|
|
548
|
-
} catch (err) {
|
|
549
|
-
log.warn(
|
|
550
|
-
{ conversationId, source, err },
|
|
551
|
-
"agent-wake: onWakeProducedOutput threw; continuing",
|
|
552
|
-
);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
// Output produced: flush buffered client events through the
|
|
557
|
-
// target's translator. The internal hint is NOT emitted.
|
|
558
|
-
for (const event of buffered) {
|
|
559
|
-
try {
|
|
560
|
-
target.emitAgentEvent(event);
|
|
561
|
-
} catch (err) {
|
|
562
|
-
log.warn(
|
|
563
|
-
{ conversationId, source, err },
|
|
564
|
-
"agent-wake: client emitter threw; continuing",
|
|
565
|
-
);
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
// Append every tail message to live in-memory history. Without
|
|
570
|
-
// this, the next turn would rebuild from DB and lose the live
|
|
571
|
-
// references. Done BEFORE persist so a synchronous reader of
|
|
572
|
-
// `getMessages()` sees the full conversation immediately.
|
|
573
|
-
for (const msg of tailMessages) {
|
|
574
|
-
target.pushMessage(msg);
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
// Persist every tail message (assistant outputs + tool_result
|
|
578
|
-
// user messages from the loop's own tool execution). If we only
|
|
579
|
-
// persisted the first assistant message, a rehydration from DB
|
|
580
|
-
// would have a `tool_use` with no matching `tool_result`, which
|
|
581
|
-
// the provider would reject on the next turn. Persistence is
|
|
582
|
-
// delegated to the target so the daemon adapter can build
|
|
583
|
-
// channel/interface metadata (`provenanceFromTrustContext` + turn
|
|
584
|
-
// channel/interface contexts) and sync to the disk view, matching
|
|
585
|
-
// the canonical user-turn path.
|
|
586
|
-
for (const msg of tailMessages) {
|
|
587
|
-
try {
|
|
588
|
-
await target.persistTailMessage(msg);
|
|
589
|
-
} catch (err) {
|
|
590
|
-
log.warn(
|
|
591
|
-
{ conversationId, source, err, role: msg.role },
|
|
592
|
-
"agent-wake: failed to persist wake-tail message",
|
|
593
|
-
);
|
|
594
|
-
}
|
|
595
|
-
}
|
|
727
|
+
// Tool-free wakes (assistant text only, no tool calls) don't fire
|
|
728
|
+
// any checkpoint, so we still need a one-shot transition here.
|
|
729
|
+
// For checkpoint-driven wakes, goLive() / flushPendingTail() are
|
|
730
|
+
// both idempotent — the post-run call picks up only the final
|
|
731
|
+
// assistant message that came after the last checkpoint.
|
|
732
|
+
goLive(updatedHistory);
|
|
733
|
+
await flushPendingTail(updatedHistory);
|
|
596
734
|
|
|
597
735
|
// Drain queued messages AFTER tail is pushed + persisted so the
|
|
598
736
|
// next dequeued user message sees the complete, up-to-date
|