@vellumai/assistant 0.4.43 → 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 +46 -44
- package/README.md +15 -16
- package/bun.lock +10 -35
- package/docs/architecture/integrations.md +102 -215
- 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 -3
- 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-asset.test.ts +1 -1
- 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 +32 -36
- 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 +31 -7
- 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 +8 -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__/error-handler-friendly-messages.test.ts +46 -0
- 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__/onboarding-template-contract.test.ts +0 -10
- 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-fail-open-selection.test.ts +12 -2
- 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 -5
- 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 +7 -46
- 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__/starter-task-flow.test.ts +9 -19
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +7 -7
- 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 +84 -8
- 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 -7
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
- 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 -2
- package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
- package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
- package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
- 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-cancel.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-create.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 +33 -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 +42 -10
- 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 +53 -41
- package/src/daemon/mcp-reload-service.ts +123 -0
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/apps.ts +0 -25
- 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 -73
- 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 +8 -2
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -1
- package/src/daemon/message-types/surfaces.ts +2 -0
- package/src/daemon/ride-shotgun-handler.ts +35 -43
- package/src/daemon/seed-files.ts +3 -27
- package/src/daemon/server.ts +45 -28
- package/src/daemon/session-agent-loop-handlers.ts +72 -9
- 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 -7
- package/src/daemon/session-skill-tools.ts +12 -11
- package/src/daemon/session-slash.ts +7 -0
- package/src/daemon/session-surfaces.ts +192 -118
- package/src/daemon/session-tool-setup.ts +146 -6
- package/src/daemon/session.ts +75 -37
- 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/app-store.ts +0 -18
- 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 -37
- 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 +13 -17
- 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 +33 -35
- package/src/prompts/templates/BOOTSTRAP.md +0 -3
- 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 +4 -6
- 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 +3 -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 +9 -8
- 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 -8
- package/src/runtime/auth/scopes.ts +2 -1
- package/src/runtime/auth/subject.ts +4 -4
- package/src/runtime/auth/token-service.ts +1 -24
- 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/http-types.ts +10 -0
- package/src/runtime/invite-service.ts +3 -3
- package/src/runtime/local-actor-identity.ts +17 -22
- package/src/runtime/middleware/error-handler.ts +14 -1
- package/src/runtime/pending-interactions.ts +21 -9
- package/src/runtime/routes/app-management-routes.ts +63 -67
- package/src/runtime/routes/approval-routes.ts +1 -3
- package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
- package/src/runtime/routes/brain-graph-routes.ts +4 -42
- 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 +234 -47
- package/src/runtime/routes/diagnostics-routes.ts +154 -43
- 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 -351
- 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 +37 -0
- package/src/tools/apps/executors.ts +0 -6
- 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/document/editor-template.ts +10 -8
- 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 +12 -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__/home-base-bootstrap.test.ts +0 -84
- package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
- package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
- 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 -450
- 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 -920
- 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 -116
- package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
- package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
- package/src/cli/commands/twitter/client.ts +0 -989
- package/src/cli/commands/twitter/index.ts +0 -1160
- package/src/cli/commands/twitter/oauth-client.ts +0 -94
- package/src/cli/commands/twitter/router.ts +0 -396
- package/src/cli/commands/twitter/session.ts +0 -121
- 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 -137
- 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 -319
- 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/home-base/app-link-store.ts +0 -78
- package/src/home-base/bootstrap.ts +0 -74
- package/src/home-base/prebuilt/brain-graph.html +0 -1483
- package/src/home-base/prebuilt/index.html +0 -702
- package/src/home-base/prebuilt/seed-metadata.json +0 -21
- package/src/home-base/prebuilt/seed.ts +0 -122
- package/src/home-base/prebuilt-home-base-updater.ts +0 -36
- 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 -405
- package/src/util/cookie-session.ts +0 -98
- /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`",
|
|
@@ -298,17 +297,16 @@ export function buildStarterTaskPlaybookSection(): string {
|
|
|
298
297
|
'- `[STARTER_TASK:research_to_ui]` — "Turn it into a webpage or interactive UI" flow',
|
|
299
298
|
"",
|
|
300
299
|
"### Playbook: make_it_yours",
|
|
301
|
-
"Goal: Help the user choose an accent color for
|
|
300
|
+
"Goal: Help the user choose an accent color preference for apps and interfaces.",
|
|
302
301
|
"",
|
|
303
302
|
"1. If the user's locale is missing or has `confidence: low` in USER.md, briefly confirm their location/language before proceeding.",
|
|
304
303
|
"2. Present a concise set of accent color options (e.g. 5-7 curated colors with names and hex codes). Keep it short and scannable.",
|
|
305
304
|
'3. Let the user pick one. Accept color names, hex values, or descriptions (e.g. "something warm").',
|
|
306
305
|
'4. Confirm the selection: "I\'ll set your accent color to **{label}** ({hex}). Sound good?"',
|
|
307
306
|
"5. On confirmation:",
|
|
308
|
-
' -
|
|
309
|
-
" -
|
|
310
|
-
"
|
|
311
|
-
"6. If the user declines or wants to skip, set `make_it_yours` to `deferred_to_dashboard` in USER.md and move on.",
|
|
307
|
+
' - Use `app_file_edit` to update the `## Dashboard Color Preference` section in USER.md with `label`, `hex`, `source: "user_selected"`, and `applied: true`.',
|
|
308
|
+
" - Use `app_file_edit` to update the `## Onboarding Tasks` section: set `make_it_yours` to `done`.",
|
|
309
|
+
"6. If the user declines or wants to skip, set `make_it_yours` to `skipped` in USER.md and move on.",
|
|
312
310
|
"",
|
|
313
311
|
"### Playbook: research_topic",
|
|
314
312
|
"Goal: Research a topic the user is interested in and summarise findings.",
|
|
@@ -343,7 +341,7 @@ function buildInChatConfigurationSection(): string {
|
|
|
343
341
|
"**How to collect credentials and secrets:**",
|
|
344
342
|
'- Use `credential_store` with `action: "prompt"` to present a secure input field. The value never appears in the conversation.',
|
|
345
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.',
|
|
346
|
-
"- 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.",
|
|
347
345
|
"",
|
|
348
346
|
'**After saving a value**, confirm success with a message like: "Great, saved! You can always update this from the Settings page."',
|
|
349
347
|
"",
|
|
@@ -570,7 +568,7 @@ export function buildSwarmGuidanceSection(): string {
|
|
|
570
568
|
return [
|
|
571
569
|
"## Parallel Task Orchestration",
|
|
572
570
|
"",
|
|
573
|
-
'
|
|
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.',
|
|
574
572
|
].join("\n");
|
|
575
573
|
}
|
|
576
574
|
|
|
@@ -654,7 +652,7 @@ function buildMemoryPersistenceSection(): string {
|
|
|
654
652
|
"",
|
|
655
653
|
"Your memory does not survive session restarts. If you want to remember something, **save it**.",
|
|
656
654
|
"",
|
|
657
|
-
|
|
655
|
+
'- Use `memory_manage` with `op: "save"` for facts, preferences, learnings, and anything worth recalling later.',
|
|
658
656
|
"- Update workspace files (USER.md, SOUL.md) for profile and personality changes.",
|
|
659
657
|
'- When someone says "remember this," save it immediately — don\'t rely on keeping it in context.',
|
|
660
658
|
"- When you make a mistake, save the lesson so future-you doesn't repeat it.",
|
|
@@ -699,7 +697,7 @@ function buildLearningMemorySection(): string {
|
|
|
699
697
|
"",
|
|
700
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.",
|
|
701
699
|
"",
|
|
702
|
-
'Use `
|
|
700
|
+
'Use `memory_manage` with `op: "save", kind: "learning"` for:',
|
|
703
701
|
"- **Mistakes and corrections** — wrong assumptions, failed approaches, gotchas you ran into",
|
|
704
702
|
"- **Discoveries** — undocumented behaviors, surprising API quirks, things that weren't obvious",
|
|
705
703
|
"- **Working solutions** — the approach that actually worked after trial and error",
|
|
@@ -708,8 +706,8 @@ function buildLearningMemorySection(): string {
|
|
|
708
706
|
"The statement should capture both what happened and the takeaway. Write it as advice to your future self.",
|
|
709
707
|
"",
|
|
710
708
|
"Examples:",
|
|
711
|
-
'- `
|
|
712
|
-
'- `
|
|
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." })`',
|
|
713
711
|
"",
|
|
714
712
|
"Don't overthink it. If you catch yourself thinking \"I'll remember that for next time,\" save it.",
|
|
715
713
|
].join("\n");
|
|
@@ -818,6 +816,12 @@ export function buildCliReferenceSection(): string {
|
|
|
818
816
|
"## Assistant CLI",
|
|
819
817
|
"",
|
|
820
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.",
|
|
821
825
|
"",
|
|
822
826
|
"```",
|
|
823
827
|
cachedCliHelp,
|
|
@@ -875,22 +879,24 @@ function appendSkillsCatalog(basePrompt: string): string {
|
|
|
875
879
|
const config = getConfig();
|
|
876
880
|
|
|
877
881
|
// Filter out skills whose assistant feature flag is explicitly OFF
|
|
878
|
-
const flagFiltered = skills.filter((s) =>
|
|
879
|
-
|
|
880
|
-
|
|
882
|
+
const flagFiltered = skills.filter((s) => {
|
|
883
|
+
const flagKey = skillFlagKey(s);
|
|
884
|
+
return !flagKey || isAssistantFeatureFlagEnabled(flagKey, config);
|
|
885
|
+
});
|
|
881
886
|
|
|
882
887
|
const sections: string[] = [basePrompt];
|
|
883
888
|
|
|
884
889
|
const catalog = formatSkillsCatalog(flagFiltered);
|
|
885
890
|
if (catalog) sections.push(catalog);
|
|
886
891
|
|
|
887
|
-
sections.push(buildDynamicSkillWorkflowSection(config));
|
|
892
|
+
sections.push(buildDynamicSkillWorkflowSection(config, flagFiltered));
|
|
888
893
|
|
|
889
894
|
return sections.join("\n\n");
|
|
890
895
|
}
|
|
891
896
|
|
|
892
897
|
function buildDynamicSkillWorkflowSection(
|
|
893
|
-
|
|
898
|
+
_config: import("../config/schema.js").AssistantConfig,
|
|
899
|
+
activeSkills: SkillSummary[],
|
|
894
900
|
): string {
|
|
895
901
|
const lines = [
|
|
896
902
|
"## Dynamic Skill Authoring Workflow",
|
|
@@ -906,7 +912,9 @@ function buildDynamicSkillWorkflowSection(
|
|
|
906
912
|
"After a skill is written or deleted, the next turn may run in a recreated session due to file-watcher eviction. Continue normally.",
|
|
907
913
|
];
|
|
908
914
|
|
|
909
|
-
|
|
915
|
+
const activeSkillIds = new Set(activeSkills.map((s) => s.id));
|
|
916
|
+
|
|
917
|
+
if (activeSkillIds.has("browser")) {
|
|
910
918
|
lines.push(
|
|
911
919
|
"",
|
|
912
920
|
"### Browser Skill Prerequisite",
|
|
@@ -914,17 +922,7 @@ function buildDynamicSkillWorkflowSection(
|
|
|
914
922
|
);
|
|
915
923
|
}
|
|
916
924
|
|
|
917
|
-
if (
|
|
918
|
-
lines.push(
|
|
919
|
-
"",
|
|
920
|
-
"### X (Twitter) Skill",
|
|
921
|
-
'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.',
|
|
922
|
-
);
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
if (
|
|
926
|
-
isAssistantFeatureFlagEnabled("feature_flags.messaging.enabled", config)
|
|
927
|
-
) {
|
|
925
|
+
if (activeSkillIds.has("messaging")) {
|
|
928
926
|
lines.push(
|
|
929
927
|
"",
|
|
930
928
|
"### Messaging Skill",
|
|
@@ -989,7 +987,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
|
|
|
989
987
|
|
|
990
988
|
return [
|
|
991
989
|
"## Available Skills",
|
|
992
|
-
"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.",
|
|
993
991
|
"When a credential is missing, check if any skill declares `credential-setup-for` matching that service — if so, load that skill.",
|
|
994
992
|
"",
|
|
995
993
|
lines.join("\n"),
|
|
@@ -42,8 +42,6 @@ Then figure out together:
|
|
|
42
42
|
The two actions MUST have different labels and prompts. Double-check before calling ui_show that you are not repeating the same suggestion.
|
|
43
43
|
If `ui_show` is not available (voice, SMS, or other non-dashboard channels), present the two suggestions as plain text messages instead, numbered so the user can reply with which one they'd like. If the user types a response instead of clicking, continue via the text path. If they want to defer both suggestions and do something else entirely, that's fine too.
|
|
44
44
|
|
|
45
|
-
7. Create Home Base silently. After the suggestion interaction (user picked one, deferred, or typed something else), create their Home Base using `app_create` with `set_as_home_base: true` and `auto_open: false`. Include personalized starter tasks based on what you learned. Do NOT open it with `app_open`. Do NOT announce it, mention it, or hint that something was created. No "check this out," no "I put something together," no "here's what I came up with." Just create it quietly and move on.
|
|
46
|
-
|
|
47
45
|
## Requirements
|
|
48
46
|
|
|
49
47
|
Only your vibe is hard-required. Your name matters but don't push for it -- if the user doesn't offer one, pick one yourself. Everything else about the user is best-effort. Ask naturally, not as a form. If something is unclear, you can ask one short follow-up, but if the user declines or dodges, do not push. Just move on.
|
|
@@ -70,7 +68,6 @@ Do NOT delete this file until ALL of the following are true:
|
|
|
70
68
|
- You've figured out your vibe and adopted it
|
|
71
69
|
- 2 suggestions shown (via `ui_show` or as text if UI unavailable)
|
|
72
70
|
- The user selected one, deferred both, or typed an alternate direction
|
|
73
|
-
- Home Base has been created silently
|
|
74
71
|
|
|
75
72
|
Once every condition is met, delete this file. You're done here.
|
|
76
73
|
|
|
@@ -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
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { wrapWithLogfire } from "../logfire.js";
|
|
2
|
-
import { ConfigError } from "../util/errors.js";
|
|
2
|
+
import { ConfigError, ProviderNotConfiguredError } from "../util/errors.js";
|
|
3
3
|
import { AnthropicProvider } from "./anthropic/client.js";
|
|
4
4
|
import { FailoverProvider, type ProviderHealthStatus } from "./failover.js";
|
|
5
5
|
import { FireworksProvider } from "./fireworks/client.js";
|
|
@@ -94,9 +94,7 @@ export function getFailoverProvider(
|
|
|
94
94
|
const selection = resolveProviderSelection(primaryName, providerOrder);
|
|
95
95
|
|
|
96
96
|
if (!selection.selectedPrimary) {
|
|
97
|
-
throw new
|
|
98
|
-
`No providers available. Requested: "${primaryName}". Registered: ${listProviders().join(", ") || "none"}`,
|
|
99
|
-
);
|
|
97
|
+
throw new ProviderNotConfiguredError(primaryName, listProviders());
|
|
100
98
|
}
|
|
101
99
|
|
|
102
100
|
const orderedProviders: Provider[] = selection.availableProviders.map(
|
|
@@ -228,8 +226,8 @@ export function initializeProviders(config: ProvidersConfig): void {
|
|
|
228
226
|
);
|
|
229
227
|
routingSources.set("anthropic", "user-key");
|
|
230
228
|
} else {
|
|
231
|
-
// No user Anthropic key —
|
|
232
|
-
const managedBaseUrl = buildManagedBaseUrl("
|
|
229
|
+
// No user Anthropic key — route through Vertex managed proxy
|
|
230
|
+
const managedBaseUrl = buildManagedBaseUrl("vertex");
|
|
233
231
|
if (managedBaseUrl) {
|
|
234
232
|
const ctx = resolveManagedProxyContext();
|
|
235
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";
|