@vellumai/assistant 0.5.13 → 0.5.14
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/.env.example +1 -6
- package/AGENTS.md +4 -0
- package/ARCHITECTURE.md +0 -1
- package/bunfig.toml +1 -0
- package/docs/architecture/memory.md +3 -3
- package/openapi.yaml +127 -22
- package/package.json +1 -1
- package/src/__tests__/access-request-decision.test.ts +2 -32
- package/src/__tests__/actor-token-service.test.ts +1 -31
- package/src/__tests__/anthropic-provider.test.ts +53 -40
- package/src/__tests__/app-git-history.test.ts +9 -17
- package/src/__tests__/app-git-service.test.ts +14 -20
- package/src/__tests__/app-store-dir-names.test.ts +10 -20
- package/src/__tests__/approval-cascade.test.ts +2 -19
- package/src/__tests__/approval-primitive.test.ts +2 -27
- package/src/__tests__/approval-routes-http.test.ts +2 -30
- package/src/__tests__/assistant-events-sse-hardening.test.ts +2 -28
- package/src/__tests__/assistant-feature-flags-integration.test.ts +2 -45
- package/src/__tests__/attachments-store.test.ts +5 -32
- package/src/__tests__/audit-log-rotation.test.ts +5 -36
- package/src/__tests__/avatar-e2e.test.ts +1 -9
- package/src/__tests__/avatar-generator.test.ts +1 -7
- package/src/__tests__/browser-fill-credential.test.ts +0 -4
- package/src/__tests__/browser-manager.test.ts +0 -6
- package/src/__tests__/call-controller.test.ts +1 -22
- package/src/__tests__/call-conversation-messages.test.ts +0 -21
- package/src/__tests__/call-domain.test.ts +0 -25
- package/src/__tests__/call-pointer-messages.test.ts +0 -21
- package/src/__tests__/call-recovery.test.ts +0 -22
- package/src/__tests__/call-routes-http.test.ts +0 -24
- package/src/__tests__/call-store.test.ts +0 -21
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +0 -24
- package/src/__tests__/canonical-guardian-store.test.ts +48 -21
- package/src/__tests__/channel-approval-routes.test.ts +6 -26
- package/src/__tests__/channel-approvals.test.ts +1 -38
- package/src/__tests__/channel-delivery-store.test.ts +0 -21
- package/src/__tests__/channel-guardian.test.ts +0 -26
- package/src/__tests__/channel-reply-delivery.test.ts +5 -0
- package/src/__tests__/channel-retry-sweep.test.ts +0 -21
- package/src/__tests__/checker.test.ts +26 -61
- package/src/__tests__/clawhub.test.ts +9 -25
- package/src/__tests__/cli-command-risk-guard.test.ts +0 -18
- package/src/__tests__/config-loader-backfill.test.ts +9 -28
- package/src/__tests__/config-schema-cmd.test.ts +5 -25
- package/src/__tests__/config-schema.test.ts +21 -40
- package/src/__tests__/config-watcher.test.ts +4 -91
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -21
- package/src/__tests__/contacts-tools.test.ts +0 -21
- package/src/__tests__/context-memory-e2e.test.ts +0 -21
- package/src/__tests__/context-window-manager.test.ts +130 -3
- package/src/__tests__/conversation-abort-tool-results.test.ts +0 -4
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +0 -4
- package/src/__tests__/conversation-agent-loop.test.ts +0 -4
- package/src/__tests__/conversation-attachments.test.ts +1 -24
- package/src/__tests__/conversation-attention-store.test.ts +0 -21
- package/src/__tests__/conversation-attention-telegram.test.ts +0 -22
- package/src/__tests__/conversation-clear-safety.test.ts +0 -22
- package/src/__tests__/conversation-confirmation-signals.test.ts +2 -21
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +0 -24
- package/src/__tests__/conversation-disk-view-integration.test.ts +1 -23
- package/src/__tests__/conversation-disk-view.test.ts +5 -27
- package/src/__tests__/conversation-error.test.ts +1 -1
- package/src/__tests__/conversation-fork-crud.test.ts +1 -33
- package/src/__tests__/conversation-fork-route.test.ts +0 -27
- package/src/__tests__/conversation-history-web-search.test.ts +23 -16
- package/src/__tests__/conversation-init.benchmark.test.ts +22 -43
- package/src/__tests__/conversation-key-store-disk-view.test.ts +8 -34
- package/src/__tests__/conversation-load-history-repair.test.ts +0 -4
- package/src/__tests__/conversation-pre-run-repair.test.ts +0 -4
- package/src/__tests__/conversation-provider-retry-repair.test.ts +0 -4
- package/src/__tests__/conversation-queue.test.ts +8 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +13 -51
- package/src/__tests__/conversation-runtime-assembly.test.ts +64 -38
- package/src/__tests__/conversation-slash-commands.test.ts +5 -0
- package/src/__tests__/conversation-slash-queue.test.ts +0 -4
- package/src/__tests__/conversation-slash-unknown.test.ts +0 -4
- package/src/__tests__/conversation-speed-override.test.ts +326 -0
- package/src/__tests__/conversation-starter-routes.test.ts +0 -23
- package/src/__tests__/conversation-store.test.ts +0 -21
- package/src/__tests__/conversation-unread-route.test.ts +0 -24
- package/src/__tests__/conversation-usage.test.ts +56 -21
- package/src/__tests__/conversation-wipe.test.ts +0 -21
- package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -4
- package/src/__tests__/conversation-workspace-injection.test.ts +0 -4
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -4
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +8 -5
- package/src/__tests__/credential-vault-unit.test.ts +9 -428
- package/src/__tests__/credentials-cli.test.ts +10 -10
- package/src/__tests__/daemon-assistant-events.test.ts +0 -19
- package/src/__tests__/date-context.test.ts +77 -97
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +7 -24
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +29 -42
- package/src/__tests__/delete-managed-skill-tool.test.ts +2 -10
- package/src/__tests__/deterministic-verification-control-plane.test.ts +1 -26
- package/src/__tests__/docker-signing-key-bootstrap.test.ts +61 -15
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -36
- package/src/__tests__/email-cli.test.ts +6 -6
- package/src/__tests__/ephemeral-permissions.test.ts +5 -17
- package/src/__tests__/first-greeting.test.ts +4 -32
- package/src/__tests__/followup-tools.test.ts +0 -21
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -20
- package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -23
- package/src/__tests__/guardian-action-followup-executor.test.ts +0 -23
- package/src/__tests__/guardian-action-followup-store.test.ts +0 -21
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -21
- package/src/__tests__/guardian-action-late-reply.test.ts +0 -21
- package/src/__tests__/guardian-action-store.test.ts +0 -21
- package/src/__tests__/guardian-action-sweep.test.ts +0 -21
- package/src/__tests__/guardian-binding-drift-heal.test.ts +0 -23
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +172 -22
- package/src/__tests__/guardian-dispatch.test.ts +0 -21
- package/src/__tests__/guardian-grant-minting.test.ts +0 -22
- package/src/__tests__/guardian-outbound-http.test.ts +0 -22
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -23
- package/src/__tests__/guardian-routing-invariants.test.ts +0 -22
- package/src/__tests__/guardian-routing-state.test.ts +0 -22
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -24
- package/src/__tests__/headless-browser-interactions.test.ts +0 -4
- package/src/__tests__/headless-browser-navigate.test.ts +0 -4
- package/src/__tests__/headless-browser-read-tools.test.ts +0 -4
- package/src/__tests__/headless-browser-snapshot.test.ts +0 -4
- package/src/__tests__/heartbeat-service.test.ts +99 -26
- package/src/__tests__/hooks-blocking.test.ts +3 -3
- package/src/__tests__/hooks-config.test.ts +7 -7
- package/src/__tests__/hooks-discovery.test.ts +3 -3
- package/src/__tests__/hooks-integration.test.ts +5 -5
- package/src/__tests__/hooks-manager.test.ts +3 -3
- package/src/__tests__/hooks-runner.test.ts +5 -23
- package/src/__tests__/hooks-settings.test.ts +3 -3
- package/src/__tests__/hooks-templates.test.ts +3 -3
- package/src/__tests__/http-conversation-lineage.test.ts +0 -27
- package/src/__tests__/identity-intro-cache.test.ts +0 -4
- package/src/__tests__/inbound-invite-redemption.test.ts +0 -22
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -16
- package/src/__tests__/intent-routing.test.ts +2 -55
- package/src/__tests__/invite-redemption-service.test.ts +0 -21
- package/src/__tests__/invite-routes-http.test.ts +0 -21
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +0 -17
- package/src/__tests__/journal-context.test.ts +8 -75
- package/src/__tests__/list-messages-attachments.test.ts +0 -22
- package/src/__tests__/llm-context-route-provider.test.ts +0 -21
- package/src/__tests__/llm-request-log-turn-query.test.ts +46 -28
- package/src/__tests__/llm-usage-store.test.ts +0 -21
- package/src/__tests__/log-export-workspace.test.ts +1 -1
- package/src/__tests__/managed-skill-lifecycle.test.ts +1 -1
- package/src/__tests__/managed-store.test.ts +1 -1
- package/src/__tests__/mcp-cli.test.ts +7 -10
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +0 -21
- package/src/__tests__/memory-jobs-worker-backoff.test.ts +0 -11
- package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -21
- package/src/__tests__/memory-recall-log-store.test.ts +0 -27
- package/src/__tests__/memory-recall-quality.test.ts +0 -21
- package/src/__tests__/memory-regressions.experimental.test.ts +31 -30
- package/src/__tests__/memory-regressions.test.ts +282 -70
- package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -21
- package/src/__tests__/memory-upsert-concurrency.test.ts +0 -21
- package/src/__tests__/messaging-send-tool.test.ts +201 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +18 -13
- package/src/__tests__/migration-export-http.test.ts +7 -1
- package/src/__tests__/migration-import-commit-http.test.ts +16 -14
- package/src/__tests__/migration-import-preflight-http.test.ts +27 -44
- package/src/__tests__/migration-validate-http.test.ts +1 -28
- package/src/__tests__/native-web-search.test.ts +25 -22
- package/src/__tests__/non-member-access-request.test.ts +0 -22
- package/src/__tests__/notification-guardian-path.test.ts +0 -21
- package/src/__tests__/notification-schedule-dedup.test.ts +1 -25
- package/src/__tests__/oauth-apps-routes.test.ts +103 -2
- package/src/__tests__/oauth-cli.test.ts +52 -0
- package/src/__tests__/oauth-provider-profiles.test.ts +0 -16
- package/src/__tests__/oauth-provider-serializer.test.ts +232 -0
- package/src/__tests__/oauth-providers-routes.test.ts +257 -0
- package/src/__tests__/oauth-store.test.ts +0 -21
- package/src/__tests__/onboarding-template-contract.test.ts +2 -2
- package/src/__tests__/openai-provider.test.ts +261 -0
- package/src/__tests__/pairing-concurrent.test.ts +6 -6
- package/src/__tests__/pairing-routes.test.ts +7 -1
- package/src/__tests__/path-policy.test.ts +1 -1
- package/src/__tests__/platform.test.ts +64 -88
- package/src/__tests__/playbook-execution.test.ts +0 -21
- package/src/__tests__/playbook-tools.test.ts +0 -21
- package/src/__tests__/pricing.test.ts +100 -0
- package/src/__tests__/relay-server.test.ts +1 -25
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -24
- package/src/__tests__/runtime-events-sse-parity.test.ts +2 -24
- package/src/__tests__/runtime-events-sse.test.ts +0 -24
- package/src/__tests__/sandbox-diagnostics.test.ts +2 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +1 -1
- package/src/__tests__/schedule-store.test.ts +0 -21
- package/src/__tests__/schedule-tools.test.ts +0 -21
- package/src/__tests__/scheduler-recurrence.test.ts +0 -21
- package/src/__tests__/scoped-approval-grants.test.ts +0 -21
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -21
- package/src/__tests__/secret-allowlist.test.ts +1 -1
- package/src/__tests__/secret-ingress-channel.test.ts +0 -5
- package/src/__tests__/secret-ingress-cli.test.ts +0 -6
- package/src/__tests__/secret-ingress-http.test.ts +0 -5
- package/src/__tests__/secret-ingress.test.ts +0 -5
- package/src/__tests__/send-endpoint-busy.test.ts +0 -24
- package/src/__tests__/sequence-store.test.ts +0 -21
- package/src/__tests__/server-history-render.test.ts +0 -24
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -4
- package/src/__tests__/skill-load-inline-command.test.ts +9 -0
- package/src/__tests__/skill-load-inline-includes.test.ts +9 -0
- package/src/__tests__/skill-load-tool.test.ts +11 -0
- package/src/__tests__/skills-uninstall.test.ts +10 -8
- package/src/__tests__/skills.test.ts +1 -1
- package/src/__tests__/slack-channel-config.test.ts +1 -1
- package/src/__tests__/slack-inbound-verification.test.ts +0 -22
- package/src/__tests__/starter-bundle.test.ts +4 -1
- package/src/__tests__/suggestion-routes.test.ts +2 -0
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/terminal-tools.test.ts +1 -1
- package/src/__tests__/test-preload.ts +31 -0
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +1 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +1 -1
- package/src/__tests__/tool-executor.test.ts +0 -20
- package/src/__tests__/tool-input-summary.test.ts +124 -0
- package/src/__tests__/tool-preview-lifecycle.test.ts +2 -1
- package/src/__tests__/trust-store.test.ts +7 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +1 -1
- package/src/__tests__/trusted-contact-multichannel.test.ts +1 -1
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/turn-boundary-resolution.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +1 -1
- package/src/__tests__/update-bulletin.test.ts +1 -1
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +1 -1
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +1 -0
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +1 -1
- package/src/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/__tests__/workspace-migration-009-backfill-conversation-disk-view.test.ts +4 -4
- package/src/__tests__/workspace-migration-013-repair-conversation-disk-view.test.ts +1 -1
- package/src/__tests__/workspace-migration-down-functions.test.ts +15 -3
- package/src/__tests__/workspace-migration-seed-device-id.test.ts +40 -4
- package/src/agent/loop.ts +6 -9
- package/src/approvals/guardian-decision-primitive.ts +46 -18
- package/src/approvals/guardian-request-resolvers.ts +19 -2
- package/src/calls/active-call-lease.ts +2 -2
- package/src/cli/AGENTS.md +1 -1
- package/src/cli/commands/doctor.ts +9 -9
- package/src/cli/commands/memory.ts +142 -0
- package/src/cli/commands/oauth/__tests__/connect.test.ts +13 -11
- package/src/cli/commands/oauth/__tests__/ping.test.ts +1 -1
- package/src/cli/commands/oauth/connect.ts +13 -12
- package/src/cli/commands/oauth/index.ts +1 -1
- package/src/cli/commands/oauth/providers.ts +47 -62
- package/src/cli/commands/platform/__tests__/connect.test.ts +72 -46
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +54 -1
- package/src/cli/commands/platform/__tests__/status.test.ts +36 -0
- package/src/cli/commands/platform/connect.ts +17 -7
- package/src/cli/commands/platform/disconnect.ts +28 -3
- package/src/cli/commands/platform/index.ts +3 -3
- package/src/cli.ts +1 -299
- package/src/config/assistant-feature-flags.ts +23 -15
- package/src/config/bundled-skills/app-builder/TOOLS.json +16 -0
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +4 -0
- package/src/config/bundled-skills/app-builder/tools/app-delete.ts +5 -1
- package/src/config/bundled-skills/app-builder/tools/app-generate-icon.ts +9 -1
- package/src/config/bundled-skills/app-builder/tools/app-refresh.ts +5 -1
- package/src/config/bundled-skills/contacts/TOOLS.json +8 -0
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +10 -1
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +16 -2
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +1 -0
- package/src/config/bundled-skills/messaging/SKILL.md +7 -7
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +37 -0
- package/src/config/bundled-skills/slack/SKILL.md +18 -0
- package/src/config/env-registry.ts +15 -11
- package/src/config/env.ts +1 -11
- package/src/config/feature-flag-registry.json +16 -0
- package/src/config/schema.ts +4 -0
- package/src/config/schemas/heartbeat.ts +6 -1
- package/src/config/schemas/inference.ts +14 -3
- package/src/config/schemas/memory-processing.ts +16 -8
- package/src/config/schemas/memory-retrieval.ts +3 -3
- package/src/config/skills.ts +1 -1
- package/src/context/window-manager.ts +174 -51
- package/src/credential-execution/executable-discovery.ts +2 -2
- package/src/daemon/approved-devices-store.ts +2 -2
- package/src/daemon/assistant-attachments.ts +2 -0
- package/src/daemon/config-watcher.ts +4 -50
- package/src/daemon/conversation-agent-loop-handlers.ts +9 -1
- package/src/daemon/conversation-agent-loop.ts +12 -0
- package/src/daemon/conversation-error.ts +3 -5
- package/src/daemon/conversation-history.ts +7 -3
- package/src/daemon/conversation-lifecycle.ts +16 -0
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-notifiers.ts +67 -30
- package/src/daemon/conversation-process.ts +161 -2
- package/src/daemon/conversation-queue-manager.ts +2 -0
- package/src/daemon/conversation-runtime-assembly.ts +33 -11
- package/src/daemon/conversation-slash.ts +14 -3
- package/src/daemon/conversation-tool-setup.ts +2 -0
- package/src/daemon/conversation-usage.ts +32 -4
- package/src/daemon/conversation.ts +33 -1
- package/src/daemon/daemon-control.ts +32 -16
- package/src/daemon/date-context.ts +47 -45
- package/src/daemon/dictation-profile-store.ts +2 -2
- package/src/daemon/handlers/conversations.ts +19 -0
- package/src/daemon/handlers/shared.ts +14 -21
- package/src/daemon/lifecycle.ts +5 -7
- package/src/daemon/message-types/conversations.ts +2 -0
- package/src/daemon/message-types/guardian-actions.ts +3 -17
- package/src/daemon/message-types/integrations.ts +11 -1
- package/src/daemon/message-types/messages.ts +1 -0
- package/src/daemon/pairing-store.ts +2 -79
- package/src/daemon/server.ts +154 -8
- package/src/daemon/watch-handler.ts +65 -21
- package/src/email/guardrails.ts +3 -3
- package/src/heartbeat/heartbeat-service.ts +14 -7
- package/src/hooks/cli.ts +2 -2
- package/src/hooks/config.ts +2 -2
- package/src/hooks/discovery.ts +2 -2
- package/src/hooks/manager.ts +2 -2
- package/src/hooks/runner.ts +5 -2
- package/src/hooks/templates.ts +2 -2
- package/src/memory/admin.ts +181 -2
- package/src/memory/app-git-service.ts +61 -4
- package/src/memory/attachments-store.ts +2 -0
- package/src/memory/canonical-guardian-store.ts +16 -0
- package/src/memory/db-init.ts +8 -0
- package/src/memory/embedding-local.ts +5 -2
- package/src/memory/indexer.ts +44 -26
- package/src/memory/items-extractor.ts +34 -82
- package/src/memory/job-handlers/batch-extraction.ts +741 -0
- package/src/memory/job-handlers/journal-carry-forward.test.ts +383 -0
- package/src/memory/job-handlers/journal-carry-forward.ts +255 -0
- package/src/memory/jobs-store.ts +28 -0
- package/src/memory/jobs-worker.ts +56 -9
- package/src/memory/lifecycle-events-store.ts +4 -2
- package/src/memory/llm-request-log-store.ts +40 -2
- package/src/memory/llm-usage-store.ts +4 -3
- package/src/memory/migrations/199-guardian-request-enrichment-columns.ts +71 -0
- package/src/memory/migrations/200-usage-llm-call-count.ts +20 -0
- package/src/memory/migrations/index.ts +2 -0
- package/src/memory/query-expansion.ts +83 -0
- package/src/memory/retriever.test.ts +119 -0
- package/src/memory/retriever.ts +513 -105
- package/src/memory/schema/guardian.ts +4 -0
- package/src/memory/schema/infrastructure.ts +1 -0
- package/src/memory/search/formatting.test.ts +140 -0
- package/src/memory/search/formatting.ts +143 -198
- package/src/memory/search/mmr.ts +136 -0
- package/src/memory/search/staleness.ts +0 -15
- package/src/memory/search/tier-classifier.ts +10 -21
- package/src/memory/search/types.ts +17 -0
- package/src/messaging/providers/slack/adapter.ts +51 -5
- package/src/notifications/broadcaster.ts +13 -0
- package/src/notifications/copy-composer.ts +8 -0
- package/src/oauth/connect-orchestrator.ts +1 -1
- package/src/oauth/connection-resolver.ts +2 -2
- package/src/oauth/provider-serializer.ts +116 -0
- package/src/permissions/trust-store.ts +24 -7
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +5 -0
- package/src/prompts/journal-context.ts +50 -35
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/system-prompt.ts +27 -28
- package/src/prompts/templates/BOOTSTRAP.md +14 -1
- package/src/prompts/templates/HEARTBEAT.md +10 -0
- package/src/prompts/templates/NOW.md +19 -25
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/prompts/templates/UPDATES.md +12 -0
- package/src/prompts/update-bulletin.ts +1 -1
- package/src/providers/anthropic/client.ts +89 -18
- package/src/providers/model-catalog.ts +22 -2
- package/src/providers/model-intents.ts +2 -2
- package/src/providers/openai/client.ts +40 -1
- package/src/providers/retry.ts +23 -4
- package/src/providers/types.ts +2 -0
- package/src/runtime/assistant-scope.ts +1 -1
- package/src/runtime/auth/__tests__/credential-service.test.ts +1 -0
- package/src/runtime/auth/route-policy.ts +1 -0
- package/src/runtime/auth/token-service.ts +51 -29
- package/src/runtime/confirmation-request-guardian-bridge.ts +3 -1
- package/src/runtime/guardian-decision-types.ts +16 -10
- package/src/runtime/http-server.ts +3 -14
- package/src/runtime/http-types.ts +1 -0
- package/src/runtime/migrations/vbundle-builder.ts +7 -4
- package/src/runtime/migrations/vbundle-import-analyzer.ts +0 -4
- package/src/runtime/migrations/vbundle-importer.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +40 -8
- package/src/runtime/routes/conversation-routes.ts +125 -3
- package/src/runtime/routes/guardian-action-routes.ts +9 -3
- package/src/runtime/routes/identity-routes.ts +25 -4
- package/src/runtime/routes/llm-context-normalization.ts +1 -0
- package/src/runtime/routes/log-export-routes.ts +34 -12
- package/src/runtime/routes/migration-routes.ts +6 -10
- package/src/runtime/routes/oauth-apps.ts +2 -9
- package/src/runtime/routes/oauth-providers.ts +60 -0
- package/src/runtime/routes/pairing-routes.ts +0 -8
- package/src/runtime/routes/settings-routes.ts +0 -1
- package/src/runtime/routes/telemetry-routes.ts +16 -4
- package/src/security/encrypted-store.ts +2 -2
- package/src/security/secret-allowlist.ts +3 -3
- package/src/signals/emit-event.ts +42 -0
- package/src/signals/user-message.ts +37 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +83 -19
- package/src/telemetry/usage-telemetry-reporter.ts +23 -17
- package/src/tools/browser/runtime-check.ts +2 -2
- package/src/tools/credentials/vault.ts +2 -249
- package/src/tools/memory/definitions.ts +1 -1
- package/src/tools/memory/handlers.test.ts +50 -8
- package/src/tools/memory/handlers.ts +3 -1
- package/src/tools/side-effects.ts +1 -6
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +11 -14
- package/src/tools/tool-approval-handler.ts +20 -1
- package/src/tools/tool-input-summary.ts +66 -0
- package/src/tools/types.ts +4 -0
- package/src/usage/types.ts +4 -0
- package/src/util/device-id.ts +10 -10
- package/src/util/platform.ts +71 -33
- package/src/util/pricing.ts +19 -6
- package/src/util/strip-comment-lines.ts +28 -0
- package/src/workspace/git-service.ts +8 -18
- package/src/workspace/migrations/003-seed-device-id.ts +6 -4
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +7 -1
- package/src/workspace/migrations/017-seed-persona-dirs.ts +2 -4
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +84 -0
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +94 -0
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +86 -0
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +126 -0
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +3 -6
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/signals/confirm.ts +0 -82
- package/src/signals/trust-rule.ts +0 -174
|
@@ -56,16 +56,16 @@ When the user asks to "connect my email", "set up email", "manage my email", or
|
|
|
56
56
|
|
|
57
57
|
### Gmail
|
|
58
58
|
|
|
59
|
-
1. **Try connecting directly first.**
|
|
60
|
-
2. **If
|
|
61
|
-
- Call `skill_load` with `skill: "
|
|
62
|
-
-
|
|
59
|
+
1. **Try connecting directly first.** Run `assistant oauth status google`. This will show whether or not the user had previously connected their google account. If so, they are ready to go.
|
|
60
|
+
2. **If no connections are found:** The user needs to either use Vellum's managed google integration or set up their own google oauth app.
|
|
61
|
+
- Call `skill_load` with `skill: "vellum-oauth-integrations"` with `provider-key: google` throughout.
|
|
62
|
+
- To use `your-own` mode, you will need to call `skill_load` with `skill: google-oauth-app-setup`. In this case:
|
|
63
|
+
- Tell the user Gmail isn't connected yet and briefly explain what the setup involves, then use `ui_show` with `surface_type: "confirmation"` to ask for permission to start:
|
|
63
64
|
- **message:** "Ready to set up Gmail?"
|
|
64
65
|
- **detail:** "I'll open a few pages in your browser and walk you through setting up Google Cloud credentials - creating a project, enabling APIs, and connecting your account. Takes about 5 minutes."
|
|
65
66
|
- **confirmLabel:** "Get Started"
|
|
66
67
|
- **cancelLabel:** "Not Now"
|
|
67
|
-
|
|
68
|
-
3. **If the user provides a client_id directly in chat:** Call `credential_store` with `action: "oauth2_connect"`, `service: "google"`, and `client_id: "<their value>"`. If a `client_secret` is also needed, collect it securely via `credential_store` with `action: "prompt"` — never accept it pasted in chat. Everything else is auto-filled.
|
|
68
|
+
- If the user confirms, briefly acknowledge (e.g., "Setting up Gmail now...") and proceed with the setup guide. If they decline, acknowledge and let them know they can set it up later.
|
|
69
69
|
|
|
70
70
|
### Slack
|
|
71
71
|
|
|
@@ -95,7 +95,7 @@ The guardian-verify-setup skill handles the full outbound verification flow for
|
|
|
95
95
|
|
|
96
96
|
When a messaging tool fails with a token or authorization error:
|
|
97
97
|
|
|
98
|
-
1. **Try to reconnect silently.**
|
|
98
|
+
1. **Try to reconnect silently.** Run `assistant oauth ping <provider>`. This often resolves expired tokens automatically.
|
|
99
99
|
2. **If reconnection fails, go straight to setup.** Don't present options, ask which route the user prefers, or explain what went wrong technically. Just tell the user briefly (e.g., "Gmail needs to be reconnected - let me set that up") and immediately follow the connection setup flow for that platform (e.g., install and load **google-oauth-app-setup** for Gmail). The user came to you to get something done, not to troubleshoot OAuth - make it seamless.
|
|
100
100
|
3. **Never try alternative approaches.** Don't use bash, curl, browser automation, or any workaround. If the messaging tools can't do it, the reconnection flow is the answer.
|
|
101
101
|
4. **Never expose error details.** The user doesn't need to see error messages about tokens, OAuth, or API failures. Translate errors into plain language.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { basename } from "node:path";
|
|
3
3
|
|
|
4
|
+
import {
|
|
5
|
+
addMessage,
|
|
6
|
+
getConversation,
|
|
7
|
+
} from "../../../../memory/conversation-crud.js";
|
|
8
|
+
import { syncMessageToDisk } from "../../../../memory/conversation-disk-view.js";
|
|
9
|
+
import { getBindingByChannelChat } from "../../../../memory/external-conversation-store.js";
|
|
4
10
|
import {
|
|
5
11
|
batchGetMessages,
|
|
6
12
|
createDraft,
|
|
@@ -13,6 +19,7 @@ import type {
|
|
|
13
19
|
ToolContext,
|
|
14
20
|
ToolExecutionResult,
|
|
15
21
|
} from "../../../../tools/types.js";
|
|
22
|
+
import { getLogger } from "../../../../util/logger.js";
|
|
16
23
|
import { guessMimeType } from "./gmail-mime-helpers.js";
|
|
17
24
|
import {
|
|
18
25
|
err,
|
|
@@ -24,6 +31,8 @@ import {
|
|
|
24
31
|
resolveProvider,
|
|
25
32
|
} from "./shared.js";
|
|
26
33
|
|
|
34
|
+
const log = getLogger("messaging-send");
|
|
35
|
+
|
|
27
36
|
export async function run(
|
|
28
37
|
input: Record<string, unknown>,
|
|
29
38
|
context: ToolContext,
|
|
@@ -219,6 +228,34 @@ export async function run(
|
|
|
219
228
|
const threadSuffix = result.threadId
|
|
220
229
|
? `, "thread_id": "${result.threadId}"`
|
|
221
230
|
: "";
|
|
231
|
+
|
|
232
|
+
// Cross-post to the conversation bound to this channel so replies have context.
|
|
233
|
+
try {
|
|
234
|
+
const binding = getBindingByChannelChat(provider.id, conversationId);
|
|
235
|
+
if (binding && binding.conversationId !== context.conversationId) {
|
|
236
|
+
const boundConv = getConversation(binding.conversationId);
|
|
237
|
+
if (boundConv) {
|
|
238
|
+
const crossPosted = await addMessage(
|
|
239
|
+
binding.conversationId,
|
|
240
|
+
"assistant",
|
|
241
|
+
JSON.stringify([{ type: "text", text }]),
|
|
242
|
+
{ automated: true, crossPostedFrom: context.conversationId },
|
|
243
|
+
{ skipIndexing: true },
|
|
244
|
+
);
|
|
245
|
+
syncMessageToDisk(
|
|
246
|
+
binding.conversationId,
|
|
247
|
+
crossPosted.id,
|
|
248
|
+
boundConv.createdAt,
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
} catch (e) {
|
|
253
|
+
log.warn(
|
|
254
|
+
{ err: e, provider: provider.id, externalChatId: conversationId },
|
|
255
|
+
"Failed to cross-post outbound message to bound conversation",
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
|
|
222
259
|
return ok(`Message sent (ID: ${result.id}${threadSuffix}).`);
|
|
223
260
|
} catch (e) {
|
|
224
261
|
return err(e instanceof Error ? e.message : String(e));
|
|
@@ -62,6 +62,20 @@ When the user asks to scan or catch up on Slack:
|
|
|
62
62
|
3. Offer to drill into specific threads with `conversations.replies`
|
|
63
63
|
4. Summarize with attribution: who said what, decisions made, open questions
|
|
64
64
|
|
|
65
|
+
## User Resolution
|
|
66
|
+
|
|
67
|
+
When you need to send a DM or look up a Slack user by name, check contacts first to avoid redundant API calls:
|
|
68
|
+
|
|
69
|
+
1. **Before calling `users.list`**: Use `contact_search` with `query: "<name>"` and `channel_type: "slack"`. If a matching contact has `externalUserId` (Slack user ID) and `externalChatId` (DM channel ID), skip the API lookups and use those IDs directly with `chat.postMessage`.
|
|
70
|
+
|
|
71
|
+
2. **After resolving via API**: When you had to call `users.list` or `conversations.open` to resolve a user, save the mapping with `contact_upsert` so future lookups are instant:
|
|
72
|
+
```
|
|
73
|
+
contact_upsert {
|
|
74
|
+
display_name: "<display name>"
|
|
75
|
+
channels: [{ type: "slack", address: "<slack handle>", external_user_id: "<U...>", external_chat_id: "<D...>" }]
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
65
79
|
## Privacy Rules
|
|
66
80
|
|
|
67
81
|
**Channel privacy must be respected at all times:**
|
|
@@ -86,6 +100,10 @@ When responding to messages from Slack channels, replies should be threaded. Pas
|
|
|
86
100
|
|
|
87
101
|
Before making any Slack API calls, verify that Slack is connected. If not connected, load the **slack-app-setup** skill (`skill_load` with `skill: "slack-app-setup"`) and follow its guided flow. Do NOT improvise setup instructions — the `slack-app-setup` skill is the single source of truth. Slack uses Socket Mode and does not require redirect URLs or any OAuth flow.
|
|
88
102
|
|
|
103
|
+
## Error Handling
|
|
104
|
+
|
|
105
|
+
If a Slack API call fails due to missing or invalid credentials — for example, an error indicating that `slack_channel/bot_token` is not found, the credential is missing, or the token is invalid — do NOT attempt to fix the credentials manually. Instead, load the **slack-app-setup** skill (`skill_load` with `skill: "slack-app-setup"`) and follow its guided flow to set up or reconnect Slack. Tell the user something like "Slack needs to be reconnected" and start the setup skill.
|
|
106
|
+
|
|
89
107
|
## Communication Style
|
|
90
108
|
|
|
91
109
|
- **Be action-oriented.** When the user asks to check Slack, start scanning immediately.
|
|
@@ -27,15 +27,6 @@ function flag(name: string): boolean {
|
|
|
27
27
|
// ── Registry ─────────────────────────────────────────────────────────────────
|
|
28
28
|
// Each entry documents the env var name, type, default, and purpose.
|
|
29
29
|
|
|
30
|
-
/**
|
|
31
|
-
* BASE_DATA_DIR — string, default: os.homedir()
|
|
32
|
-
* Overrides the home directory used as the base for ~/.vellum and lockfiles.
|
|
33
|
-
* Primarily used in tests to isolate filesystem state.
|
|
34
|
-
*/
|
|
35
|
-
export function getBaseDataDir(): string | undefined {
|
|
36
|
-
return str("BASE_DATA_DIR");
|
|
37
|
-
}
|
|
38
|
-
|
|
39
30
|
/**
|
|
40
31
|
* DEBUG_STDOUT_LOGS — boolean, default: false
|
|
41
32
|
* Enables additional log output to stdout (alongside file logging).
|
|
@@ -47,13 +38,26 @@ export function getDebugStdoutLogs(): boolean {
|
|
|
47
38
|
/**
|
|
48
39
|
* IS_CONTAINERIZED — boolean, default: false
|
|
49
40
|
* When true, indicates the assistant is running inside a container (e.g. Docker).
|
|
50
|
-
*
|
|
51
|
-
* which is mapped to a persistent volume.
|
|
41
|
+
* Persistent data is stored in VELLUM_WORKSPACE_DIR (mapped to a dedicated volume).
|
|
52
42
|
*/
|
|
53
43
|
export function getIsContainerized(): boolean {
|
|
54
44
|
return flag("IS_CONTAINERIZED");
|
|
55
45
|
}
|
|
56
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Whether this assistant is running as a platform-managed remote instance.
|
|
49
|
+
*
|
|
50
|
+
* Currently this is determined solely by the IS_CONTAINERIZED env var, which
|
|
51
|
+
* the platform sets when provisioning assistant containers. This is not ideal
|
|
52
|
+
* because any Docker environment could set it. We plan to replace this with a
|
|
53
|
+
* less spoof-able mechanism in the future — e.g. a signed platform token
|
|
54
|
+
* verified via asymmetric cryptography or an authenticated attestation
|
|
55
|
+
* endpoint on the platform.
|
|
56
|
+
*/
|
|
57
|
+
export function isPlatformRemote(): boolean {
|
|
58
|
+
return getIsContainerized();
|
|
59
|
+
}
|
|
60
|
+
|
|
57
61
|
/**
|
|
58
62
|
* VELLUM_WORKSPACE_DIR — string, default: undefined
|
|
59
63
|
* Overrides the default workspace directory.
|
package/src/config/env.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Fail-fast validation via validateEnv() at startup
|
|
9
9
|
* - Shared derived values (e.g. gateway base URL) instead of duplicated logic
|
|
10
10
|
*
|
|
11
|
-
* Bootstrap-level env vars (
|
|
11
|
+
* Bootstrap-level env vars (IS_CONTAINERIZED, DEBUG_STDOUT_LOGS) are defined
|
|
12
12
|
* in config/env-registry.ts which has no internal dependencies and can be
|
|
13
13
|
* imported from platform/logger without circular imports.
|
|
14
14
|
*/
|
|
@@ -216,16 +216,6 @@ export function getPlatformInternalApiKey(): string {
|
|
|
216
216
|
return str("PLATFORM_INTERNAL_API_KEY") ?? "";
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
// ── Telemetry ──────────────────────────────────────────────────────────────────
|
|
220
|
-
|
|
221
|
-
export function getTelemetryPlatformUrl(): string {
|
|
222
|
-
return str("TELEMETRY_PLATFORM_URL") ?? "";
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
export function getTelemetryAppToken(): string {
|
|
226
|
-
return str("TELEMETRY_APP_TOKEN") ?? "";
|
|
227
|
-
}
|
|
228
|
-
|
|
229
219
|
// ── Startup validation ──────────────────────────────────────────────────────
|
|
230
220
|
|
|
231
221
|
/**
|
|
@@ -289,6 +289,14 @@
|
|
|
289
289
|
"description": "Auto-expand completed tool call step groups instead of showing them collapsed",
|
|
290
290
|
"defaultEnabled": false
|
|
291
291
|
},
|
|
292
|
+
{
|
|
293
|
+
"id": "show-thinking-blocks",
|
|
294
|
+
"scope": "macos",
|
|
295
|
+
"key": "show-thinking-blocks",
|
|
296
|
+
"label": "Show Thinking Blocks",
|
|
297
|
+
"description": "Display the assistant's thinking/reasoning inline in chat messages as collapsible blocks",
|
|
298
|
+
"defaultEnabled": false
|
|
299
|
+
},
|
|
292
300
|
{
|
|
293
301
|
"id": "inline-skill-commands",
|
|
294
302
|
"scope": "assistant",
|
|
@@ -344,6 +352,14 @@
|
|
|
344
352
|
"label": "Voice Mode",
|
|
345
353
|
"description": "Show the live voice conversation button in the composer",
|
|
346
354
|
"defaultEnabled": false
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"id": "fast-mode",
|
|
358
|
+
"scope": "assistant",
|
|
359
|
+
"key": "fast-mode",
|
|
360
|
+
"label": "Fast Mode",
|
|
361
|
+
"description": "Enable Anthropic fast mode for Opus 4.6, delivering up to 2.5x higher output tokens per second at premium pricing",
|
|
362
|
+
"defaultEnabled": false
|
|
347
363
|
}
|
|
348
364
|
]
|
|
349
365
|
}
|
package/src/config/schema.ts
CHANGED
|
@@ -49,6 +49,7 @@ export type {
|
|
|
49
49
|
ContextWindowConfig,
|
|
50
50
|
Effort,
|
|
51
51
|
ModelPricingOverride,
|
|
52
|
+
Speed,
|
|
52
53
|
ThinkingConfig,
|
|
53
54
|
} from "./schemas/inference.js";
|
|
54
55
|
export {
|
|
@@ -56,6 +57,7 @@ export {
|
|
|
56
57
|
ContextWindowConfigSchema,
|
|
57
58
|
EffortSchema,
|
|
58
59
|
ModelPricingOverrideSchema,
|
|
60
|
+
SpeedSchema,
|
|
59
61
|
ThinkingConfigSchema,
|
|
60
62
|
} from "./schemas/inference.js";
|
|
61
63
|
export type {
|
|
@@ -201,6 +203,7 @@ import {
|
|
|
201
203
|
ContextWindowConfigSchema,
|
|
202
204
|
EffortSchema,
|
|
203
205
|
ModelPricingOverrideSchema,
|
|
206
|
+
SpeedSchema,
|
|
204
207
|
ThinkingConfigSchema,
|
|
205
208
|
} from "./schemas/inference.js";
|
|
206
209
|
import { IngressConfigSchema } from "./schemas/ingress.js";
|
|
@@ -240,6 +243,7 @@ export const AssistantConfigSchema = z
|
|
|
240
243
|
.default(16000)
|
|
241
244
|
.describe("Maximum number of output tokens per LLM response"),
|
|
242
245
|
effort: EffortSchema,
|
|
246
|
+
speed: SpeedSchema,
|
|
243
247
|
thinking: ThinkingConfigSchema.default(ThinkingConfigSchema.parse({})),
|
|
244
248
|
contextWindow: ContextWindowConfigSchema.default(
|
|
245
249
|
ContextWindowConfigSchema.parse({}),
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
+
import { SpeedSchema } from "./inference.js";
|
|
4
|
+
|
|
3
5
|
export const HeartbeatConfigSchema = z
|
|
4
6
|
.object({
|
|
5
7
|
enabled: z
|
|
6
8
|
.boolean({ error: "heartbeat.enabled must be a boolean" })
|
|
7
|
-
.default(
|
|
9
|
+
.default(true)
|
|
8
10
|
.describe("Whether periodic heartbeat checks are enabled"),
|
|
9
11
|
intervalMs: z
|
|
10
12
|
.number({ error: "heartbeat.intervalMs must be a number" })
|
|
@@ -12,6 +14,9 @@ export const HeartbeatConfigSchema = z
|
|
|
12
14
|
.positive("heartbeat.intervalMs must be a positive integer")
|
|
13
15
|
.default(3_600_000)
|
|
14
16
|
.describe("Time between heartbeat checks in milliseconds"),
|
|
17
|
+
speed: SpeedSchema.default("standard").describe(
|
|
18
|
+
"Inference speed mode for heartbeat conversations — defaults to standard to avoid inheriting the global fast mode multiplier",
|
|
19
|
+
),
|
|
15
20
|
activeHoursStart: z
|
|
16
21
|
.number({ error: "heartbeat.activeHoursStart must be a number" })
|
|
17
22
|
.int("heartbeat.activeHoursStart must be an integer")
|
|
@@ -12,13 +12,13 @@ export const ThinkingConfigSchema = z
|
|
|
12
12
|
.object({
|
|
13
13
|
enabled: z
|
|
14
14
|
.boolean({ error: "thinking.enabled must be a boolean" })
|
|
15
|
-
.default(
|
|
15
|
+
.default(true)
|
|
16
16
|
.describe(
|
|
17
17
|
"Whether to enable extended thinking (chain-of-thought) for the model",
|
|
18
18
|
),
|
|
19
19
|
streamThinking: z
|
|
20
20
|
.boolean({ error: "thinking.streamThinking must be a boolean" })
|
|
21
|
-
.default(
|
|
21
|
+
.default(true)
|
|
22
22
|
.describe(
|
|
23
23
|
"Whether to stream the model's thinking tokens to the client in real time",
|
|
24
24
|
),
|
|
@@ -29,13 +29,24 @@ export const EffortSchema = z
|
|
|
29
29
|
.enum(["low", "medium", "high", "max"], {
|
|
30
30
|
error: 'effort must be "low", "medium", "high", or "max"',
|
|
31
31
|
})
|
|
32
|
-
.default("
|
|
32
|
+
.default("max")
|
|
33
33
|
.describe(
|
|
34
34
|
"How much effort the model should put into its response — lower effort is faster and cheaper",
|
|
35
35
|
);
|
|
36
36
|
|
|
37
37
|
export type Effort = z.infer<typeof EffortSchema>;
|
|
38
38
|
|
|
39
|
+
export const SpeedSchema = z
|
|
40
|
+
.enum(["standard", "fast"], {
|
|
41
|
+
error: 'speed must be "standard" or "fast"',
|
|
42
|
+
})
|
|
43
|
+
.default("standard")
|
|
44
|
+
.describe(
|
|
45
|
+
'Inference speed mode — "fast" enables higher output token throughput on supported models (Opus 4.6) at premium pricing',
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
export type Speed = z.infer<typeof SpeedSchema>;
|
|
49
|
+
|
|
39
50
|
export const ContextOverflowRecoveryConfigSchema = z
|
|
40
51
|
.object({
|
|
41
52
|
enabled: z
|
|
@@ -8,14 +8,6 @@ export const MemoryExtractionConfigSchema = z
|
|
|
8
8
|
.describe(
|
|
9
9
|
"Whether to use an LLM for extracting structured memory items from conversations",
|
|
10
10
|
),
|
|
11
|
-
modelIntent: z
|
|
12
|
-
.enum(["latency-optimized", "quality-optimized", "vision-optimized"], {
|
|
13
|
-
error: "memory.extraction.modelIntent must be a valid model intent",
|
|
14
|
-
})
|
|
15
|
-
.default("quality-optimized")
|
|
16
|
-
.describe(
|
|
17
|
-
"Model selection strategy for extraction — trade off speed vs quality",
|
|
18
|
-
),
|
|
19
11
|
extractFromAssistant: z
|
|
20
12
|
.boolean({
|
|
21
13
|
error: "memory.extraction.extractFromAssistant must be a boolean",
|
|
@@ -24,6 +16,22 @@ export const MemoryExtractionConfigSchema = z
|
|
|
24
16
|
.describe(
|
|
25
17
|
"Whether to extract memory items from the assistant's own messages (in addition to user messages)",
|
|
26
18
|
),
|
|
19
|
+
batchSize: z
|
|
20
|
+
.number()
|
|
21
|
+
.int()
|
|
22
|
+
.positive()
|
|
23
|
+
.default(10)
|
|
24
|
+
.describe(
|
|
25
|
+
"Number of unextracted messages before triggering batch extraction",
|
|
26
|
+
),
|
|
27
|
+
idleTimeoutMs: z
|
|
28
|
+
.number()
|
|
29
|
+
.int()
|
|
30
|
+
.positive()
|
|
31
|
+
.default(300000)
|
|
32
|
+
.describe(
|
|
33
|
+
"Milliseconds of idle time before triggering extraction of pending messages",
|
|
34
|
+
),
|
|
27
35
|
})
|
|
28
36
|
.describe("Controls how memory items are extracted from conversations");
|
|
29
37
|
|
|
@@ -19,7 +19,7 @@ export const MemoryDynamicBudgetConfigSchema = z
|
|
|
19
19
|
.positive(
|
|
20
20
|
"memory.retrieval.dynamicBudget.minInjectTokens must be a positive integer",
|
|
21
21
|
)
|
|
22
|
-
.default(
|
|
22
|
+
.default(2400)
|
|
23
23
|
.describe(
|
|
24
24
|
"Minimum number of tokens to inject from memory, even when context space is limited",
|
|
25
25
|
),
|
|
@@ -32,7 +32,7 @@ export const MemoryDynamicBudgetConfigSchema = z
|
|
|
32
32
|
.positive(
|
|
33
33
|
"memory.retrieval.dynamicBudget.maxInjectTokens must be a positive integer",
|
|
34
34
|
)
|
|
35
|
-
.default(
|
|
35
|
+
.default(16000)
|
|
36
36
|
.describe(
|
|
37
37
|
"Maximum number of tokens to inject from memory, even when plenty of context space is available",
|
|
38
38
|
),
|
|
@@ -190,7 +190,7 @@ export const MemoryRetrievalConfigSchema = z
|
|
|
190
190
|
.number({ error: "memory.retrieval.maxInjectTokens must be a number" })
|
|
191
191
|
.int("memory.retrieval.maxInjectTokens must be an integer")
|
|
192
192
|
.positive("memory.retrieval.maxInjectTokens must be a positive integer")
|
|
193
|
-
.default(
|
|
193
|
+
.default(16000)
|
|
194
194
|
.describe(
|
|
195
195
|
"Maximum number of tokens to inject from long-term memory into the conversation context",
|
|
196
196
|
),
|
package/src/config/skills.ts
CHANGED
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
|
|
19
19
|
import { z } from "zod";
|
|
20
20
|
|
|
21
|
-
import { stripCommentLines } from "../prompts/system-prompt.js";
|
|
22
21
|
import {
|
|
23
22
|
extractAllText,
|
|
24
23
|
getConfiguredProvider,
|
|
@@ -34,6 +33,7 @@ import {
|
|
|
34
33
|
getWorkspaceDirDisplay,
|
|
35
34
|
getWorkspaceSkillsDir,
|
|
36
35
|
} from "../util/platform.js";
|
|
36
|
+
import { stripCommentLines } from "../util/strip-comment-lines.js";
|
|
37
37
|
import { isAssistantFeatureFlagEnabled } from "./assistant-feature-flags.js";
|
|
38
38
|
import { getConfig } from "./loader.js";
|
|
39
39
|
|