@vellumai/assistant 0.4.48 → 0.4.50
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 +26 -35
- package/README.md +5 -26
- package/docs/architecture/integrations.md +45 -41
- package/docs/architecture/keychain-broker.md +3 -3
- package/docs/architecture/memory.md +180 -119
- package/docs/runbook-trusted-contacts.md +3 -8
- package/hook-templates/debug-prompt-logger/hook.json +1 -1
- package/hook-templates/debug-prompt-logger/run.sh +1 -3
- package/package.json +2 -2
- package/src/__tests__/actor-token-service.test.ts +0 -1
- package/src/__tests__/agent-loop.test.ts +3 -1
- package/src/__tests__/anthropic-provider.test.ts +249 -2
- package/src/__tests__/approval-cascade.test.ts +796 -0
- package/src/__tests__/approval-primitive.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +4 -0
- package/src/__tests__/assistant-attachments.test.ts +12 -34
- package/src/__tests__/assistant-feature-flag-guard.test.ts +0 -23
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +76 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -1
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +2 -2
- package/src/__tests__/canonical-guardian-store.test.ts +95 -0
- package/src/__tests__/channel-guardian.test.ts +0 -2
- package/src/__tests__/channel-readiness-routes.test.ts +15 -6
- package/src/__tests__/channel-readiness-service.test.ts +10 -9
- package/src/__tests__/checker.test.ts +13 -20
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +1 -1
- package/src/__tests__/computer-use-tools.test.ts +2 -19
- package/src/__tests__/config-schema.test.ts +1 -68
- package/src/__tests__/config-watcher.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/context-image-dimensions.test.ts +332 -0
- package/src/__tests__/context-memory-e2e.test.ts +11 -100
- package/src/__tests__/context-token-estimator.test.ts +196 -13
- package/src/__tests__/conversation-attention-store.test.ts +0 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +0 -1
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +152 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +2 -0
- package/src/__tests__/credential-metadata-store.test.ts +64 -73
- package/src/__tests__/credential-security-e2e.test.ts +1 -0
- package/src/__tests__/credential-security-invariants.test.ts +13 -7
- package/src/__tests__/credential-vault-unit.test.ts +284 -49
- package/src/__tests__/credential-vault.test.ts +150 -16
- package/src/__tests__/credentials-cli.test.ts +71 -0
- package/src/__tests__/cu-unified-flow.test.ts +532 -0
- package/src/__tests__/date-context.test.ts +93 -77
- package/src/__tests__/deterministic-verification-control-plane.test.ts +64 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/ephemeral-permissions.test.ts +3 -3
- package/src/__tests__/gateway-only-guard.test.ts +0 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +93 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -39
- package/src/__tests__/heartbeat-service.test.ts +0 -1
- package/src/__tests__/history-repair.test.ts +245 -0
- package/src/__tests__/host-cu-proxy.test.ts +791 -0
- package/src/__tests__/host-shell-tool.test.ts +27 -15
- package/src/__tests__/http-user-message-parity.test.ts +2 -0
- package/src/__tests__/ingress-url-consistency.test.ts +14 -21
- package/src/__tests__/integration-status.test.ts +32 -51
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/invite-redemption-service.test.ts +65 -1
- package/src/__tests__/invite-routes-http.test.ts +10 -9
- package/src/__tests__/keychain-broker-client.test.ts +14 -46
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +56 -18
- package/src/__tests__/memory-lifecycle-e2e.test.ts +244 -387
- package/src/__tests__/memory-recall-quality.test.ts +244 -407
- package/src/__tests__/memory-regressions.experimental.test.ts +126 -101
- package/src/__tests__/memory-regressions.test.ts +477 -2841
- package/src/__tests__/memory-retrieval.benchmark.test.ts +33 -150
- package/src/__tests__/memory-upsert-concurrency.test.ts +5 -244
- package/src/__tests__/mime-builder.test.ts +28 -0
- package/src/__tests__/native-web-search.test.ts +1 -0
- package/src/__tests__/notification-routing-intent.test.ts +0 -1
- package/src/__tests__/oauth-cli.test.ts +941 -15
- package/src/__tests__/oauth-provider-profiles.test.ts +9 -9
- package/src/__tests__/oauth-scope-policy.test.ts +4 -6
- package/src/__tests__/oauth-store.test.ts +870 -0
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
- package/src/__tests__/provider-error-scenarios.test.ts +0 -1
- package/src/__tests__/provider-streaming.benchmark.test.ts +0 -1
- package/src/__tests__/public-ingress-urls.test.ts +15 -21
- package/src/__tests__/qdrant-collection-migration.test.ts +53 -8
- package/src/__tests__/recording-handler.test.ts +3 -4
- package/src/__tests__/registry.test.ts +2 -3
- package/src/__tests__/relay-server.test.ts +46 -1
- package/src/__tests__/runtime-events-sse.test.ts +55 -7
- package/src/__tests__/schedule-store.test.ts +0 -1
- package/src/__tests__/schedule-tools.test.ts +32 -0
- package/src/__tests__/scheduler-recurrence.test.ts +0 -1
- package/src/__tests__/scoped-approval-grants.test.ts +0 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
- package/src/__tests__/script-proxy-certs.test.ts +1 -1
- package/src/__tests__/secret-ingress-handler.test.ts +0 -1
- package/src/__tests__/secret-onetime-send.test.ts +1 -0
- package/src/__tests__/secure-keys.test.ts +7 -2
- package/src/__tests__/send-endpoint-busy.test.ts +24 -6
- package/src/__tests__/sequence-store.test.ts +0 -1
- package/src/__tests__/session-abort-tool-results.test.ts +1 -14
- package/src/__tests__/session-agent-loop-overflow.test.ts +1583 -0
- package/src/__tests__/session-agent-loop.test.ts +19 -15
- package/src/__tests__/session-confirmation-signals.test.ts +1 -15
- package/src/__tests__/session-error.test.ts +124 -2
- package/src/__tests__/session-history-web-search.test.ts +918 -0
- package/src/__tests__/session-init.benchmark.test.ts +4 -5
- package/src/__tests__/session-pre-run-repair.test.ts +1 -14
- package/src/__tests__/session-provider-retry-repair.test.ts +25 -28
- package/src/__tests__/session-queue.test.ts +37 -27
- package/src/__tests__/session-runtime-assembly.test.ts +54 -0
- package/src/__tests__/session-slash-known.test.ts +1 -15
- package/src/__tests__/session-slash-queue.test.ts +1 -15
- package/src/__tests__/session-slash-unknown.test.ts +1 -15
- package/src/__tests__/session-workspace-cache-state.test.ts +3 -33
- package/src/__tests__/session-workspace-injection.test.ts +3 -37
- package/src/__tests__/session-workspace-tool-tracking.test.ts +3 -37
- package/src/__tests__/skill-include-graph.test.ts +66 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +0 -1
- package/src/__tests__/skill-load-tool.test.ts +149 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -1
- package/src/__tests__/skills-install-extract.test.ts +93 -0
- package/src/__tests__/skills-uninstall.test.ts +1 -1
- package/src/__tests__/skills.test.ts +3 -3
- package/src/__tests__/skillssh-registry.test.ts +451 -0
- package/src/__tests__/slack-channel-config.test.ts +67 -3
- package/src/__tests__/slack-share-routes.test.ts +17 -19
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-invite-adapter.test.ts +18 -22
- package/src/__tests__/terminal-tools.test.ts +4 -3
- package/src/__tests__/test-support/computer-use-skill-harness.ts +3 -2
- package/src/__tests__/tool-approval-handler.test.ts +0 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor-shell-integration.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
- package/src/__tests__/trust-store-pattern-matches.test.ts +29 -0
- package/src/__tests__/trust-store.test.ts +7 -13
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +0 -16
- package/src/__tests__/verification-control-plane-policy.test.ts +0 -1
- package/src/__tests__/voice-invite-redemption.test.ts +32 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
- package/src/agent/ax-tree-compaction.test.ts +286 -0
- package/src/agent/loop.ts +104 -131
- package/src/approvals/AGENTS.md +1 -1
- package/src/approvals/guardian-request-resolvers.ts +14 -2
- package/src/bundler/compiler-tools.ts +66 -2
- package/src/calls/call-domain.ts +133 -6
- package/src/calls/call-store.ts +6 -0
- package/src/calls/relay-server.ts +52 -18
- package/src/calls/relay-setup-router.ts +17 -1
- package/src/calls/twilio-config.ts +3 -8
- package/src/calls/twilio-routes.ts +1 -2
- package/src/calls/types.ts +3 -1
- package/src/calls/voice-ingress-preflight.ts +1 -1
- package/src/cli/commands/browser-relay.ts +18 -12
- package/src/cli/commands/completions.ts +0 -3
- package/src/cli/commands/credentials.ts +101 -15
- package/src/cli/commands/doctor.ts +4 -3
- package/src/cli/commands/mcp.ts +46 -59
- package/src/cli/commands/memory.ts +16 -165
- package/src/cli/commands/oauth/apps.ts +284 -0
- package/src/cli/commands/oauth/connections.ts +633 -0
- package/src/cli/commands/oauth/index.ts +52 -0
- package/src/cli/commands/oauth/providers.ts +256 -0
- package/src/cli/commands/sessions.ts +5 -2
- package/src/cli/commands/skills.ts +177 -339
- package/src/cli/http-client.ts +0 -20
- package/src/cli/main-screen.tsx +2 -2
- package/src/cli/program.ts +6 -11
- package/src/cli/reference.ts +1 -3
- package/src/cli.ts +4 -10
- package/src/config/assistant-feature-flags.ts +0 -3
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +1 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +3 -6
- package/src/config/bundled-skills/computer-use/TOOLS.json +23 -5
- package/src/config/bundled-skills/computer-use/tools/{computer-use-request-control.ts → computer-use-observe.ts} +1 -5
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +21 -16
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -4
- package/src/config/bundled-skills/settings/SKILL.md +1 -1
- package/src/config/bundled-skills/settings/TOOLS.json +2 -8
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +5 -33
- package/src/config/bundled-tool-registry.ts +2 -5
- package/src/config/env-registry.ts +14 -83
- package/src/config/env.ts +11 -50
- package/src/config/feature-flag-registry.json +16 -16
- package/src/config/loader.ts +0 -6
- package/src/config/schema.ts +4 -13
- package/src/config/schemas/memory-lifecycle.ts +0 -9
- package/src/config/schemas/memory-processing.ts +0 -180
- package/src/config/schemas/memory-retrieval.ts +32 -104
- package/src/config/schemas/memory.ts +0 -10
- package/src/config/skills.ts +21 -2
- package/src/config/types.ts +0 -4
- package/src/context/image-dimensions.ts +229 -0
- package/src/context/token-estimator.ts +75 -12
- package/src/context/window-manager.ts +53 -11
- package/src/daemon/assistant-attachments.ts +1 -13
- package/src/daemon/config-watcher.ts +61 -3
- package/src/daemon/daemon-control.ts +1 -1
- package/src/daemon/date-context.ts +114 -31
- package/src/daemon/handlers/config-ingress.ts +8 -33
- package/src/daemon/handlers/config-slack-channel.ts +49 -46
- package/src/daemon/handlers/config-telegram.ts +32 -16
- package/src/daemon/handlers/sessions.ts +27 -36
- package/src/daemon/handlers/shared.ts +0 -130
- package/src/daemon/handlers/skills.ts +20 -1
- package/src/daemon/history-repair.ts +72 -8
- package/src/daemon/host-cu-proxy.ts +430 -0
- package/src/daemon/lifecycle.ts +67 -71
- package/src/daemon/mcp-reload-service.ts +2 -2
- package/src/daemon/message-protocol.ts +3 -0
- package/src/daemon/message-types/computer-use.ts +1 -129
- package/src/daemon/message-types/host-cu.ts +19 -0
- package/src/daemon/message-types/memory.ts +4 -16
- package/src/daemon/message-types/messages.ts +4 -0
- package/src/daemon/message-types/sessions.ts +4 -0
- package/src/daemon/server.ts +25 -21
- package/src/daemon/session-agent-loop-handlers.ts +40 -0
- package/src/daemon/session-agent-loop.ts +334 -48
- package/src/daemon/session-attachments.ts +1 -2
- package/src/daemon/session-error.ts +89 -6
- package/src/daemon/session-history.ts +17 -7
- package/src/daemon/session-media-retry.ts +6 -2
- package/src/daemon/session-memory.ts +69 -149
- package/src/daemon/session-process.ts +10 -1
- package/src/daemon/session-runtime-assembly.ts +49 -19
- package/src/daemon/session-slash.ts +1 -1
- package/src/daemon/session-surfaces.ts +43 -28
- package/src/daemon/session-tool-setup.ts +9 -10
- package/src/daemon/session.ts +150 -17
- package/src/daemon/tool-side-effects.ts +2 -8
- package/src/daemon/watch-handler.ts +2 -2
- package/src/events/tool-metrics-listener.ts +2 -2
- package/src/hooks/manager.ts +1 -4
- package/src/inbound/public-ingress-urls.ts +7 -7
- package/src/instrument.ts +61 -1
- package/src/logfire.ts +16 -5
- package/src/memory/admin.ts +2 -191
- package/src/memory/canonical-guardian-store.ts +38 -2
- package/src/memory/conversation-crud.ts +0 -33
- package/src/memory/conversation-key-store.ts +21 -0
- package/src/memory/conversation-queries.ts +22 -3
- package/src/memory/db-init.ts +32 -0
- package/src/memory/embedding-backend.ts +84 -8
- package/src/memory/embedding-types.ts +9 -1
- package/src/memory/indexer.ts +7 -46
- package/src/memory/items-extractor.ts +274 -76
- package/src/memory/job-handlers/backfill.ts +2 -127
- package/src/memory/job-handlers/cleanup.ts +2 -16
- package/src/memory/job-handlers/extraction.ts +2 -138
- package/src/memory/job-handlers/index-maintenance.ts +1 -6
- package/src/memory/job-handlers/summarization.ts +3 -148
- package/src/memory/job-utils.ts +21 -59
- package/src/memory/jobs-store.ts +1 -159
- package/src/memory/jobs-worker.ts +9 -52
- package/src/memory/migrations/104-core-indexes.ts +3 -3
- package/src/memory/migrations/149-oauth-tables.ts +62 -0
- package/src/memory/migrations/150-oauth-apps-client-secret-path.ts +98 -0
- package/src/memory/migrations/151-oauth-providers-ping-url.ts +11 -0
- package/src/memory/migrations/152-memory-item-supersession.ts +44 -0
- package/src/memory/migrations/153-drop-entity-tables.ts +15 -0
- package/src/memory/migrations/154-drop-fts.ts +20 -0
- package/src/memory/migrations/155-drop-conflicts.ts +7 -0
- package/src/memory/migrations/156-call-session-invite-metadata.ts +24 -0
- package/src/memory/migrations/index.ts +8 -0
- package/src/memory/qdrant-client.ts +148 -51
- package/src/memory/raw-query.ts +1 -1
- package/src/memory/retriever.test.ts +294 -273
- package/src/memory/retriever.ts +421 -645
- package/src/memory/schema/calls.ts +2 -0
- package/src/memory/schema/index.ts +1 -0
- package/src/memory/schema/memory-core.ts +3 -48
- package/src/memory/schema/oauth.ts +67 -0
- package/src/memory/search/formatting.ts +263 -176
- package/src/memory/search/lexical.ts +1 -254
- package/src/memory/search/ranking.ts +0 -455
- package/src/memory/search/semantic.ts +100 -14
- package/src/memory/search/staleness.ts +47 -0
- package/src/memory/search/tier-classifier.ts +21 -0
- package/src/memory/search/types.ts +15 -77
- package/src/memory/task-memory-cleanup.ts +4 -6
- package/src/messaging/provider.ts +4 -4
- package/src/messaging/providers/gmail/client.ts +82 -2
- package/src/messaging/providers/gmail/mime-builder.ts +17 -7
- package/src/messaging/providers/gmail/people-client.ts +10 -10
- package/src/messaging/providers/telegram-bot/adapter.ts +17 -17
- package/src/messaging/providers/whatsapp/adapter.ts +11 -8
- package/src/messaging/registry.ts +2 -32
- package/src/notifications/copy-composer.ts +0 -5
- package/src/notifications/signal.ts +4 -5
- package/src/oauth/byo-connection.test.ts +133 -25
- package/src/oauth/byo-connection.ts +22 -6
- package/src/oauth/connect-orchestrator.ts +113 -57
- package/src/oauth/connect-types.ts +17 -23
- package/src/oauth/connection-resolver.ts +35 -11
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/manual-token-connection.ts +104 -0
- package/src/oauth/oauth-store.ts +582 -0
- package/src/oauth/platform-connection.test.ts +29 -0
- package/src/oauth/platform-connection.ts +6 -5
- package/src/oauth/provider-behaviors.ts +124 -0
- package/src/oauth/scope-policy.ts +9 -2
- package/src/oauth/seed-providers.ts +167 -0
- package/src/oauth/token-persistence.ts +81 -77
- package/src/permissions/checker.ts +3 -3
- package/src/permissions/defaults.ts +1 -1
- package/src/permissions/prompter.ts +10 -1
- package/src/permissions/trust-store.ts +36 -1
- package/src/playbooks/playbook-compiler.ts +1 -1
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +3 -1
- package/src/prompts/system-prompt.ts +46 -42
- package/src/providers/anthropic/client.ts +59 -20
- package/src/providers/retry.ts +1 -27
- package/src/providers/types.ts +7 -1
- package/src/runtime/AGENTS.md +9 -0
- package/src/runtime/auth/route-policy.ts +6 -6
- package/src/runtime/channel-reply-delivery.ts +0 -40
- package/src/runtime/gateway-client.ts +0 -7
- package/src/runtime/guardian-reply-router.ts +24 -22
- package/src/runtime/http-server.ts +10 -8
- package/src/runtime/http-types.ts +2 -2
- package/src/runtime/invite-redemption-service.ts +19 -1
- package/src/runtime/invite-service.ts +25 -0
- package/src/runtime/middleware/twilio-validation.ts +1 -11
- package/src/runtime/pending-interactions.ts +14 -12
- package/src/runtime/routes/brain-graph-routes.ts +10 -90
- package/src/runtime/routes/channel-delivery-routes.ts +0 -1
- package/src/runtime/routes/conversation-routes.ts +81 -19
- package/src/runtime/routes/events-routes.ts +21 -11
- package/src/runtime/routes/host-cu-routes.ts +97 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +21 -12
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +12 -111
- package/src/runtime/routes/integrations/slack/share.ts +6 -7
- package/src/runtime/routes/log-export-routes.ts +126 -8
- package/src/runtime/routes/memory-item-routes.test.ts +754 -0
- package/src/runtime/routes/memory-item-routes.ts +503 -0
- package/src/runtime/routes/session-management-routes.ts +3 -3
- package/src/runtime/routes/settings-routes.ts +55 -48
- package/src/runtime/routes/surface-action-routes.ts +1 -1
- package/src/runtime/routes/trust-rules-routes.ts +14 -0
- package/src/runtime/routes/watch-routes.ts +128 -0
- package/src/runtime/routes/workspace-routes.ts +2 -1
- package/src/schedule/integration-status.ts +10 -9
- package/src/security/credential-key.ts +0 -156
- package/src/security/keychain-broker-client.ts +22 -10
- package/src/security/oauth2.ts +1 -1
- package/src/security/secure-keys.ts +25 -3
- package/src/security/token-manager.ts +137 -64
- package/src/skills/catalog-install.ts +414 -0
- package/src/skills/include-graph.ts +32 -0
- package/src/skills/skillssh-registry.ts +503 -0
- package/src/telegram/bot-username.ts +2 -3
- package/src/tools/assets/search.ts +5 -1
- package/src/tools/browser/network-recorder.ts +1 -1
- package/src/tools/browser/network-recording-types.ts +1 -1
- package/src/tools/computer-use/definitions.ts +36 -11
- package/src/tools/computer-use/registry.ts +5 -6
- package/src/tools/credentials/broker.ts +1 -2
- package/src/tools/credentials/metadata-store.ts +17 -121
- package/src/tools/credentials/vault.ts +92 -167
- package/src/tools/memory/definitions.ts +4 -13
- package/src/tools/memory/handlers.test.ts +83 -103
- package/src/tools/memory/handlers.ts +50 -85
- package/src/tools/registry.ts +2 -7
- package/src/tools/schedule/create.ts +8 -1
- package/src/tools/schedule/update.ts +8 -1
- package/src/tools/skills/load.ts +85 -3
- package/src/tools/watch/watch-state.ts +0 -12
- package/src/util/logger.ts +7 -41
- package/src/util/platform.ts +9 -28
- package/src/watcher/providers/google-calendar.ts +2 -1
- package/src/__tests__/clarification-resolver.test.ts +0 -193
- package/src/__tests__/computer-use-session-compaction.test.ts +0 -143
- package/src/__tests__/computer-use-session-lifecycle.test.ts +0 -322
- package/src/__tests__/computer-use-session-working-dir.test.ts +0 -166
- package/src/__tests__/computer-use-skill-baseline.test.ts +0 -78
- package/src/__tests__/computer-use-skill-endstate.test.ts +0 -105
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +0 -249
- package/src/__tests__/conflict-intent-tokenization.test.ts +0 -160
- package/src/__tests__/conflict-policy.test.ts +0 -269
- package/src/__tests__/conflict-store.test.ts +0 -372
- package/src/__tests__/contradiction-checker.test.ts +0 -361
- package/src/__tests__/entity-extractor.test.ts +0 -211
- package/src/__tests__/entity-search.test.ts +0 -1117
- package/src/__tests__/profile-compiler.test.ts +0 -392
- package/src/__tests__/ride-shotgun-handler.test.ts +0 -452
- package/src/__tests__/session-conflict-gate.test.ts +0 -1228
- package/src/__tests__/session-profile-injection.test.ts +0 -557
- package/src/cli/commands/dev.ts +0 -129
- package/src/cli/commands/map.ts +0 -391
- package/src/cli/commands/oauth.ts +0 -77
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +0 -25
- package/src/config/bundled-skills/knowledge-graph/TOOLS.json +0 -66
- package/src/config/bundled-skills/knowledge-graph/tools/graph-query.ts +0 -211
- package/src/daemon/computer-use-session.ts +0 -1026
- package/src/daemon/ride-shotgun-handler.ts +0 -569
- package/src/daemon/session-conflict-gate.ts +0 -167
- package/src/daemon/session-dynamic-profile.ts +0 -77
- package/src/memory/clarification-resolver.ts +0 -417
- package/src/memory/conflict-intent.ts +0 -205
- package/src/memory/conflict-policy.ts +0 -127
- package/src/memory/conflict-store.ts +0 -410
- package/src/memory/contradiction-checker.ts +0 -508
- package/src/memory/entity-extractor.ts +0 -535
- package/src/memory/format-recall.ts +0 -47
- package/src/memory/fts-reconciler.ts +0 -165
- package/src/memory/job-handlers/conflict.ts +0 -200
- package/src/memory/profile-compiler.ts +0 -195
- package/src/memory/recall-cache.ts +0 -117
- package/src/memory/search/entity.ts +0 -535
- package/src/memory/search/query-expansion.test.ts +0 -70
- package/src/memory/search/query-expansion.ts +0 -118
- package/src/oauth/provider-base-urls.ts +0 -21
- package/src/oauth/provider-profiles.ts +0 -192
- package/src/prompts/computer-use-prompt.ts +0 -98
- package/src/runtime/routes/computer-use-routes.ts +0 -641
- package/src/runtime/routes/mcp-routes.ts +0 -20
- package/src/runtime/telegram-streaming-delivery.test.ts +0 -729
- package/src/runtime/telegram-streaming-delivery.ts +0 -393
- package/src/tools/computer-use/request-computer-control.ts +0 -56
|
@@ -1,49 +1,9 @@
|
|
|
1
|
-
// Computer use
|
|
1
|
+
// Computer use and watch observation types.
|
|
2
2
|
|
|
3
3
|
import type { CommandIntent, UserMessageAttachment } from "./shared.js";
|
|
4
4
|
|
|
5
5
|
// === Client → Server ===
|
|
6
6
|
|
|
7
|
-
export interface CuSessionCreate {
|
|
8
|
-
type: "cu_session_create";
|
|
9
|
-
sessionId: string;
|
|
10
|
-
task: string;
|
|
11
|
-
screenWidth: number;
|
|
12
|
-
screenHeight: number;
|
|
13
|
-
attachments?: UserMessageAttachment[];
|
|
14
|
-
interactionType?: "computer_use" | "text_qa";
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface CuSessionAbort {
|
|
18
|
-
type: "cu_session_abort";
|
|
19
|
-
sessionId: string;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface CuObservation {
|
|
23
|
-
type: "cu_observation";
|
|
24
|
-
sessionId: string;
|
|
25
|
-
axTree?: string;
|
|
26
|
-
axDiff?: string;
|
|
27
|
-
secondaryWindows?: string;
|
|
28
|
-
screenshot?: string;
|
|
29
|
-
/** Screenshot image width in pixels (`Px`). */
|
|
30
|
-
screenshotWidthPx?: number;
|
|
31
|
-
/** Screenshot image height in pixels (`Px`). */
|
|
32
|
-
screenshotHeightPx?: number;
|
|
33
|
-
/** Screen width in macOS points (`Pt`) used by native execution. */
|
|
34
|
-
screenWidthPt?: number;
|
|
35
|
-
/** Screen height in macOS points (`Pt`) used by native execution. */
|
|
36
|
-
screenHeightPt?: number;
|
|
37
|
-
/** Coordinate origin convention used by the observation payload. */
|
|
38
|
-
coordinateOrigin?: "top_left";
|
|
39
|
-
/** Display ID used by screenshot capture for this observation. */
|
|
40
|
-
captureDisplayId?: number;
|
|
41
|
-
executionResult?: string;
|
|
42
|
-
executionError?: string;
|
|
43
|
-
/** Free-form guidance from the user, injected mid-turn to steer the agent. */
|
|
44
|
-
userGuidance?: string;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
7
|
export interface TaskSubmit {
|
|
48
8
|
type: "task_submit";
|
|
49
9
|
task: string;
|
|
@@ -55,22 +15,6 @@ export interface TaskSubmit {
|
|
|
55
15
|
commandIntent?: CommandIntent;
|
|
56
16
|
}
|
|
57
17
|
|
|
58
|
-
export interface RideShotgunStart {
|
|
59
|
-
type: "ride_shotgun_start";
|
|
60
|
-
durationSeconds: number;
|
|
61
|
-
intervalSeconds: number;
|
|
62
|
-
mode?: "observe" | "learn";
|
|
63
|
-
targetDomain?: string;
|
|
64
|
-
/** Domain to auto-navigate (may differ from targetDomain, e.g. open.spotify.com vs spotify.com). */
|
|
65
|
-
navigateDomain?: string;
|
|
66
|
-
autoNavigate?: boolean;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export interface RideShotgunStop {
|
|
70
|
-
type: "ride_shotgun_stop";
|
|
71
|
-
watchId: string;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
18
|
export interface WatchObservation {
|
|
75
19
|
type: "watch_observation";
|
|
76
20
|
watchId: string;
|
|
@@ -145,58 +89,6 @@ export interface RecordingResume {
|
|
|
145
89
|
recordingId: string;
|
|
146
90
|
}
|
|
147
91
|
|
|
148
|
-
export interface CuAction {
|
|
149
|
-
type: "cu_action";
|
|
150
|
-
sessionId: string;
|
|
151
|
-
toolName: string;
|
|
152
|
-
input: Record<string, unknown>;
|
|
153
|
-
reasoning?: string;
|
|
154
|
-
stepNumber: number;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export interface CuComplete {
|
|
158
|
-
type: "cu_complete";
|
|
159
|
-
sessionId: string;
|
|
160
|
-
summary: string;
|
|
161
|
-
stepCount: number;
|
|
162
|
-
isResponse?: boolean;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export interface CuError {
|
|
166
|
-
type: "cu_error";
|
|
167
|
-
sessionId: string;
|
|
168
|
-
message: string;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
export interface TaskRouted {
|
|
172
|
-
type: "task_routed";
|
|
173
|
-
sessionId: string;
|
|
174
|
-
interactionType: "computer_use" | "text_qa";
|
|
175
|
-
/** The task text passed to the escalated session. */
|
|
176
|
-
task?: string;
|
|
177
|
-
/** Set when a text_qa session escalates to computer_use via computer_use_request_control. */
|
|
178
|
-
escalatedFrom?: string;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export interface RideShotgunProgress {
|
|
182
|
-
type: "ride_shotgun_progress";
|
|
183
|
-
watchId: string;
|
|
184
|
-
message: string;
|
|
185
|
-
networkEntryCount?: number;
|
|
186
|
-
statusMessage?: string;
|
|
187
|
-
idleHint?: boolean;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export interface RideShotgunResult {
|
|
191
|
-
type: "ride_shotgun_result";
|
|
192
|
-
sessionId: string;
|
|
193
|
-
watchId: string;
|
|
194
|
-
summary: string;
|
|
195
|
-
observationCount: number;
|
|
196
|
-
recordingId?: string;
|
|
197
|
-
recordingPath?: string;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
92
|
export interface WatchStarted {
|
|
201
93
|
type: "watch_started";
|
|
202
94
|
sessionId: string;
|
|
@@ -211,34 +103,14 @@ export interface WatchCompleteRequest {
|
|
|
211
103
|
watchId: string;
|
|
212
104
|
}
|
|
213
105
|
|
|
214
|
-
/** Server → Client: bootstrap failure during learn-mode recording setup. */
|
|
215
|
-
export interface RideShotgunError {
|
|
216
|
-
type: "ride_shotgun_error";
|
|
217
|
-
watchId: string;
|
|
218
|
-
sessionId: string;
|
|
219
|
-
message: string;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
106
|
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
223
107
|
|
|
224
108
|
export type _ComputerUseClientMessages =
|
|
225
|
-
| CuSessionCreate
|
|
226
|
-
| CuSessionAbort
|
|
227
|
-
| CuObservation
|
|
228
109
|
| TaskSubmit
|
|
229
|
-
| RideShotgunStart
|
|
230
|
-
| RideShotgunStop
|
|
231
110
|
| WatchObservation
|
|
232
111
|
| RecordingStatus;
|
|
233
112
|
|
|
234
113
|
export type _ComputerUseServerMessages =
|
|
235
|
-
| CuAction
|
|
236
|
-
| CuComplete
|
|
237
|
-
| CuError
|
|
238
|
-
| TaskRouted
|
|
239
|
-
| RideShotgunProgress
|
|
240
|
-
| RideShotgunResult
|
|
241
|
-
| RideShotgunError
|
|
242
114
|
| WatchStarted
|
|
243
115
|
| WatchCompleteRequest
|
|
244
116
|
| RecordingStart
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Host computer-use proxy types.
|
|
2
|
+
// Enables proxying computer-use actions (click, type, screenshot, etc.)
|
|
3
|
+
// to the desktop client when running as a managed assistant.
|
|
4
|
+
|
|
5
|
+
// === Server → Client ===
|
|
6
|
+
|
|
7
|
+
export interface HostCuRequest {
|
|
8
|
+
type: "host_cu_request";
|
|
9
|
+
requestId: string;
|
|
10
|
+
sessionId: string;
|
|
11
|
+
toolName: string; // "computer_use_click", "computer_use_type_text", etc.
|
|
12
|
+
input: Record<string, unknown>;
|
|
13
|
+
stepNumber: number;
|
|
14
|
+
reasoning?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
18
|
+
|
|
19
|
+
export type _HostCuServerMessages = HostCuRequest;
|
|
@@ -11,7 +11,6 @@ export interface MemoryRecalledCandidateDebug {
|
|
|
11
11
|
type: string;
|
|
12
12
|
kind: string;
|
|
13
13
|
finalScore: number;
|
|
14
|
-
lexical: number;
|
|
15
14
|
semantic: number;
|
|
16
15
|
recency: number;
|
|
17
16
|
}
|
|
@@ -21,18 +20,14 @@ export interface MemoryRecalled {
|
|
|
21
20
|
provider: string;
|
|
22
21
|
model: string;
|
|
23
22
|
degradation?: MemoryRecalledDegradation;
|
|
24
|
-
lexicalHits: number;
|
|
25
23
|
semanticHits: number;
|
|
26
24
|
recencyHits: number;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
relationExpandedItemCount?: number;
|
|
32
|
-
earlyTerminated?: boolean;
|
|
25
|
+
tier1Count: number;
|
|
26
|
+
tier2Count: number;
|
|
27
|
+
hybridSearchLatencyMs: number;
|
|
28
|
+
sparseVectorUsed: boolean;
|
|
33
29
|
mergedCount: number;
|
|
34
30
|
selectedCount: number;
|
|
35
|
-
rerankApplied: boolean;
|
|
36
31
|
injectedTokens: number;
|
|
37
32
|
latencyMs: number;
|
|
38
33
|
topCandidates: MemoryRecalledCandidateDebug[];
|
|
@@ -46,13 +41,6 @@ export interface MemoryStatus {
|
|
|
46
41
|
reason?: string;
|
|
47
42
|
provider?: string;
|
|
48
43
|
model?: string;
|
|
49
|
-
conflictsPending: number;
|
|
50
|
-
conflictsResolved: number;
|
|
51
|
-
oldestPendingConflictAgeMs: number | null;
|
|
52
|
-
cleanupResolvedJobsPending: number;
|
|
53
|
-
cleanupSupersededJobsPending: number;
|
|
54
|
-
cleanupResolvedJobsCompleted24h: number;
|
|
55
|
-
cleanupSupersededJobsCompleted24h: number;
|
|
56
44
|
}
|
|
57
45
|
|
|
58
46
|
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
@@ -88,6 +88,7 @@ export interface ToolOutputChunk {
|
|
|
88
88
|
type: "tool_output_chunk";
|
|
89
89
|
chunk: string;
|
|
90
90
|
sessionId?: string;
|
|
91
|
+
toolUseId?: string;
|
|
91
92
|
subType?: "tool_start" | "tool_complete" | "status";
|
|
92
93
|
subToolName?: string;
|
|
93
94
|
subToolInput?: string;
|
|
@@ -155,6 +156,8 @@ export interface ConfirmationRequest {
|
|
|
155
156
|
persistentDecisionsAllowed?: boolean;
|
|
156
157
|
/** Which temporary approval options the client should render (e.g. "Allow for 10 minutes", "Allow for this thread"). */
|
|
157
158
|
temporaryOptionsAvailable?: Array<"allow_10m" | "allow_thread">;
|
|
159
|
+
/** The tool_use block ID for client-side correlation with specific tool calls. */
|
|
160
|
+
toolUseId?: string;
|
|
158
161
|
}
|
|
159
162
|
|
|
160
163
|
export interface SecretRequest {
|
|
@@ -287,6 +290,7 @@ export interface AssistantActivityState {
|
|
|
287
290
|
| "tool_result_received"
|
|
288
291
|
| "confirmation_requested"
|
|
289
292
|
| "confirmation_resolved"
|
|
293
|
+
| "context_compacting"
|
|
290
294
|
| "message_complete"
|
|
291
295
|
| "generation_cancelled"
|
|
292
296
|
| "error_terminal";
|
|
@@ -394,6 +394,8 @@ export type SessionErrorCode =
|
|
|
394
394
|
| "PROVIDER_RATE_LIMIT"
|
|
395
395
|
| "PROVIDER_API"
|
|
396
396
|
| "PROVIDER_BILLING"
|
|
397
|
+
| "PROVIDER_ORDERING"
|
|
398
|
+
| "PROVIDER_WEB_SEARCH"
|
|
397
399
|
| "CONTEXT_TOO_LARGE"
|
|
398
400
|
| "SESSION_ABORTED"
|
|
399
401
|
| "SESSION_PROCESSING_FAILED"
|
|
@@ -407,6 +409,8 @@ export interface SessionErrorMessage {
|
|
|
407
409
|
userMessage: string;
|
|
408
410
|
retryable: boolean;
|
|
409
411
|
debugDetails?: string;
|
|
412
|
+
/** Machine-readable error category for log report metadata and triage. */
|
|
413
|
+
errorCategory?: string;
|
|
410
414
|
}
|
|
411
415
|
|
|
412
416
|
/** Server push — broadcast when a schedule creates a conversation, so the client can show it as a chat thread. */
|
package/src/daemon/server.ts
CHANGED
|
@@ -48,7 +48,6 @@ import {
|
|
|
48
48
|
getWorkspacePromptPath,
|
|
49
49
|
} from "../util/platform.js";
|
|
50
50
|
import { registerDaemonCallbacks } from "../work-items/work-item-runner.js";
|
|
51
|
-
import { ComputerUseSession } from "./computer-use-session.js";
|
|
52
51
|
import { ConfigWatcher } from "./config-watcher.js";
|
|
53
52
|
import { parseIdentityFields } from "./handlers/identity.js";
|
|
54
53
|
import type {
|
|
@@ -57,7 +56,9 @@ import type {
|
|
|
57
56
|
} from "./handlers/shared.js";
|
|
58
57
|
import type { SkillOperationContext } from "./handlers/skills.js";
|
|
59
58
|
import { HostBashProxy } from "./host-bash-proxy.js";
|
|
59
|
+
import { HostCuProxy } from "./host-cu-proxy.js";
|
|
60
60
|
import { HostFileProxy } from "./host-file-proxy.js";
|
|
61
|
+
import { reloadMcpServers } from "./mcp-reload-service.js";
|
|
61
62
|
import type { ServerMessage } from "./message-protocol.js";
|
|
62
63
|
import {
|
|
63
64
|
DEFAULT_MEMORY_POLICY,
|
|
@@ -214,14 +215,18 @@ function makePendingInteractionRegistrar(
|
|
|
214
215
|
conversationId,
|
|
215
216
|
kind: "host_file",
|
|
216
217
|
});
|
|
218
|
+
} else if (msg.type === "host_cu_request") {
|
|
219
|
+
pendingInteractions.register(msg.requestId, {
|
|
220
|
+
session,
|
|
221
|
+
conversationId,
|
|
222
|
+
kind: "host_cu",
|
|
223
|
+
});
|
|
217
224
|
}
|
|
218
225
|
};
|
|
219
226
|
}
|
|
220
227
|
|
|
221
228
|
export class DaemonServer {
|
|
222
229
|
private sessions = new Map<string, Session>();
|
|
223
|
-
private cuSessions = new Map<string, ComputerUseSession>();
|
|
224
|
-
private cuObservationParseSequence = new Map<string, number>();
|
|
225
230
|
private sessionOptions = new Map<string, SessionCreateOptions>();
|
|
226
231
|
private sessionCreating = new Map<string, Promise<Session>>();
|
|
227
232
|
private sharedRequestTimestamps: number[] = [];
|
|
@@ -388,6 +393,11 @@ export class DaemonServer {
|
|
|
388
393
|
this.configWatcher.start(
|
|
389
394
|
() => this.evictSessionsForReload(),
|
|
390
395
|
() => this.broadcastIdentityChanged(),
|
|
396
|
+
() => {
|
|
397
|
+
reloadMcpServers().catch((err: unknown) => {
|
|
398
|
+
log.error({ err }, "MCP reload triggered by config change failed");
|
|
399
|
+
});
|
|
400
|
+
},
|
|
391
401
|
);
|
|
392
402
|
|
|
393
403
|
// Broadcast contacts_changed to all clients when any contact mutation occurs.
|
|
@@ -412,11 +422,6 @@ export class DaemonServer {
|
|
|
412
422
|
}
|
|
413
423
|
this.sessions.clear();
|
|
414
424
|
|
|
415
|
-
for (const cuSession of this.cuSessions.values()) {
|
|
416
|
-
cuSession.abort();
|
|
417
|
-
}
|
|
418
|
-
this.cuSessions.clear();
|
|
419
|
-
|
|
420
425
|
log.info("Daemon server stopped");
|
|
421
426
|
}
|
|
422
427
|
|
|
@@ -563,8 +568,6 @@ export class DaemonServer {
|
|
|
563
568
|
private handlerContext(): HandlerContext {
|
|
564
569
|
return {
|
|
565
570
|
sessions: this.sessions,
|
|
566
|
-
cuSessions: this.cuSessions,
|
|
567
|
-
cuObservationParseSequence: this.cuObservationParseSequence,
|
|
568
571
|
sharedRequestTimestamps: this.sharedRequestTimestamps,
|
|
569
572
|
debounceTimers: this.configWatcher.timers,
|
|
570
573
|
suppressConfigReload: this.configWatcher.suppressConfigReload,
|
|
@@ -665,9 +668,18 @@ export class DaemonServer {
|
|
|
665
668
|
}),
|
|
666
669
|
);
|
|
667
670
|
}
|
|
671
|
+
if (!session.isProcessing() || !session.hostCuProxy) {
|
|
672
|
+
session.setHostCuProxy(
|
|
673
|
+
new HostCuProxy(session.getCurrentSender(), (requestId) => {
|
|
674
|
+
pendingInteractions.resolve(requestId);
|
|
675
|
+
}),
|
|
676
|
+
);
|
|
677
|
+
}
|
|
678
|
+
session.addPreactivatedSkillId("computer-use");
|
|
668
679
|
} else if (!session.isProcessing()) {
|
|
669
680
|
session.setHostBashProxy(undefined);
|
|
670
681
|
session.setHostFileProxy(undefined);
|
|
682
|
+
session.setHostCuProxy(undefined);
|
|
671
683
|
}
|
|
672
684
|
session.setCommandIntent(options?.commandIntent ?? null);
|
|
673
685
|
session.setTurnChannelContext({
|
|
@@ -907,23 +919,15 @@ export class DaemonServer {
|
|
|
907
919
|
|
|
908
920
|
/**
|
|
909
921
|
* Look up an active session by ID without creating one.
|
|
910
|
-
* Checks both normal sessions and computer-use sessions so the HTTP
|
|
911
|
-
* surface-action path is consistent with dispatch.
|
|
912
922
|
*/
|
|
913
|
-
findSession(sessionId: string): Session |
|
|
914
|
-
return this.
|
|
923
|
+
findSession(sessionId: string): Session | undefined {
|
|
924
|
+
return this.sessions.get(sessionId);
|
|
915
925
|
}
|
|
916
926
|
|
|
917
927
|
/**
|
|
918
928
|
* Look up an active session that owns a given surfaceId.
|
|
919
|
-
* Falls back across both normal and computer-use sessions.
|
|
920
929
|
*/
|
|
921
|
-
findSessionBySurfaceId(
|
|
922
|
-
surfaceId: string,
|
|
923
|
-
): Session | ComputerUseSession | undefined {
|
|
924
|
-
for (const s of this.cuSessions.values()) {
|
|
925
|
-
if (s.surfaceState.has(surfaceId)) return s;
|
|
926
|
-
}
|
|
930
|
+
findSessionBySurfaceId(surfaceId: string): Session | undefined {
|
|
927
931
|
for (const s of this.sessions.values()) {
|
|
928
932
|
if (s.surfaceState.has(surfaceId)) return s;
|
|
929
933
|
}
|
|
@@ -57,6 +57,8 @@ export interface EventHandlerState {
|
|
|
57
57
|
orderingErrorDetected: boolean;
|
|
58
58
|
deferredOrderingError: string | null;
|
|
59
59
|
contextTooLargeDetected: boolean;
|
|
60
|
+
/** The raw error message from the provider when context_too_large is detected. */
|
|
61
|
+
contextTooLargeErrorMessage: string | null;
|
|
60
62
|
providerErrorUserMessage: string | null;
|
|
61
63
|
lastAssistantMessageId: string | undefined;
|
|
62
64
|
readonly pendingToolResults: Map<string, PendingToolResult>;
|
|
@@ -121,6 +123,7 @@ export function createEventHandlerState(): EventHandlerState {
|
|
|
121
123
|
orderingErrorDetected: false,
|
|
122
124
|
deferredOrderingError: null,
|
|
123
125
|
contextTooLargeDetected: false,
|
|
126
|
+
contextTooLargeErrorMessage: null,
|
|
124
127
|
providerErrorUserMessage: null,
|
|
125
128
|
lastAssistantMessageId: undefined,
|
|
126
129
|
pendingToolResults: new Map(),
|
|
@@ -384,6 +387,7 @@ export function handleToolOutputChunk(
|
|
|
384
387
|
type: "tool_output_chunk",
|
|
385
388
|
chunk: event.chunk,
|
|
386
389
|
sessionId: deps.ctx.conversationId,
|
|
390
|
+
toolUseId: event.toolUseId,
|
|
387
391
|
subType: structured.subType,
|
|
388
392
|
subToolName: structured.subToolName,
|
|
389
393
|
subToolInput: structured.subToolInput,
|
|
@@ -395,6 +399,7 @@ export function handleToolOutputChunk(
|
|
|
395
399
|
type: "tool_output_chunk",
|
|
396
400
|
chunk: event.chunk,
|
|
397
401
|
sessionId: deps.ctx.conversationId,
|
|
402
|
+
toolUseId: event.toolUseId,
|
|
398
403
|
});
|
|
399
404
|
}
|
|
400
405
|
}
|
|
@@ -593,12 +598,22 @@ export function handleError(
|
|
|
593
598
|
state.deferredOrderingError = event.error.message;
|
|
594
599
|
} else if (isContextTooLarge(event.error.message)) {
|
|
595
600
|
state.contextTooLargeDetected = true;
|
|
601
|
+
state.contextTooLargeErrorMessage = event.error.message;
|
|
596
602
|
} else {
|
|
597
603
|
const classified = classifySessionError(event.error, {
|
|
598
604
|
phase: "agent_loop",
|
|
599
605
|
});
|
|
600
606
|
if (classified.code === "CONTEXT_TOO_LARGE") {
|
|
601
607
|
state.contextTooLargeDetected = true;
|
|
608
|
+
state.contextTooLargeErrorMessage = event.error.message;
|
|
609
|
+
} else if (
|
|
610
|
+
classified.code === "PROVIDER_ORDERING" ||
|
|
611
|
+
classified.code === "PROVIDER_WEB_SEARCH"
|
|
612
|
+
) {
|
|
613
|
+
// Ordering errors detected via classifySessionError (e.g. from ProviderError
|
|
614
|
+
// with statusCode 400 and ordering message) — trigger the retry path.
|
|
615
|
+
state.orderingErrorDetected = true;
|
|
616
|
+
state.deferredOrderingError = event.error.message;
|
|
602
617
|
} else {
|
|
603
618
|
deps.onEvent(
|
|
604
619
|
buildSessionErrorMessage(deps.ctx.conversationId, classified),
|
|
@@ -829,6 +844,31 @@ export async function dispatchAgentEvent(
|
|
|
829
844
|
deps.reqId,
|
|
830
845
|
statusText,
|
|
831
846
|
);
|
|
847
|
+
// Emit tool_use_start so the client renders a tool chip (like other tools)
|
|
848
|
+
deps.onEvent({
|
|
849
|
+
type: "tool_use_start",
|
|
850
|
+
toolName: event.name,
|
|
851
|
+
input: event.input,
|
|
852
|
+
sessionId: deps.ctx.conversationId,
|
|
853
|
+
toolUseId: event.toolUseId,
|
|
854
|
+
});
|
|
855
|
+
break;
|
|
856
|
+
}
|
|
857
|
+
case "server_tool_complete": {
|
|
858
|
+
deps.ctx.emitActivityState(
|
|
859
|
+
"streaming",
|
|
860
|
+
"tool_result_received",
|
|
861
|
+
"assistant_turn",
|
|
862
|
+
deps.reqId,
|
|
863
|
+
);
|
|
864
|
+
deps.onEvent({
|
|
865
|
+
type: "tool_result",
|
|
866
|
+
toolName: "",
|
|
867
|
+
result: "",
|
|
868
|
+
isError: false,
|
|
869
|
+
sessionId: deps.ctx.conversationId,
|
|
870
|
+
toolUseId: event.toolUseId,
|
|
871
|
+
});
|
|
832
872
|
break;
|
|
833
873
|
}
|
|
834
874
|
case "error":
|