@vellumai/assistant 0.7.0 → 0.7.1
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 +6 -7
- package/Dockerfile +1 -0
- package/README.md +2 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +79 -139
- package/bun.lock +3 -0
- package/docs/architecture/security.md +18 -16
- package/knip.json +1 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -5
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
- package/node_modules/@vellumai/slack-text/bun.lock +24 -0
- package/node_modules/@vellumai/slack-text/package.json +18 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
- package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
- package/openapi.yaml +294 -107
- package/package.json +4 -2
- package/scripts/generate-openapi.ts +16 -111
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
- package/src/__tests__/anthropic-provider.test.ts +56 -13
- package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
- package/src/__tests__/app-conversation-ids.test.ts +151 -0
- package/src/__tests__/approval-cascade.test.ts +0 -15
- package/src/__tests__/approval-routes-http.test.ts +6 -17
- package/src/__tests__/assistant-event-hub.test.ts +126 -77
- package/src/__tests__/assistant-event.test.ts +0 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +37 -15
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -29
- package/src/__tests__/background-shell-host-bash.test.ts +34 -43
- package/src/__tests__/call-controller.test.ts +1 -1
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/channel-approval-routes.test.ts +10 -296
- package/src/__tests__/channel-approvals.test.ts +25 -17
- package/src/__tests__/channel-guardian.test.ts +100 -146
- package/src/__tests__/checker.test.ts +20 -34
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/config-schema.test.ts +6 -48
- package/src/__tests__/config-watcher.test.ts +12 -0
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contacts-write.test.ts +2 -64
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-memory-source.test.ts +120 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +49 -0
- package/src/__tests__/context-search-workspace-source.test.ts +9 -22
- package/src/__tests__/context-window-manager.test.ts +46 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
- package/src/__tests__/conversation-agent-loop.test.ts +980 -13
- package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
- package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
- package/src/__tests__/conversation-lifecycle.test.ts +4 -4
- package/src/__tests__/conversation-process-callsite.test.ts +79 -2
- package/src/__tests__/conversation-queue.test.ts +3 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +1 -161
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -32
- package/src/__tests__/conversation-routes-slash-commands.test.ts +75 -66
- package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
- package/src/__tests__/conversation-slash-commands.test.ts +24 -4
- package/src/__tests__/conversation-slash-queue.test.ts +2 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-starter-routes.test.ts +79 -2
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
- package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
- package/src/__tests__/conversation-usage.test.ts +253 -3
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
- package/src/__tests__/credential-health-service.test.ts +68 -0
- package/src/__tests__/credential-security-e2e.test.ts +4 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/cu-unified-flow.test.ts +33 -16
- package/src/__tests__/daemon-assistant-events.test.ts +34 -21
- package/src/__tests__/daemon-credential-client.test.ts +4 -1
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/events-client-registration.test.ts +193 -49
- package/src/__tests__/filing-service.test.ts +58 -7
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-grant-minting.test.ts +7 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +32 -11
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -83
- package/src/__tests__/headless-browser-mode.test.ts +4 -9
- package/src/__tests__/headless-browser-navigate.test.ts +21 -20
- package/src/__tests__/heartbeat-service.test.ts +289 -7
- package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/host-bash-proxy.test.ts +46 -122
- package/src/__tests__/host-browser-e2e-cloud.test.ts +36 -497
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +26 -96
- package/src/__tests__/host-browser-proxy.test.ts +111 -185
- package/src/__tests__/host-browser-routes.test.ts +45 -75
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +26 -30
- package/src/__tests__/host-cu-proxy.test.ts +56 -111
- package/src/__tests__/host-file-proxy.test.ts +44 -98
- package/src/__tests__/host-file-read-tool.test.ts +42 -21
- package/src/__tests__/host-shell-tool.test.ts +33 -68
- package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
- package/src/__tests__/host-transfer-proxy.test.ts +43 -53
- package/src/__tests__/http-user-message-parity.test.ts +0 -6
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/injector-chain.test.ts +10 -5
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -66
- package/src/__tests__/inline-skill-load-permissions.test.ts +0 -2
- package/src/__tests__/install-skill-routing.test.ts +1 -13
- package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
- package/src/__tests__/llm-catalog-parity.test.ts +90 -0
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-resolver.test.ts +80 -12
- package/src/__tests__/llm-usage-store.test.ts +269 -4
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/managed-profile-guard.test.ts +225 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -10
- package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
- package/src/__tests__/migration-export-http.test.ts +33 -26
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
- package/src/__tests__/migration-import-commit-http.test.ts +66 -21
- package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
- package/src/__tests__/migration-import-from-url.test.ts +20 -6
- package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
- package/src/__tests__/migration-parity-persistence.test.ts +62 -25
- package/src/__tests__/migration-transport.test.ts +115 -23
- package/src/__tests__/migration-validate-http.test.ts +105 -80
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/non-member-access-request.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/oauth-store.test.ts +19 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +21 -12
- package/src/__tests__/prechat-onboarding-contract.test.ts +31 -7
- package/src/__tests__/pricing.test.ts +68 -4
- package/src/__tests__/process-message-background-slack.test.ts +331 -0
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/reaction-persistence.test.ts +9 -6
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/recording-handler.test.ts +64 -81
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/relay-server.test.ts +18 -13
- package/src/__tests__/require-fresh-approval.test.ts +13 -22
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +3 -12
- package/src/__tests__/search-skills-unified.test.ts +9 -15
- package/src/__tests__/secret-ingress-cli.test.ts +2 -5
- package/src/__tests__/secret-ingress-http.test.ts +0 -4
- package/src/__tests__/secret-onetime-send.test.ts +4 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
- package/src/__tests__/secret-response-routing.test.ts +29 -15
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +9 -24
- package/src/__tests__/settings-routes.test.ts +1 -1
- package/src/__tests__/shell-credential-ref.test.ts +0 -8
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -56
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -11
- package/src/__tests__/skill-tool-factory.test.ts +97 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-inbound-verification.test.ts +1 -62
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +80 -83
- package/src/__tests__/system-prompt.test.ts +115 -13
- package/src/__tests__/terminal-tools.test.ts +0 -89
- package/src/__tests__/thread-backfill.test.ts +945 -31
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -6
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -16
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -7
- package/src/__tests__/tool-executor.test.ts +12 -19
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-trace-listener.test.ts +0 -17
- package/src/__tests__/transfer-progress-screen.test.ts +63 -26
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
- package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cli.test.ts +143 -0
- package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
- package/src/__tests__/usage-routes.test.ts +150 -0
- package/src/__tests__/validation-results-screen.test.ts +39 -16
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +49 -137
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -7
- package/src/__tests__/voice-session-bridge.test.ts +5 -5
- package/src/__tests__/workspace-migration-062-drop-memory-v2-edges-json.test.ts +103 -0
- package/src/__tests__/workspace-migration-063-release-notes-dynamic-model-context.test.ts +77 -0
- package/src/__tests__/workspace-migration-064-unwind-main-agent-opus-seed.test.ts +225 -0
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
- package/src/acp/index.ts +0 -15
- package/src/acp/session-manager.ts +37 -34
- package/src/agent/loop.ts +16 -1
- package/src/approvals/AGENTS.md +4 -0
- package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
- package/src/approvals/guardian-request-resolvers.ts +10 -2
- package/src/backup/__tests__/backup-worker.test.ts +36 -8
- package/src/backup/__tests__/paths.test.ts +2 -2
- package/src/backup/__tests__/restore.test.ts +45 -28
- package/src/backup/backup-worker.ts +36 -2
- package/src/backup/paths.ts +9 -6
- package/src/browser-session/events.ts +0 -9
- package/src/calls/call-store.ts +1 -34
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/relay-server.ts +0 -24
- package/src/calls/twilio-rest.ts +0 -38
- package/src/calls/twilio-routes.ts +1 -1
- package/src/calls/voice-session-bridge.ts +7 -38
- package/src/channels/types.ts +1 -36
- package/src/cli/commands/__tests__/cache.test.ts +152 -5
- package/src/cli/commands/__tests__/memory-v2.test.ts +14 -28
- package/src/cli/commands/__tests__/trust.test.ts +21 -387
- package/src/cli/commands/backup.ts +4 -4
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +153 -82
- package/src/cli/commands/clients.ts +63 -5
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +231 -76
- package/src/cli/commands/keys.ts +4 -1
- package/src/cli/commands/memory-v2.ts +24 -52
- package/src/cli/commands/oauth/shared.ts +2 -29
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/skills.ts +77 -35
- package/src/cli/commands/trust.ts +70 -430
- package/src/cli/commands/usage.ts +25 -16
- package/src/cli/lib/daemon-credential-client.ts +14 -0
- package/src/cli/program.ts +2 -0
- package/src/cli.ts +0 -21
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -4
- package/src/config/env-registry.ts +12 -2
- package/src/config/env.ts +3 -14
- package/src/config/feature-flag-registry.json +30 -30
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +58 -22
- package/src/config/loader.ts +3 -3
- package/src/config/schema.ts +2 -158
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -0
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -5
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/ingress.ts +1 -1
- package/src/config/schemas/llm.ts +31 -3
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-v2.ts +9 -0
- package/src/config/schemas/security.ts +1 -42
- package/src/config/schemas/services.ts +6 -6
- package/src/config/schemas/skills.ts +5 -5
- package/src/config/schemas/tts.ts +1 -1
- package/src/config/seed-inference-profiles.ts +117 -0
- package/src/config/skills.ts +0 -90
- package/src/config/types.ts +3 -6
- package/src/contacts/contact-store.ts +0 -17
- package/src/contacts/contacts-write.ts +1 -105
- package/src/context/window-manager.ts +44 -5
- package/src/credential-execution/process-manager.ts +34 -10
- package/src/credential-health/credential-health-service.ts +21 -16
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
- package/src/daemon/connection-policy.ts +1 -26
- package/src/daemon/conversation-agent-loop-handlers.ts +53 -4
- package/src/daemon/conversation-agent-loop.ts +277 -36
- package/src/daemon/conversation-history.ts +8 -8
- package/src/daemon/conversation-launch.ts +20 -135
- package/src/daemon/conversation-lifecycle.ts +1 -1
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-process.ts +83 -163
- package/src/daemon/conversation-runtime-assembly.ts +219 -76
- package/src/daemon/conversation-slash.ts +47 -5
- package/src/daemon/conversation-store.ts +7 -31
- package/src/daemon/conversation-surfaces.ts +22 -28
- package/src/daemon/conversation-tool-setup.ts +3 -33
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +117 -233
- package/src/daemon/daemon-control.ts +3 -71
- package/src/daemon/daemon-skill-host.ts +8 -11
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +12 -12
- package/src/daemon/handlers/config-ingress.ts +4 -165
- package/src/daemon/handlers/config-model.ts +1 -1
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +11 -190
- package/src/daemon/handlers/recording.ts +26 -158
- package/src/daemon/handlers/shared.ts +23 -71
- package/src/daemon/handlers/skills.ts +42 -93
- package/src/daemon/host-bash-proxy.ts +67 -45
- package/src/daemon/host-browser-proxy.ts +65 -27
- package/src/daemon/host-cu-proxy.ts +40 -39
- package/src/daemon/host-file-proxy.ts +58 -37
- package/src/daemon/host-transfer-proxy.ts +84 -46
- package/src/daemon/lifecycle.ts +49 -15
- package/src/daemon/message-types/conversations.ts +7 -0
- package/src/daemon/message-types/host-bash.ts +1 -0
- package/src/daemon/message-types/host-cu.ts +1 -0
- package/src/daemon/message-types/host-file.ts +1 -0
- package/src/daemon/message-types/host-transfer.ts +1 -0
- package/src/daemon/message-types/messages.ts +10 -9
- package/src/daemon/message-types/workspace.ts +1 -1
- package/src/daemon/process-message.ts +102 -239
- package/src/daemon/server.ts +13 -462
- package/src/daemon/shutdown-handlers.ts +2 -2
- package/src/daemon/tool-side-effects.ts +125 -107
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +4 -9
- package/src/events/domain-events.ts +0 -8
- package/src/events/tool-audit-listener.ts +3 -1
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +0 -17
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +13 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +6 -2
- package/src/heartbeat/heartbeat-service.ts +23 -5
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/relationship-state-writer.test.ts +30 -0
- package/src/home/feed-writer.ts +1 -2
- package/src/home/relationship-state-writer.ts +16 -3
- package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
- package/src/ipc/assistant-server.ts +3 -10
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
- package/src/ipc/routes/route-adapter.ts +1 -1
- package/src/ipc/routes/trust-rules.test.ts +0 -95
- package/src/ipc/skill-ipc-types.ts +41 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
- package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
- package/src/ipc/skill-routes/events.ts +12 -23
- package/src/ipc/skill-routes/identity.ts +4 -17
- package/src/ipc/skill-routes/index.ts +1 -1
- package/src/ipc/skill-server.ts +6 -39
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
- package/src/live-voice/protocol.ts +4 -13
- package/src/mcp/manager.ts +0 -5
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/app-git-service.ts +0 -32
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +6 -0
- package/src/memory/context-search/sources/memory-v2.ts +578 -0
- package/src/memory/context-search/sources/memory.ts +5 -0
- package/src/memory/context-search/sources/pkb.ts +10 -1
- package/src/memory/context-search/sources/workspace.ts +3 -2
- package/src/memory/conversation-crud.ts +29 -4
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +14 -0
- package/src/memory/embedding-backend.ts +3 -21
- package/src/memory/embedding-gemini.ts +0 -2
- package/src/memory/embedding-local.ts +6 -6
- package/src/memory/embedding-ollama.ts +6 -6
- package/src/memory/embedding-openai.ts +6 -6
- package/src/memory/embedding-types.ts +21 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +3 -7
- package/src/memory/graph/conversation-graph-memory.ts +35 -13
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/guardian-action-store.ts +0 -83
- package/src/memory/guardian-approvals.ts +0 -48
- package/src/memory/indexer.ts +1 -15
- package/src/memory/job-handlers/conversation-starters.ts +36 -53
- package/src/memory/job-utils.ts +0 -6
- package/src/memory/jobs-store.ts +0 -1
- package/src/memory/jobs-worker.ts +2 -16
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +129 -43
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/233-document-conversations.ts +54 -0
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
- package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
- package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
- package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
- package/src/memory/migrations/index.ts +14 -0
- package/src/memory/migrations/registry.ts +24 -0
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/conversations.ts +7 -0
- package/src/memory/schema/infrastructure.ts +25 -0
- package/src/memory/search/semantic.ts +5 -16
- package/src/memory/tool-usage-store.ts +2 -0
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation.test.ts +289 -90
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
- package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +384 -15
- package/src/memory/v2/__tests__/migration.test.ts +64 -36
- package/src/memory/v2/__tests__/page-store.test.ts +191 -8
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
- package/src/memory/v2/__tests__/static-context.test.ts +153 -0
- package/src/memory/v2/activation.ts +168 -97
- package/src/memory/v2/backfill-jobs.ts +15 -100
- package/src/memory/v2/consolidation-job.ts +14 -12
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +182 -58
- package/src/memory/v2/migration.ts +57 -64
- package/src/memory/v2/now-text.ts +2 -3
- package/src/memory/v2/page-store.ts +168 -31
- package/src/memory/v2/prompts/consolidation.ts +118 -42
- package/src/memory/v2/prompts/sweep.ts +3 -3
- package/src/memory/v2/skill-store.ts +55 -7
- package/src/memory/v2/static-context.ts +62 -0
- package/src/memory/v2/types.ts +10 -20
- package/src/memory/validation.ts +0 -11
- package/src/messaging/draft-store.ts +0 -6
- package/src/messaging/provider-types.ts +8 -0
- package/src/messaging/provider.ts +7 -0
- package/src/messaging/providers/gmail/client.ts +1 -121
- package/src/messaging/providers/outlook/client.ts +0 -73
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +226 -0
- package/src/messaging/providers/slack/adapter.ts +122 -21
- package/src/messaging/providers/slack/backfill.test.ts +95 -6
- package/src/messaging/providers/slack/backfill.ts +89 -11
- package/src/messaging/providers/slack/client.ts +10 -124
- package/src/messaging/providers/slack/message-metadata.ts +12 -2
- package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
- package/src/messaging/providers/slack/render-transcript.ts +126 -25
- package/src/messaging/providers/slack/types.ts +1 -0
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +8 -16
- package/src/oauth/credential-token-resolver.ts +97 -0
- package/src/oauth/manual-token-connection.ts +30 -34
- package/src/oauth/oauth-store.ts +6 -4
- package/src/outbound-proxy/certs.ts +0 -7
- package/src/outbound-proxy/config.ts +0 -74
- package/src/outbound-proxy/health.ts +0 -44
- package/src/outbound-proxy/index.ts +0 -22
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.ts +4 -1
- package/src/permissions/gateway-threshold-reader.ts +4 -1
- package/src/permissions/prompter.ts +9 -2
- package/src/permissions/secret-prompter.ts +21 -48
- package/src/permissions/types.ts +33 -0
- package/src/permissions/workspace-policy.ts +0 -5
- package/src/platform/sync-identity.ts +0 -8
- package/src/plugins/defaults/injectors.ts +69 -2
- package/src/plugins/defaults/overflow-reduce.ts +3 -2
- package/src/plugins/types.ts +8 -0
- package/src/prompts/system-prompt.ts +34 -70
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/retry-callsite.test.ts +138 -1
- package/src/providers/anthropic/client.ts +72 -33
- package/src/providers/call-site-routing.ts +42 -3
- package/src/providers/gemini/client.ts +18 -2
- package/src/providers/managed-proxy/context.ts +0 -5
- package/src/providers/model-catalog.ts +105 -19
- package/src/providers/openai/chat-completions-provider.ts +6 -0
- package/src/providers/openai/responses-provider.ts +7 -1
- package/src/providers/provider-send-message.ts +45 -2
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +14 -9
- package/src/providers/retry.ts +96 -8
- package/src/providers/types.ts +13 -0
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +10 -6
- package/src/runtime/__tests__/agent-wake.test.ts +89 -0
- package/src/runtime/agent-wake.ts +39 -2
- package/src/runtime/assistant-event-hub.ts +541 -45
- package/src/runtime/assistant-event.ts +1 -6
- package/src/runtime/auth/context.ts +0 -9
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/route-policy.ts +11 -9
- package/src/runtime/auth/token-service.ts +0 -11
- package/src/runtime/channel-approvals.ts +6 -2
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/http-errors.ts +0 -34
- package/src/runtime/http-router.ts +6 -3
- package/src/runtime/http-server.ts +22 -82
- package/src/runtime/http-types.ts +5 -0
- package/src/runtime/interactive-ui.ts +0 -1
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
- package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +71 -27
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +41 -2
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +143 -79
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +371 -0
- package/src/runtime/migrations/migration-transport.ts +46 -13
- package/src/runtime/migrations/migration-wizard.ts +2 -2
- package/src/runtime/migrations/origin-mode.ts +40 -0
- package/src/runtime/migrations/vbundle-builder.ts +133 -79
- package/src/runtime/migrations/vbundle-import-analyzer.ts +9 -7
- package/src/runtime/migrations/vbundle-importer.ts +7 -7
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +3 -3
- package/src/runtime/migrations/vbundle-streaming-validator.ts +48 -26
- package/src/runtime/migrations/vbundle-validator.ts +214 -41
- package/src/runtime/pending-interactions.ts +13 -4
- package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
- package/src/runtime/routes/__tests__/backup-routes.test.ts +28 -19
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +235 -0
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
- package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/acp-routes.test.ts +0 -3
- package/src/runtime/routes/acp-routes.ts +3 -7
- package/src/runtime/routes/app-management-routes.ts +18 -9
- package/src/runtime/routes/approval-routes.ts +55 -14
- package/src/runtime/routes/avatar-routes.ts +3 -5
- package/src/runtime/routes/browser-routes.ts +1 -15
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +3 -7
- package/src/runtime/routes/channel-route-shared.ts +2 -28
- package/src/runtime/routes/client-routes.ts +45 -12
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/conversation-list-routes.ts +12 -29
- package/src/runtime/routes/conversation-management-routes.ts +14 -51
- package/src/runtime/routes/conversation-query-routes.ts +120 -8
- package/src/runtime/routes/conversation-routes.ts +44 -528
- package/src/runtime/routes/conversation-starter-routes.ts +19 -40
- package/src/runtime/routes/documents-routes.ts +53 -18
- package/src/runtime/routes/events-routes.ts +59 -91
- package/src/runtime/routes/filing-routes.ts +18 -1
- package/src/runtime/routes/guardian-action-routes.ts +4 -9
- package/src/runtime/routes/host-bash-routes.ts +3 -2
- package/src/runtime/routes/host-browser-routes.ts +9 -33
- package/src/runtime/routes/host-cu-routes.ts +6 -1
- package/src/runtime/routes/host-file-routes.ts +3 -2
- package/src/runtime/routes/host-transfer-routes.ts +11 -15
- package/src/runtime/routes/identity-routes.ts +78 -6
- package/src/runtime/routes/inbound-message-handler.ts +580 -137
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -88
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
- package/src/runtime/routes/index.ts +4 -0
- package/src/runtime/routes/integrations/slack/channel.ts +0 -24
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/memory-v2-routes.ts +10 -15
- package/src/runtime/routes/migration-routes.ts +188 -31
- package/src/runtime/routes/playground/guard.ts +1 -1
- package/src/runtime/routes/playground/index.ts +0 -2
- package/src/runtime/routes/recording-routes.ts +4 -24
- package/src/runtime/routes/rename-conversation-routes.ts +2 -6
- package/src/runtime/routes/schedule-routes.ts +3 -6
- package/src/runtime/routes/secret-routes.ts +87 -18
- package/src/runtime/routes/settings-routes.ts +29 -28
- package/src/runtime/routes/skills-routes.ts +12 -31
- package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
- package/src/runtime/routes/task-routes.ts +6 -6
- package/src/runtime/routes/trust-rules-routes.ts +3 -94
- package/src/runtime/routes/types.ts +4 -4
- package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
- package/src/runtime/routes/usage-routes.ts +87 -10
- package/src/runtime/routes/user-routes.ts +17 -31
- package/src/runtime/routes/work-items-routes.ts +1 -4
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
- package/src/runtime/services/analyze-conversation.ts +7 -17
- package/src/runtime/services/conversation-serializer.ts +2 -4
- package/src/runtime/verification-outbound-actions.ts +1 -1
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/schedule/schedule-store.ts +0 -16
- package/src/security/secret-scanner.ts +14 -547
- package/src/security/secure-keys.ts +31 -11
- package/src/security/token-manager.ts +7 -3
- package/src/signals/cancel.ts +16 -25
- package/src/signals/conversation-undo.ts +2 -27
- package/src/signals/emit-event.ts +1 -2
- package/src/signals/user-message.ts +108 -22
- package/src/skills/catalog-install.ts +1 -0
- package/src/skills/clawhub.ts +2 -2
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/subagent/manager.ts +67 -84
- package/src/tasks/task-store.ts +1 -28
- package/src/telemetry/types.ts +6 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +38 -15
- package/src/telemetry/usage-telemetry-reporter.ts +3 -5
- package/src/tools/acp/spawn.test.ts +1 -2
- package/src/tools/acp/steer.test.ts +1 -2
- package/src/tools/browser/__tests__/browser-status.test.ts +44 -127
- package/src/tools/browser/browser-execution.ts +31 -147
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +92 -68
- package/src/tools/browser/cdp-client/factory.ts +48 -76
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/executor.ts +44 -31
- package/src/tools/host-filesystem/edit.ts +3 -2
- package/src/tools/host-filesystem/read.ts +3 -2
- package/src/tools/host-filesystem/transfer.test.ts +45 -42
- package/src/tools/host-filesystem/transfer.ts +4 -3
- package/src/tools/host-filesystem/write.ts +3 -2
- package/src/tools/host-terminal/host-shell.ts +4 -3
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +66 -1
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/terminal/shell.ts +2 -78
- package/src/tools/types.ts +12 -39
- package/src/tts/__tests__/provider-catalog.test.ts +2 -2
- package/src/tts/provider-catalog.ts +1 -1
- package/src/usage/actors.ts +2 -1
- package/src/usage/attribution.ts +185 -0
- package/src/usage/pricing.ts +166 -0
- package/src/usage/types.ts +14 -0
- package/src/util/json.ts +13 -0
- package/src/util/logger.ts +3 -3
- package/src/util/pricing.ts +50 -3
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +4 -3
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
- package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +59 -0
- package/src/workspace/migrations/062-drop-memory-v2-edges-json.ts +27 -0
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +70 -0
- package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +64 -0
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/provider-commit-message-generator.ts +3 -3
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
- package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
- package/src/__tests__/secret-detection-handler.test.ts +0 -67
- package/src/__tests__/secret-scanner-executor.test.ts +0 -450
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
- package/src/memory/v2/__tests__/edges.test.ts +0 -435
- package/src/memory/v2/edges.ts +0 -217
- package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -271
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -254
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
- package/src/tools/secret-detection-handler.ts +0 -269
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
* - conversation-tool-setup.ts — tool definitions, executor, resolveTools callback
|
|
10
10
|
* - conversation-media-retry.ts — media trimming + raceWithTimeout
|
|
11
11
|
* - conversation-process.ts — drainQueue, processMessage
|
|
12
|
-
* - conversation-history.ts — undo,
|
|
12
|
+
* - conversation-history.ts — undo, consolidateAssistantMessages
|
|
13
13
|
* - conversation-surfaces.ts — handleSurfaceAction, handleSurfaceUndo
|
|
14
14
|
* - conversation-workspace.ts — refreshWorkspaceTopLevelContext
|
|
15
15
|
* - conversation-usage.ts — recordUsage
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { ResolvedSystemPrompt } from "../agent/loop.js";
|
|
18
|
+
import type { AgentLoopConfig, ResolvedSystemPrompt } from "../agent/loop.js";
|
|
19
19
|
import { AgentLoop } from "../agent/loop.js";
|
|
20
20
|
import type {
|
|
21
21
|
InterfaceId,
|
|
@@ -23,8 +23,13 @@ import type {
|
|
|
23
23
|
TurnInterfaceContext,
|
|
24
24
|
} from "../channels/types.js";
|
|
25
25
|
import { isAssistantFeatureFlagEnabled } from "../config/assistant-feature-flags.js";
|
|
26
|
+
import {
|
|
27
|
+
contextWindowConfigFromEffective,
|
|
28
|
+
resolveEffectiveContextWindow,
|
|
29
|
+
} from "../config/llm-context-resolution.js";
|
|
26
30
|
import { getConfig } from "../config/loader.js";
|
|
27
31
|
import type { LLMCallSite, Speed } from "../config/schemas/llm.js";
|
|
32
|
+
import type { ContextWindowConfig } from "../config/types.js";
|
|
28
33
|
import {
|
|
29
34
|
ContextWindowManager,
|
|
30
35
|
type ContextWindowResult,
|
|
@@ -36,7 +41,6 @@ import type { AssistantDomainEvents } from "../events/domain-events.js";
|
|
|
36
41
|
import { createToolAuditListener } from "../events/tool-audit-listener.js";
|
|
37
42
|
import { createToolDomainEventPublisher } from "../events/tool-domain-event-publisher.js";
|
|
38
43
|
import { registerToolMetricsLoggingListener } from "../events/tool-metrics-listener.js";
|
|
39
|
-
import { registerToolNotificationListener } from "../events/tool-notification-listener.js";
|
|
40
44
|
import { registerToolPermissionTelemetryListener } from "../events/tool-permission-telemetry-listener.js";
|
|
41
45
|
import {
|
|
42
46
|
registerToolProfilingListener,
|
|
@@ -44,7 +48,11 @@ import {
|
|
|
44
48
|
} from "../events/tool-profiling-listener.js";
|
|
45
49
|
import { registerToolTraceListener } from "../events/tool-trace-listener.js";
|
|
46
50
|
import { resolveCanonicalGuardianRequest } from "../memory/canonical-guardian-store.js";
|
|
47
|
-
import {
|
|
51
|
+
import {
|
|
52
|
+
getConversation,
|
|
53
|
+
getConversationOriginChannel,
|
|
54
|
+
getConversationOverrideProfileFromRow,
|
|
55
|
+
} from "../memory/conversation-crud.js";
|
|
48
56
|
import { ConversationGraphMemory } from "../memory/graph/conversation-graph-memory.js";
|
|
49
57
|
import { PermissionPrompter } from "../permissions/prompter.js";
|
|
50
58
|
import { SecretPrompter } from "../permissions/secret-prompter.js";
|
|
@@ -54,6 +62,7 @@ import { buildSystemPrompt } from "../prompts/system-prompt.js";
|
|
|
54
62
|
import type { Message } from "../providers/types.js";
|
|
55
63
|
import type { Provider } from "../providers/types.js";
|
|
56
64
|
import type { TrustClass } from "../runtime/actor-trust-resolver.js";
|
|
65
|
+
import { broadcastMessage } from "../runtime/assistant-event-hub.js";
|
|
57
66
|
import type { AuthContext } from "../runtime/auth/types.js";
|
|
58
67
|
import type { InteractiveUiResult } from "../runtime/interactive-ui.js";
|
|
59
68
|
import { ToolExecutor } from "../tools/executor.js";
|
|
@@ -68,10 +77,7 @@ import {
|
|
|
68
77
|
trackCompactionOutcome,
|
|
69
78
|
} from "./conversation-agent-loop.js";
|
|
70
79
|
import type { HistoryConversationContext } from "./conversation-history.js";
|
|
71
|
-
import {
|
|
72
|
-
regenerate as regenerateImpl,
|
|
73
|
-
undo as undoImpl,
|
|
74
|
-
} from "./conversation-history.js";
|
|
80
|
+
import { undo as undoImpl } from "./conversation-history.js";
|
|
75
81
|
import {
|
|
76
82
|
abortConversation,
|
|
77
83
|
disposeConversation,
|
|
@@ -92,7 +98,11 @@ import {
|
|
|
92
98
|
} from "./conversation-process.js";
|
|
93
99
|
import type { QueueDrainReason } from "./conversation-queue-manager.js";
|
|
94
100
|
import { MessageQueue } from "./conversation-queue-manager.js";
|
|
95
|
-
import
|
|
101
|
+
import {
|
|
102
|
+
type ChannelCapabilities,
|
|
103
|
+
getSlackCompactionWatermarkForPrefix,
|
|
104
|
+
loadSlackChronologicalContext,
|
|
105
|
+
} from "./conversation-runtime-assembly.js";
|
|
96
106
|
import type { SkillProjectionCache } from "./conversation-skill-tools.js";
|
|
97
107
|
import {
|
|
98
108
|
createSurfaceMutex,
|
|
@@ -107,12 +117,7 @@ import {
|
|
|
107
117
|
createToolExecutor,
|
|
108
118
|
} from "./conversation-tool-setup.js";
|
|
109
119
|
import { refreshWorkspaceTopLevelContextIfNeeded as refreshWorkspaceImpl } from "./conversation-workspace.js";
|
|
110
|
-
import { HostBashProxy } from "./host-bash-proxy.js";
|
|
111
|
-
import { HostBrowserProxy } from "./host-browser-proxy.js";
|
|
112
|
-
import type { CuObservationResult } from "./host-cu-proxy.js";
|
|
113
120
|
import { HostCuProxy } from "./host-cu-proxy.js";
|
|
114
|
-
import { HostFileProxy } from "./host-file-proxy.js";
|
|
115
|
-
import { HostTransferProxy } from "./host-transfer-proxy.js";
|
|
116
121
|
import type {
|
|
117
122
|
ServerMessage,
|
|
118
123
|
SurfaceData,
|
|
@@ -198,24 +203,7 @@ export class Conversation {
|
|
|
198
203
|
/** @internal */ headlessLock = false;
|
|
199
204
|
/** @internal */ taskRunId?: string;
|
|
200
205
|
/** @internal */ callSessionId?: string;
|
|
201
|
-
/** @internal */ hostBashProxy?: HostBashProxy;
|
|
202
|
-
/** @internal */ hostBrowserProxy?: HostBrowserProxy;
|
|
203
206
|
/** @internal */ hostCuProxy?: HostCuProxy;
|
|
204
|
-
/** @internal */ hostFileProxy?: HostFileProxy;
|
|
205
|
-
/** @internal */ hostTransferProxy?: HostTransferProxy;
|
|
206
|
-
/**
|
|
207
|
-
* Optional override sender used by `restoreBrowserProxyAvailability` so
|
|
208
|
-
* registry-routed transports can preserve their sender across drain queue
|
|
209
|
-
* restores. When set, `restoreBrowserProxyAvailability()` uses this
|
|
210
|
-
* function instead of `sendToClient` so the drain-queue path doesn't
|
|
211
|
-
* clobber the registry-routed sender with the SSE hub emitter.
|
|
212
|
-
*
|
|
213
|
-
* Populated by the POST /messages handler when the guardian has an active
|
|
214
|
-
* extension connection in the `ChromeExtensionRegistry`, regardless of
|
|
215
|
-
* interface (chrome-extension, macOS, etc.). Cleared when a turn without
|
|
216
|
-
* an active extension connection takes over.
|
|
217
|
-
*/
|
|
218
|
-
/** @internal */ hostBrowserSenderOverride?: (msg: ServerMessage) => void;
|
|
219
207
|
/** @internal */ cesClient?: CesClient;
|
|
220
208
|
/** @internal */ readonly queue = new MessageQueue();
|
|
221
209
|
/** @internal */ currentActiveSurfaceId?: string;
|
|
@@ -235,6 +223,7 @@ export class Conversation {
|
|
|
235
223
|
/** @internal */ loadedHistoryTrustClass?: TrustClass;
|
|
236
224
|
/** @internal */ voiceCallControlPrompt?: string;
|
|
237
225
|
/** @internal */ transportHints?: string[];
|
|
226
|
+
/** @internal */ slackRuntimeContextNotice?: string;
|
|
238
227
|
/** @internal */ assistantId?: string;
|
|
239
228
|
/** @internal */ commandIntent?: {
|
|
240
229
|
type: string;
|
|
@@ -292,7 +281,6 @@ export class Conversation {
|
|
|
292
281
|
string,
|
|
293
282
|
ReturnType<typeof setTimeout>
|
|
294
283
|
>();
|
|
295
|
-
/** @internal */ broadcastToAllClients?: (msg: ServerMessage) => void;
|
|
296
284
|
/** @internal */ withSurface = createSurfaceMutex();
|
|
297
285
|
/** @internal */ currentTurnSurfaces: Array<{
|
|
298
286
|
surfaceId: string;
|
|
@@ -358,10 +346,9 @@ export class Conversation {
|
|
|
358
346
|
conversationId: string,
|
|
359
347
|
provider: Provider,
|
|
360
348
|
systemPrompt: string,
|
|
361
|
-
maxTokens: number,
|
|
349
|
+
maxTokens: number | undefined,
|
|
362
350
|
sendToClient: (msg: ServerMessage) => void,
|
|
363
351
|
workingDir: string,
|
|
364
|
-
broadcastToAllClients?: (msg: ServerMessage) => void,
|
|
365
352
|
memoryPolicy?: ConversationMemoryPolicy,
|
|
366
353
|
sharedCesClient?: CesClient,
|
|
367
354
|
speedOverride?: Speed,
|
|
@@ -373,7 +360,6 @@ export class Conversation {
|
|
|
373
360
|
this.provider = provider;
|
|
374
361
|
this.workingDir = workingDir;
|
|
375
362
|
this.sendToClient = sendToClient;
|
|
376
|
-
this.broadcastToAllClients = broadcastToAllClients;
|
|
377
363
|
this.memoryPolicy = memoryPolicy
|
|
378
364
|
? { ...memoryPolicy }
|
|
379
365
|
: { ...DEFAULT_MEMORY_POLICY };
|
|
@@ -413,10 +399,7 @@ export class Conversation {
|
|
|
413
399
|
);
|
|
414
400
|
}
|
|
415
401
|
});
|
|
416
|
-
this.secretPrompter = new SecretPrompter(
|
|
417
|
-
sendToClient,
|
|
418
|
-
broadcastToAllClients,
|
|
419
|
-
);
|
|
402
|
+
this.secretPrompter = new SecretPrompter();
|
|
420
403
|
|
|
421
404
|
// Register call notifiers (reads ctx properties lazily)
|
|
422
405
|
registerConversationNotifiers(conversationId, this);
|
|
@@ -425,9 +408,6 @@ export class Conversation {
|
|
|
425
408
|
this.executor = new ToolExecutor(this.prompter);
|
|
426
409
|
this.profiler = new ToolProfiler();
|
|
427
410
|
registerToolMetricsLoggingListener(this.eventBus);
|
|
428
|
-
registerToolNotificationListener(this.eventBus, (msg) =>
|
|
429
|
-
this.sendToClient(msg),
|
|
430
|
-
);
|
|
431
411
|
registerToolTraceListener(this.eventBus, this.traceEmitter);
|
|
432
412
|
registerToolProfilingListener(this.eventBus, this.profiler);
|
|
433
413
|
registerToolPermissionTelemetryListener(this.eventBus);
|
|
@@ -448,7 +428,6 @@ export class Conversation {
|
|
|
448
428
|
this.secretPrompter,
|
|
449
429
|
this as ToolSetupContext,
|
|
450
430
|
handleToolLifecycleEvent,
|
|
451
|
-
broadcastToAllClients,
|
|
452
431
|
);
|
|
453
432
|
|
|
454
433
|
const config = getConfig();
|
|
@@ -493,8 +472,10 @@ export class Conversation {
|
|
|
493
472
|
onboardingContext: this.getOnboardingContext(),
|
|
494
473
|
});
|
|
495
474
|
})(),
|
|
496
|
-
maxTokens: configuredMaxTokens,
|
|
497
475
|
};
|
|
476
|
+
if (configuredMaxTokens !== undefined) {
|
|
477
|
+
resolved.maxTokens = configuredMaxTokens;
|
|
478
|
+
}
|
|
498
479
|
if (resolvedModel !== undefined) {
|
|
499
480
|
resolved.model = resolvedModel;
|
|
500
481
|
}
|
|
@@ -504,20 +485,31 @@ export class Conversation {
|
|
|
504
485
|
const fastModeEnabled = isAssistantFeatureFlagEnabled("fast-mode", config);
|
|
505
486
|
const resolvedSpeed = speedOverride ?? config.llm.default.speed;
|
|
506
487
|
const llmDefault = config.llm.default;
|
|
488
|
+
const initialContextWindow = resolveEffectiveContextWindow({
|
|
489
|
+
llm: config.llm,
|
|
490
|
+
callSite: "mainAgent",
|
|
491
|
+
});
|
|
492
|
+
const initialContextWindowConfig = contextWindowConfigFromEffective(
|
|
493
|
+
llmDefault.contextWindow,
|
|
494
|
+
initialContextWindow,
|
|
495
|
+
);
|
|
496
|
+
|
|
497
|
+
const agentLoopConfig: Partial<AgentLoopConfig> = {
|
|
498
|
+
thinking: llmDefault.thinking,
|
|
499
|
+
effort: llmDefault.effort,
|
|
500
|
+
...(fastModeEnabled && resolvedSpeed === "fast"
|
|
501
|
+
? { speed: resolvedSpeed }
|
|
502
|
+
: {}),
|
|
503
|
+
...(cacheTtl ? { cacheTtl } : {}),
|
|
504
|
+
};
|
|
505
|
+
if (configuredMaxTokens !== undefined) {
|
|
506
|
+
agentLoopConfig.maxTokens = configuredMaxTokens;
|
|
507
|
+
}
|
|
507
508
|
|
|
508
509
|
this.agentLoop = new AgentLoop(
|
|
509
510
|
provider,
|
|
510
511
|
systemPrompt,
|
|
511
|
-
|
|
512
|
-
maxTokens,
|
|
513
|
-
maxInputTokens: llmDefault.contextWindow.maxInputTokens,
|
|
514
|
-
thinking: llmDefault.thinking,
|
|
515
|
-
effort: llmDefault.effort,
|
|
516
|
-
...(fastModeEnabled && resolvedSpeed === "fast"
|
|
517
|
-
? { speed: resolvedSpeed }
|
|
518
|
-
: {}),
|
|
519
|
-
...(cacheTtl ? { cacheTtl } : {}),
|
|
520
|
-
},
|
|
512
|
+
agentLoopConfig,
|
|
521
513
|
toolDefs.length > 0 ? toolDefs : undefined,
|
|
522
514
|
toolDefs.length > 0 ? toolExecutor : undefined,
|
|
523
515
|
resolveTools,
|
|
@@ -526,7 +518,7 @@ export class Conversation {
|
|
|
526
518
|
this.contextWindowManager = new ContextWindowManager({
|
|
527
519
|
provider,
|
|
528
520
|
systemPrompt: () => resolveSystemPromptCallback([]).systemPrompt,
|
|
529
|
-
config:
|
|
521
|
+
config: initialContextWindowConfig,
|
|
530
522
|
toolTokenBudget: this.agentLoop.getToolTokenBudget(),
|
|
531
523
|
});
|
|
532
524
|
}
|
|
@@ -578,7 +570,11 @@ export class Conversation {
|
|
|
578
570
|
|
|
579
571
|
provider
|
|
580
572
|
.sendMessage([warmMessage], tools, systemPrompt, {
|
|
581
|
-
config: {
|
|
573
|
+
config: {
|
|
574
|
+
max_tokens: 1,
|
|
575
|
+
callSite: "mainAgent",
|
|
576
|
+
usageTracking: "manual",
|
|
577
|
+
},
|
|
582
578
|
signal: abort.signal,
|
|
583
579
|
})
|
|
584
580
|
.then(() => {
|
|
@@ -648,20 +644,11 @@ export class Conversation {
|
|
|
648
644
|
updateClient(
|
|
649
645
|
sendToClient: (msg: ServerMessage) => void,
|
|
650
646
|
hasNoClient = false,
|
|
651
|
-
opts?: { skipProxySenderUpdate?: boolean },
|
|
652
647
|
): void {
|
|
653
648
|
this.sendToClient = sendToClient;
|
|
654
649
|
this.hasNoClient = hasNoClient;
|
|
655
650
|
this.prompter.updateSender(sendToClient);
|
|
656
|
-
this.secretPrompter.updateSender(sendToClient);
|
|
657
651
|
this.traceEmitter.updateSender(sendToClient);
|
|
658
|
-
if (!opts?.skipProxySenderUpdate) {
|
|
659
|
-
this.hostBashProxy?.updateSender(sendToClient, !hasNoClient);
|
|
660
|
-
this.hostBrowserProxy?.updateSender(sendToClient, !hasNoClient);
|
|
661
|
-
this.hostCuProxy?.updateSender(sendToClient, !hasNoClient);
|
|
662
|
-
this.hostFileProxy?.updateSender(sendToClient, !hasNoClient);
|
|
663
|
-
this.hostTransferProxy?.updateSender(sendToClient, !hasNoClient);
|
|
664
|
-
}
|
|
665
652
|
|
|
666
653
|
// Replay last activity state so a reconnecting client sees the current phase
|
|
667
654
|
// instead of being stuck on the last state it received before disconnection.
|
|
@@ -682,72 +669,6 @@ export class Conversation {
|
|
|
682
669
|
return this.sendToClient;
|
|
683
670
|
}
|
|
684
671
|
|
|
685
|
-
/** Mark host proxies as unavailable so tool execution uses local fallback. */
|
|
686
|
-
clearProxyAvailability(): void {
|
|
687
|
-
this.hostBashProxy?.updateSender(this.sendToClient, false);
|
|
688
|
-
this.hostBrowserProxy?.updateSender(this.sendToClient, false);
|
|
689
|
-
this.hostCuProxy?.updateSender(this.sendToClient, false);
|
|
690
|
-
this.hostFileProxy?.updateSender(this.sendToClient, false);
|
|
691
|
-
this.hostTransferProxy?.updateSender(this.sendToClient, false);
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
/**
|
|
695
|
-
* Restore host proxy availability based on whether a real client is connected.
|
|
696
|
-
* When `skipBrowser` is true, the browser proxy is left untouched — use this
|
|
697
|
-
* when `restoreBrowserProxyAvailability()` will handle the browser proxy
|
|
698
|
-
* separately with the correct registry-routed sender.
|
|
699
|
-
*/
|
|
700
|
-
restoreProxyAvailability(options?: { skipBrowser?: boolean }): void {
|
|
701
|
-
if (!this.hasNoClient) {
|
|
702
|
-
this.hostBashProxy?.updateSender(this.sendToClient, true);
|
|
703
|
-
if (!options?.skipBrowser) {
|
|
704
|
-
this.hostBrowserProxy?.updateSender(this.sendToClient, true);
|
|
705
|
-
}
|
|
706
|
-
this.hostCuProxy?.updateSender(this.sendToClient, true);
|
|
707
|
-
this.hostFileProxy?.updateSender(this.sendToClient, true);
|
|
708
|
-
this.hostTransferProxy?.updateSender(this.sendToClient, true);
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
/**
|
|
713
|
-
* Restore host browser proxy availability only. Used in two scenarios:
|
|
714
|
-
*
|
|
715
|
-
* 1. **Chrome-extension turns** — only support host_browser (not the full
|
|
716
|
-
* desktop proxy set), so calling restoreProxyAvailability() would
|
|
717
|
-
* incorrectly re-enable bash/file/CU proxies.
|
|
718
|
-
* 2. **macOS turns** — when called from queue-drain, the browser proxy
|
|
719
|
-
* sender needs to be either the registry-routed sender (when an
|
|
720
|
-
* extension connection is present) or the SSE hub sender (when no
|
|
721
|
-
* extension is connected). This helper resolves the correct sender
|
|
722
|
-
* via `hostBrowserSenderOverride ?? sendToClient`.
|
|
723
|
-
*
|
|
724
|
-
* Unlike `restoreProxyAvailability()`, this helper does NOT gate on
|
|
725
|
-
* `hasNoClient`. The chrome-extension interface is non-interactive (so
|
|
726
|
-
* `hasNoClient === true`), but it DOES have a connected client that can
|
|
727
|
-
* service `host_browser_request` events. Gating on `hasNoClient` would
|
|
728
|
-
* leave the just-constructed proxy unavailable and the only way to make
|
|
729
|
-
* it available would be to flip `hasNoClient` false, which would
|
|
730
|
-
* incorrectly enable host_bash/host_file/host_cu tool gating downstream.
|
|
731
|
-
*
|
|
732
|
-
* When `hostBrowserSenderOverride` is set, that function is used as the
|
|
733
|
-
* sender instead of `sendToClient`. This is required for any interface
|
|
734
|
-
* whose host_browser frames route through the ChromeExtensionRegistry
|
|
735
|
-
* WebSocket rather than the SSE hub: if the queue-drain path called this
|
|
736
|
-
* helper with `sendToClient`, the registry-routed sender established at
|
|
737
|
-
* turn-start would be clobbered by the SSE hub emitter and
|
|
738
|
-
* host_browser_request frames would stop reaching the extension. When
|
|
739
|
-
* no override is set (macOS without extension), `sendToClient` is used
|
|
740
|
-
* so frames reach the desktop client via SSE.
|
|
741
|
-
*
|
|
742
|
-
* Callers must only invoke this when they know the current interface
|
|
743
|
-
* supports host_browser (see `supportsHostProxy(id, "host_browser")`)
|
|
744
|
-
* or has an active extension connection with a registry-routed sender.
|
|
745
|
-
*/
|
|
746
|
-
restoreBrowserProxyAvailability(): void {
|
|
747
|
-
const sender = this.hostBrowserSenderOverride ?? this.sendToClient;
|
|
748
|
-
this.hostBrowserProxy?.updateSender(sender, true);
|
|
749
|
-
}
|
|
750
|
-
|
|
751
672
|
setSubagentAllowedTools(tools: Set<string> | undefined): void {
|
|
752
673
|
this.subagentAllowedTools = tools;
|
|
753
674
|
}
|
|
@@ -811,12 +732,10 @@ export class Conversation {
|
|
|
811
732
|
// cancellation instead of hanging forever. Emit dismiss notifications
|
|
812
733
|
// to the client so surfaces don't remain visually active if the client
|
|
813
734
|
// reconnects after dispose.
|
|
814
|
-
const emitDispose =
|
|
815
|
-
this.broadcastToAllClients ?? this.sendToClient.bind(this);
|
|
816
735
|
for (const [surfaceId, entry] of this.pendingStandaloneSurfaces) {
|
|
817
736
|
clearTimeout(entry.timer);
|
|
818
737
|
try {
|
|
819
|
-
|
|
738
|
+
broadcastMessage({
|
|
820
739
|
type: "ui_surface_dismiss",
|
|
821
740
|
conversationId: this.conversationId,
|
|
822
741
|
surfaceId,
|
|
@@ -836,11 +755,9 @@ export class Conversation {
|
|
|
836
755
|
clearTimeout(timer);
|
|
837
756
|
}
|
|
838
757
|
this.recentlyCompletedStandaloneSurfaces.clear();
|
|
839
|
-
|
|
840
|
-
|
|
758
|
+
// Only dispose the per-conversation CU proxy. Bash/File/Transfer are
|
|
759
|
+
// singletons — their lifecycle is managed by static disposeInstance().
|
|
841
760
|
this.hostCuProxy?.dispose();
|
|
842
|
-
this.hostFileProxy?.dispose();
|
|
843
|
-
this.hostTransferProxy?.dispose();
|
|
844
761
|
// CES client is owned by DaemonServer — just drop the reference.
|
|
845
762
|
// Do NOT close it here; the server manages the CES lifecycle.
|
|
846
763
|
this.cesClient = undefined;
|
|
@@ -867,8 +784,8 @@ export class Conversation {
|
|
|
867
784
|
enqueueMessage(
|
|
868
785
|
content: string,
|
|
869
786
|
attachments: UserMessageAttachment[],
|
|
870
|
-
onEvent
|
|
871
|
-
requestId
|
|
787
|
+
onEvent?: (msg: ServerMessage) => void,
|
|
788
|
+
requestId?: string,
|
|
872
789
|
activeSurfaceId?: string,
|
|
873
790
|
currentPage?: string,
|
|
874
791
|
metadata?: Record<string, unknown>,
|
|
@@ -881,8 +798,8 @@ export class Conversation {
|
|
|
881
798
|
this,
|
|
882
799
|
content,
|
|
883
800
|
attachments,
|
|
884
|
-
onEvent,
|
|
885
|
-
requestId,
|
|
801
|
+
onEvent ?? this.sendToClient,
|
|
802
|
+
requestId ?? crypto.randomUUID(),
|
|
886
803
|
activeSurfaceId,
|
|
887
804
|
currentPage,
|
|
888
805
|
metadata,
|
|
@@ -1002,7 +919,6 @@ export class Conversation {
|
|
|
1002
919
|
} catch {
|
|
1003
920
|
// Canonical request tracking should not break the primary approval flow.
|
|
1004
921
|
}
|
|
1005
|
-
|
|
1006
922
|
}
|
|
1007
923
|
|
|
1008
924
|
handleSecretResponse(
|
|
@@ -1013,79 +929,6 @@ export class Conversation {
|
|
|
1013
929
|
this.secretPrompter.resolveSecret(requestId, value, delivery);
|
|
1014
930
|
}
|
|
1015
931
|
|
|
1016
|
-
resolveHostBash(
|
|
1017
|
-
requestId: string,
|
|
1018
|
-
response: {
|
|
1019
|
-
stdout: string;
|
|
1020
|
-
stderr: string;
|
|
1021
|
-
exitCode: number | null;
|
|
1022
|
-
timedOut: boolean;
|
|
1023
|
-
},
|
|
1024
|
-
): void {
|
|
1025
|
-
this.hostBashProxy?.resolve(requestId, response);
|
|
1026
|
-
}
|
|
1027
|
-
|
|
1028
|
-
setHostBashProxy(proxy: HostBashProxy | undefined): void {
|
|
1029
|
-
if (this.hostBashProxy && this.hostBashProxy !== proxy) {
|
|
1030
|
-
this.hostBashProxy.dispose();
|
|
1031
|
-
}
|
|
1032
|
-
this.hostBashProxy = proxy;
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
resolveHostBrowser(
|
|
1036
|
-
requestId: string,
|
|
1037
|
-
response: { content: string; isError: boolean },
|
|
1038
|
-
): void {
|
|
1039
|
-
this.hostBrowserProxy?.resolve(requestId, response);
|
|
1040
|
-
}
|
|
1041
|
-
|
|
1042
|
-
setHostBrowserProxy(proxy: HostBrowserProxy | undefined): void {
|
|
1043
|
-
if (this.hostBrowserProxy && this.hostBrowserProxy !== proxy) {
|
|
1044
|
-
this.hostBrowserProxy.dispose();
|
|
1045
|
-
}
|
|
1046
|
-
this.hostBrowserProxy = proxy;
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
|
-
resolveHostFile(
|
|
1050
|
-
requestId: string,
|
|
1051
|
-
response: { content: string; isError: boolean; imageData?: string },
|
|
1052
|
-
): void {
|
|
1053
|
-
this.hostFileProxy?.resolve(requestId, response);
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
setHostFileProxy(proxy: HostFileProxy | undefined): void {
|
|
1057
|
-
if (this.hostFileProxy && this.hostFileProxy !== proxy) {
|
|
1058
|
-
this.hostFileProxy.dispose();
|
|
1059
|
-
}
|
|
1060
|
-
this.hostFileProxy = proxy;
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
resolveHostTransfer(
|
|
1064
|
-
requestId: string,
|
|
1065
|
-
result: {
|
|
1066
|
-
isError: boolean;
|
|
1067
|
-
bytesWritten?: number;
|
|
1068
|
-
errorMessage?: string;
|
|
1069
|
-
},
|
|
1070
|
-
): void {
|
|
1071
|
-
this.hostTransferProxy?.resolveTransferResult(requestId, result);
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
|
-
setHostTransferProxy(proxy: HostTransferProxy | undefined): void {
|
|
1075
|
-
if (this.hostTransferProxy && this.hostTransferProxy !== proxy) {
|
|
1076
|
-
this.hostTransferProxy.dispose();
|
|
1077
|
-
}
|
|
1078
|
-
this.hostTransferProxy = proxy;
|
|
1079
|
-
}
|
|
1080
|
-
|
|
1081
|
-
getHostTransferProxy(): HostTransferProxy | undefined {
|
|
1082
|
-
return this.hostTransferProxy;
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
resolveHostCu(requestId: string, observation: CuObservationResult): void {
|
|
1086
|
-
this.hostCuProxy?.resolve(requestId, observation);
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
932
|
setHostCuProxy(proxy: HostCuProxy | undefined): void {
|
|
1090
933
|
if (this.hostCuProxy && this.hostCuProxy !== proxy) {
|
|
1091
934
|
this.hostCuProxy.dispose();
|
|
@@ -1142,14 +985,51 @@ export class Conversation {
|
|
|
1142
985
|
}
|
|
1143
986
|
|
|
1144
987
|
async forceCompact(): Promise<ContextWindowResult> {
|
|
988
|
+
const conversationRow = getConversation(this.conversationId);
|
|
989
|
+
const overrideProfile =
|
|
990
|
+
getConversationOverrideProfileFromRow(conversationRow) ?? null;
|
|
991
|
+
const config = getConfig();
|
|
992
|
+
const effectiveContextWindow = resolveEffectiveContextWindow({
|
|
993
|
+
llm: config.llm,
|
|
994
|
+
callSite: "mainAgent",
|
|
995
|
+
overrideProfile: overrideProfile ?? undefined,
|
|
996
|
+
});
|
|
997
|
+
(
|
|
998
|
+
this.contextWindowManager as ContextWindowManager & {
|
|
999
|
+
updateConfig?: (config: ContextWindowConfig) => void;
|
|
1000
|
+
}
|
|
1001
|
+
).updateConfig?.(
|
|
1002
|
+
contextWindowConfigFromEffective(
|
|
1003
|
+
config.llm.default.contextWindow,
|
|
1004
|
+
effectiveContextWindow,
|
|
1005
|
+
),
|
|
1006
|
+
);
|
|
1007
|
+
const slackChronologicalContext =
|
|
1008
|
+
this.channelCapabilities?.channel === "slack"
|
|
1009
|
+
? loadSlackChronologicalContext(
|
|
1010
|
+
this.conversationId,
|
|
1011
|
+
this.channelCapabilities,
|
|
1012
|
+
{
|
|
1013
|
+
trustClass: this.trustContext?.trustClass,
|
|
1014
|
+
contextSummary: conversationRow?.contextSummary,
|
|
1015
|
+
contextCompactedMessageCount:
|
|
1016
|
+
conversationRow?.contextCompactedMessageCount,
|
|
1017
|
+
slackContextCompactionWatermarkTs:
|
|
1018
|
+
conversationRow?.slackContextCompactionWatermarkTs,
|
|
1019
|
+
},
|
|
1020
|
+
)
|
|
1021
|
+
: null;
|
|
1022
|
+
const messagesToCompact =
|
|
1023
|
+
slackChronologicalContext?.messages ?? this.messages;
|
|
1145
1024
|
const result = await this.contextWindowManager.maybeCompact(
|
|
1146
|
-
|
|
1025
|
+
messagesToCompact,
|
|
1147
1026
|
this.abortController?.signal ?? undefined,
|
|
1148
1027
|
{
|
|
1149
1028
|
force: true,
|
|
1150
1029
|
lastCompactedAt: this.contextCompactedAt ?? undefined,
|
|
1151
1030
|
conversationOriginChannel:
|
|
1152
1031
|
getConversationOriginChannel(this.conversationId) ?? undefined,
|
|
1032
|
+
overrideProfile,
|
|
1153
1033
|
},
|
|
1154
1034
|
);
|
|
1155
1035
|
// Track circuit-breaker state for user-initiated `/compact` and other
|
|
@@ -1165,7 +1045,12 @@ export class Conversation {
|
|
|
1165
1045
|
);
|
|
1166
1046
|
}
|
|
1167
1047
|
if (result.compacted) {
|
|
1168
|
-
applyCompactionResult(this, result, this.sendToClient, null
|
|
1048
|
+
applyCompactionResult(this, result, this.sendToClient, null, {
|
|
1049
|
+
slackContextCompactionWatermarkTs: getSlackCompactionWatermarkForPrefix(
|
|
1050
|
+
slackChronologicalContext,
|
|
1051
|
+
result.compactedMessages,
|
|
1052
|
+
),
|
|
1053
|
+
});
|
|
1169
1054
|
}
|
|
1170
1055
|
return result;
|
|
1171
1056
|
}
|
|
@@ -1202,6 +1087,10 @@ export class Conversation {
|
|
|
1202
1087
|
this.transportHints = hints;
|
|
1203
1088
|
}
|
|
1204
1089
|
|
|
1090
|
+
setSlackRuntimeContextNotice(notice: string | undefined): void {
|
|
1091
|
+
this.slackRuntimeContextNotice = notice;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1205
1094
|
/**
|
|
1206
1095
|
* Apply client-reported host environment (home dir, username) from
|
|
1207
1096
|
* transport metadata onto the conversation. Only interfaces whose
|
|
@@ -1313,7 +1202,7 @@ export class Conversation {
|
|
|
1313
1202
|
async runAgentLoop(
|
|
1314
1203
|
content: string,
|
|
1315
1204
|
userMessageId: string,
|
|
1316
|
-
onEvent
|
|
1205
|
+
onEvent?: (msg: ServerMessage) => void,
|
|
1317
1206
|
options?: {
|
|
1318
1207
|
isInteractive?: boolean;
|
|
1319
1208
|
isUserMessage?: boolean;
|
|
@@ -1330,7 +1219,13 @@ export class Conversation {
|
|
|
1330
1219
|
overrideProfile?: string;
|
|
1331
1220
|
},
|
|
1332
1221
|
): Promise<void> {
|
|
1333
|
-
return runAgentLoopImpl(
|
|
1222
|
+
return runAgentLoopImpl(
|
|
1223
|
+
this,
|
|
1224
|
+
content,
|
|
1225
|
+
userMessageId,
|
|
1226
|
+
onEvent ?? this.sendToClient,
|
|
1227
|
+
options,
|
|
1228
|
+
);
|
|
1334
1229
|
}
|
|
1335
1230
|
|
|
1336
1231
|
drainQueue(reason: QueueDrainReason = "loop_complete"): Promise<void> {
|
|
@@ -1340,7 +1235,7 @@ export class Conversation {
|
|
|
1340
1235
|
async processMessage(
|
|
1341
1236
|
content: string,
|
|
1342
1237
|
attachments: UserMessageAttachment[],
|
|
1343
|
-
onEvent
|
|
1238
|
+
onEvent?: (msg: ServerMessage) => void,
|
|
1344
1239
|
requestId?: string,
|
|
1345
1240
|
activeSurfaceId?: string,
|
|
1346
1241
|
currentPage?: string,
|
|
@@ -1353,7 +1248,7 @@ export class Conversation {
|
|
|
1353
1248
|
this as ProcessConversationContext,
|
|
1354
1249
|
content,
|
|
1355
1250
|
attachments,
|
|
1356
|
-
onEvent,
|
|
1251
|
+
onEvent ?? this.sendToClient,
|
|
1357
1252
|
requestId,
|
|
1358
1253
|
activeSurfaceId,
|
|
1359
1254
|
currentPage,
|
|
@@ -1372,17 +1267,6 @@ export class Conversation {
|
|
|
1372
1267
|
return undoImpl(this as HistoryConversationContext);
|
|
1373
1268
|
}
|
|
1374
1269
|
|
|
1375
|
-
async regenerate(
|
|
1376
|
-
onEvent: (msg: ServerMessage) => void,
|
|
1377
|
-
requestId?: string,
|
|
1378
|
-
): Promise<void> {
|
|
1379
|
-
return regenerateImpl(
|
|
1380
|
-
this as HistoryConversationContext,
|
|
1381
|
-
onEvent,
|
|
1382
|
-
requestId,
|
|
1383
|
-
);
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1386
1270
|
// ── Surfaces ─────────────────────────────────────────────────────
|
|
1387
1271
|
|
|
1388
1272
|
handleSurfaceAction(
|