@vellumai/assistant 0.4.44 → 0.4.45
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/.prettierignore +4 -0
- package/ARCHITECTURE.md +34 -31
- package/README.md +4 -4
- package/bun.lock +10 -35
- package/docs/architecture/integrations.md +102 -197
- package/docs/architecture/keychain-broker.md +1 -1
- package/docs/architecture/memory.md +2 -2
- package/docs/architecture/scheduling.md +1 -1
- package/docs/architecture/security.md +11 -11
- package/docs/error-handling.md +1 -1
- package/docs/trusted-contact-access.md +3 -3
- package/drizzle/meta/0000_snapshot.json +34 -100
- package/drizzle/meta/_journal.json +1 -1
- package/drizzle.config.ts +4 -4
- package/package.json +3 -2
- package/scripts/capture-x-graphql.ts +237 -141
- package/scripts/generate-bundled-tool-registry.ts +223 -0
- package/src/__tests__/access-request-decision.test.ts +0 -1
- package/src/__tests__/actor-token-service.test.ts +23 -24
- package/src/__tests__/agent-loop.test.ts +0 -131
- package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
- package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
- package/src/__tests__/approval-primitive.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +11 -1
- package/src/__tests__/asset-materialize-tool.test.ts +0 -1
- package/src/__tests__/asset-search-tool.test.ts +0 -1
- package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
- package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
- package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
- package/src/__tests__/attachments-store.test.ts +0 -1
- package/src/__tests__/avatar-e2e.test.ts +74 -115
- package/src/__tests__/avatar-router.test.ts +25 -62
- package/src/__tests__/browser-manager.test.ts +24 -0
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
- package/src/__tests__/browser-skill-endstate.test.ts +8 -11
- package/src/__tests__/btw-routes.test.ts +326 -0
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/call-conversation-messages.test.ts +0 -1
- package/src/__tests__/call-domain.test.ts +0 -1
- package/src/__tests__/call-pointer-messages.test.ts +0 -1
- package/src/__tests__/call-recovery.test.ts +0 -1
- package/src/__tests__/call-routes-http.test.ts +0 -1
- package/src/__tests__/call-store.test.ts +0 -1
- package/src/__tests__/canonical-guardian-store.test.ts +0 -1
- package/src/__tests__/channel-approval-routes.test.ts +1 -1
- package/src/__tests__/channel-approvals.test.ts +1 -1
- package/src/__tests__/channel-delivery-store.test.ts +0 -1
- package/src/__tests__/channel-guardian.test.ts +5 -7
- package/src/__tests__/channel-retry-sweep.test.ts +0 -1
- package/src/__tests__/checker.test.ts +4 -11
- package/src/__tests__/compaction.benchmark.test.ts +16 -14
- package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
- package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
- package/src/__tests__/computer-use-tools.test.ts +35 -31
- package/src/__tests__/config-schema.test.ts +11 -15
- package/src/__tests__/config-watcher.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/conflict-store.test.ts +0 -1
- package/src/__tests__/connection-policy.test.ts +4 -7
- package/src/__tests__/contacts-tools.test.ts +0 -1
- package/src/__tests__/context-memory-e2e.test.ts +2 -4
- package/src/__tests__/context-overflow-reducer.test.ts +2 -4
- package/src/__tests__/context-window-manager.test.ts +147 -60
- package/src/__tests__/contradiction-checker.test.ts +0 -1
- package/src/__tests__/conversation-attention-store.test.ts +0 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
- package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
- package/src/__tests__/conversation-store.test.ts +0 -1
- package/src/__tests__/conversation-unread-route.test.ts +1 -2
- package/src/__tests__/credential-security-invariants.test.ts +7 -8
- package/src/__tests__/cross-provider-web-search.test.ts +353 -0
- package/src/__tests__/daemon-assistant-events.test.ts +6 -7
- package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
- package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
- package/src/__tests__/diagnostics-export.test.ts +189 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
- package/src/__tests__/entity-extractor.test.ts +0 -1
- package/src/__tests__/entity-search.test.ts +0 -1
- package/src/__tests__/ephemeral-permissions.test.ts +2 -4
- package/src/__tests__/file-read-tool.test.ts +86 -0
- package/src/__tests__/followup-tools.test.ts +0 -1
- package/src/__tests__/frontmatter.test.ts +77 -34
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/gateway-only-guard.test.ts +1 -1
- package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
- package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
- package/src/__tests__/guardian-action-store.test.ts +0 -1
- package/src/__tests__/guardian-action-sweep.test.ts +0 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -2
- package/src/__tests__/guardian-grant-minting.test.ts +1 -1
- package/src/__tests__/guardian-outbound-http.test.ts +0 -1
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
- package/src/__tests__/guardian-routing-state.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
- package/src/__tests__/host-bash-proxy.test.ts +335 -0
- package/src/__tests__/host-file-proxy.test.ts +374 -0
- package/src/__tests__/host-shell-tool.test.ts +147 -1
- package/src/__tests__/http-user-message-parity.test.ts +361 -0
- package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
- package/src/__tests__/integration-status.test.ts +3 -8
- package/src/__tests__/intent-routing.test.ts +7 -46
- package/src/__tests__/invite-redemption-service.test.ts +0 -1
- package/src/__tests__/invite-routes-http.test.ts +0 -1
- package/src/__tests__/llm-usage-store.test.ts +0 -1
- package/src/__tests__/managed-avatar-client.test.ts +101 -55
- package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
- package/src/__tests__/managed-store.test.ts +94 -21
- package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
- package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
- package/src/__tests__/memory-recall-quality.test.ts +0 -1
- package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
- package/src/__tests__/memory-regressions.test.ts +0 -1
- package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
- package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
- package/src/__tests__/messaging-send-tool.test.ts +35 -0
- package/src/__tests__/messaging-skill-split.test.ts +138 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
- package/src/__tests__/migration-export-http.test.ts +2 -3
- package/src/__tests__/migration-import-commit-http.test.ts +1 -2
- package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
- package/src/__tests__/migration-validate-http.test.ts +1 -2
- package/src/__tests__/native-web-search.test.ts +475 -0
- package/src/__tests__/navigate-settings-tab.test.ts +84 -0
- package/src/__tests__/non-member-access-request.test.ts +0 -1
- package/src/__tests__/notification-broadcaster.test.ts +15 -15
- package/src/__tests__/notification-decision-strategy.test.ts +6 -6
- package/src/__tests__/notification-deep-link.test.ts +7 -7
- package/src/__tests__/notification-guardian-path.test.ts +2 -3
- package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
- package/src/__tests__/notification-thread-candidates.test.ts +4 -4
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
- package/src/__tests__/playbook-execution.test.ts +0 -1
- package/src/__tests__/playbook-tools.test.ts +0 -1
- package/src/__tests__/profile-compiler.test.ts +0 -1
- package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
- package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
- package/src/__tests__/recording-handler.test.ts +30 -94
- package/src/__tests__/registry.test.ts +28 -35
- package/src/__tests__/relay-server.test.ts +0 -1
- package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +0 -1
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
- package/src/__tests__/schedule-store.test.ts +441 -1
- package/src/__tests__/schedule-tools.test.ts +468 -7
- package/src/__tests__/scheduler-recurrence.test.ts +196 -23
- package/src/__tests__/scoped-approval-grants.test.ts +0 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
- package/src/__tests__/secret-response-routing.test.ts +4 -1
- package/src/__tests__/send-endpoint-busy.test.ts +14 -2
- package/src/__tests__/send-notification-tool.test.ts +0 -7
- package/src/__tests__/sequence-store.test.ts +0 -1
- package/src/__tests__/server-history-render.test.ts +1 -2
- package/src/__tests__/session-abort-tool-results.test.ts +0 -1
- package/src/__tests__/session-agent-loop.test.ts +46 -6
- package/src/__tests__/session-confirmation-signals.test.ts +0 -1
- package/src/__tests__/session-conflict-gate.test.ts +2 -6
- package/src/__tests__/session-error.test.ts +5 -14
- package/src/__tests__/session-init.benchmark.test.ts +3 -5
- package/src/__tests__/session-load-history-repair.test.ts +0 -1
- package/src/__tests__/session-media-retry.test.ts +12 -74
- package/src/__tests__/session-pre-run-repair.test.ts +0 -1
- package/src/__tests__/session-profile-injection.test.ts +2 -6
- package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
- package/src/__tests__/session-queue.test.ts +94 -139
- package/src/__tests__/session-skill-tools.test.ts +115 -115
- package/src/__tests__/session-slash-known.test.ts +0 -1
- package/src/__tests__/session-slash-queue.test.ts +0 -1
- package/src/__tests__/session-slash-unknown.test.ts +0 -1
- package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
- package/src/__tests__/session-usage.test.ts +0 -1
- package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
- package/src/__tests__/session-workspace-injection.test.ts +2 -6
- package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
- package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
- package/src/__tests__/skill-feature-flags.test.ts +125 -18
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
- package/src/__tests__/skill-load-tool.test.ts +194 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
- package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
- package/src/__tests__/skills.test.ts +14 -53
- package/src/__tests__/slack-channel-config.test.ts +0 -1
- package/src/__tests__/slack-inbound-verification.test.ts +0 -1
- package/src/__tests__/slack-skill.test.ts +1 -1
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +4 -3
- package/src/__tests__/task-compiler.test.ts +0 -1
- package/src/__tests__/task-management-tools.test.ts +0 -1
- package/src/__tests__/task-memory-cleanup.test.ts +0 -1
- package/src/__tests__/task-runner.test.ts +0 -1
- package/src/__tests__/task-scheduler.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +0 -1
- package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
- package/src/__tests__/thread-seed-composer.test.ts +5 -5
- package/src/__tests__/tool-approval-handler.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +8 -86
- package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
- package/src/__tests__/tool-notification-listener.test.ts +1 -1
- package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
- package/src/__tests__/trust-store.test.ts +80 -4
- 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__/trusted-contact-lifecycle-notifications.test.ts +0 -1
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/trusted-contact-verification.test.ts +0 -1
- package/src/__tests__/twilio-provider.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
- package/src/__tests__/update-bulletin.test.ts +0 -1
- package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
- package/src/__tests__/usage-routes.test.ts +0 -1
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
- package/src/__tests__/voice-invite-redemption.test.ts +0 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
- package/src/__tests__/voice-session-bridge.test.ts +9 -1
- package/src/__tests__/web-fetch.test.ts +57 -0
- package/src/__tests__/workspace-git-service.test.ts +5 -14
- package/src/__tests__/workspace-policy.test.ts +0 -1
- package/src/agent/loop.ts +22 -34
- package/src/bundler/bundle-signer.ts +4 -4
- package/src/calls/call-controller.ts +1 -1
- package/src/calls/relay-server.ts +1 -1
- package/src/calls/twilio-rest.ts +1 -1
- package/src/calls/voice-session-bridge.ts +3 -1
- package/src/cli/__tests__/notifications.test.ts +3 -4
- package/src/cli/commands/map.ts +2 -6
- package/src/cli/commands/mcp.ts +73 -15
- package/src/cli/commands/notifications.ts +4 -4
- package/src/cli/commands/sessions.ts +9 -1
- package/src/cli/commands/skills.ts +6 -10
- package/src/cli/http-client.ts +2 -3
- package/src/cli/main-screen.tsx +10 -10
- package/src/cli/program.ts +0 -4
- package/src/cli/reference.ts +0 -2
- package/src/cli.ts +15 -9
- package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
- package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
- package/src/config/bundled-skills/browser/SKILL.md +6 -1
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
- package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
- package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
- package/src/config/bundled-skills/contacts/SKILL.md +10 -1
- package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
- package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
- package/src/config/bundled-skills/document/SKILL.md +4 -1
- package/src/config/bundled-skills/doordash/SKILL.md +8 -1
- package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
- package/src/config/bundled-skills/followups/SKILL.md +4 -1
- package/src/config/bundled-skills/gmail/SKILL.md +180 -0
- package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
- package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
- package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
- package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
- package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
- package/src/config/bundled-skills/messaging/SKILL.md +23 -139
- package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
- package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
- package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
- package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
- package/src/config/bundled-skills/notifications/SKILL.md +5 -1
- package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
- package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
- package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
- package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
- package/src/config/bundled-skills/schedule/SKILL.md +70 -9
- package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
- package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
- package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
- package/src/config/bundled-skills/sequences/SKILL.md +47 -0
- package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
- package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
- package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
- package/src/config/bundled-skills/settings/SKILL.md +12 -0
- package/src/config/bundled-skills/settings/TOOLS.json +112 -0
- package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
- package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
- package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
- package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
- package/src/config/bundled-skills/slack/SKILL.md +5 -1
- package/src/config/bundled-skills/subagent/SKILL.md +4 -1
- package/src/config/bundled-skills/tasks/SKILL.md +5 -2
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
- package/src/config/bundled-skills/watcher/SKILL.md +4 -1
- package/src/config/bundled-tool-registry.ts +118 -107
- package/src/config/env.ts +5 -2
- package/src/config/feature-flag-registry.json +25 -9
- package/src/config/loader.ts +10 -2
- package/src/config/schema.ts +19 -16
- package/src/config/schemas/inference.ts +12 -22
- package/src/config/schemas/memory-storage.ts +19 -1
- package/src/config/schemas/platform.ts +0 -16
- package/src/config/skill-state.ts +11 -8
- package/src/config/skills.ts +83 -32
- package/src/context/token-estimator.ts +11 -0
- package/src/context/window-manager.ts +180 -151
- package/src/daemon/computer-use-session.ts +11 -43
- package/src/daemon/daemon-control.ts +4 -1
- package/src/daemon/handlers/config-channels.ts +5 -9
- package/src/daemon/handlers/config-ingress.ts +0 -4
- package/src/daemon/handlers/config-model.ts +7 -13
- package/src/daemon/handlers/config-telegram.ts +4 -8
- package/src/daemon/handlers/config-voice.ts +2 -5
- package/src/daemon/handlers/dictation.ts +2 -12
- package/src/daemon/handlers/identity.ts +0 -105
- package/src/daemon/handlers/recording.ts +3 -23
- package/src/daemon/handlers/session-history.ts +1 -1
- package/src/daemon/handlers/sessions.ts +53 -72
- package/src/daemon/handlers/shared.ts +7 -28
- package/src/daemon/handlers/skills.ts +31 -27
- package/src/daemon/host-bash-proxy.ts +148 -0
- package/src/daemon/host-file-proxy.ts +135 -0
- package/src/daemon/lifecycle.ts +49 -24
- package/src/daemon/mcp-reload-service.ts +123 -0
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/browser.ts +1 -1
- package/src/daemon/message-types/computer-use.ts +1 -4
- package/src/daemon/message-types/guardian-actions.ts +1 -1
- package/src/daemon/message-types/host-bash.ts +18 -0
- package/src/daemon/message-types/host-file.ts +44 -0
- package/src/daemon/message-types/integrations.ts +1 -67
- package/src/daemon/message-types/messages.ts +15 -0
- package/src/daemon/message-types/schedules.ts +11 -27
- package/src/daemon/message-types/sessions.ts +2 -1
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -1
- package/src/daemon/ride-shotgun-handler.ts +2 -42
- package/src/daemon/server.ts +43 -10
- package/src/daemon/session-agent-loop-handlers.ts +48 -7
- package/src/daemon/session-agent-loop.ts +97 -66
- package/src/daemon/session-attachments.ts +1 -1
- package/src/daemon/session-error.ts +17 -16
- package/src/daemon/session-lifecycle.ts +20 -1
- package/src/daemon/session-media-retry.ts +1 -15
- package/src/daemon/session-messaging.ts +14 -6
- package/src/daemon/session-process.ts +36 -7
- package/src/daemon/session-queue-manager.ts +62 -103
- package/src/daemon/session-runtime-assembly.ts +27 -0
- package/src/daemon/session-skill-tools.ts +12 -11
- package/src/daemon/session-slash.ts +7 -0
- package/src/daemon/session-surfaces.ts +19 -97
- package/src/daemon/session-tool-setup.ts +146 -6
- package/src/daemon/session.ts +77 -13
- package/src/errors.ts +0 -2
- package/src/export/formatter.ts +6 -0
- package/src/mcp/mcp-oauth-provider.ts +1 -3
- package/src/media/avatar-router.ts +20 -28
- package/src/media/avatar-types.ts +7 -14
- package/src/media/managed-avatar-client.ts +70 -34
- package/src/memory/conversation-title-service.ts +1 -2
- package/src/memory/db-init.ts +16 -0
- package/src/memory/embedding-backend.ts +129 -27
- package/src/memory/embedding-gemini.test.ts +256 -0
- package/src/memory/embedding-gemini.ts +47 -13
- package/src/memory/embedding-local.ts +14 -2
- package/src/memory/embedding-ollama.ts +15 -2
- package/src/memory/embedding-openai.ts +15 -2
- package/src/memory/embedding-types.test.ts +116 -0
- package/src/memory/embedding-types.ts +61 -0
- package/src/memory/fingerprint.ts +1 -1
- package/src/memory/indexer.ts +25 -1
- package/src/memory/job-handlers/embedding.test.ts +258 -0
- package/src/memory/job-handlers/embedding.ts +81 -1
- package/src/memory/job-handlers/index-maintenance.ts +35 -1
- package/src/memory/job-handlers/media-processing.ts +11 -1
- package/src/memory/job-utils.ts +21 -6
- package/src/memory/jobs-store.ts +5 -1
- package/src/memory/jobs-worker.ts +8 -0
- package/src/memory/message-content.ts +66 -0
- package/src/memory/migrations/100-core-tables.ts +1 -31
- package/src/memory/migrations/104-core-indexes.ts +0 -11
- package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
- package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
- package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
- package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
- package/src/memory/migrations/index.ts +4 -0
- package/src/memory/migrations/registry.ts +19 -0
- package/src/memory/qdrant-client.ts +158 -43
- package/src/memory/retriever.test.ts +0 -1
- package/src/memory/retriever.ts +12 -2
- package/src/memory/schema/infrastructure.ts +5 -29
- package/src/memory/search/formatting.ts +34 -9
- package/src/memory/search/semantic.ts +57 -2
- package/src/memory/search/types.ts +2 -1
- package/src/notifications/AGENTS.md +2 -2
- package/src/notifications/README.md +59 -58
- package/src/notifications/adapters/macos.ts +1 -1
- package/src/notifications/broadcaster.ts +5 -5
- package/src/notifications/copy-composer.ts +1 -1
- package/src/notifications/decision-engine.ts +2 -2
- package/src/notifications/destination-resolver.ts +2 -2
- package/src/notifications/emit-signal.ts +8 -8
- package/src/notifications/signal.ts +1 -1
- package/src/notifications/thread-seed-composer.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +1 -1
- package/src/oauth/token-persistence.ts +1 -1
- package/src/permissions/checker.ts +12 -1
- package/src/permissions/defaults.ts +10 -14
- package/src/permissions/trust-store.ts +37 -0
- package/src/permissions/workspace-policy.ts +0 -1
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
- package/src/prompts/computer-use-prompt.ts +1 -1
- package/src/prompts/system-prompt.ts +29 -30
- package/src/prompts/templates/SOUL.md +1 -2
- package/src/prompts/templates/UPDATES.md +16 -7
- package/src/providers/anthropic/client.ts +87 -33
- package/src/providers/gemini/client.ts +6 -0
- package/src/providers/managed-proxy/constants.ts +5 -0
- package/src/providers/openai/client.ts +15 -0
- package/src/providers/registry.ts +2 -2
- package/src/providers/types.ts +24 -2
- package/src/runtime/AGENTS.md +18 -0
- package/src/runtime/assistant-event-hub.ts +2 -3
- package/src/runtime/assistant-event.ts +4 -4
- package/src/runtime/auth/__tests__/context.test.ts +5 -5
- package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
- package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
- package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
- package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
- package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
- package/src/runtime/auth/__tests__/subject.test.ts +8 -8
- package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
- package/src/runtime/auth/route-policy.ts +8 -4
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/auth/subject.ts +4 -4
- package/src/runtime/auth/token-service.ts +0 -23
- package/src/runtime/auth/types.ts +3 -3
- package/src/runtime/guardian-action-followup-executor.ts +1 -1
- package/src/runtime/guardian-action-grant-minter.ts +1 -1
- package/src/runtime/guardian-action-service.ts +3 -3
- package/src/runtime/http-server.ts +15 -2
- package/src/runtime/invite-service.ts +3 -3
- package/src/runtime/local-actor-identity.ts +17 -22
- package/src/runtime/pending-interactions.ts +21 -9
- package/src/runtime/routes/app-management-routes.ts +2 -3
- package/src/runtime/routes/approval-routes.ts +1 -3
- package/src/runtime/routes/btw-routes.ts +155 -0
- package/src/runtime/routes/computer-use-routes.ts +77 -31
- package/src/runtime/routes/conversation-routes.ts +230 -46
- package/src/runtime/routes/diagnostics-routes.ts +63 -29
- package/src/runtime/routes/documents-routes.ts +2 -2
- package/src/runtime/routes/global-search-routes.ts +1 -1
- package/src/runtime/routes/host-bash-routes.ts +83 -0
- package/src/runtime/routes/host-file-routes.ts +79 -0
- package/src/runtime/routes/integrations/slack/share.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +120 -0
- package/src/runtime/routes/mcp-routes.ts +20 -0
- package/src/runtime/routes/migration-routes.ts +3 -3
- package/src/runtime/routes/pairing-routes.ts +1 -1
- package/src/runtime/routes/recording-routes.ts +6 -4
- package/src/runtime/routes/schedule-routes.ts +31 -5
- package/src/runtime/routes/session-management-routes.ts +2 -6
- package/src/runtime/routes/session-query-routes.ts +18 -15
- package/src/runtime/routes/settings-routes.ts +7 -261
- package/src/runtime/routes/skills-routes.ts +7 -6
- package/src/runtime/routes/subagents-routes.ts +4 -10
- package/src/runtime/routes/surface-action-routes.ts +3 -14
- package/src/runtime/routes/surface-content-routes.ts +22 -5
- package/src/runtime/routes/work-items-routes.ts +21 -25
- package/src/runtime/routes/workspace-routes.test.ts +3 -3
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/telegram-streaming-delivery.ts +3 -0
- package/src/runtime/verification-outbound-actions.ts +2 -2
- package/src/schedule/integration-status.ts +0 -6
- package/src/schedule/schedule-store.ts +234 -43
- package/src/schedule/scheduler.ts +73 -74
- package/src/security/oauth2.ts +1 -1
- package/src/sequence/store.ts +12 -2
- package/src/skills/frontmatter.ts +19 -77
- package/src/skills/managed-store.ts +11 -2
- package/src/subagent/manager.ts +5 -3
- package/src/tasks/ephemeral-permissions.ts +3 -5
- package/src/tools/AGENTS.md +0 -1
- package/src/tools/browser/browser-manager.ts +17 -11
- package/src/tools/browser/jit-auth.ts +4 -1
- package/src/tools/claude-code/claude-code.ts +1 -1
- package/src/tools/computer-use/definitions.ts +48 -60
- package/src/tools/document/document-tool.ts +6 -6
- package/src/tools/filesystem/edit.ts +2 -1
- package/src/tools/filesystem/read.ts +20 -2
- package/src/tools/filesystem/write.ts +2 -1
- package/src/tools/host-filesystem/edit.ts +17 -1
- package/src/tools/host-filesystem/read.ts +16 -1
- package/src/tools/host-filesystem/write.ts +15 -1
- package/src/tools/host-terminal/host-shell.ts +24 -0
- package/src/tools/memory/definitions.ts +45 -81
- package/src/tools/memory/handlers.test.ts +0 -1
- package/src/tools/memory/handlers.ts +1 -1
- package/src/tools/memory/register.ts +26 -60
- package/src/tools/network/script-proxy/session-manager.ts +6 -8
- package/src/tools/network/web-fetch.ts +7 -1
- package/src/tools/network/web-search.ts +2 -1
- package/src/tools/registry.ts +23 -0
- package/src/tools/schedule/create.ts +113 -5
- package/src/tools/schedule/list.ts +57 -15
- package/src/tools/schedule/update.ts +73 -3
- package/src/tools/shared/filesystem/image-read.ts +192 -0
- package/src/tools/side-effects.ts +1 -7
- package/src/tools/skills/delete-managed.ts +27 -64
- package/src/tools/skills/execute.ts +54 -0
- package/src/tools/skills/load.ts +127 -5
- package/src/tools/skills/scaffold-managed.ts +93 -172
- package/src/tools/subagent/message.ts +0 -7
- package/src/tools/subagent/spawn.ts +1 -1
- package/src/tools/swarm/delegate.ts +0 -3
- package/src/tools/system/avatar-generator.ts +13 -19
- package/src/tools/system/request-permission.ts +2 -1
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/tool-manifest.ts +41 -47
- package/src/tools/types.ts +6 -2
- package/src/tools/ui-surface/definitions.ts +0 -55
- package/src/util/errors.ts +0 -10
- package/src/workspace/git-service.ts +0 -2
- package/src/__tests__/account-registry.test.ts +0 -258
- package/src/__tests__/email-classifier.test.ts +0 -25
- package/src/__tests__/gmail-integration.test.ts +0 -97
- package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
- package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
- package/src/__tests__/recording-intent-fallback.test.ts +0 -199
- package/src/__tests__/recording-intent.test.ts +0 -985
- package/src/__tests__/recording-state-machine.test.ts +0 -1574
- package/src/__tests__/reminder-store.test.ts +0 -350
- package/src/__tests__/reminder.test.ts +0 -337
- package/src/__tests__/scan-result-store.test.ts +0 -121
- package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
- package/src/__tests__/view-image-tool.test.ts +0 -241
- package/src/cli/commands/amazon/cart.ts +0 -513
- package/src/cli/commands/amazon/checkout.ts +0 -394
- package/src/cli/commands/amazon/client.ts +0 -513
- package/src/cli/commands/amazon/index.ts +0 -885
- package/src/cli/commands/amazon/product-details.ts +0 -145
- package/src/cli/commands/amazon/request-extractor.ts +0 -187
- package/src/cli/commands/amazon/search.ts +0 -76
- package/src/cli/commands/amazon/session.ts +0 -108
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
- package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
- package/src/cli/commands/twitter/index.ts +0 -420
- package/src/cli/commands/twitter/oauth-client.ts +0 -60
- package/src/cli/commands/twitter/router.ts +0 -351
- package/src/cli/commands/twitter/types.ts +0 -30
- package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
- package/src/config/bundled-skills/agentmail/icon.svg +0 -21
- package/src/config/bundled-skills/amazon/SKILL.md +0 -136
- package/src/config/bundled-skills/amazon/icon.svg +0 -13
- package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
- package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
- package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
- package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
- package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
- package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
- package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
- package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
- package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
- package/src/config/bundled-skills/influencer/SKILL.md +0 -144
- package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
- package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
- package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
- package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
- package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
- package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
- package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
- package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
- package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
- package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
- package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
- package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
- package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
- package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
- package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
- package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
- package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
- package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
- package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
- package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
- package/src/config/bundled-skills/notion/SKILL.md +0 -240
- package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
- package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
- package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
- package/src/config/bundled-skills/reminder/SKILL.md +0 -79
- package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
- package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
- package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
- package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
- package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
- package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
- package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
- package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
- package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
- package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
- package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
- package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
- package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
- package/src/config/bundled-skills/twitter/SKILL.md +0 -206
- package/src/config/bundled-skills/twitter/icon.svg +0 -14
- package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
- package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
- package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
- package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
- package/src/daemon/handlers/pairing.ts +0 -119
- package/src/daemon/handlers/session-user-message.ts +0 -961
- package/src/daemon/recording-executor.ts +0 -180
- package/src/daemon/recording-intent-fallback.ts +0 -162
- package/src/daemon/recording-intent.ts +0 -493
- package/src/memory/account-store.ts +0 -117
- package/src/messaging/activity-analyzer.ts +0 -76
- package/src/messaging/email-classifier.ts +0 -208
- package/src/messaging/index.ts +0 -2
- package/src/messaging/outreach-classifier.ts +0 -185
- package/src/messaging/thread-summarizer.ts +0 -346
- package/src/messaging/types.ts +0 -17
- package/src/tools/browser/x-auto-navigate.ts +0 -254
- package/src/tools/credentials/account-registry.ts +0 -144
- package/src/tools/filesystem/view-image.ts +0 -244
- package/src/tools/reminder/reminder-store.ts +0 -194
- package/src/tools/reminder/reminder.ts +0 -158
- package/src/tools/system/navigate-settings.ts +0 -74
- package/src/tools/system/open-system-settings.ts +0 -85
- package/src/tools/system/version.ts +0 -54
- package/src/twitter/platform-proxy-client.ts +0 -408
- /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
|
@@ -195,22 +195,21 @@ export function buildSystemPrompt(): string {
|
|
|
195
195
|
|
|
196
196
|
function buildTaskScheduleReminderRoutingSection(): string {
|
|
197
197
|
return [
|
|
198
|
-
"## Tool Routing: Tasks vs Schedules vs
|
|
198
|
+
"## Tool Routing: Tasks vs Schedules vs Notifications",
|
|
199
199
|
"",
|
|
200
|
-
'
|
|
200
|
+
'Three tools, each for a different purpose. Load the "Time-Based Actions" skill for the full decision framework.',
|
|
201
201
|
"",
|
|
202
202
|
"| Tool | Purpose |",
|
|
203
203
|
"|------|---------|",
|
|
204
204
|
'| `task_list_add` | Track work — no time trigger ("add to my tasks", "remind me to X" without a time) |',
|
|
205
|
-
'| `schedule_create` |
|
|
206
|
-
'| `reminder_create` | One-shot future alert ("remind me at 3pm", "remind me in 5 minutes") |',
|
|
205
|
+
'| `schedule_create` | Any time-based automation — recurring cron/RRULE ("every day at 9am") OR one-shot future alert with `fire_at` ("remind me at 3pm") |',
|
|
207
206
|
"| `send_notification` | **Immediate-only** — fires instantly, NO delay capability |",
|
|
208
207
|
"",
|
|
209
208
|
"### Critical: `send_notification` is immediate-only",
|
|
210
|
-
"NEVER use `send_notification` for future-time requests — it fires NOW. Use `
|
|
209
|
+
"NEVER use `send_notification` for future-time requests — it fires NOW. Use `schedule_create` with `fire_at` for any delayed alert.",
|
|
211
210
|
"",
|
|
212
211
|
"### Quick routing rules",
|
|
213
|
-
"- Future time, one-shot → `
|
|
212
|
+
"- Future time, one-shot → `schedule_create` with `fire_at`",
|
|
214
213
|
"- Recurring pattern → `schedule_create`",
|
|
215
214
|
"- No time, track as work → `task_list_add`",
|
|
216
215
|
"- Instant alert → `send_notification`",
|
|
@@ -342,7 +341,7 @@ function buildInChatConfigurationSection(): string {
|
|
|
342
341
|
"**How to collect credentials and secrets:**",
|
|
343
342
|
'- Use `credential_store` with `action: "prompt"` to present a secure input field. The value never appears in the conversation.',
|
|
344
343
|
'- For OAuth flows, use `credential_store` with `action: "oauth2_connect"` to handle the authorization in-browser. Some services (e.g. Twitter/X) define their own auth flow via dedicated skill instructions — check the service\'s skill documentation for provider-specific setup steps.',
|
|
345
|
-
"- For non-secret config values (e.g. a public URL, a webhook URL), ask the user directly in the conversation and use the appropriate
|
|
344
|
+
"- For non-secret config values (e.g. a public URL, a webhook URL), ask the user directly in the conversation and use the appropriate config tool to persist the value.",
|
|
346
345
|
"",
|
|
347
346
|
'**After saving a value**, confirm success with a message like: "Great, saved! You can always update this from the Settings page."',
|
|
348
347
|
"",
|
|
@@ -569,7 +568,7 @@ export function buildSwarmGuidanceSection(): string {
|
|
|
569
568
|
return [
|
|
570
569
|
"## Parallel Task Orchestration",
|
|
571
570
|
"",
|
|
572
|
-
'
|
|
571
|
+
'When a task has **multiple independent parts** that benefit from parallel execution (e.g. "research X, implement Y, and review Z"), load the `orchestration` skill using `skill_load` first, then use `swarm_delegate` to decompose and run them in parallel. For single-focus tasks, work directly — do not decompose them into a swarm.',
|
|
573
572
|
].join("\n");
|
|
574
573
|
}
|
|
575
574
|
|
|
@@ -653,7 +652,7 @@ function buildMemoryPersistenceSection(): string {
|
|
|
653
652
|
"",
|
|
654
653
|
"Your memory does not survive session restarts. If you want to remember something, **save it**.",
|
|
655
654
|
"",
|
|
656
|
-
|
|
655
|
+
'- Use `memory_manage` with `op: "save"` for facts, preferences, learnings, and anything worth recalling later.',
|
|
657
656
|
"- Update workspace files (USER.md, SOUL.md) for profile and personality changes.",
|
|
658
657
|
'- When someone says "remember this," save it immediately — don\'t rely on keeping it in context.',
|
|
659
658
|
"- When you make a mistake, save the lesson so future-you doesn't repeat it.",
|
|
@@ -698,7 +697,7 @@ function buildLearningMemorySection(): string {
|
|
|
698
697
|
"",
|
|
699
698
|
"When you make a mistake, hit a dead end, or discover something non-obvious, save it to memory so you don't repeat it.",
|
|
700
699
|
"",
|
|
701
|
-
'Use `
|
|
700
|
+
'Use `memory_manage` with `op: "save", kind: "learning"` for:',
|
|
702
701
|
"- **Mistakes and corrections** — wrong assumptions, failed approaches, gotchas you ran into",
|
|
703
702
|
"- **Discoveries** — undocumented behaviors, surprising API quirks, things that weren't obvious",
|
|
704
703
|
"- **Working solutions** — the approach that actually worked after trial and error",
|
|
@@ -707,8 +706,8 @@ function buildLearningMemorySection(): string {
|
|
|
707
706
|
"The statement should capture both what happened and the takeaway. Write it as advice to your future self.",
|
|
708
707
|
"",
|
|
709
708
|
"Examples:",
|
|
710
|
-
'- `
|
|
711
|
-
'- `
|
|
709
|
+
'- `memory_manage({ op: "save", kind: "learning", subject: "macOS Shortcuts CLI", statement: "shortcuts CLI requires full disk access to export shortcuts — if permission is denied, guide the user to grant it in System Settings rather than retrying." })`',
|
|
710
|
+
'- `memory_manage({ op: "save", kind: "learning", subject: "Gmail API pagination", statement: "Gmail search returns max 100 results per page. Always check nextPageToken and loop if the user asks for \'all\' messages." })`',
|
|
712
711
|
"",
|
|
713
712
|
"Don't overthink it. If you catch yourself thinking \"I'll remember that for next time,\" save it.",
|
|
714
713
|
].join("\n");
|
|
@@ -817,6 +816,12 @@ export function buildCliReferenceSection(): string {
|
|
|
817
816
|
"## Assistant CLI",
|
|
818
817
|
"",
|
|
819
818
|
"The `assistant` CLI is installed on the user's machine and available via `bash`.",
|
|
819
|
+
"For account and authentication work, prefer real `assistant` CLI workflows over any legacy account-record abstraction.",
|
|
820
|
+
"- Use `assistant credentials ...` for stored secrets and credential metadata.",
|
|
821
|
+
"- Use `assistant oauth token <service>` for connected integration tokens.",
|
|
822
|
+
"- Use `assistant mcp auth <name>` when an MCP server needs OAuth login.",
|
|
823
|
+
"- Use `assistant platform status` for platform-linked deployment and auth context.",
|
|
824
|
+
"- If a bundled skill documents a service-specific `assistant <service>` auth or session flow, follow that CLI exactly.",
|
|
820
825
|
"",
|
|
821
826
|
"```",
|
|
822
827
|
cachedCliHelp,
|
|
@@ -874,22 +879,24 @@ function appendSkillsCatalog(basePrompt: string): string {
|
|
|
874
879
|
const config = getConfig();
|
|
875
880
|
|
|
876
881
|
// Filter out skills whose assistant feature flag is explicitly OFF
|
|
877
|
-
const flagFiltered = skills.filter((s) =>
|
|
878
|
-
|
|
879
|
-
|
|
882
|
+
const flagFiltered = skills.filter((s) => {
|
|
883
|
+
const flagKey = skillFlagKey(s);
|
|
884
|
+
return !flagKey || isAssistantFeatureFlagEnabled(flagKey, config);
|
|
885
|
+
});
|
|
880
886
|
|
|
881
887
|
const sections: string[] = [basePrompt];
|
|
882
888
|
|
|
883
889
|
const catalog = formatSkillsCatalog(flagFiltered);
|
|
884
890
|
if (catalog) sections.push(catalog);
|
|
885
891
|
|
|
886
|
-
sections.push(buildDynamicSkillWorkflowSection(config));
|
|
892
|
+
sections.push(buildDynamicSkillWorkflowSection(config, flagFiltered));
|
|
887
893
|
|
|
888
894
|
return sections.join("\n\n");
|
|
889
895
|
}
|
|
890
896
|
|
|
891
897
|
function buildDynamicSkillWorkflowSection(
|
|
892
|
-
|
|
898
|
+
_config: import("../config/schema.js").AssistantConfig,
|
|
899
|
+
activeSkills: SkillSummary[],
|
|
893
900
|
): string {
|
|
894
901
|
const lines = [
|
|
895
902
|
"## Dynamic Skill Authoring Workflow",
|
|
@@ -905,7 +912,9 @@ function buildDynamicSkillWorkflowSection(
|
|
|
905
912
|
"After a skill is written or deleted, the next turn may run in a recreated session due to file-watcher eviction. Continue normally.",
|
|
906
913
|
];
|
|
907
914
|
|
|
908
|
-
|
|
915
|
+
const activeSkillIds = new Set(activeSkills.map((s) => s.id));
|
|
916
|
+
|
|
917
|
+
if (activeSkillIds.has("browser")) {
|
|
909
918
|
lines.push(
|
|
910
919
|
"",
|
|
911
920
|
"### Browser Skill Prerequisite",
|
|
@@ -913,17 +922,7 @@ function buildDynamicSkillWorkflowSection(
|
|
|
913
922
|
);
|
|
914
923
|
}
|
|
915
924
|
|
|
916
|
-
if (
|
|
917
|
-
lines.push(
|
|
918
|
-
"",
|
|
919
|
-
"### X (Twitter) Skill",
|
|
920
|
-
'When the user asks to post, reply, or interact with X/Twitter, load the "twitter" skill using `skill_load`. Do NOT use computer-use or the browser skill for X — the X skill provides CLI commands (`vellum x post`, `vellum x reply`) that are faster and more reliable.',
|
|
921
|
-
);
|
|
922
|
-
}
|
|
923
|
-
|
|
924
|
-
if (
|
|
925
|
-
isAssistantFeatureFlagEnabled("feature_flags.messaging.enabled", config)
|
|
926
|
-
) {
|
|
925
|
+
if (activeSkillIds.has("messaging")) {
|
|
927
926
|
lines.push(
|
|
928
927
|
"",
|
|
929
928
|
"### Messaging Skill",
|
|
@@ -988,7 +987,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
|
|
|
988
987
|
|
|
989
988
|
return [
|
|
990
989
|
"## Available Skills",
|
|
991
|
-
"The following skills are available. Before executing one, call
|
|
990
|
+
"The following skills are available. Before executing one, call `skill_load` to load the full instructions, then use `skill_execute` to invoke the skill's tools.",
|
|
992
991
|
"When a credential is missing, check if any skill declares `credential-setup-for` matching that service — if so, load that skill.",
|
|
993
992
|
"",
|
|
994
993
|
lines.join("\n"),
|
|
@@ -52,12 +52,11 @@ Be the assistant you'd actually want to talk to. Concise when needed, thorough w
|
|
|
52
52
|
- Avoid using "—" em dashes. No one wants their friend to use that symbol when texting
|
|
53
53
|
- Use emojis sparingly. Only after you've established your own emoji identity. Never use them as filler or decoration
|
|
54
54
|
|
|
55
|
-
|
|
56
55
|
## Quirks
|
|
57
56
|
|
|
58
57
|
## Preferences
|
|
59
58
|
|
|
60
|
-
## Safety
|
|
59
|
+
## Safety
|
|
61
60
|
|
|
62
61
|
- Never remove or weaken safety boundaries
|
|
63
62
|
- Never change tool use permissions or the Boundaries section on your own. Those only change with explicit guardian direction
|
|
@@ -2,14 +2,23 @@ _ Lines starting with _ are comments — they won't appear in the system prompt
|
|
|
2
2
|
_
|
|
3
3
|
_ This file contains release update notes for the assistant.
|
|
4
4
|
_ Each release block is wrapped with HTML comment markers:
|
|
5
|
-
_
|
|
6
|
-
_
|
|
7
|
-
_
|
|
5
|
+
_ <!-- vellum-update-release:<version> -->
|
|
6
|
+
_ ...release notes...
|
|
7
|
+
_ <!-- /vellum-update-release:<version> -->
|
|
8
8
|
_
|
|
9
9
|
_ Format is freeform markdown. Write notes that help the assistant
|
|
10
10
|
_ understand what changed and how it affects behavior, capabilities,
|
|
11
11
|
_ or available tools. Focus on what matters to the user experience.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
|
|
13
|
+
<!-- vellum-update-release:schedule-reminder-unification -->
|
|
14
|
+
|
|
15
|
+
### Reminders are now one-shot schedules
|
|
16
|
+
|
|
17
|
+
The separate reminder system has been unified into the schedule system. What this means:
|
|
18
|
+
|
|
19
|
+
- **`reminder_create`, `reminder_list`, and `reminder_cancel` tools no longer exist.** Do not attempt to use them.
|
|
20
|
+
- **To set a one-shot reminder**, use `schedule_create` with a `fire_at` parameter (an ISO 8601 timestamp) instead of a recurrence pattern. This replaces `reminder_create`.
|
|
21
|
+
- **To list or cancel reminders**, use `schedule_list` and `schedule_delete` — they now cover both recurring schedules and one-shot reminders.
|
|
22
|
+
- Existing reminders have been automatically migrated into the schedules table as one-shot schedules.
|
|
23
|
+
|
|
24
|
+
<!-- /vellum-update-release:schedule-reminder-unification -->
|
|
@@ -15,16 +15,6 @@ import type {
|
|
|
15
15
|
|
|
16
16
|
const log = getLogger("anthropic-client");
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* The Anthropic API returns block types (server_tool_use, web_search_tool_result)
|
|
20
|
-
* that are not yet in the installed SDK's ContentBlock union (SDK 0.39.x).
|
|
21
|
-
* This extended type allows the switch statement to handle them without casting.
|
|
22
|
-
*/
|
|
23
|
-
type AnthropicContentBlock =
|
|
24
|
-
| Anthropic.ContentBlock
|
|
25
|
-
| { type: "server_tool_use" }
|
|
26
|
-
| { type: "web_search_tool_result" };
|
|
27
|
-
|
|
28
18
|
const TOOL_ID_RE = /[^a-wyzA-Z0-9_-]/g;
|
|
29
19
|
|
|
30
20
|
const ANTHROPIC_SUPPORTED_IMAGE_TYPES = new Set([
|
|
@@ -529,12 +519,15 @@ export class AnthropicProvider implements Provider {
|
|
|
529
519
|
const { effort, output_config, ...restConfig } = (config ?? {}) as Record<
|
|
530
520
|
string,
|
|
531
521
|
unknown
|
|
532
|
-
> & {
|
|
522
|
+
> & {
|
|
523
|
+
effort?: Anthropic.OutputConfig["effort"];
|
|
524
|
+
output_config?: Record<string, unknown>;
|
|
525
|
+
};
|
|
533
526
|
const mergedOutputConfig = {
|
|
534
527
|
...(output_config ?? {}),
|
|
535
528
|
...(effort ? { effort } : {}),
|
|
536
529
|
};
|
|
537
|
-
const params: Anthropic.
|
|
530
|
+
const params: Anthropic.MessageStreamParams = {
|
|
538
531
|
model: this.model,
|
|
539
532
|
max_tokens: 64000,
|
|
540
533
|
messages: sentMessages,
|
|
@@ -568,14 +561,12 @@ export class AnthropicProvider implements Provider {
|
|
|
568
561
|
? { cache_control: { type: "ephemeral" as const } }
|
|
569
562
|
: {}),
|
|
570
563
|
}));
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
},
|
|
578
|
-
] as unknown as Anthropic.MessageCreateParams["tools"];
|
|
564
|
+
const webSearchTool: Anthropic.WebSearchTool20250305 = {
|
|
565
|
+
type: "web_search_20250305",
|
|
566
|
+
name: "web_search",
|
|
567
|
+
max_uses: 5,
|
|
568
|
+
};
|
|
569
|
+
params.tools = [...mappedOther, webSearchTool];
|
|
579
570
|
} else {
|
|
580
571
|
params.tools = tools.map((t, i) => ({
|
|
581
572
|
name: t.name,
|
|
@@ -608,18 +599,32 @@ export class AnthropicProvider implements Provider {
|
|
|
608
599
|
const { signal: timeoutSignal, cleanup: cleanupTimeout } =
|
|
609
600
|
createStreamTimeout(this.streamTimeoutMs, signal);
|
|
610
601
|
|
|
602
|
+
/** Minimal stream interface shared by MessageStream and BetaMessageStream. */
|
|
603
|
+
interface UnifiedStream {
|
|
604
|
+
on(event: "text", listener: (text: string) => void): this;
|
|
605
|
+
on(event: "thinking", listener: (thinking: string) => void): this;
|
|
606
|
+
on(
|
|
607
|
+
event: "streamEvent",
|
|
608
|
+
listener: (event: Anthropic.MessageStreamEvent) => void,
|
|
609
|
+
): this;
|
|
610
|
+
on(event: "inputJson", listener: (partialJson: string) => void): this;
|
|
611
|
+
finalMessage(): Promise<Anthropic.Message>;
|
|
612
|
+
}
|
|
613
|
+
|
|
611
614
|
let response: Anthropic.Message;
|
|
612
615
|
try {
|
|
613
|
-
const stream = this.fastMode
|
|
614
|
-
? this.client.beta.messages.stream(
|
|
616
|
+
const stream: UnifiedStream = this.fastMode
|
|
617
|
+
? (this.client.beta.messages.stream(
|
|
615
618
|
{
|
|
616
619
|
...params,
|
|
617
620
|
betas: ["fast-mode-2026-02-01"],
|
|
618
621
|
speed: "fast",
|
|
619
622
|
} as Parameters<typeof this.client.beta.messages.stream>[0],
|
|
620
623
|
{ signal: timeoutSignal },
|
|
621
|
-
)
|
|
622
|
-
: this.client.messages.stream(params, {
|
|
624
|
+
) as unknown as UnifiedStream)
|
|
625
|
+
: (this.client.messages.stream(params, {
|
|
626
|
+
signal: timeoutSignal,
|
|
627
|
+
}) as unknown as UnifiedStream);
|
|
623
628
|
|
|
624
629
|
// Track whether we've seen a text content block so we can insert a
|
|
625
630
|
// separator between consecutive text blocks in the same response.
|
|
@@ -635,6 +640,7 @@ export class AnthropicProvider implements Provider {
|
|
|
635
640
|
|
|
636
641
|
// Track which tool is currently streaming so we can attribute inputJson deltas.
|
|
637
642
|
let currentStreamingToolName: string | undefined;
|
|
643
|
+
let currentStreamingToolUseId: string | undefined;
|
|
638
644
|
let accumulatedInputJson = "";
|
|
639
645
|
let lastInputJsonEmitMs = 0;
|
|
640
646
|
let pendingInputJsonFlush: ReturnType<typeof setTimeout> | undefined;
|
|
@@ -664,8 +670,24 @@ export class AnthropicProvider implements Provider {
|
|
|
664
670
|
event.content_block.type === "tool_use"
|
|
665
671
|
) {
|
|
666
672
|
currentStreamingToolName = event.content_block.name;
|
|
673
|
+
currentStreamingToolUseId = event.content_block.id;
|
|
667
674
|
accumulatedInputJson = "";
|
|
668
675
|
lastInputJsonEmitMs = 0;
|
|
676
|
+
onEvent?.({
|
|
677
|
+
type: "tool_use_preview_start",
|
|
678
|
+
toolUseId: event.content_block.id,
|
|
679
|
+
toolName: event.content_block.name,
|
|
680
|
+
});
|
|
681
|
+
}
|
|
682
|
+
if (
|
|
683
|
+
event.type === "content_block_start" &&
|
|
684
|
+
event.content_block.type === "server_tool_use"
|
|
685
|
+
) {
|
|
686
|
+
onEvent?.({
|
|
687
|
+
type: "server_tool_start",
|
|
688
|
+
name: event.content_block.name,
|
|
689
|
+
toolUseId: event.content_block.id,
|
|
690
|
+
});
|
|
669
691
|
}
|
|
670
692
|
if (event.type === "content_block_stop") {
|
|
671
693
|
if (pendingInputJsonFlush) {
|
|
@@ -676,10 +698,12 @@ export class AnthropicProvider implements Provider {
|
|
|
676
698
|
onEvent?.({
|
|
677
699
|
type: "input_json_delta",
|
|
678
700
|
toolName: currentStreamingToolName,
|
|
701
|
+
toolUseId: currentStreamingToolUseId!,
|
|
679
702
|
accumulatedJson: accumulatedInputJson,
|
|
680
703
|
});
|
|
681
704
|
}
|
|
682
705
|
currentStreamingToolName = undefined;
|
|
706
|
+
currentStreamingToolUseId = undefined;
|
|
683
707
|
accumulatedInputJson = "";
|
|
684
708
|
}
|
|
685
709
|
});
|
|
@@ -697,10 +721,12 @@ export class AnthropicProvider implements Provider {
|
|
|
697
721
|
onEvent?.({
|
|
698
722
|
type: "input_json_delta",
|
|
699
723
|
toolName: currentStreamingToolName,
|
|
724
|
+
toolUseId: currentStreamingToolUseId!,
|
|
700
725
|
accumulatedJson: accumulatedInputJson,
|
|
701
726
|
});
|
|
702
727
|
} else if (!pendingInputJsonFlush) {
|
|
703
728
|
const toolName = currentStreamingToolName;
|
|
729
|
+
const toolUseId = currentStreamingToolUseId!;
|
|
704
730
|
pendingInputJsonFlush = setTimeout(() => {
|
|
705
731
|
pendingInputJsonFlush = undefined;
|
|
706
732
|
lastInputJsonEmitMs = Date.now();
|
|
@@ -708,6 +734,7 @@ export class AnthropicProvider implements Provider {
|
|
|
708
734
|
onEvent?.({
|
|
709
735
|
type: "input_json_delta",
|
|
710
736
|
toolName,
|
|
737
|
+
toolUseId,
|
|
711
738
|
accumulatedJson: accumulatedInputJson,
|
|
712
739
|
});
|
|
713
740
|
}
|
|
@@ -889,6 +916,19 @@ export class AnthropicProvider implements Provider {
|
|
|
889
916
|
is_error: block.is_error,
|
|
890
917
|
};
|
|
891
918
|
}
|
|
919
|
+
case "server_tool_use":
|
|
920
|
+
return {
|
|
921
|
+
type: "server_tool_use",
|
|
922
|
+
id: block.id,
|
|
923
|
+
name: block.name,
|
|
924
|
+
input: block.input,
|
|
925
|
+
} as unknown as Anthropic.ContentBlockParam;
|
|
926
|
+
case "web_search_tool_result":
|
|
927
|
+
return {
|
|
928
|
+
type: "web_search_tool_result",
|
|
929
|
+
tool_use_id: block.tool_use_id,
|
|
930
|
+
content: block.content,
|
|
931
|
+
} as unknown as Anthropic.ContentBlockParam;
|
|
892
932
|
default: {
|
|
893
933
|
log.warn(
|
|
894
934
|
{ blockType: (block as { type: string }).type },
|
|
@@ -899,9 +939,8 @@ export class AnthropicProvider implements Provider {
|
|
|
899
939
|
}
|
|
900
940
|
}
|
|
901
941
|
|
|
902
|
-
private fromAnthropicBlock(block:
|
|
903
|
-
|
|
904
|
-
switch (blockType) {
|
|
942
|
+
private fromAnthropicBlock(block: Anthropic.ContentBlock): ContentBlock {
|
|
943
|
+
switch (block.type) {
|
|
905
944
|
case "text":
|
|
906
945
|
return { type: "text", text: (block as Anthropic.TextBlock).text };
|
|
907
946
|
case "thinking":
|
|
@@ -924,13 +963,28 @@ export class AnthropicProvider implements Provider {
|
|
|
924
963
|
input: tu.input as Record<string, unknown>,
|
|
925
964
|
};
|
|
926
965
|
}
|
|
927
|
-
case "server_tool_use":
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
966
|
+
case "server_tool_use": {
|
|
967
|
+
const stu = block as Anthropic.ServerToolUseBlock;
|
|
968
|
+
return {
|
|
969
|
+
type: "server_tool_use",
|
|
970
|
+
id: stu.id,
|
|
971
|
+
name: stu.name,
|
|
972
|
+
input: stu.input as Record<string, unknown>,
|
|
973
|
+
};
|
|
974
|
+
}
|
|
975
|
+
case "web_search_tool_result": {
|
|
976
|
+
const wsr = block as Anthropic.WebSearchToolResultBlock;
|
|
977
|
+
return {
|
|
978
|
+
type: "web_search_tool_result",
|
|
979
|
+
tool_use_id: wsr.tool_use_id,
|
|
980
|
+
content: wsr.content,
|
|
981
|
+
};
|
|
982
|
+
}
|
|
932
983
|
default:
|
|
933
|
-
return {
|
|
984
|
+
return {
|
|
985
|
+
type: "text",
|
|
986
|
+
text: `[unsupported block type: ${(block as { type: string }).type}]`,
|
|
987
|
+
};
|
|
934
988
|
}
|
|
935
989
|
}
|
|
936
990
|
}
|
|
@@ -306,6 +306,12 @@ export class GeminiProvider implements Provider {
|
|
|
306
306
|
});
|
|
307
307
|
break;
|
|
308
308
|
}
|
|
309
|
+
case "server_tool_use":
|
|
310
|
+
parts.push({ text: `[Web search: ${block.name}]` });
|
|
311
|
+
break;
|
|
312
|
+
case "web_search_tool_result":
|
|
313
|
+
parts.push({ text: "[Web search results]" });
|
|
314
|
+
break;
|
|
309
315
|
// thinking, redacted_thinking — not applicable for Gemini
|
|
310
316
|
}
|
|
311
317
|
}
|
|
@@ -46,6 +46,11 @@ export const MANAGED_PROVIDER_META: Record<string, ManagedProviderMeta> = {
|
|
|
46
46
|
managed: true,
|
|
47
47
|
proxyPath: "/v1/runtime-proxy/openrouter",
|
|
48
48
|
},
|
|
49
|
+
vertex: {
|
|
50
|
+
name: "vertex",
|
|
51
|
+
managed: true,
|
|
52
|
+
proxyPath: "/v1/runtime-proxy/vertex",
|
|
53
|
+
},
|
|
49
54
|
ollama: { name: "ollama", managed: false },
|
|
50
55
|
};
|
|
51
56
|
|
|
@@ -306,6 +306,12 @@ export class OpenAIProvider implements Provider {
|
|
|
306
306
|
},
|
|
307
307
|
});
|
|
308
308
|
break;
|
|
309
|
+
case "server_tool_use":
|
|
310
|
+
textParts.push(`[Web search: ${block.name}]`);
|
|
311
|
+
break;
|
|
312
|
+
case "web_search_tool_result":
|
|
313
|
+
textParts.push("[Web search results]");
|
|
314
|
+
break;
|
|
309
315
|
// thinking, redacted_thinking, image — not applicable for OpenAI assistant messages
|
|
310
316
|
}
|
|
311
317
|
}
|
|
@@ -359,6 +365,15 @@ export class OpenAIProvider implements Provider {
|
|
|
359
365
|
text: this.fileBlockToText(block),
|
|
360
366
|
});
|
|
361
367
|
break;
|
|
368
|
+
case "server_tool_use":
|
|
369
|
+
parts.push({
|
|
370
|
+
type: "text",
|
|
371
|
+
text: `[Web search: ${block.name}]`,
|
|
372
|
+
});
|
|
373
|
+
break;
|
|
374
|
+
case "web_search_tool_result":
|
|
375
|
+
parts.push({ type: "text", text: "[Web search results]" });
|
|
376
|
+
break;
|
|
362
377
|
}
|
|
363
378
|
}
|
|
364
379
|
|
|
@@ -226,8 +226,8 @@ export function initializeProviders(config: ProvidersConfig): void {
|
|
|
226
226
|
);
|
|
227
227
|
routingSources.set("anthropic", "user-key");
|
|
228
228
|
} else {
|
|
229
|
-
// No user Anthropic key —
|
|
230
|
-
const managedBaseUrl = buildManagedBaseUrl("
|
|
229
|
+
// No user Anthropic key — route through Vertex managed proxy
|
|
230
|
+
const managedBaseUrl = buildManagedBaseUrl("vertex");
|
|
231
231
|
if (managedBaseUrl) {
|
|
232
232
|
const ctx = resolveManagedProxyContext();
|
|
233
233
|
const model = resolveModel(config, "anthropic");
|
package/src/providers/types.ts
CHANGED
|
@@ -50,6 +50,19 @@ export interface ToolResultContent {
|
|
|
50
50
|
contentBlocks?: ContentBlock[];
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
export interface ServerToolUseContent {
|
|
54
|
+
type: "server_tool_use";
|
|
55
|
+
id: string;
|
|
56
|
+
name: string;
|
|
57
|
+
input: Record<string, unknown>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface WebSearchToolResultContent {
|
|
61
|
+
type: "web_search_tool_result";
|
|
62
|
+
tool_use_id: string;
|
|
63
|
+
content: unknown; // Opaque — encrypted_content in search results is provider-specific
|
|
64
|
+
}
|
|
65
|
+
|
|
53
66
|
export type ContentBlock =
|
|
54
67
|
| TextContent
|
|
55
68
|
| ThinkingContent
|
|
@@ -57,7 +70,9 @@ export type ContentBlock =
|
|
|
57
70
|
| ImageContent
|
|
58
71
|
| FileContent
|
|
59
72
|
| ToolUseContent
|
|
60
|
-
| ToolResultContent
|
|
73
|
+
| ToolResultContent
|
|
74
|
+
| ServerToolUseContent
|
|
75
|
+
| WebSearchToolResultContent;
|
|
61
76
|
|
|
62
77
|
export interface Message {
|
|
63
78
|
role: "user" | "assistant";
|
|
@@ -95,7 +110,14 @@ export interface ProviderResponse {
|
|
|
95
110
|
export type ProviderEvent =
|
|
96
111
|
| { type: "text_delta"; text: string }
|
|
97
112
|
| { type: "thinking_delta"; thinking: string }
|
|
98
|
-
| { type: "
|
|
113
|
+
| { type: "tool_use_preview_start"; toolUseId: string; toolName: string }
|
|
114
|
+
| {
|
|
115
|
+
type: "input_json_delta";
|
|
116
|
+
toolName: string;
|
|
117
|
+
toolUseId: string;
|
|
118
|
+
accumulatedJson: string;
|
|
119
|
+
}
|
|
120
|
+
| { type: "server_tool_start"; name: string; toolUseId: string };
|
|
99
121
|
|
|
100
122
|
export interface SendMessageConfig {
|
|
101
123
|
model?: string;
|
package/src/runtime/AGENTS.md
CHANGED
|
@@ -25,6 +25,24 @@ Approvals are **orthogonal to message sending**. The assistant asks for approval
|
|
|
25
25
|
|
|
26
26
|
Do NOT couple approval handling to message sending. Do NOT add run/status tracking to the send path.
|
|
27
27
|
|
|
28
|
+
### Host bash (desktop proxy execution)
|
|
29
|
+
|
|
30
|
+
Host bash allows the assistant to execute shell commands on the desktop host machine via the client, rather than in the daemon's own sandbox.
|
|
31
|
+
|
|
32
|
+
- **Discovery**: Clients discover pending host bash requests via SSE events (`host_bash_request`) which include a `requestId`.
|
|
33
|
+
- **Resolution**: Clients execute the command on the host and respond via:
|
|
34
|
+
- `POST /v1/host-bash-result` — `{ requestId, stdout, stderr, exitCode, timedOut }`
|
|
35
|
+
- **Tracking**: Uses the same `pending-interactions` tracker as approvals, with `kind: "host_bash"`. The endpoint validates the interaction kind before resolving.
|
|
36
|
+
|
|
37
|
+
### Host file (desktop proxy file operations)
|
|
38
|
+
|
|
39
|
+
Host file allows the assistant to perform file operations (read, write, edit) on the desktop host machine via the client, rather than in the daemon's own sandbox.
|
|
40
|
+
|
|
41
|
+
- **Discovery**: Clients discover pending host file requests via SSE events (`host_file_request`) which include a `requestId`.
|
|
42
|
+
- **Resolution**: Clients execute the file operation on the host and respond via:
|
|
43
|
+
- `POST /v1/host-file-result` — `{ requestId, content, isError }`
|
|
44
|
+
- **Tracking**: Uses the same `pending-interactions` tracker as approvals and host bash, with `kind: "host_file"`. The endpoint validates the interaction kind before resolving.
|
|
45
|
+
|
|
28
46
|
### Channel approvals (Telegram, SMS)
|
|
29
47
|
|
|
30
48
|
Channel approval flows use `requestId` (not `runId`) as the primary identifier:
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* In-process pub/sub hub for assistant events.
|
|
3
3
|
*
|
|
4
|
-
* Provides subscribe / publish primitives used by
|
|
5
|
-
*
|
|
6
|
-
* integration is wired here.
|
|
4
|
+
* Provides subscribe / publish primitives used by the daemon send paths
|
|
5
|
+
* and the SSE route. No runtime route or daemon integration is wired here.
|
|
7
6
|
*/
|
|
8
7
|
|
|
9
8
|
import type { AssistantEvent } from "./assistant-event.js";
|
|
@@ -13,8 +13,8 @@ import type { ServerMessage } from "../daemon/message-protocol.js";
|
|
|
13
13
|
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* A single assistant event wrapping
|
|
17
|
-
* The `message` field
|
|
16
|
+
* A single assistant event wrapping a ServerMessage payload.
|
|
17
|
+
* The `message` field preserves the original form so that
|
|
18
18
|
* delta semantics (text deltas, tool input deltas, etc.) are preserved.
|
|
19
19
|
*/
|
|
20
20
|
export interface AssistantEvent {
|
|
@@ -26,7 +26,7 @@ export interface AssistantEvent {
|
|
|
26
26
|
sessionId?: string;
|
|
27
27
|
/** ISO-8601 timestamp of when the event was emitted. */
|
|
28
28
|
emittedAt: string;
|
|
29
|
-
/**
|
|
29
|
+
/** Outbound server message payload. */
|
|
30
30
|
message: ServerMessage;
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -36,7 +36,7 @@ export interface AssistantEvent {
|
|
|
36
36
|
* Construct an `AssistantEvent` envelope around a `ServerMessage`.
|
|
37
37
|
*
|
|
38
38
|
* @param assistantId The logical assistant identifier (e.g. from the daemon or HTTP route).
|
|
39
|
-
* @param message The
|
|
39
|
+
* @param message The outbound server message payload.
|
|
40
40
|
* @param sessionId Optional conversation/session id — pass when known.
|
|
41
41
|
*/
|
|
42
42
|
export function buildAssistantEvent(
|
|
@@ -50,19 +50,19 @@ describe("buildAuthContext", () => {
|
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
test("builds context from valid
|
|
53
|
+
test("builds context from valid local claims", () => {
|
|
54
54
|
const result = buildAuthContext(
|
|
55
55
|
validClaims({
|
|
56
|
-
sub: "
|
|
57
|
-
scope_profile: "
|
|
56
|
+
sub: "local:self:session-123",
|
|
57
|
+
scope_profile: "local_v1",
|
|
58
58
|
}),
|
|
59
59
|
);
|
|
60
60
|
expect(result.ok).toBe(true);
|
|
61
61
|
if (result.ok) {
|
|
62
|
-
expect(result.context.principalType).toBe("
|
|
62
|
+
expect(result.context.principalType).toBe("local");
|
|
63
63
|
expect(result.context.assistantId).toBe("self");
|
|
64
64
|
expect(result.context.sessionId).toBe("session-123");
|
|
65
|
-
expect(result.context.scopes.has("
|
|
65
|
+
expect(result.context.scopes.has("local.all")).toBe(true);
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
|
|
@@ -21,7 +21,6 @@ mock.module("../../../util/platform.js", () => ({
|
|
|
21
21
|
isMacOS: () => process.platform === "darwin",
|
|
22
22
|
isLinux: () => process.platform === "linux",
|
|
23
23
|
isWindows: () => process.platform === "win32",
|
|
24
|
-
getSocketPath: () => join(testDir, "test.sock"),
|
|
25
24
|
getPidPath: () => join(testDir, "test.pid"),
|
|
26
25
|
getLogPath: () => join(testDir, "test.log"),
|
|
27
26
|
ensureDataDir: () => {},
|