@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
package/src/config/schema.ts
CHANGED
|
@@ -127,17 +127,14 @@ export {
|
|
|
127
127
|
export type { NotificationsConfig } from "./schemas/notifications.js";
|
|
128
128
|
export { NotificationsConfigSchema } from "./schemas/notifications.js";
|
|
129
129
|
export type {
|
|
130
|
-
AvatarConfig,
|
|
131
130
|
DaemonConfig,
|
|
132
131
|
PlatformConfig,
|
|
133
132
|
UiConfig,
|
|
134
133
|
} from "./schemas/platform.js";
|
|
135
134
|
export {
|
|
136
|
-
AvatarConfigSchema,
|
|
137
135
|
DaemonConfigSchema,
|
|
138
136
|
PlatformConfigSchema,
|
|
139
137
|
UiConfigSchema,
|
|
140
|
-
VALID_AVATAR_STRATEGIES,
|
|
141
138
|
} from "./schemas/platform.js";
|
|
142
139
|
export type { SandboxConfig } from "./schemas/sandbox.js";
|
|
143
140
|
export { SandboxConfigSchema } from "./schemas/sandbox.js";
|
|
@@ -202,7 +199,6 @@ import { McpConfigSchema } from "./schemas/mcp.js";
|
|
|
202
199
|
import { MemoryConfigSchema } from "./schemas/memory.js";
|
|
203
200
|
import { NotificationsConfigSchema } from "./schemas/notifications.js";
|
|
204
201
|
import {
|
|
205
|
-
AvatarConfigSchema,
|
|
206
202
|
DaemonConfigSchema,
|
|
207
203
|
PlatformConfigSchema,
|
|
208
204
|
UiConfigSchema,
|
|
@@ -274,11 +270,6 @@ export const AssistantConfigSchema = z
|
|
|
274
270
|
.int("maxTokens must be an integer")
|
|
275
271
|
.positive("maxTokens must be a positive integer")
|
|
276
272
|
.default(16000),
|
|
277
|
-
maxToolUseTurns: z
|
|
278
|
-
.number({ error: "maxToolUseTurns must be a number" })
|
|
279
|
-
.int("maxToolUseTurns must be an integer")
|
|
280
|
-
.nonnegative("maxToolUseTurns must be a non-negative integer")
|
|
281
|
-
.default(40),
|
|
282
273
|
effort: EffortSchema,
|
|
283
274
|
thinking: ThinkingConfigSchema.default(ThinkingConfigSchema.parse({})),
|
|
284
275
|
contextWindow: ContextWindowConfigSchema.default(
|
|
@@ -321,7 +312,6 @@ export const AssistantConfigSchema = z
|
|
|
321
312
|
notifications: NotificationsConfigSchema.default(
|
|
322
313
|
NotificationsConfigSchema.parse({}),
|
|
323
314
|
),
|
|
324
|
-
avatar: AvatarConfigSchema.default(AvatarConfigSchema.parse({})),
|
|
325
315
|
ui: UiConfigSchema.default(UiConfigSchema.parse({})),
|
|
326
316
|
assistantFeatureFlagValues: z
|
|
327
317
|
.record(
|
|
@@ -334,16 +324,29 @@ export const AssistantConfigSchema = z
|
|
|
334
324
|
})
|
|
335
325
|
.superRefine((config, ctx) => {
|
|
336
326
|
if (
|
|
337
|
-
config.contextWindow?.
|
|
338
|
-
config.contextWindow?.
|
|
339
|
-
config.contextWindow.
|
|
340
|
-
config.contextWindow.
|
|
327
|
+
config.contextWindow?.targetBudgetRatio != null &&
|
|
328
|
+
config.contextWindow?.compactThreshold != null &&
|
|
329
|
+
config.contextWindow.targetBudgetRatio >=
|
|
330
|
+
config.contextWindow.compactThreshold
|
|
341
331
|
) {
|
|
342
332
|
ctx.addIssue({
|
|
343
333
|
code: z.ZodIssueCode.custom,
|
|
344
|
-
path: ["contextWindow", "
|
|
334
|
+
path: ["contextWindow", "targetBudgetRatio"],
|
|
345
335
|
message:
|
|
346
|
-
"contextWindow.
|
|
336
|
+
"contextWindow.targetBudgetRatio must be less than contextWindow.compactThreshold",
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
if (
|
|
340
|
+
config.contextWindow?.targetBudgetRatio != null &&
|
|
341
|
+
config.contextWindow?.summaryBudgetRatio != null &&
|
|
342
|
+
config.contextWindow.targetBudgetRatio <=
|
|
343
|
+
config.contextWindow.summaryBudgetRatio
|
|
344
|
+
) {
|
|
345
|
+
ctx.addIssue({
|
|
346
|
+
code: z.ZodIssueCode.custom,
|
|
347
|
+
path: ["contextWindow", "targetBudgetRatio"],
|
|
348
|
+
message:
|
|
349
|
+
"contextWindow.targetBudgetRatio must be greater than contextWindow.summaryBudgetRatio",
|
|
347
350
|
});
|
|
348
351
|
}
|
|
349
352
|
const segmentation = config.memory?.segmentation;
|
|
@@ -80,34 +80,24 @@ export const ContextWindowConfigSchema = z.object({
|
|
|
80
80
|
.int("contextWindow.maxInputTokens must be an integer")
|
|
81
81
|
.positive("contextWindow.maxInputTokens must be a positive integer")
|
|
82
82
|
.default(200000),
|
|
83
|
-
|
|
84
|
-
.number({ error: "contextWindow.
|
|
85
|
-
.
|
|
86
|
-
.
|
|
87
|
-
.
|
|
83
|
+
targetBudgetRatio: z
|
|
84
|
+
.number({ error: "contextWindow.targetBudgetRatio must be a number" })
|
|
85
|
+
.finite("contextWindow.targetBudgetRatio must be finite")
|
|
86
|
+
.gt(0, "contextWindow.targetBudgetRatio must be greater than 0")
|
|
87
|
+
.lte(1, "contextWindow.targetBudgetRatio must be less than or equal to 1")
|
|
88
|
+
.default(0.3),
|
|
88
89
|
compactThreshold: z
|
|
89
90
|
.number({ error: "contextWindow.compactThreshold must be a number" })
|
|
90
91
|
.finite("contextWindow.compactThreshold must be finite")
|
|
91
92
|
.gt(0, "contextWindow.compactThreshold must be greater than 0")
|
|
92
93
|
.lte(1, "contextWindow.compactThreshold must be less than or equal to 1")
|
|
93
94
|
.default(0.8),
|
|
94
|
-
|
|
95
|
-
.number({ error: "contextWindow.
|
|
96
|
-
.
|
|
97
|
-
.
|
|
98
|
-
|
|
99
|
-
)
|
|
100
|
-
.default(8),
|
|
101
|
-
summaryMaxTokens: z
|
|
102
|
-
.number({ error: "contextWindow.summaryMaxTokens must be a number" })
|
|
103
|
-
.int("contextWindow.summaryMaxTokens must be an integer")
|
|
104
|
-
.positive("contextWindow.summaryMaxTokens must be a positive integer")
|
|
105
|
-
.default(1200),
|
|
106
|
-
chunkTokens: z
|
|
107
|
-
.number({ error: "contextWindow.chunkTokens must be a number" })
|
|
108
|
-
.int("contextWindow.chunkTokens must be an integer")
|
|
109
|
-
.positive("contextWindow.chunkTokens must be a positive integer")
|
|
110
|
-
.default(12000),
|
|
95
|
+
summaryBudgetRatio: z
|
|
96
|
+
.number({ error: "contextWindow.summaryBudgetRatio must be a number" })
|
|
97
|
+
.finite("contextWindow.summaryBudgetRatio must be finite")
|
|
98
|
+
.gt(0, "contextWindow.summaryBudgetRatio must be greater than 0")
|
|
99
|
+
.lte(1, "contextWindow.summaryBudgetRatio must be less than or equal to 1")
|
|
100
|
+
.default(0.05),
|
|
111
101
|
overflowRecovery: ContextOverflowRecoveryConfigSchema.default(
|
|
112
102
|
ContextOverflowRecoveryConfigSchema.parse({}),
|
|
113
103
|
),
|
|
@@ -29,7 +29,25 @@ export const MemoryEmbeddingsConfigSchema = z.object({
|
|
|
29
29
|
.default("text-embedding-3-small"),
|
|
30
30
|
geminiModel: z
|
|
31
31
|
.string({ error: "memory.embeddings.geminiModel must be a string" })
|
|
32
|
-
.default("gemini-embedding-
|
|
32
|
+
.default("gemini-embedding-2-preview"),
|
|
33
|
+
geminiTaskType: z
|
|
34
|
+
.enum([
|
|
35
|
+
"SEMANTIC_SIMILARITY",
|
|
36
|
+
"CLASSIFICATION",
|
|
37
|
+
"CLUSTERING",
|
|
38
|
+
"RETRIEVAL_DOCUMENT",
|
|
39
|
+
"RETRIEVAL_QUERY",
|
|
40
|
+
"CODE_RETRIEVAL_QUERY",
|
|
41
|
+
"QUESTION_ANSWERING",
|
|
42
|
+
"FACT_VERIFICATION",
|
|
43
|
+
], { error: "memory.embeddings.geminiTaskType must be a valid task type" })
|
|
44
|
+
.optional(),
|
|
45
|
+
geminiDimensions: z
|
|
46
|
+
.number({ error: "memory.embeddings.geminiDimensions must be a number" })
|
|
47
|
+
.int("memory.embeddings.geminiDimensions must be an integer")
|
|
48
|
+
.min(128, "memory.embeddings.geminiDimensions must be >= 128")
|
|
49
|
+
.max(3072, "memory.embeddings.geminiDimensions must be <= 3072")
|
|
50
|
+
.optional(),
|
|
33
51
|
ollamaModel: z
|
|
34
52
|
.string({ error: "memory.embeddings.ollamaModel must be a string" })
|
|
35
53
|
.default("nomic-embed-text"),
|
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
export const VALID_AVATAR_STRATEGIES = [
|
|
4
|
-
"managed_required",
|
|
5
|
-
"managed_prefer",
|
|
6
|
-
"local_only",
|
|
7
|
-
] as const;
|
|
8
|
-
|
|
9
|
-
export const AvatarConfigSchema = z.object({
|
|
10
|
-
generationStrategy: z
|
|
11
|
-
.enum(VALID_AVATAR_STRATEGIES, {
|
|
12
|
-
error: `avatar.generationStrategy must be one of: ${VALID_AVATAR_STRATEGIES.join(", ")}`,
|
|
13
|
-
})
|
|
14
|
-
.default("local_only"),
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
export type AvatarConfig = z.infer<typeof AvatarConfigSchema>;
|
|
18
|
-
|
|
19
3
|
export const PlatformConfigSchema = z.object({
|
|
20
4
|
baseUrl: z
|
|
21
5
|
.string({ error: "platform.baseUrl must be a string" })
|
|
@@ -14,13 +14,15 @@ export interface ResolvedSkill {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* Derive the feature flag key for a
|
|
18
|
-
*
|
|
19
|
-
* Exported so other modules (system-prompt, session-skill-tools, skill loader)
|
|
20
|
-
* can perform the same mapping.
|
|
17
|
+
* Derive the feature flag key for a skill from its frontmatter `featureFlag` field.
|
|
18
|
+
* Returns undefined if the skill has no feature flag declared.
|
|
21
19
|
*/
|
|
22
|
-
export function skillFlagKey(
|
|
23
|
-
|
|
20
|
+
export function skillFlagKey(
|
|
21
|
+
skill: Pick<SkillSummary, "featureFlag">,
|
|
22
|
+
): string | undefined {
|
|
23
|
+
return skill.featureFlag
|
|
24
|
+
? `feature_flags.${skill.featureFlag}.enabled`
|
|
25
|
+
: undefined;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
export function resolveSkillStates(
|
|
@@ -34,8 +36,9 @@ export function resolveSkillStates(
|
|
|
34
36
|
};
|
|
35
37
|
|
|
36
38
|
for (const skill of catalog) {
|
|
37
|
-
// Assistant feature flag gate: if the flag
|
|
38
|
-
|
|
39
|
+
// Assistant feature flag gate: if the skill declares a flag and it's disabled, skip it
|
|
40
|
+
const flagKey = skillFlagKey(skill);
|
|
41
|
+
if (flagKey && !isAssistantFeatureFlagEnabled(flagKey, config)) {
|
|
39
42
|
continue;
|
|
40
43
|
}
|
|
41
44
|
|
package/src/config/skills.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
existsSync,
|
|
3
|
+
lstatSync,
|
|
3
4
|
readdirSync,
|
|
4
5
|
readFileSync,
|
|
5
6
|
realpathSync,
|
|
@@ -69,6 +70,7 @@ const VellumMetadataSchema = z
|
|
|
69
70
|
"disable-model-invocation": z.union([z.boolean(), z.string()]).optional(),
|
|
70
71
|
includes: z.array(z.string()).optional(),
|
|
71
72
|
"credential-setup-for": z.string().optional(),
|
|
73
|
+
"feature-flag": z.string().optional(),
|
|
72
74
|
})
|
|
73
75
|
.passthrough();
|
|
74
76
|
|
|
@@ -136,6 +138,8 @@ export interface SkillSummary {
|
|
|
136
138
|
includes?: string[];
|
|
137
139
|
/** Declares which credential this skill sets up (e.g. "vercel:api_token"). */
|
|
138
140
|
credentialSetupFor?: string;
|
|
141
|
+
/** Feature flag ID declared in frontmatter. Only skills with this field are subject to feature flag gating. */
|
|
142
|
+
featureFlag?: string;
|
|
139
143
|
}
|
|
140
144
|
|
|
141
145
|
export interface SkillDefinition extends SkillSummary {
|
|
@@ -329,6 +333,7 @@ interface ParsedFrontmatter {
|
|
|
329
333
|
metadata?: VellumMetadata;
|
|
330
334
|
includes?: string[];
|
|
331
335
|
credentialSetupFor?: string;
|
|
336
|
+
featureFlag?: string;
|
|
332
337
|
}
|
|
333
338
|
|
|
334
339
|
function parseFrontmatter(
|
|
@@ -343,8 +348,11 @@ function parseFrontmatter(
|
|
|
343
348
|
|
|
344
349
|
const { fields, body } = result;
|
|
345
350
|
|
|
346
|
-
const name = fields.name
|
|
347
|
-
const description =
|
|
351
|
+
const name = typeof fields.name === "string" ? fields.name.trim() : undefined;
|
|
352
|
+
const description =
|
|
353
|
+
typeof fields.description === "string"
|
|
354
|
+
? fields.description.trim()
|
|
355
|
+
: undefined;
|
|
348
356
|
if (!name || !description) {
|
|
349
357
|
log.warn(
|
|
350
358
|
{ skillFilePath },
|
|
@@ -353,25 +361,31 @@ function parseFrontmatter(
|
|
|
353
361
|
return null;
|
|
354
362
|
}
|
|
355
363
|
|
|
356
|
-
//
|
|
364
|
+
// metadata is already a parsed object from YAML — validate with Zod schema
|
|
357
365
|
let metadata: VellumMetadata | undefined;
|
|
358
366
|
let parsedMeta: z.infer<typeof SkillMetadataSchema> | undefined;
|
|
359
367
|
let vellum: z.infer<typeof VellumMetadataSchema> | undefined;
|
|
360
368
|
|
|
361
|
-
const metadataRaw = fields.metadata
|
|
362
|
-
if (metadataRaw) {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
369
|
+
const metadataRaw = fields.metadata;
|
|
370
|
+
if (metadataRaw != null) {
|
|
371
|
+
if (typeof metadataRaw === "string") {
|
|
372
|
+
// metadata is a string — this means someone wrote inline JSON or a
|
|
373
|
+
// bare string value. YAML metadata must be a nested object.
|
|
374
|
+
log.warn(
|
|
375
|
+
{ skillFilePath },
|
|
376
|
+
"Metadata must be a YAML object, not a string; ignoring metadata field",
|
|
377
|
+
);
|
|
378
|
+
} else if (typeof metadataRaw === "object") {
|
|
379
|
+
const zodResult = SkillMetadataSchema.safeParse(metadataRaw);
|
|
380
|
+
if (zodResult.success) {
|
|
381
|
+
parsedMeta = zodResult.data;
|
|
368
382
|
vellum = parsedMeta.vellum;
|
|
369
383
|
if (parsedMeta.vellum) {
|
|
370
384
|
metadata = parsedMeta.vellum as VellumMetadata;
|
|
371
385
|
}
|
|
372
386
|
// Inject top-level emoji into metadata when metadata.vellum doesn't
|
|
373
387
|
// carry its own emoji. The Agent Skills spec places emoji at the
|
|
374
|
-
// top level of the metadata
|
|
388
|
+
// top level of the metadata object, so bundled skills that follow
|
|
375
389
|
// this convention would otherwise lose their emoji value.
|
|
376
390
|
if (parsedMeta.emoji) {
|
|
377
391
|
if (metadata && !metadata.emoji) {
|
|
@@ -381,27 +395,30 @@ function parseFrontmatter(
|
|
|
381
395
|
}
|
|
382
396
|
}
|
|
383
397
|
} else {
|
|
384
|
-
// Zod validation failed — fall back to raw
|
|
385
|
-
// all metadata because of a single bad field value. We coerce
|
|
398
|
+
// Zod validation failed — fall back to raw parsed object so we don't
|
|
399
|
+
// lose all metadata because of a single bad field value. We coerce
|
|
386
400
|
// critical array fields so downstream code that iterates them
|
|
387
401
|
// (e.g. `.join()`, `for...of`, `.some()`) won't crash.
|
|
388
402
|
log.warn(
|
|
389
|
-
{ err:
|
|
390
|
-
"Metadata failed schema validation; falling back to raw
|
|
403
|
+
{ err: zodResult.error, skillFilePath },
|
|
404
|
+
"Metadata failed schema validation; falling back to raw object",
|
|
391
405
|
);
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
406
|
+
const raw = metadataRaw as Record<string, unknown>;
|
|
407
|
+
parsedMeta = raw as z.infer<typeof SkillMetadataSchema>;
|
|
408
|
+
vellum = raw?.vellum as z.infer<typeof VellumMetadataSchema>;
|
|
409
|
+
if (raw?.vellum && typeof raw.vellum === "object") {
|
|
410
|
+
const vellumRaw = raw.vellum as Record<string, unknown>;
|
|
396
411
|
|
|
397
412
|
// Coerce `os` to string[] — a bare string is wrapped in an array.
|
|
398
|
-
if (
|
|
399
|
-
|
|
413
|
+
if (vellumRaw.os !== undefined) {
|
|
414
|
+
vellumRaw.os = Array.isArray(vellumRaw.os)
|
|
415
|
+
? vellumRaw.os
|
|
416
|
+
: [vellumRaw.os];
|
|
400
417
|
}
|
|
401
418
|
|
|
402
419
|
// Coerce `requires` sub-fields to arrays.
|
|
403
|
-
if (
|
|
404
|
-
const req =
|
|
420
|
+
if (vellumRaw.requires && typeof vellumRaw.requires === "object") {
|
|
421
|
+
const req = vellumRaw.requires as Record<string, unknown>;
|
|
405
422
|
for (const key of ["bins", "anyBins", "env", "config"] as const) {
|
|
406
423
|
if (req[key] !== undefined && !Array.isArray(req[key])) {
|
|
407
424
|
req[key] = typeof req[key] === "string" ? [req[key]] : [];
|
|
@@ -409,14 +426,9 @@ function parseFrontmatter(
|
|
|
409
426
|
}
|
|
410
427
|
}
|
|
411
428
|
|
|
412
|
-
metadata =
|
|
429
|
+
metadata = vellumRaw as unknown as VellumMetadata;
|
|
413
430
|
}
|
|
414
431
|
}
|
|
415
|
-
} catch (err) {
|
|
416
|
-
log.warn(
|
|
417
|
-
{ err, skillFilePath },
|
|
418
|
-
"Failed to parse metadata JSON in frontmatter",
|
|
419
|
-
);
|
|
420
432
|
}
|
|
421
433
|
}
|
|
422
434
|
|
|
@@ -459,6 +471,11 @@ function parseFrontmatter(
|
|
|
459
471
|
? vellum["credential-setup-for"]
|
|
460
472
|
: undefined;
|
|
461
473
|
|
|
474
|
+
const featureFlag =
|
|
475
|
+
typeof vellum?.["feature-flag"] === "string"
|
|
476
|
+
? vellum["feature-flag"]
|
|
477
|
+
: undefined;
|
|
478
|
+
|
|
462
479
|
const displayName =
|
|
463
480
|
(typeof vellum?.["display-name"] === "string"
|
|
464
481
|
? vellum["display-name"]
|
|
@@ -474,6 +491,7 @@ function parseFrontmatter(
|
|
|
474
491
|
metadata,
|
|
475
492
|
includes,
|
|
476
493
|
credentialSetupFor,
|
|
494
|
+
featureFlag,
|
|
477
495
|
};
|
|
478
496
|
}
|
|
479
497
|
|
|
@@ -628,6 +646,7 @@ function readSkillFromDirectory(
|
|
|
628
646
|
toolManifest: detectToolManifest(directoryPath),
|
|
629
647
|
includes: parsed.includes,
|
|
630
648
|
credentialSetupFor: parsed.credentialSetupFor,
|
|
649
|
+
featureFlag: parsed.featureFlag,
|
|
631
650
|
};
|
|
632
651
|
} catch (err) {
|
|
633
652
|
log.warn({ err, skillFilePath }, "Failed to read skill file");
|
|
@@ -678,6 +697,7 @@ function readBundledSkillFromDirectory(
|
|
|
678
697
|
toolManifest: detectToolManifest(directoryPath),
|
|
679
698
|
includes: parsed.includes,
|
|
680
699
|
credentialSetupFor: parsed.credentialSetupFor,
|
|
700
|
+
featureFlag: parsed.featureFlag,
|
|
681
701
|
};
|
|
682
702
|
} catch (err) {
|
|
683
703
|
log.warn({ err, skillFilePath }, "Failed to read bundled skill file");
|
|
@@ -736,6 +756,7 @@ function loadBundledSkills(): SkillSummary[] {
|
|
|
736
756
|
toolManifest: skill.toolManifest,
|
|
737
757
|
includes: skill.includes,
|
|
738
758
|
credentialSetupFor: skill.credentialSetupFor,
|
|
759
|
+
featureFlag: skill.featureFlag,
|
|
739
760
|
});
|
|
740
761
|
}
|
|
741
762
|
|
|
@@ -873,6 +894,7 @@ function skillSummaryFromDefinition(
|
|
|
873
894
|
toolManifest: skill.toolManifest,
|
|
874
895
|
includes: skill.includes,
|
|
875
896
|
credentialSetupFor: skill.credentialSetupFor,
|
|
897
|
+
featureFlag: skill.featureFlag,
|
|
876
898
|
};
|
|
877
899
|
}
|
|
878
900
|
|
|
@@ -925,6 +947,7 @@ export function loadSkillCatalog(
|
|
|
925
947
|
toolManifest: detectToolManifest(directory),
|
|
926
948
|
includes: parsed.includes,
|
|
927
949
|
credentialSetupFor: parsed.credentialSetupFor,
|
|
950
|
+
featureFlag: parsed.featureFlag,
|
|
928
951
|
});
|
|
929
952
|
} catch (err) {
|
|
930
953
|
log.warn({ err, directory }, "Failed to read skill from extraDirs");
|
|
@@ -1021,6 +1044,7 @@ export function loadSkillCatalog(
|
|
|
1021
1044
|
toolManifest: detectToolManifest(directory),
|
|
1022
1045
|
includes: parsed.includes,
|
|
1023
1046
|
credentialSetupFor: parsed.credentialSetupFor,
|
|
1047
|
+
featureFlag: parsed.featureFlag,
|
|
1024
1048
|
};
|
|
1025
1049
|
|
|
1026
1050
|
if (seenIds.has(id)) {
|
|
@@ -1080,24 +1104,51 @@ function applyFeatureGatedSections(body: string): string {
|
|
|
1080
1104
|
return result;
|
|
1081
1105
|
}
|
|
1082
1106
|
|
|
1107
|
+
/**
|
|
1108
|
+
* Returns true if `filePath` is a symlink whose resolved real path escapes
|
|
1109
|
+
* `rootDir`. Symlinks that stay within `rootDir` are allowed; only those that
|
|
1110
|
+
* point outside are considered unsafe.
|
|
1111
|
+
*/
|
|
1112
|
+
function isEscapingSymlink(filePath: string, rootDir: string): boolean {
|
|
1113
|
+
try {
|
|
1114
|
+
if (!lstatSync(filePath).isSymbolicLink()) return false;
|
|
1115
|
+
const real = realpathSync(filePath);
|
|
1116
|
+
const normalizedRoot = getCanonicalPath(rootDir);
|
|
1117
|
+
return (
|
|
1118
|
+
real !== normalizedRoot &&
|
|
1119
|
+
!real.startsWith(normalizedRoot + "/") &&
|
|
1120
|
+
!real.startsWith(normalizedRoot + "\\")
|
|
1121
|
+
);
|
|
1122
|
+
} catch {
|
|
1123
|
+
// If we can't resolve (e.g. dangling symlink), treat as escaping.
|
|
1124
|
+
return true;
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1083
1128
|
/**
|
|
1084
1129
|
* Scan for a `references/` subdirectory within a skill directory and append
|
|
1085
1130
|
* the contents of any `.md` files found there to the skill body. Each
|
|
1086
1131
|
* reference file is labeled with a `--- Reference: <Name> ---` header.
|
|
1087
1132
|
* Files are appended in alphabetical order for deterministic output.
|
|
1088
|
-
* Non-`.md` files are ignored.
|
|
1089
|
-
*
|
|
1133
|
+
* Non-`.md` files are ignored. Symlinks that resolve outside the skill
|
|
1134
|
+
* directory are skipped. Errors are logged as warnings and the original body
|
|
1135
|
+
* is returned unchanged.
|
|
1090
1136
|
*/
|
|
1091
1137
|
function appendReferenceFiles(body: string, directoryPath: string): string {
|
|
1092
1138
|
try {
|
|
1093
1139
|
const refsDir = join(directoryPath, "references");
|
|
1094
|
-
if (
|
|
1140
|
+
if (
|
|
1141
|
+
!existsSync(refsDir) ||
|
|
1142
|
+
isEscapingSymlink(refsDir, directoryPath) ||
|
|
1143
|
+
!statSync(refsDir).isDirectory()
|
|
1144
|
+
) {
|
|
1095
1145
|
return body;
|
|
1096
1146
|
}
|
|
1097
1147
|
|
|
1098
1148
|
const entries = readdirSync(refsDir);
|
|
1099
1149
|
const mdFiles = entries
|
|
1100
1150
|
.filter((f) => f.toLowerCase().endsWith(".md"))
|
|
1151
|
+
.filter((f) => !isEscapingSymlink(join(refsDir, f), directoryPath))
|
|
1101
1152
|
.sort((a, b) => a.localeCompare(b));
|
|
1102
1153
|
|
|
1103
1154
|
if (mdFiles.length === 0) return body;
|
|
@@ -7,6 +7,7 @@ const TOOL_BLOCK_OVERHEAD_TOKENS = 16;
|
|
|
7
7
|
const IMAGE_BLOCK_TOKENS = 1024;
|
|
8
8
|
const IMAGE_BLOCK_OVERHEAD_TOKENS = 16;
|
|
9
9
|
const FILE_BLOCK_OVERHEAD_TOKENS = 48;
|
|
10
|
+
const WEB_SEARCH_RESULT_TOKENS = 800;
|
|
10
11
|
const OTHER_BLOCK_TOKENS = 16;
|
|
11
12
|
const SYSTEM_PROMPT_OVERHEAD_TOKENS = 8;
|
|
12
13
|
const GEMINI_INLINE_FILE_MIME_TYPES = new Set(["application/pdf"]);
|
|
@@ -84,6 +85,16 @@ export function estimateContentBlockTokens(
|
|
|
84
85
|
return TEXT_BLOCK_OVERHEAD_TOKENS + estimateTextTokens(block.thinking);
|
|
85
86
|
case "redacted_thinking":
|
|
86
87
|
return TEXT_BLOCK_OVERHEAD_TOKENS + estimateTextTokens(block.data);
|
|
88
|
+
case "server_tool_use":
|
|
89
|
+
return (
|
|
90
|
+
TOOL_BLOCK_OVERHEAD_TOKENS +
|
|
91
|
+
estimateTextTokens(block.name) +
|
|
92
|
+
estimateTextTokens(stableJson(block.input))
|
|
93
|
+
);
|
|
94
|
+
case "web_search_tool_result":
|
|
95
|
+
return (
|
|
96
|
+
WEB_SEARCH_RESULT_TOKENS + estimateTextTokens(stableJson(block.content))
|
|
97
|
+
);
|
|
87
98
|
default:
|
|
88
99
|
return OTHER_BLOCK_TOKENS;
|
|
89
100
|
}
|