@vellumai/assistant 0.8.4 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +33 -1
- package/ARCHITECTURE.md +3 -3
- package/bunfig.toml +6 -1
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/docs/credential-execution-service.md +6 -6
- package/docs/plugins.md +4 -3
- package/knip.json +2 -1
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +12 -13
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +4 -1
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +16 -14
- package/openapi.yaml +2748 -216
- package/package.json +1 -1
- package/src/__tests__/actor-token-service.test.ts +3 -2
- package/src/__tests__/agent-loop-exit-reason.test.ts +102 -9
- package/src/__tests__/agent-loop-override-profile.test.ts +2 -1
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
- package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
- package/src/__tests__/always-loaded-tools-guard.test.ts +2 -2
- package/src/__tests__/annotate-risk-options.test.ts +1 -0
- package/src/__tests__/anthropic-provider.test.ts +34 -37
- package/src/__tests__/approval-cascade.test.ts +1 -0
- package/src/__tests__/approval-routes-http.test.ts +9 -13
- package/src/__tests__/assert-not-live-db.ts +79 -0
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +12 -28
- package/src/__tests__/audit-log-rotation.test.ts +72 -18
- package/src/__tests__/auto-analysis-end-to-end.test.ts +6 -6
- package/src/__tests__/background-workers-disk-pressure.test.ts +8 -11
- package/src/__tests__/browser-skill-endstate.test.ts +3 -3
- package/src/__tests__/btw-routes.test.ts +5 -5
- package/src/__tests__/call-controller.test.ts +3 -3
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/channel-approval-routes.test.ts +3 -2
- package/src/__tests__/channel-guardian.test.ts +6 -5
- package/src/__tests__/channel-readiness-slack-remote.test.ts +175 -0
- package/src/__tests__/channel-reply-delivery.test.ts +35 -0
- package/src/__tests__/channel-retry-sweep.test.ts +320 -3
- package/src/__tests__/checker.test.ts +18 -27
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/compaction-trail-store.test.ts +264 -0
- package/src/__tests__/compactor-call-site-logging.test.ts +215 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +1 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +12 -16
- package/src/__tests__/computer-use-tools.test.ts +14 -18
- package/src/__tests__/config-loader-backfill.test.ts +13 -28
- package/src/__tests__/config-loader-corrupt.test.ts +5 -5
- package/src/__tests__/config-loader-platform-defaults.test.ts +93 -26
- package/src/__tests__/config-loader-quarantine-bulletin.test.ts +3 -3
- package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -4
- package/src/__tests__/config-schema.test.ts +10 -10
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/connection-model-compat.test.ts +83 -0
- package/src/__tests__/contacts-tools.test.ts +3 -2
- package/src/__tests__/context-token-estimator.test.ts +22 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +5 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +55 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +231 -2
- package/src/__tests__/conversation-agent-loop.test.ts +581 -54
- package/src/__tests__/conversation-analysis-routes.test.ts +1 -0
- package/src/__tests__/conversation-app-control-instantiation.test.ts +31 -24
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -0
- package/src/__tests__/conversation-attention-store.test.ts +101 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +3 -2
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-error.test.ts +61 -0
- package/src/__tests__/conversation-fork-crud.test.ts +239 -15
- package/src/__tests__/conversation-fork-route.test.ts +3 -2
- package/src/__tests__/conversation-history-web-search.test.ts +1 -0
- package/src/__tests__/conversation-inference-profile-list.test.ts +3 -2
- package/src/__tests__/conversation-inference-profile-route.test.ts +3 -2
- package/src/__tests__/conversation-lifecycle.test.ts +53 -11
- package/src/__tests__/conversation-list-source.test.ts +3 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +2 -1
- package/src/__tests__/{conversation-load-cleaned-at.test.ts → conversation-load-history-stripped.test.ts} +14 -13
- package/src/__tests__/conversation-pairing.test.ts +53 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +26 -7
- package/src/__tests__/conversation-process-callsite.test.ts +1 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-queue.test.ts +333 -291
- package/src/__tests__/conversation-routes-disk-view.test.ts +112 -18
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +33 -8
- package/src/__tests__/conversation-routes-slash-commands.test.ts +68 -2
- package/src/__tests__/conversation-runtime-assembly.test.ts +78 -0
- package/src/__tests__/conversation-skill-tools.test.ts +40 -147
- package/src/__tests__/conversation-slash-queue.test.ts +84 -32
- package/src/__tests__/conversation-slash-unknown.test.ts +5 -0
- package/src/__tests__/conversation-speed-override.test.ts +1 -0
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +46 -0
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +1 -0
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -3
- package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -17
- package/src/__tests__/conversation-sync-tags.test.ts +218 -35
- package/src/__tests__/conversation-title-service.test.ts +1 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +30 -0
- package/src/__tests__/conversation-usage.test.ts +1 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -1
- package/src/__tests__/credential-broker-browser-fill.test.ts +3 -3
- package/src/__tests__/credential-broker-server-use.test.ts +5 -5
- package/src/__tests__/credential-execution-client.test.ts +72 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +19 -19
- package/src/__tests__/credential-execution-tools.test.ts +6 -6
- package/src/__tests__/credential-health-service.test.ts +252 -3
- package/src/__tests__/credential-security-invariants.test.ts +6 -5
- package/src/__tests__/credential-vault-unit.test.ts +21 -21
- package/src/__tests__/credential-vault.test.ts +5 -5
- package/src/__tests__/cross-provider-web-search.test.ts +56 -2
- package/src/__tests__/db-connection-isolation.test.ts +7 -6
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +8 -10
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +7 -10
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +9 -15
- package/src/__tests__/db-test-helpers.ts +58 -0
- package/src/__tests__/disk-pressure-guard.test.ts +58 -41
- package/src/__tests__/disk-pressure-lifecycle.test.ts +13 -10
- package/src/__tests__/disk-pressure-routes.test.ts +0 -33
- package/src/__tests__/disk-pressure-tools.test.ts +0 -4
- package/src/__tests__/dm-persistence.test.ts +26 -40
- package/src/__tests__/document-create-dedupe.test.ts +189 -0
- package/src/__tests__/document-find-replace.test.ts +3 -2
- package/src/__tests__/document-tool-security.test.ts +81 -2
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +5 -4
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/encrypted-store-test-helpers.ts +56 -0
- package/src/__tests__/encrypted-store.test.ts +11 -9
- package/src/__tests__/feature-flag-test-helpers.ts +53 -0
- package/src/__tests__/filing-service.test.ts +1 -0
- package/src/__tests__/first-greeting.test.ts +62 -12
- package/src/__tests__/gateway-flag-listener.test.ts +236 -0
- package/src/__tests__/gemini-provider.test.ts +104 -0
- package/src/__tests__/guardian-action-sweep.test.ts +3 -2
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/guardian-outbound-http.test.ts +10 -7
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +48 -3
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +5 -0
- package/src/__tests__/heartbeat-service.test.ts +5 -0
- package/src/__tests__/helpers/mock-logger.ts +26 -0
- package/src/__tests__/host-bash-routes.test.ts +1 -0
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-shell-tool.test.ts +6 -5
- package/src/__tests__/host-transfer-routes-targeted.test.ts +1 -0
- package/src/__tests__/http-conversation-lineage.test.ts +3 -2
- package/src/__tests__/http-user-message-parity.test.ts +29 -7
- package/src/__tests__/identity-intro-cache.test.ts +133 -22
- package/src/__tests__/inbound-slack-persistence.test.ts +44 -72
- package/src/__tests__/inference-profile-reaper.test.ts +3 -2
- package/src/__tests__/inference-profile-session-ipc.test.ts +3 -2
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/injector-disk-pressure.test.ts +3 -17
- package/src/__tests__/inline-skill-load-permissions.test.ts +4 -4
- package/src/__tests__/list-messages-hidden-metadata.test.ts +80 -0
- package/src/__tests__/list-messages-tool-merge.test.ts +70 -11
- package/src/__tests__/llm-context-normalization.test.ts +42 -0
- package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
- package/src/__tests__/llm-resolver.test.ts +408 -9
- package/src/__tests__/llm-schema.test.ts +1 -1
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/logger.test.ts +89 -0
- package/src/__tests__/manual-token-reconciliation.test.ts +76 -1
- package/src/__tests__/mcp-abort-signal.test.ts +16 -2
- package/src/__tests__/mcp-client-auth.test.ts +14 -0
- package/src/__tests__/media-generate-image.test.ts +31 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
- package/src/__tests__/messaging-send-tool.test.ts +1 -0
- package/src/__tests__/migration-import-from-url.test.ts +3 -3
- package/src/__tests__/mock-gateway-ipc.ts +18 -2
- package/src/__tests__/model-intents.test.ts +4 -6
- package/src/__tests__/native-web-search.test.ts +30 -2
- package/src/__tests__/notification-deep-link.test.ts +62 -0
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/oauth-commands-routes.test.ts +37 -0
- package/src/__tests__/oauth-provider-visibility.test.ts +8 -8
- package/src/__tests__/oauth-store.test.ts +3 -2
- package/src/__tests__/onboarding-template-contract.test.ts +4 -3
- package/src/__tests__/openai-provider.test.ts +54 -9
- package/src/__tests__/openai-responses-provider.test.ts +176 -14
- package/src/__tests__/openrouter-provider-only.test.ts +27 -5
- package/src/__tests__/outbound-slack-persistence.test.ts +46 -1
- package/src/__tests__/pending-interactions-resolved-event.test.ts +0 -1
- package/src/__tests__/persistence-pipeline.test.ts +139 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +83 -12
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -2
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +11 -13
- package/src/__tests__/plugin-tool-contribution.test.ts +50 -40
- package/src/__tests__/plugin-types.test.ts +3 -2
- package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
- package/src/__tests__/pricing.test.ts +12 -0
- package/src/__tests__/process-message-background-slack.test.ts +21 -16
- package/src/__tests__/process-message-display-content.test.ts +19 -22
- package/src/__tests__/provider-catalog-visibility.test.ts +9 -9
- package/src/__tests__/provider-platform-proxy-integration.test.ts +216 -4
- package/src/__tests__/provider-registry-ollama.test.ts +45 -22
- package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
- package/src/__tests__/recording-handler.test.ts +1 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +84 -84
- package/src/__tests__/relay-server.test.ts +10 -10
- package/src/__tests__/require-fresh-approval.test.ts +2 -2
- package/src/__tests__/runtime-attachment-metadata.test.ts +3 -2
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
- package/src/__tests__/schedule-store.test.ts +16 -1
- package/src/__tests__/scheduler-reuse-conversation.test.ts +48 -3
- package/src/__tests__/secret-ingress-http.test.ts +5 -1
- package/src/__tests__/secure-keys.test.ts +3 -3
- package/src/__tests__/send-endpoint-busy.test.ts +81 -42
- package/src/__tests__/server-history-render.test.ts +4 -1
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
- package/src/__tests__/skill-feature-flags-integration.test.ts +8 -10
- package/src/__tests__/skill-feature-flags.test.ts +16 -18
- package/src/__tests__/skill-load-feature-flag.test.ts +5 -5
- package/src/__tests__/skill-projection-feature-flag.test.ts +48 -37
- package/src/__tests__/skill-projection.benchmark.test.ts +7 -13
- package/src/__tests__/skill-tool-factory.test.ts +97 -96
- package/src/__tests__/slack-channel-config.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +11 -3
- package/src/__tests__/subagent-disposal.test.ts +27 -8
- package/src/__tests__/subagent-fork-notifications.test.ts +24 -9
- package/src/__tests__/subagent-fork-spawn.test.ts +13 -4
- package/src/__tests__/subagent-manager-notify.test.ts +20 -8
- package/src/__tests__/subagent-notify-parent.test.ts +6 -5
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +58 -0
- package/src/__tests__/subagent-tools.test.ts +2 -1
- package/src/__tests__/suggestion-routes.test.ts +2 -0
- package/src/__tests__/sync-message-contract.test.ts +59 -0
- package/src/__tests__/system-prompt.test.ts +183 -131
- package/src/__tests__/terminal-tools.test.ts +1 -1
- package/src/__tests__/test-preload-verifier.ts +68 -0
- package/src/__tests__/test-preload.ts +32 -39
- package/src/__tests__/tool-approval-handler.test.ts +1 -5
- package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +35 -12
- package/src/__tests__/tool-executor.test.ts +64 -72
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/tool-preview-lifecycle.test.ts +1 -0
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +3 -2
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/usage-routes.test.ts +3 -0
- package/src/__tests__/validate-input.test.ts +381 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +3 -2
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +2 -1
- package/src/__tests__/voice-session-bridge.test.ts +37 -28
- package/src/__tests__/workspace-git-service.test.ts +6 -5
- package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +326 -0
- package/src/__tests__/workspace-migration-091-retighten-migration-onboarding-thread.test.ts +166 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
- package/src/acp/prepare-agent-env.ts +78 -0
- package/src/acp/session-manager.ts +6 -7
- package/src/agent/loop.ts +88 -0
- package/src/api/README.md +127 -0
- package/src/api/constants/call-sites.ts +27 -0
- package/src/api/events/assistant-outbound-attachment.ts +51 -0
- package/src/api/events/assistant-text-delta.ts +32 -0
- package/src/api/events/assistant-turn-start.ts +33 -0
- package/src/api/events/document-comment-created.ts +48 -0
- package/src/api/events/document-comment-deleted.ts +24 -0
- package/src/api/events/document-comment-reopened.ts +25 -0
- package/src/api/events/document-comment-resolved.ts +27 -0
- package/src/api/events/generation-cancelled.ts +24 -0
- package/src/api/events/generation-handoff.ts +41 -0
- package/src/api/events/message-complete.ts +42 -0
- package/src/api/events/open-url.ts +30 -0
- package/src/api/events/relationship-state-updated.ts +25 -0
- package/src/api/events/tool-use-start.ts +32 -0
- package/src/api/index.ts +129 -0
- package/src/api/package.json +10 -0
- package/src/api/responses/llm-context-response.ts +39 -0
- package/src/api/responses/llm-request-log-entry.ts +93 -0
- package/src/api/responses/memory-recall-log.ts +65 -0
- package/src/api/responses/memory-v2-activation-log.ts +78 -0
- package/src/background-wake/background-wake-routes.test.ts +868 -0
- package/src/background-wake/platform-client.test.ts +308 -0
- package/src/background-wake/platform-client.ts +167 -0
- package/src/background-wake/publisher.ts +91 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/background-wake/wake-intent-hooks.test.ts +282 -0
- package/src/calls/guardian-dispatch.ts +1 -0
- package/src/calls/voice-session-bridge.ts +4 -4
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/conversations-slack.test.ts +16 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
- package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
- package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
- package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +1 -0
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/__tests__/notifications.test.ts +184 -40
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/channels/__tests__/channels.test.ts +143 -0
- package/src/cli/commands/channels/index.ts +229 -0
- package/src/cli/commands/domain.ts +91 -41
- package/src/cli/commands/inference.ts +93 -40
- package/src/cli/commands/memory-v2-compare-render.ts +115 -0
- package/src/cli/commands/memory-v2.ts +176 -1
- package/src/cli/commands/memory-v3-render.ts +491 -0
- package/src/cli/commands/memory-v3.ts +567 -0
- package/src/cli/commands/notifications.ts +365 -55
- package/src/cli/lib/open-browser.ts +7 -2
- package/src/cli/program.ts +4 -0
- package/src/config/assistant-feature-flags.ts +39 -46
- package/src/config/bundled-skills/document-editor/SKILL.md +16 -3
- package/src/config/bundled-skills/document-editor/TOOLS.json +18 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
- package/src/config/bundled-skills/schedule/SKILL.md +1 -1
- package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -0
- package/src/config/bundled-tool-registry.ts +2 -0
- package/src/config/call-site-defaults.ts +8 -7
- package/src/config/feature-flag-cache.ts +86 -0
- package/src/config/feature-flag-registry.json +33 -17
- package/src/config/llm-context-resolution.ts +10 -1
- package/src/config/llm-resolver.ts +121 -15
- package/src/config/loader.ts +4 -5
- package/src/config/schemas/__tests__/memory-v2.test.ts +228 -1
- package/src/config/schemas/call-site-catalog.ts +21 -7
- package/src/config/schemas/heartbeat.ts +1 -1
- package/src/config/schemas/llm.ts +102 -2
- package/src/config/schemas/memory-v2.ts +272 -0
- package/src/config/schemas/memory.ts +2 -1
- package/src/config/schemas/services.ts +6 -2
- package/src/config/seed-inference-profiles.ts +36 -16
- package/src/context/compactor.ts +52 -0
- package/src/context/token-estimator.ts +10 -5
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/credential-execution/executable-discovery.ts +40 -0
- package/src/credential-execution/process-manager.ts +6 -2
- package/src/credential-health/credential-health-service.ts +125 -40
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -6
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +13 -15
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +2 -3
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -0
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +25 -12
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +1 -0
- package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +107 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +1 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +390 -80
- package/src/daemon/conversation-agent-loop.ts +244 -90
- package/src/daemon/conversation-error.ts +64 -6
- package/src/daemon/conversation-lifecycle.ts +27 -22
- package/src/daemon/conversation-messaging.ts +84 -43
- package/src/daemon/conversation-process.ts +74 -37
- package/src/daemon/conversation-runtime-assembly.ts +38 -17
- package/src/daemon/conversation-skill-tools.ts +14 -30
- package/src/daemon/conversation-surfaces.ts +69 -34
- package/src/daemon/conversation-tool-setup.ts +77 -32
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +40 -75
- package/src/daemon/daemon-control.ts +1 -1
- package/src/daemon/daemon-skill-host.ts +9 -2
- package/src/daemon/disk-pressure-guard.ts +39 -29
- package/src/daemon/first-greeting.ts +31 -13
- package/src/daemon/handlers/config-model.test.ts +1 -0
- package/src/daemon/handlers/conversations.ts +11 -3
- package/src/daemon/handlers/shared.ts +6 -1
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +4 -4
- package/src/daemon/host-file-proxy.ts +4 -4
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +10 -10
- package/src/daemon/lifecycle.ts +29 -26
- package/src/daemon/mcp-reload-service.ts +1 -1
- package/src/daemon/meet-manifest-loader.ts +11 -24
- package/src/daemon/message-types/conversations.ts +22 -27
- package/src/daemon/message-types/document-comments.ts +8 -44
- package/src/daemon/message-types/home.ts +2 -14
- package/src/daemon/message-types/integrations.ts +2 -7
- package/src/daemon/message-types/messages.ts +25 -48
- package/src/daemon/message-types/subagents.ts +6 -0
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/process-message.ts +9 -9
- package/src/daemon/providers-setup.ts +1 -1
- package/src/daemon/server.ts +16 -0
- package/src/daemon/shutdown-handlers.ts +24 -5
- package/src/daemon/switch-inference-profile-tool.ts +62 -0
- package/src/daemon/tool-setup-types.ts +7 -0
- package/src/daemon/wake-target-adapter.ts +10 -0
- package/src/documents/document-store.ts +38 -0
- package/src/export/__tests__/transcript-formatter.test.ts +1 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +30 -1
- package/src/heartbeat/heartbeat-service.ts +63 -0
- package/src/home/__tests__/feed-writer.test.ts +161 -0
- package/src/home/__tests__/post-connect-feed.test.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +55 -59
- package/src/home/feed-writer.ts +146 -7
- package/src/home/home-greeting.ts +0 -9
- package/src/home/suggested-prompts.ts +27 -154
- package/src/ipc/__tests__/cli-ipc.test.ts +1 -0
- package/src/ipc/gateway-client.test.ts +4 -1
- package/src/ipc/gateway-flag-listener.ts +123 -0
- package/src/ipc/skill-routes/__tests__/memory.test.ts +1 -0
- package/src/ipc/skill-routes/__tests__/registries.test.ts +36 -7
- package/src/ipc/skill-routes/memory.ts +4 -3
- package/src/ipc/skill-routes/registries.ts +35 -40
- package/src/memory/__tests__/db-async-query.test.ts +165 -0
- package/src/memory/__tests__/db-maintenance.test.ts +115 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +242 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +26 -5
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +1 -0
- package/src/memory/__tests__/memory-retrospective-job.test.ts +8 -0
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +1 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +31 -0
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-attention-store.ts +17 -3
- package/src/memory/conversation-crud.ts +423 -182
- package/src/memory/conversation-starters-cadence.ts +3 -1
- package/src/memory/conversation-title-service.ts +19 -3
- package/src/memory/db-async-query.ts +214 -0
- package/src/memory/db-connection.ts +29 -19
- package/src/memory/db-init.ts +14 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/db-singleton.ts +77 -0
- package/src/memory/delivery-channels.ts +82 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +2 -4
- package/src/memory/graph/bootstrap.ts +8 -1
- package/src/memory/graph/capability-seed.ts +7 -3
- package/src/memory/graph/conversation-graph-memory.ts +100 -17
- package/src/memory/graph/extraction.ts +1 -5
- package/src/memory/graph/graph-search.ts +7 -1
- package/src/memory/graph/retriever.test.ts +3 -3
- package/src/memory/indexer.ts +28 -18
- package/src/memory/job-handlers/cleanup.ts +76 -18
- package/src/memory/job-handlers/conversation-starters.ts +1 -4
- package/src/memory/job-handlers/embedding.test.ts +3 -2
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -2
- package/src/memory/jobs/embed-pkb-file.ts +6 -1
- package/src/memory/jobs-store.ts +14 -0
- package/src/memory/jobs-worker.ts +66 -22
- package/src/memory/llm-request-log-source-clickhouse.ts +122 -2
- package/src/memory/llm-request-log-source-local.ts +31 -0
- package/src/memory/llm-request-log-source.ts +40 -2
- package/src/memory/llm-request-log-store.ts +228 -1
- package/src/memory/llm-usage-store.ts +24 -0
- package/src/memory/memory-retrospective-enqueue.ts +8 -1
- package/src/memory/memory-retrospective-job.ts +5 -0
- package/src/memory/memory-v2-activation-log-store.ts +110 -7
- package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
- package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
- package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
- package/src/memory/migrations/265-drop-provider-connection-status.ts +26 -0
- package/src/memory/migrations/266-messages-client-message-id.ts +43 -0
- package/src/memory/migrations/index.ts +19 -0
- package/src/memory/migrations/registry.ts +33 -0
- package/src/memory/schema/conversations.ts +10 -2
- package/src/memory/schema/inference.ts +0 -1
- package/src/memory/schema/infrastructure.ts +21 -0
- package/src/memory/tool-usage-store.ts +36 -8
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +5 -2
- package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
- package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
- package/src/memory/v2/__tests__/harness-metrics.test.ts +83 -0
- package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +230 -0
- package/src/memory/v2/__tests__/harness-runner.test.ts +135 -0
- package/src/memory/v2/__tests__/injection.test.ts +127 -98
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +171 -3
- package/src/memory/v2/__tests__/sweep-job.test.ts +6 -3
- package/src/memory/v2/harness/compare.ts +57 -0
- package/src/memory/v2/harness/metrics.ts +128 -0
- package/src/memory/v2/harness/oracle.ts +145 -0
- package/src/memory/v2/harness/replay-input.ts +240 -0
- package/src/memory/v2/harness/retriever.ts +74 -0
- package/src/memory/v2/harness/router-retriever.ts +43 -0
- package/src/memory/v2/harness/runner.ts +112 -0
- package/src/memory/v2/harness/trace.ts +64 -0
- package/src/memory/v2/injection.ts +21 -15
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +171 -18
- package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
- package/src/memory/v3/__tests__/consolidation-job.test.ts +466 -0
- package/src/memory/v3/__tests__/coretrieval-seed.test.ts +270 -0
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
- package/src/memory/v3/__tests__/edges.test.ts +706 -0
- package/src/memory/v3/__tests__/filter.test.ts +560 -0
- package/src/memory/v3/__tests__/gate.test.ts +637 -0
- package/src/memory/v3/__tests__/index-composition.test.ts +291 -0
- package/src/memory/v3/__tests__/loop.test.ts +775 -0
- package/src/memory/v3/__tests__/retriever.test.ts +226 -0
- package/src/memory/v3/__tests__/scouts.test.ts +489 -0
- package/src/memory/v3/__tests__/shadow-diff.test.ts +225 -0
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +398 -0
- package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
- package/src/memory/v3/__tests__/traversal.test.ts +508 -0
- package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
- package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
- package/src/memory/v3/__tests__/tree-walk.test.ts +784 -0
- package/src/memory/v3/__tests__/validate.test.ts +277 -0
- package/src/memory/v3/auto-edges.ts +223 -0
- package/src/memory/v3/coactivation-store.ts +124 -0
- package/src/memory/v3/consolidation-job.ts +323 -0
- package/src/memory/v3/coretrieval-seed.ts +240 -0
- package/src/memory/v3/edge-learning-job.ts +160 -0
- package/src/memory/v3/edges.ts +286 -0
- package/src/memory/v3/filter.ts +286 -0
- package/src/memory/v3/gate.ts +349 -0
- package/src/memory/v3/index-composition.ts +126 -0
- package/src/memory/v3/llm-capture.ts +46 -0
- package/src/memory/v3/loop.ts +430 -0
- package/src/memory/v3/maintenance.ts +144 -0
- package/src/memory/v3/prompt-context.ts +33 -0
- package/src/memory/v3/prompts/consolidation.ts +458 -0
- package/src/memory/v3/prompts/system-prompts.ts +196 -0
- package/src/memory/v3/retriever.ts +33 -0
- package/src/memory/v3/scouts.ts +431 -0
- package/src/memory/v3/shadow-diff.ts +287 -0
- package/src/memory/v3/shadow-middleware.ts +347 -0
- package/src/memory/v3/traversal.ts +211 -0
- package/src/memory/v3/tree-index.ts +237 -0
- package/src/memory/v3/tree-store.ts +394 -0
- package/src/memory/v3/tree-walk.ts +356 -0
- package/src/memory/v3/types.ts +65 -0
- package/src/memory/v3/validate.ts +323 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +1 -0
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +1 -0
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/adapters/slack.ts +45 -11
- package/src/notifications/broadcaster.ts +114 -63
- package/src/notifications/conversation-pairing.ts +23 -3
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/decisions-store.ts +32 -1
- package/src/notifications/deliveries-store.ts +45 -0
- package/src/notifications/edit-notification.ts +201 -0
- package/src/notifications/emit-signal.ts +40 -50
- package/src/notifications/signal.ts +10 -0
- package/src/notifications/types.ts +37 -0
- package/src/oauth/byo-connection.test.ts +67 -3
- package/src/oauth/byo-connection.ts +32 -5
- package/src/oauth/connect-orchestrator.ts +9 -0
- package/src/oauth/connection-resolver.test.ts +76 -0
- package/src/oauth/connection-resolver.ts +49 -10
- package/src/oauth/manual-token-connection.ts +51 -3
- package/src/oauth/seed-providers.ts +3 -0
- package/src/permissions/approval-policy.test.ts +19 -5
- package/src/permissions/approval-policy.ts +14 -3
- package/src/permissions/checker.ts +21 -8
- package/src/permissions/prompter.ts +3 -3
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +2 -2
- package/src/platform/client.test.ts +24 -1
- package/src/platform/client.ts +8 -0
- package/src/platform/feature-gate.ts +15 -0
- package/src/plugin-api/index.ts +4 -0
- package/src/plugin-api/types.ts +7 -33
- package/src/plugins/defaults/index.ts +6 -0
- package/src/plugins/defaults/injectors.ts +20 -19
- package/src/plugins/defaults/persistence.ts +25 -6
- package/src/plugins/external-plugin-loader.ts +5 -68
- package/src/plugins/types.ts +68 -29
- package/src/proactive-artifact/aux-message-injector.ts +17 -4
- package/src/proactive-artifact/job.test.ts +1 -0
- package/src/prompts/__tests__/system-prompt.test.ts +4 -4
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +39 -7
- package/src/prompts/system-prompt.ts +84 -221
- package/src/prompts/template-detection.ts +10 -4
- package/src/prompts/templates/BOOTSTRAP.md +9 -13
- package/src/prompts/templates/IDENTITY.md +0 -2
- package/src/prompts/templates/system-sections.ts +230 -8
- package/src/providers/__tests__/connection-model-compat.test.ts +233 -0
- package/src/providers/__tests__/registry-native-web-search.test.ts +122 -0
- package/src/providers/__tests__/retry-callsite.test.ts +85 -5
- package/src/providers/anthropic/client.ts +32 -66
- package/src/providers/call-site-routing.ts +42 -6
- package/src/providers/connection-model-compat.ts +61 -0
- package/src/providers/connection-resolution.ts +47 -14
- package/src/providers/fireworks/client.ts +1 -0
- package/src/providers/gemini/client.ts +70 -6
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +0 -2
- package/src/providers/inference/__tests__/base-url-security.test.ts +2 -3
- package/src/providers/inference/__tests__/{connections-status-label.test.ts → connections-label.test.ts} +12 -111
- package/src/providers/inference/adapter-factory.ts +3 -0
- package/src/providers/inference/auth.ts +0 -8
- package/src/providers/inference/connections.ts +3 -66
- package/src/providers/inference/resolve-auth.ts +2 -3
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +78 -1
- package/src/providers/model-intents.ts +4 -4
- package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +157 -5
- package/src/providers/openai/chat-completions-provider.ts +116 -15
- package/src/providers/openai/codex-models.ts +20 -0
- package/src/providers/openai/responses-provider.ts +87 -30
- package/src/providers/openrouter/client.ts +13 -8
- package/src/providers/provider-send-message.ts +20 -5
- package/src/providers/registry.ts +48 -8
- package/src/providers/retry.ts +50 -7
- package/src/providers/search-provider-catalog.ts +17 -9
- package/src/providers/thinking-config.ts +26 -1
- package/src/providers/types.ts +9 -0
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +1 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +1 -0
- package/src/runtime/access-request-helper.ts +1 -0
- package/src/runtime/agent-wake.ts +1 -0
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +46 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/channel-readiness-service.ts +68 -0
- package/src/runtime/channel-reply-delivery.ts +23 -0
- package/src/runtime/channel-retry-sweep.ts +47 -14
- package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
- package/src/runtime/http-types.ts +0 -2
- package/src/runtime/migrations/vbundle-builder.ts +12 -4
- package/src/runtime/pending-interactions.ts +0 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -0
- package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +406 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +204 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +209 -1
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -50
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +76 -9
- package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +35 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -2
- package/src/runtime/routes/__tests__/surface-content-routes.test.ts +294 -0
- package/src/runtime/routes/__tests__/task-routes.test.ts +48 -3
- package/src/runtime/routes/acp-routes-list.test.ts +3 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/app-management-routes.ts +111 -4
- package/src/runtime/routes/avatar-routes.ts +10 -10
- package/src/runtime/routes/background-wake-routes.ts +356 -0
- package/src/runtime/routes/browser-tabs-routes.ts +200 -0
- package/src/runtime/routes/btw-routes.ts +4 -10
- package/src/runtime/routes/conversation-analysis-routes.ts +6 -0
- package/src/runtime/routes/conversation-cli-routes.ts +1 -1
- package/src/runtime/routes/conversation-compaction-routes.ts +263 -0
- package/src/runtime/routes/conversation-list-routes.ts +159 -4
- package/src/runtime/routes/conversation-management-routes.ts +108 -26
- package/src/runtime/routes/conversation-query-routes.ts +200 -44
- package/src/runtime/routes/conversation-routes.ts +409 -521
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/conversations-import-routes.ts +19 -6
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/documents-routes.ts +10 -1
- package/src/runtime/routes/domain-routes.ts +60 -10
- package/src/runtime/routes/email-routes.ts +5 -2
- package/src/runtime/routes/events-routes.ts +54 -10
- package/src/runtime/routes/group-routes.ts +35 -8
- package/src/runtime/routes/home-feed-routes.ts +129 -0
- package/src/runtime/routes/host-browser-routes.ts +10 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/identity-intro-cache.ts +61 -16
- package/src/runtime/routes/identity-routes.ts +30 -9
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +530 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +57 -8
- package/src/runtime/routes/index.ts +10 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
- package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
- package/src/runtime/routes/inference-provider-connection-routes.ts +5 -26
- package/src/runtime/routes/integrations/vercel.ts +15 -0
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/llm-context-normalization.ts +7 -2
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +215 -5
- package/src/runtime/routes/memory-v3-routes.ts +474 -0
- package/src/runtime/routes/migration-routes.ts +32 -28
- package/src/runtime/routes/notification-routes.ts +63 -1
- package/src/runtime/routes/oauth-commands-routes.ts +6 -1
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- package/src/runtime/routes/secret-routes.ts +25 -5
- package/src/runtime/routes/settings-routes.ts +12 -11
- package/src/runtime/routes/slack-channel-routes.ts +5 -4
- package/src/runtime/routes/surface-action-routes.ts +1 -38
- package/src/runtime/routes/surface-content-routes.ts +12 -5
- package/src/runtime/routes/surface-conversation-resolver.ts +65 -0
- package/src/runtime/routes/wipe-conversation-routes.ts +3 -0
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -0
- package/src/runtime/slack-dm-text-delivery.ts +177 -0
- package/src/runtime/sync/resource-sync-events.ts +106 -38
- package/src/runtime/sync/sync-publisher.test.ts +49 -0
- package/src/runtime/sync/sync-publisher.ts +2 -1
- package/src/runtime/tool-grant-request-helper.ts +1 -0
- package/src/runtime/verification-outbound-actions.ts +73 -1
- package/src/schedule/schedule-store.ts +8 -1
- package/src/schedule/scheduler.ts +111 -15
- package/src/security/__tests__/provider-key-env-fallback.test.ts +3 -3
- package/src/security/encrypted-store.ts +7 -16
- package/src/security/store-path-override.ts +61 -0
- package/src/signals/user-message.ts +5 -8
- package/src/skills/validate-input.ts +177 -0
- package/src/subagent/manager.ts +13 -13
- package/src/subagent/types.ts +6 -0
- package/src/tasks/tool-sanitizer.ts +2 -2
- package/src/telemetry/types.ts +12 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/acp/spawn.test.ts +119 -0
- package/src/tools/acp/spawn.ts +15 -2
- package/src/tools/apps/definitions.ts +36 -28
- package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
- package/src/tools/ask-question/ask-question-tool.ts +38 -45
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +2 -8
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +70 -0
- package/src/tools/browser/browser-execution.ts +16 -3
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +3 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +12 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +27 -1
- package/src/tools/browser/cdp-client/factory.ts +100 -17
- package/src/tools/browser/cdp-client/local-cdp-client.ts +12 -0
- package/src/tools/browser/cdp-client/types.ts +65 -0
- package/src/tools/browser/pinned-tabs.ts +96 -40
- package/src/tools/computer-use/definitions.ts +282 -336
- package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
- package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
- package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
- package/src/tools/credentials/vault.ts +3 -9
- package/src/tools/document/document-tool.ts +189 -7
- package/src/tools/execution-target.ts +18 -23
- package/src/tools/executor.ts +24 -56
- package/src/tools/filesystem/edit.ts +3 -9
- package/src/tools/filesystem/list.ts +3 -9
- package/src/tools/filesystem/read.ts +3 -9
- package/src/tools/filesystem/write.ts +3 -9
- package/src/tools/host-filesystem/edit.test.ts +1 -0
- package/src/tools/host-filesystem/edit.ts +3 -9
- package/src/tools/host-filesystem/read.test.ts +1 -0
- package/src/tools/host-filesystem/read.ts +3 -9
- package/src/tools/host-filesystem/transfer.test.ts +31 -6
- package/src/tools/host-filesystem/transfer.ts +3 -9
- package/src/tools/host-filesystem/write.test.ts +1 -0
- package/src/tools/host-filesystem/write.ts +3 -9
- package/src/tools/host-terminal/host-shell.ts +3 -9
- package/src/tools/mcp/mcp-tool-factory.ts +1 -10
- package/src/tools/memory/register.test.ts +1 -1
- package/src/tools/memory/register.ts +4 -9
- package/src/tools/network/__tests__/managed-search-proxy.test.ts +282 -0
- package/src/tools/network/__tests__/web-search.test.ts +211 -3
- package/src/tools/network/managed-search-proxy.ts +183 -0
- package/src/tools/network/web-fetch.ts +3 -9
- package/src/tools/network/web-search.ts +224 -76
- package/src/tools/policy-context.ts +3 -1
- package/src/tools/registry.ts +150 -123
- package/src/tools/schedule/create.ts +1 -1
- package/src/tools/schema-transforms.ts +1 -1
- package/src/tools/skills/execute.ts +3 -9
- package/src/tools/skills/load.ts +3 -9
- package/src/tools/skills/skill-tool-factory.ts +18 -44
- package/src/tools/subagent/notify-parent.ts +3 -9
- package/src/tools/subagent/spawn.ts +3 -0
- package/src/tools/system/request-permission.ts +3 -9
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-approval-handler.ts +10 -4
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/tool-name-aliases.ts +72 -14
- package/src/tools/types.ts +32 -101
- package/src/tools/ui-surface/definitions.ts +104 -108
- package/src/types/onboarding-context.ts +6 -0
- package/src/usage/attribution.ts +32 -1
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/browser.ts +7 -2
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -2
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +109 -0
- package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +41 -0
- package/src/workspace/migrations/registry.ts +6 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
- package/src/__tests__/message-complete-display-id.test.ts +0 -175
- package/src/daemon/query-complexity-router.ts +0 -75
- package/src/prompts/cache-boundary.ts +0 -8
|
@@ -33,7 +33,7 @@ const DAEMON_TIMEOUT_DEFAULTS = {
|
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
const HEALTH_CHECK_TIMEOUT_MS = 1500;
|
|
36
|
-
const STARTUP_LOCK_STALE_MS =
|
|
36
|
+
const STARTUP_LOCK_STALE_MS = 120_000;
|
|
37
37
|
|
|
38
38
|
function isPositiveInteger(v: unknown): v is number {
|
|
39
39
|
return typeof v === "number" && Number.isInteger(v) && v > 0;
|
|
@@ -219,8 +219,15 @@ function buildRegistriesFacet(skillId: string): RegistriesFacet {
|
|
|
219
219
|
// overlay (`assistant/src/tools/types.ts`); the assistant-side
|
|
220
220
|
// registry accepts the daemon flavor. Skills construct tools via
|
|
221
221
|
// helpers that already produce the daemon shape, so a cast at this
|
|
222
|
-
// boundary is safe.
|
|
223
|
-
|
|
222
|
+
// boundary is safe. The contract's `registerTools(provider)` stays
|
|
223
|
+
// single-arg — skill code never needs to know its own id — and this
|
|
224
|
+
// adapter pairs the provider with the owner derived from the
|
|
225
|
+
// surrounding {@link buildRegistriesFacet} closure.
|
|
226
|
+
registerTools: (provider) =>
|
|
227
|
+
registerExternalTools(
|
|
228
|
+
{ kind: "skill", id: skillId },
|
|
229
|
+
provider as never,
|
|
230
|
+
),
|
|
224
231
|
registerSkillRoute: (route: SkillRoute): SkillRouteHandle =>
|
|
225
232
|
registerSkillRoute(route) as unknown as SkillRouteHandle,
|
|
226
233
|
// Namespace hook names by skillId so two skills using the same label
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { isAssistantFeatureFlagEnabled } from "../config/assistant-feature-flags.js";
|
|
2
|
-
import { getConfig } from "../config/loader.js";
|
|
3
1
|
import { buildAssistantEvent } from "../runtime/assistant-event.js";
|
|
4
2
|
import { assistantEventHub } from "../runtime/assistant-event-hub.js";
|
|
5
3
|
import { cancelBackgroundTools } from "../tools/background-tool-registry.js";
|
|
6
4
|
import { getDiskUsageInfo } from "../util/disk-usage.js";
|
|
7
5
|
import { getLogger } from "../util/logger.js";
|
|
8
6
|
|
|
7
|
+
export const DISK_PRESSURE_WARNING_THRESHOLD_PERCENT = 80;
|
|
9
8
|
export const DISK_PRESSURE_THRESHOLD_PERCENT = 95;
|
|
9
|
+
// Hysteresis lower bound: once locked, the guard stays locked until usage
|
|
10
|
+
// falls below this clear threshold. The deadband between this and the
|
|
11
|
+
// critical threshold stops the lock from flapping when usage hovers near
|
|
12
|
+
// 95% — otherwise clearing the lock immediately resumes background work,
|
|
13
|
+
// which can refill the disk and re-trip the lock on the next sample.
|
|
14
|
+
export const DISK_PRESSURE_CLEAR_THRESHOLD_PERCENT = 90;
|
|
10
15
|
export const DISK_PRESSURE_CHECK_INTERVAL_MS = 60_000;
|
|
11
16
|
export const DISK_PRESSURE_OVERRIDE_CONFIRMATION = "I understand the risks";
|
|
12
17
|
export const DISK_PRESSURE_BLOCKED_CAPABILITIES = [
|
|
@@ -15,7 +20,12 @@ export const DISK_PRESSURE_BLOCKED_CAPABILITIES = [
|
|
|
15
20
|
"remote-ingress",
|
|
16
21
|
] as const;
|
|
17
22
|
|
|
18
|
-
export type DiskPressureState =
|
|
23
|
+
export type DiskPressureState =
|
|
24
|
+
| "disabled"
|
|
25
|
+
| "ok"
|
|
26
|
+
| "warning"
|
|
27
|
+
| "critical"
|
|
28
|
+
| "unknown";
|
|
19
29
|
|
|
20
30
|
export type DiskPressureBlockedCapability =
|
|
21
31
|
(typeof DISK_PRESSURE_BLOCKED_CAPABILITIES)[number];
|
|
@@ -118,24 +128,10 @@ function replaceStatus(next: DiskPressureStatus): DiskPressureStatus {
|
|
|
118
128
|
return cloneStatus(state.status);
|
|
119
129
|
}
|
|
120
130
|
|
|
121
|
-
function
|
|
122
|
-
return isAssistantFeatureFlagEnabled("safe-storage-limits", getConfig());
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
function resetToDisabled(): DiskPressureStatus {
|
|
126
|
-
const previous = cloneStatus(state.status);
|
|
127
|
-
stopDiskPressureGuard();
|
|
128
|
-
state.status = cloneStatus(DISABLED_STATUS);
|
|
129
|
-
publishStatusChangedIfNeeded(previous);
|
|
130
|
-
return cloneStatus(state.status);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function ensureEnabledStatus(): DiskPressureStatus | null {
|
|
134
|
-
if (!isEnabled()) return resetToDisabled();
|
|
131
|
+
function ensureEnabledStatus(): void {
|
|
135
132
|
if (!state.status.enabled) {
|
|
136
133
|
state.status = cloneStatus(OPEN_STATUS);
|
|
137
134
|
}
|
|
138
|
-
return null;
|
|
139
135
|
}
|
|
140
136
|
|
|
141
137
|
function nextLockId(): string {
|
|
@@ -191,8 +187,7 @@ function rejectTransition(
|
|
|
191
187
|
}
|
|
192
188
|
|
|
193
189
|
export function startDiskPressureGuard(): DiskPressureStatus {
|
|
194
|
-
|
|
195
|
-
if (disabledStatus) return disabledStatus;
|
|
190
|
+
ensureEnabledStatus();
|
|
196
191
|
|
|
197
192
|
if (!state.timer) {
|
|
198
193
|
state.timer = setInterval(() => {
|
|
@@ -211,8 +206,7 @@ export function stopDiskPressureGuard(): void {
|
|
|
211
206
|
}
|
|
212
207
|
|
|
213
208
|
export function evaluateDiskPressureNow(): DiskPressureStatus {
|
|
214
|
-
|
|
215
|
-
if (disabledStatus) return disabledStatus;
|
|
209
|
+
ensureEnabledStatus();
|
|
216
210
|
|
|
217
211
|
let usageInfo: ReturnType<typeof getDiskUsageInfo>;
|
|
218
212
|
try {
|
|
@@ -228,10 +222,17 @@ export function evaluateDiskPressureNow(): DiskPressureStatus {
|
|
|
228
222
|
const usagePercent = roundPercent(
|
|
229
223
|
(usageInfo.usedMb / usageInfo.totalMb) * 100,
|
|
230
224
|
);
|
|
231
|
-
|
|
225
|
+
// Hysteresis: while locked, hold until usage drops below the lower clear
|
|
226
|
+
// threshold; otherwise lock at the critical threshold.
|
|
227
|
+
const criticalThreshold = state.status.locked
|
|
228
|
+
? DISK_PRESSURE_CLEAR_THRESHOLD_PERCENT
|
|
229
|
+
: DISK_PRESSURE_THRESHOLD_PERCENT;
|
|
230
|
+
const isCritical = usagePercent >= criticalThreshold;
|
|
231
|
+
const isWarning =
|
|
232
|
+
!isCritical && usagePercent >= DISK_PRESSURE_WARNING_THRESHOLD_PERCENT;
|
|
232
233
|
const lastCheckedAt = new Date().toISOString();
|
|
233
234
|
|
|
234
|
-
if (!isCritical) {
|
|
235
|
+
if (!isCritical && !isWarning) {
|
|
235
236
|
return replaceStatus({
|
|
236
237
|
...OPEN_STATUS,
|
|
237
238
|
usagePercent,
|
|
@@ -240,6 +241,16 @@ export function evaluateDiskPressureNow(): DiskPressureStatus {
|
|
|
240
241
|
});
|
|
241
242
|
}
|
|
242
243
|
|
|
244
|
+
if (isWarning) {
|
|
245
|
+
return replaceStatus({
|
|
246
|
+
...OPEN_STATUS,
|
|
247
|
+
state: "warning",
|
|
248
|
+
usagePercent,
|
|
249
|
+
path: usageInfo.path,
|
|
250
|
+
lastCheckedAt,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
|
|
243
254
|
if (!state.status.locked) {
|
|
244
255
|
cancelTerminalBackgroundToolsForLock();
|
|
245
256
|
}
|
|
@@ -265,14 +276,13 @@ export function evaluateDiskPressureNow(): DiskPressureStatus {
|
|
|
265
276
|
}
|
|
266
277
|
|
|
267
278
|
export function getDiskPressureStatus(): DiskPressureStatus {
|
|
268
|
-
if (!isEnabled()) return cloneStatus(DISABLED_STATUS);
|
|
269
279
|
if (!state.status.enabled) return cloneStatus(OPEN_STATUS);
|
|
270
280
|
return cloneStatus(state.status);
|
|
271
281
|
}
|
|
272
282
|
|
|
273
283
|
export function acknowledgeDiskPressureLock(): DiskPressureTransitionResult {
|
|
274
|
-
|
|
275
|
-
const status =
|
|
284
|
+
ensureEnabledStatus();
|
|
285
|
+
const status = cloneStatus(state.status);
|
|
276
286
|
if (!status.locked) {
|
|
277
287
|
return rejectTransition(
|
|
278
288
|
"not_locked",
|
|
@@ -298,8 +308,8 @@ export function acknowledgeDiskPressureLock(): DiskPressureTransitionResult {
|
|
|
298
308
|
export function overrideDiskPressureLock(
|
|
299
309
|
confirmation: string,
|
|
300
310
|
): DiskPressureTransitionResult {
|
|
301
|
-
|
|
302
|
-
const status =
|
|
311
|
+
ensureEnabledStatus();
|
|
312
|
+
const status = cloneStatus(state.status);
|
|
303
313
|
if (!status.locked) {
|
|
304
314
|
return rejectTransition(
|
|
305
315
|
"not_locked",
|
|
@@ -14,12 +14,6 @@ export interface OnboardingGreetingContext {
|
|
|
14
14
|
googleConnected?: boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export const CANNED_FIRST_GREETING = [
|
|
18
|
-
"Hey,",
|
|
19
|
-
"",
|
|
20
|
-
"We can get into whatever you've got, or just talk first — that tends to go better. Up to you.",
|
|
21
|
-
].join("\n");
|
|
22
|
-
|
|
23
17
|
/**
|
|
24
18
|
* Returns `true` when all of the following are true:
|
|
25
19
|
* - `conversationMessageCount === 0` (no prior messages in this conversation)
|
|
@@ -67,30 +61,54 @@ function buildIntroLine(
|
|
|
67
61
|
return [greeting, who, close].filter(Boolean).join(" ");
|
|
68
62
|
}
|
|
69
63
|
|
|
70
|
-
|
|
64
|
+
// Every greeting variant — the no-onboarding CANNED greeting and all four
|
|
65
|
+
// personalized tones — ends with a migration offer. The opener (task-vs-talk)
|
|
66
|
+
// and the migration offer are kept as separate per-tone maps and composed in
|
|
67
|
+
// `buildInvite`, rather than inlined as one full sentence per variant, so the
|
|
68
|
+
// offer cannot be silently dropped from a variant when the opener copy is
|
|
69
|
+
// edited. The first-greeting test asserts every variant still includes it.
|
|
70
|
+
const TONE_INVITE_OPENER: Record<Tone, string> = {
|
|
71
71
|
grounded:
|
|
72
72
|
"We can get into whatever you've got, or just talk first — that tends to go better. Up to you.",
|
|
73
73
|
warm: "We can start on something specific, or just talk for a bit first — honestly that tends to work out better. Either way, I'm here.",
|
|
74
74
|
energetic:
|
|
75
|
-
"We can jump straight into whatever you've got, or take a few minutes to just talk first.
|
|
75
|
+
"We can jump straight into whatever you've got, or take a few minutes to just talk first.",
|
|
76
76
|
poetic:
|
|
77
77
|
"We can start with whatever's in front of you, or just talk for a bit first. Either way.",
|
|
78
78
|
};
|
|
79
79
|
|
|
80
|
+
const TONE_MIGRATION_OFFER: Record<Tone, string> = {
|
|
81
|
+
grounded:
|
|
82
|
+
"If you have context or workflows from another assistant or harness, bring them over early and I'll help port them.",
|
|
83
|
+
warm: "If you have context or workflows from another assistant or harness, bring them over early and I can help port them.",
|
|
84
|
+
energetic:
|
|
85
|
+
"If you've got context or workflows from another assistant or harness, bring them over early and I'll port them with you. What sounds right?",
|
|
86
|
+
poetic:
|
|
87
|
+
"If there's old context or workflows from another assistant or harness, bring them over early and I'll help port them.",
|
|
88
|
+
};
|
|
89
|
+
|
|
80
90
|
const TONE_GOOGLE_SCAN: Record<Tone, string> = {
|
|
81
91
|
grounded:
|
|
82
|
-
"I can scan
|
|
83
|
-
warm: "Also — I can scan
|
|
92
|
+
"I can scan Gmail in the background while we talk — just say the word.",
|
|
93
|
+
warm: "Also — I can scan Gmail in the background while we chat, if you'd like. Just let me know.",
|
|
84
94
|
energetic:
|
|
85
|
-
"Oh, and I can scan
|
|
95
|
+
"Oh, and I can scan Gmail in the background right now — want me to?",
|
|
86
96
|
poetic:
|
|
87
|
-
"I can also look through
|
|
97
|
+
"I can also look through Gmail quietly in the background — say the word.",
|
|
88
98
|
};
|
|
89
99
|
|
|
90
100
|
function buildInvite(tone: Tone = "grounded"): string {
|
|
91
|
-
return
|
|
101
|
+
return `${TONE_INVITE_OPENER[tone]} ${TONE_MIGRATION_OFFER[tone]}`;
|
|
92
102
|
}
|
|
93
103
|
|
|
104
|
+
// Composed from the grounded opener + migration offer so the no-onboarding
|
|
105
|
+
// greeting reuses the same source as the personalized grounded greeting rather
|
|
106
|
+
// than duplicating the copy. Defined after the tone maps so they are
|
|
107
|
+
// initialized before this module-level evaluation runs.
|
|
108
|
+
export const CANNED_FIRST_GREETING = ["Hey,", "", buildInvite("grounded")].join(
|
|
109
|
+
"\n",
|
|
110
|
+
);
|
|
111
|
+
|
|
94
112
|
const VALID_TONES = new Set<string>([
|
|
95
113
|
"grounded",
|
|
96
114
|
"warm",
|
|
@@ -36,7 +36,15 @@ export function handleConfirmationResponse(msg: ConfirmationResponse): void {
|
|
|
36
36
|
undefined,
|
|
37
37
|
{ source: "button" },
|
|
38
38
|
);
|
|
39
|
-
|
|
39
|
+
// Idempotent cleanup: the prompter's `resolveConfirmation` already
|
|
40
|
+
// resolved the interaction with the correct approved/rejected state
|
|
41
|
+
// before we reach here, so the entry is typically gone. This call is
|
|
42
|
+
// a safety net for paths where the prompter no-ops; map decision to
|
|
43
|
+
// state to keep the emitted event accurate when it does fire.
|
|
44
|
+
pendingInteractions.resolve(
|
|
45
|
+
msg.requestId,
|
|
46
|
+
decision === "allow" ? "approved" : "rejected",
|
|
47
|
+
);
|
|
40
48
|
return;
|
|
41
49
|
}
|
|
42
50
|
}
|
|
@@ -49,13 +57,13 @@ export function handleConfirmationResponse(msg: ConfirmationResponse): void {
|
|
|
49
57
|
/**
|
|
50
58
|
* Clear all conversations and DB conversations. Returns the number of conversations cleared.
|
|
51
59
|
*/
|
|
52
|
-
export function clearAllConversations(): number {
|
|
60
|
+
export async function clearAllConversations(): Promise<number> {
|
|
53
61
|
const cleared = clearAllActiveConversations();
|
|
54
62
|
// Also clear DB conversations. When a new local connection triggers
|
|
55
63
|
// sendInitialConversation, it auto-creates a conversation if none exist.
|
|
56
64
|
// Without this DB clear, that auto-created row survives, contradicting
|
|
57
65
|
// the "clear all conversations" intent.
|
|
58
|
-
clearAll();
|
|
66
|
+
await clearAll();
|
|
59
67
|
return cleared;
|
|
60
68
|
}
|
|
61
69
|
|
|
@@ -85,7 +85,12 @@ export interface HistorySurface {
|
|
|
85
85
|
surfaceType: string;
|
|
86
86
|
title?: string;
|
|
87
87
|
data: Record<string, unknown>;
|
|
88
|
-
actions?: Array<{
|
|
88
|
+
actions?: Array<{
|
|
89
|
+
id: string;
|
|
90
|
+
label: string;
|
|
91
|
+
style?: string;
|
|
92
|
+
data?: Record<string, unknown>;
|
|
93
|
+
}>;
|
|
89
94
|
display?: string;
|
|
90
95
|
persistent?: boolean;
|
|
91
96
|
completed?: boolean;
|
|
@@ -185,7 +185,7 @@ export class HostBrowserProxy {
|
|
|
185
185
|
let detachAbort: () => void = () => {};
|
|
186
186
|
|
|
187
187
|
const timer = setTimeout(() => {
|
|
188
|
-
pendingInteractions.resolve(requestId);
|
|
188
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
189
189
|
log.warn(
|
|
190
190
|
{ requestId, cdpMethod: input.cdpMethod },
|
|
191
191
|
"Host browser proxy request timed out",
|
|
@@ -200,7 +200,7 @@ export class HostBrowserProxy {
|
|
|
200
200
|
if (signal) {
|
|
201
201
|
const onAbort = () => {
|
|
202
202
|
if (pendingInteractions.get(requestId)) {
|
|
203
|
-
pendingInteractions.resolve(requestId);
|
|
203
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
204
204
|
try {
|
|
205
205
|
broadcastMessage({
|
|
206
206
|
type: "host_browser_cancel",
|
|
@@ -229,7 +229,7 @@ export class HostBrowserProxy {
|
|
|
229
229
|
|
|
230
230
|
try {
|
|
231
231
|
if (!preferredClient) {
|
|
232
|
-
pendingInteractions.resolve(requestId);
|
|
232
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
233
233
|
reject(
|
|
234
234
|
new Error(
|
|
235
235
|
"host_browser send failed: no active extension connection",
|
|
@@ -244,7 +244,7 @@ export class HostBrowserProxy {
|
|
|
244
244
|
{ targetClientId: preferredClient.clientId },
|
|
245
245
|
);
|
|
246
246
|
} catch (err) {
|
|
247
|
-
pendingInteractions.resolve(requestId);
|
|
247
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
248
248
|
log.warn(
|
|
249
249
|
{ requestId, cdpMethod: input.cdpMethod, err },
|
|
250
250
|
"Host browser proxy send failed",
|
|
@@ -256,7 +256,7 @@ export class HostBrowserProxy {
|
|
|
256
256
|
|
|
257
257
|
dispose(): void {
|
|
258
258
|
for (const entry of pendingInteractions.getByKind("host_browser")) {
|
|
259
|
-
pendingInteractions.resolve(entry.requestId);
|
|
259
|
+
pendingInteractions.resolve(entry.requestId, "cancelled");
|
|
260
260
|
try {
|
|
261
261
|
broadcastMessage({
|
|
262
262
|
type: "host_browser_cancel",
|
|
@@ -195,7 +195,7 @@ export class HostCuProxy {
|
|
|
195
195
|
|
|
196
196
|
const timer = setTimeout(() => {
|
|
197
197
|
this._ownedRequests.delete(requestId);
|
|
198
|
-
pendingInteractions.resolve(requestId);
|
|
198
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
199
199
|
log.warn({ requestId, toolName }, "Host CU proxy request timed out");
|
|
200
200
|
resolve({
|
|
201
201
|
content: "Host CU proxy timed out waiting for client response",
|
|
@@ -207,7 +207,7 @@ export class HostCuProxy {
|
|
|
207
207
|
const onAbort = () => {
|
|
208
208
|
if (pendingInteractions.get(requestId)) {
|
|
209
209
|
this._ownedRequests.delete(requestId);
|
|
210
|
-
pendingInteractions.resolve(requestId);
|
|
210
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
211
211
|
try {
|
|
212
212
|
broadcastMessage(
|
|
213
213
|
{
|
|
@@ -263,7 +263,7 @@ export class HostCuProxy {
|
|
|
263
263
|
);
|
|
264
264
|
} catch (err) {
|
|
265
265
|
this._ownedRequests.delete(requestId);
|
|
266
|
-
pendingInteractions.resolve(requestId);
|
|
266
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
267
267
|
log.warn({ requestId, toolName, err }, "Host CU proxy send failed");
|
|
268
268
|
reject(err instanceof Error ? err : new Error(String(err)));
|
|
269
269
|
}
|
|
@@ -447,7 +447,7 @@ export class HostCuProxy {
|
|
|
447
447
|
|
|
448
448
|
dispose(): void {
|
|
449
449
|
for (const requestId of this._ownedRequests) {
|
|
450
|
-
const entry = pendingInteractions.resolve(requestId);
|
|
450
|
+
const entry = pendingInteractions.resolve(requestId, "cancelled");
|
|
451
451
|
if (!entry) continue;
|
|
452
452
|
try {
|
|
453
453
|
broadcastMessage(
|
|
@@ -136,7 +136,7 @@ export class HostFileProxy {
|
|
|
136
136
|
let detachAbort: () => void = () => {};
|
|
137
137
|
|
|
138
138
|
const timer = setTimeout(() => {
|
|
139
|
-
pendingInteractions.resolve(requestId);
|
|
139
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
140
140
|
log.warn(
|
|
141
141
|
{ requestId, operation: input.operation },
|
|
142
142
|
"Host file proxy request timed out",
|
|
@@ -152,7 +152,7 @@ export class HostFileProxy {
|
|
|
152
152
|
if (signal) {
|
|
153
153
|
const onAbort = () => {
|
|
154
154
|
if (pendingInteractions.get(requestId)) {
|
|
155
|
-
pendingInteractions.resolve(requestId);
|
|
155
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
156
156
|
try {
|
|
157
157
|
broadcastMessage(
|
|
158
158
|
{
|
|
@@ -210,7 +210,7 @@ export class HostFileProxy {
|
|
|
210
210
|
{ targetClientId: resolvedTargetClientId },
|
|
211
211
|
);
|
|
212
212
|
} catch (err) {
|
|
213
|
-
pendingInteractions.resolve(requestId);
|
|
213
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
214
214
|
log.warn(
|
|
215
215
|
{ requestId, operation: input.operation, err },
|
|
216
216
|
"Host file proxy send failed",
|
|
@@ -252,7 +252,7 @@ export class HostFileProxy {
|
|
|
252
252
|
|
|
253
253
|
dispose(): void {
|
|
254
254
|
for (const entry of pendingInteractions.getByKind("host_file")) {
|
|
255
|
-
pendingInteractions.resolve(entry.requestId);
|
|
255
|
+
pendingInteractions.resolve(entry.requestId, "cancelled");
|
|
256
256
|
try {
|
|
257
257
|
broadcastMessage(
|
|
258
258
|
{
|
|
@@ -154,7 +154,7 @@ export abstract class HostProxyBase<TRequest, TResultPayload> {
|
|
|
154
154
|
const timer = setTimeout(() => {
|
|
155
155
|
this.pending.delete(requestId);
|
|
156
156
|
detachAbort();
|
|
157
|
-
pendingInteractions.resolve(requestId);
|
|
157
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
158
158
|
log.warn(
|
|
159
159
|
{ requestId, toolName, kind: this.resultPendingKind },
|
|
160
160
|
"Host proxy request timed out",
|
|
@@ -168,7 +168,7 @@ export abstract class HostProxyBase<TRequest, TResultPayload> {
|
|
|
168
168
|
clearTimeout(timer);
|
|
169
169
|
this.pending.delete(requestId);
|
|
170
170
|
detachAbort();
|
|
171
|
-
pendingInteractions.resolve(requestId);
|
|
171
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
172
172
|
try {
|
|
173
173
|
broadcastDynamic(
|
|
174
174
|
{
|
|
@@ -239,7 +239,7 @@ export abstract class HostProxyBase<TRequest, TResultPayload> {
|
|
|
239
239
|
clearTimeout(timer);
|
|
240
240
|
this.pending.delete(requestId);
|
|
241
241
|
detachAbort();
|
|
242
|
-
pendingInteractions.resolve(requestId);
|
|
242
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
243
243
|
log.warn(
|
|
244
244
|
{ requestId, toolName, kind: this.resultPendingKind, err },
|
|
245
245
|
"Host proxy send failed",
|
|
@@ -285,7 +285,7 @@ export abstract class HostProxyBase<TRequest, TResultPayload> {
|
|
|
285
285
|
for (const [requestId, entry] of this.pending) {
|
|
286
286
|
clearTimeout(entry.timer);
|
|
287
287
|
entry.detachAbort();
|
|
288
|
-
pendingInteractions.resolve(requestId);
|
|
288
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
289
289
|
try {
|
|
290
290
|
broadcastDynamic(
|
|
291
291
|
{
|
|
@@ -205,7 +205,7 @@ export class HostTransferProxy {
|
|
|
205
205
|
|
|
206
206
|
const timer = setTimeout(() => {
|
|
207
207
|
this.transfers.delete(transferId);
|
|
208
|
-
pendingInteractions.resolve(requestId);
|
|
208
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
209
209
|
log.warn(
|
|
210
210
|
{ requestId, transferId, direction: "to_host" },
|
|
211
211
|
"Host transfer proxy request timed out",
|
|
@@ -222,7 +222,7 @@ export class HostTransferProxy {
|
|
|
222
222
|
const onAbort = () => {
|
|
223
223
|
if (pendingInteractions.get(requestId)) {
|
|
224
224
|
this.transfers.delete(transferId);
|
|
225
|
-
pendingInteractions.resolve(requestId);
|
|
225
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
226
226
|
try {
|
|
227
227
|
broadcastMessage(
|
|
228
228
|
{
|
|
@@ -301,7 +301,7 @@ export class HostTransferProxy {
|
|
|
301
301
|
);
|
|
302
302
|
} catch (err) {
|
|
303
303
|
this.transfers.delete(transferId);
|
|
304
|
-
pendingInteractions.resolve(requestId);
|
|
304
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
305
305
|
log.warn(
|
|
306
306
|
{ requestId, transferId, err },
|
|
307
307
|
"Host transfer proxy send failed",
|
|
@@ -396,7 +396,7 @@ export class HostTransferProxy {
|
|
|
396
396
|
|
|
397
397
|
const timer = setTimeout(() => {
|
|
398
398
|
this.transfers.delete(transferId);
|
|
399
|
-
pendingInteractions.resolve(requestId);
|
|
399
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
400
400
|
log.warn(
|
|
401
401
|
{ requestId, transferId, direction: "to_sandbox" },
|
|
402
402
|
"Host transfer proxy request timed out",
|
|
@@ -413,7 +413,7 @@ export class HostTransferProxy {
|
|
|
413
413
|
const onAbort = () => {
|
|
414
414
|
if (pendingInteractions.get(requestId)) {
|
|
415
415
|
this.transfers.delete(transferId);
|
|
416
|
-
pendingInteractions.resolve(requestId);
|
|
416
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
417
417
|
try {
|
|
418
418
|
broadcastMessage(
|
|
419
419
|
{
|
|
@@ -487,7 +487,7 @@ export class HostTransferProxy {
|
|
|
487
487
|
);
|
|
488
488
|
} catch (err) {
|
|
489
489
|
this.transfers.delete(transferId);
|
|
490
|
-
pendingInteractions.resolve(requestId);
|
|
490
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
491
491
|
log.warn(
|
|
492
492
|
{ requestId, transferId, err },
|
|
493
493
|
"Host transfer proxy send failed",
|
|
@@ -622,14 +622,14 @@ export class HostTransferProxy {
|
|
|
622
622
|
|
|
623
623
|
if (entry.overwrite !== true && existsSync(entry.filePath)) {
|
|
624
624
|
const errorMsg = `Destination file already exists: ${entry.filePath}. Set overwrite to true to replace it.`;
|
|
625
|
-
const interaction = pendingInteractions.resolve(requestId);
|
|
625
|
+
const interaction = pendingInteractions.resolve(requestId, "answered");
|
|
626
626
|
this.transfers.delete(transferId);
|
|
627
627
|
interaction?.rpcResolve?.({ content: errorMsg, isError: true });
|
|
628
628
|
return { accepted: false, error: errorMsg };
|
|
629
629
|
}
|
|
630
630
|
|
|
631
631
|
const cleanup = () => {
|
|
632
|
-
pendingInteractions.resolve(requestId);
|
|
632
|
+
pendingInteractions.resolve(requestId, "answered");
|
|
633
633
|
this.transfers.delete(transferId);
|
|
634
634
|
};
|
|
635
635
|
|
|
@@ -662,7 +662,7 @@ export class HostTransferProxy {
|
|
|
662
662
|
if (!interaction) return;
|
|
663
663
|
const transferId = interaction.metadata?.transferId as string | undefined;
|
|
664
664
|
if (transferId) this.transfers.delete(transferId);
|
|
665
|
-
pendingInteractions.resolve(requestId);
|
|
665
|
+
pendingInteractions.resolve(requestId, "cancelled");
|
|
666
666
|
try {
|
|
667
667
|
broadcastMessage(
|
|
668
668
|
{
|
|
@@ -718,7 +718,7 @@ export class HostTransferProxy {
|
|
|
718
718
|
for (const entry of pendingInteractions.getByKind("host_transfer")) {
|
|
719
719
|
const transferId = entry.metadata?.transferId as string | undefined;
|
|
720
720
|
if (transferId) this.transfers.delete(transferId);
|
|
721
|
-
pendingInteractions.resolve(entry.requestId);
|
|
721
|
+
pendingInteractions.resolve(entry.requestId, "cancelled");
|
|
722
722
|
try {
|
|
723
723
|
broadcastMessage(
|
|
724
724
|
{
|