@vellumai/assistant 0.4.48 → 0.4.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +26 -35
- package/README.md +5 -26
- package/docs/architecture/integrations.md +45 -41
- package/docs/architecture/keychain-broker.md +3 -3
- package/docs/architecture/memory.md +180 -119
- package/docs/runbook-trusted-contacts.md +3 -8
- package/hook-templates/debug-prompt-logger/hook.json +1 -1
- package/hook-templates/debug-prompt-logger/run.sh +1 -3
- package/package.json +2 -2
- package/src/__tests__/actor-token-service.test.ts +0 -1
- package/src/__tests__/agent-loop.test.ts +3 -1
- package/src/__tests__/anthropic-provider.test.ts +249 -2
- package/src/__tests__/approval-cascade.test.ts +796 -0
- package/src/__tests__/approval-primitive.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +4 -0
- package/src/__tests__/assistant-attachments.test.ts +12 -34
- package/src/__tests__/assistant-feature-flag-guard.test.ts +0 -23
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +76 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -1
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +2 -2
- package/src/__tests__/canonical-guardian-store.test.ts +95 -0
- package/src/__tests__/channel-guardian.test.ts +0 -2
- package/src/__tests__/channel-readiness-routes.test.ts +15 -6
- package/src/__tests__/channel-readiness-service.test.ts +10 -9
- package/src/__tests__/checker.test.ts +13 -20
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +1 -1
- package/src/__tests__/computer-use-tools.test.ts +2 -19
- package/src/__tests__/config-schema.test.ts +1 -68
- package/src/__tests__/config-watcher.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/context-image-dimensions.test.ts +332 -0
- package/src/__tests__/context-memory-e2e.test.ts +11 -100
- package/src/__tests__/context-token-estimator.test.ts +196 -13
- package/src/__tests__/conversation-attention-store.test.ts +0 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +0 -1
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +152 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +2 -0
- package/src/__tests__/credential-metadata-store.test.ts +64 -73
- package/src/__tests__/credential-security-e2e.test.ts +1 -0
- package/src/__tests__/credential-security-invariants.test.ts +13 -7
- package/src/__tests__/credential-vault-unit.test.ts +284 -49
- package/src/__tests__/credential-vault.test.ts +150 -16
- package/src/__tests__/credentials-cli.test.ts +71 -0
- package/src/__tests__/cu-unified-flow.test.ts +532 -0
- package/src/__tests__/date-context.test.ts +93 -77
- package/src/__tests__/deterministic-verification-control-plane.test.ts +64 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/ephemeral-permissions.test.ts +3 -3
- package/src/__tests__/gateway-only-guard.test.ts +0 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +93 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -39
- package/src/__tests__/heartbeat-service.test.ts +0 -1
- package/src/__tests__/history-repair.test.ts +245 -0
- package/src/__tests__/host-cu-proxy.test.ts +791 -0
- package/src/__tests__/host-shell-tool.test.ts +27 -15
- package/src/__tests__/http-user-message-parity.test.ts +2 -0
- package/src/__tests__/ingress-url-consistency.test.ts +14 -21
- package/src/__tests__/integration-status.test.ts +32 -51
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/invite-redemption-service.test.ts +65 -1
- package/src/__tests__/invite-routes-http.test.ts +10 -9
- package/src/__tests__/keychain-broker-client.test.ts +14 -46
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +56 -18
- package/src/__tests__/memory-lifecycle-e2e.test.ts +244 -387
- package/src/__tests__/memory-recall-quality.test.ts +244 -407
- package/src/__tests__/memory-regressions.experimental.test.ts +126 -101
- package/src/__tests__/memory-regressions.test.ts +477 -2841
- package/src/__tests__/memory-retrieval.benchmark.test.ts +33 -150
- package/src/__tests__/memory-upsert-concurrency.test.ts +5 -244
- package/src/__tests__/mime-builder.test.ts +28 -0
- package/src/__tests__/native-web-search.test.ts +1 -0
- package/src/__tests__/notification-routing-intent.test.ts +0 -1
- package/src/__tests__/oauth-cli.test.ts +941 -15
- package/src/__tests__/oauth-provider-profiles.test.ts +9 -9
- package/src/__tests__/oauth-scope-policy.test.ts +4 -6
- package/src/__tests__/oauth-store.test.ts +870 -0
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
- package/src/__tests__/provider-error-scenarios.test.ts +0 -1
- package/src/__tests__/provider-streaming.benchmark.test.ts +0 -1
- package/src/__tests__/public-ingress-urls.test.ts +15 -21
- package/src/__tests__/qdrant-collection-migration.test.ts +53 -8
- package/src/__tests__/recording-handler.test.ts +3 -4
- package/src/__tests__/registry.test.ts +2 -3
- package/src/__tests__/relay-server.test.ts +46 -1
- package/src/__tests__/runtime-events-sse.test.ts +55 -7
- package/src/__tests__/schedule-store.test.ts +0 -1
- package/src/__tests__/schedule-tools.test.ts +32 -0
- package/src/__tests__/scheduler-recurrence.test.ts +0 -1
- package/src/__tests__/scoped-approval-grants.test.ts +0 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
- package/src/__tests__/script-proxy-certs.test.ts +1 -1
- package/src/__tests__/secret-ingress-handler.test.ts +0 -1
- package/src/__tests__/secret-onetime-send.test.ts +1 -0
- package/src/__tests__/secure-keys.test.ts +7 -2
- package/src/__tests__/send-endpoint-busy.test.ts +24 -6
- package/src/__tests__/sequence-store.test.ts +0 -1
- package/src/__tests__/session-abort-tool-results.test.ts +1 -14
- package/src/__tests__/session-agent-loop-overflow.test.ts +1583 -0
- package/src/__tests__/session-agent-loop.test.ts +19 -15
- package/src/__tests__/session-confirmation-signals.test.ts +1 -15
- package/src/__tests__/session-error.test.ts +124 -2
- package/src/__tests__/session-history-web-search.test.ts +918 -0
- package/src/__tests__/session-init.benchmark.test.ts +4 -5
- package/src/__tests__/session-pre-run-repair.test.ts +1 -14
- package/src/__tests__/session-provider-retry-repair.test.ts +25 -28
- package/src/__tests__/session-queue.test.ts +37 -27
- package/src/__tests__/session-runtime-assembly.test.ts +54 -0
- package/src/__tests__/session-slash-known.test.ts +1 -15
- package/src/__tests__/session-slash-queue.test.ts +1 -15
- package/src/__tests__/session-slash-unknown.test.ts +1 -15
- package/src/__tests__/session-workspace-cache-state.test.ts +3 -33
- package/src/__tests__/session-workspace-injection.test.ts +3 -37
- package/src/__tests__/session-workspace-tool-tracking.test.ts +3 -37
- package/src/__tests__/skill-include-graph.test.ts +66 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +0 -1
- package/src/__tests__/skill-load-tool.test.ts +149 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -1
- package/src/__tests__/skills-install-extract.test.ts +93 -0
- package/src/__tests__/skills-uninstall.test.ts +1 -1
- package/src/__tests__/skills.test.ts +3 -3
- package/src/__tests__/skillssh-registry.test.ts +451 -0
- package/src/__tests__/slack-channel-config.test.ts +67 -3
- package/src/__tests__/slack-share-routes.test.ts +17 -19
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-invite-adapter.test.ts +18 -22
- package/src/__tests__/terminal-tools.test.ts +4 -3
- package/src/__tests__/test-support/computer-use-skill-harness.ts +3 -2
- package/src/__tests__/tool-approval-handler.test.ts +0 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor-shell-integration.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
- package/src/__tests__/trust-store-pattern-matches.test.ts +29 -0
- package/src/__tests__/trust-store.test.ts +7 -13
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +0 -16
- package/src/__tests__/verification-control-plane-policy.test.ts +0 -1
- package/src/__tests__/voice-invite-redemption.test.ts +32 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
- package/src/agent/ax-tree-compaction.test.ts +286 -0
- package/src/agent/loop.ts +104 -131
- package/src/approvals/AGENTS.md +1 -1
- package/src/approvals/guardian-request-resolvers.ts +14 -2
- package/src/bundler/compiler-tools.ts +66 -2
- package/src/calls/call-domain.ts +133 -6
- package/src/calls/call-store.ts +6 -0
- package/src/calls/relay-server.ts +52 -18
- package/src/calls/relay-setup-router.ts +17 -1
- package/src/calls/twilio-config.ts +3 -8
- package/src/calls/twilio-routes.ts +1 -2
- package/src/calls/types.ts +3 -1
- package/src/calls/voice-ingress-preflight.ts +1 -1
- package/src/cli/commands/browser-relay.ts +18 -12
- package/src/cli/commands/completions.ts +0 -3
- package/src/cli/commands/credentials.ts +101 -15
- package/src/cli/commands/doctor.ts +4 -3
- package/src/cli/commands/mcp.ts +46 -59
- package/src/cli/commands/memory.ts +16 -165
- package/src/cli/commands/oauth/apps.ts +284 -0
- package/src/cli/commands/oauth/connections.ts +633 -0
- package/src/cli/commands/oauth/index.ts +52 -0
- package/src/cli/commands/oauth/providers.ts +256 -0
- package/src/cli/commands/sessions.ts +5 -2
- package/src/cli/commands/skills.ts +177 -339
- package/src/cli/http-client.ts +0 -20
- package/src/cli/main-screen.tsx +2 -2
- package/src/cli/program.ts +6 -11
- package/src/cli/reference.ts +1 -3
- package/src/cli.ts +4 -10
- package/src/config/assistant-feature-flags.ts +0 -3
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +1 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +3 -6
- package/src/config/bundled-skills/computer-use/TOOLS.json +23 -5
- package/src/config/bundled-skills/computer-use/tools/{computer-use-request-control.ts → computer-use-observe.ts} +1 -5
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +21 -16
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -4
- package/src/config/bundled-skills/settings/SKILL.md +1 -1
- package/src/config/bundled-skills/settings/TOOLS.json +2 -8
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +5 -33
- package/src/config/bundled-tool-registry.ts +2 -5
- package/src/config/env-registry.ts +14 -83
- package/src/config/env.ts +11 -50
- package/src/config/feature-flag-registry.json +16 -16
- package/src/config/loader.ts +0 -6
- package/src/config/schema.ts +4 -13
- package/src/config/schemas/memory-lifecycle.ts +0 -9
- package/src/config/schemas/memory-processing.ts +0 -180
- package/src/config/schemas/memory-retrieval.ts +32 -104
- package/src/config/schemas/memory.ts +0 -10
- package/src/config/skills.ts +21 -2
- package/src/config/types.ts +0 -4
- package/src/context/image-dimensions.ts +229 -0
- package/src/context/token-estimator.ts +75 -12
- package/src/context/window-manager.ts +53 -11
- package/src/daemon/assistant-attachments.ts +1 -13
- package/src/daemon/config-watcher.ts +61 -3
- package/src/daemon/daemon-control.ts +1 -1
- package/src/daemon/date-context.ts +114 -31
- package/src/daemon/handlers/config-ingress.ts +8 -33
- package/src/daemon/handlers/config-slack-channel.ts +49 -46
- package/src/daemon/handlers/config-telegram.ts +32 -16
- package/src/daemon/handlers/sessions.ts +27 -36
- package/src/daemon/handlers/shared.ts +0 -130
- package/src/daemon/handlers/skills.ts +20 -1
- package/src/daemon/history-repair.ts +72 -8
- package/src/daemon/host-cu-proxy.ts +430 -0
- package/src/daemon/lifecycle.ts +67 -71
- package/src/daemon/mcp-reload-service.ts +2 -2
- package/src/daemon/message-protocol.ts +3 -0
- package/src/daemon/message-types/computer-use.ts +1 -129
- package/src/daemon/message-types/host-cu.ts +19 -0
- package/src/daemon/message-types/memory.ts +4 -16
- package/src/daemon/message-types/messages.ts +4 -0
- package/src/daemon/message-types/sessions.ts +4 -0
- package/src/daemon/server.ts +25 -21
- package/src/daemon/session-agent-loop-handlers.ts +40 -0
- package/src/daemon/session-agent-loop.ts +334 -48
- package/src/daemon/session-attachments.ts +1 -2
- package/src/daemon/session-error.ts +89 -6
- package/src/daemon/session-history.ts +17 -7
- package/src/daemon/session-media-retry.ts +6 -2
- package/src/daemon/session-memory.ts +69 -149
- package/src/daemon/session-process.ts +10 -1
- package/src/daemon/session-runtime-assembly.ts +49 -19
- package/src/daemon/session-slash.ts +1 -1
- package/src/daemon/session-surfaces.ts +43 -28
- package/src/daemon/session-tool-setup.ts +9 -10
- package/src/daemon/session.ts +150 -17
- package/src/daemon/tool-side-effects.ts +2 -8
- package/src/daemon/watch-handler.ts +2 -2
- package/src/events/tool-metrics-listener.ts +2 -2
- package/src/hooks/manager.ts +1 -4
- package/src/inbound/public-ingress-urls.ts +7 -7
- package/src/instrument.ts +61 -1
- package/src/logfire.ts +16 -5
- package/src/memory/admin.ts +2 -191
- package/src/memory/canonical-guardian-store.ts +38 -2
- package/src/memory/conversation-crud.ts +0 -33
- package/src/memory/conversation-key-store.ts +21 -0
- package/src/memory/conversation-queries.ts +22 -3
- package/src/memory/db-init.ts +32 -0
- package/src/memory/embedding-backend.ts +84 -8
- package/src/memory/embedding-types.ts +9 -1
- package/src/memory/indexer.ts +7 -46
- package/src/memory/items-extractor.ts +274 -76
- package/src/memory/job-handlers/backfill.ts +2 -127
- package/src/memory/job-handlers/cleanup.ts +2 -16
- package/src/memory/job-handlers/extraction.ts +2 -138
- package/src/memory/job-handlers/index-maintenance.ts +1 -6
- package/src/memory/job-handlers/summarization.ts +3 -148
- package/src/memory/job-utils.ts +21 -59
- package/src/memory/jobs-store.ts +1 -159
- package/src/memory/jobs-worker.ts +9 -52
- package/src/memory/migrations/104-core-indexes.ts +3 -3
- package/src/memory/migrations/149-oauth-tables.ts +62 -0
- package/src/memory/migrations/150-oauth-apps-client-secret-path.ts +98 -0
- package/src/memory/migrations/151-oauth-providers-ping-url.ts +11 -0
- package/src/memory/migrations/152-memory-item-supersession.ts +44 -0
- package/src/memory/migrations/153-drop-entity-tables.ts +15 -0
- package/src/memory/migrations/154-drop-fts.ts +20 -0
- package/src/memory/migrations/155-drop-conflicts.ts +7 -0
- package/src/memory/migrations/156-call-session-invite-metadata.ts +24 -0
- package/src/memory/migrations/index.ts +8 -0
- package/src/memory/qdrant-client.ts +148 -51
- package/src/memory/raw-query.ts +1 -1
- package/src/memory/retriever.test.ts +294 -273
- package/src/memory/retriever.ts +421 -645
- package/src/memory/schema/calls.ts +2 -0
- package/src/memory/schema/index.ts +1 -0
- package/src/memory/schema/memory-core.ts +3 -48
- package/src/memory/schema/oauth.ts +67 -0
- package/src/memory/search/formatting.ts +263 -176
- package/src/memory/search/lexical.ts +1 -254
- package/src/memory/search/ranking.ts +0 -455
- package/src/memory/search/semantic.ts +100 -14
- package/src/memory/search/staleness.ts +47 -0
- package/src/memory/search/tier-classifier.ts +21 -0
- package/src/memory/search/types.ts +15 -77
- package/src/memory/task-memory-cleanup.ts +4 -6
- package/src/messaging/provider.ts +4 -4
- package/src/messaging/providers/gmail/client.ts +82 -2
- package/src/messaging/providers/gmail/mime-builder.ts +17 -7
- package/src/messaging/providers/gmail/people-client.ts +10 -10
- package/src/messaging/providers/telegram-bot/adapter.ts +17 -17
- package/src/messaging/providers/whatsapp/adapter.ts +11 -8
- package/src/messaging/registry.ts +2 -32
- package/src/notifications/copy-composer.ts +0 -5
- package/src/notifications/signal.ts +4 -5
- package/src/oauth/byo-connection.test.ts +133 -25
- package/src/oauth/byo-connection.ts +22 -6
- package/src/oauth/connect-orchestrator.ts +113 -57
- package/src/oauth/connect-types.ts +17 -23
- package/src/oauth/connection-resolver.ts +35 -11
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/manual-token-connection.ts +104 -0
- package/src/oauth/oauth-store.ts +582 -0
- package/src/oauth/platform-connection.test.ts +29 -0
- package/src/oauth/platform-connection.ts +6 -5
- package/src/oauth/provider-behaviors.ts +124 -0
- package/src/oauth/scope-policy.ts +9 -2
- package/src/oauth/seed-providers.ts +167 -0
- package/src/oauth/token-persistence.ts +81 -77
- package/src/permissions/checker.ts +3 -3
- package/src/permissions/defaults.ts +1 -1
- package/src/permissions/prompter.ts +10 -1
- package/src/permissions/trust-store.ts +36 -1
- package/src/playbooks/playbook-compiler.ts +1 -1
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +3 -1
- package/src/prompts/system-prompt.ts +46 -42
- package/src/providers/anthropic/client.ts +59 -20
- package/src/providers/retry.ts +1 -27
- package/src/providers/types.ts +7 -1
- package/src/runtime/AGENTS.md +9 -0
- package/src/runtime/auth/route-policy.ts +6 -6
- package/src/runtime/channel-reply-delivery.ts +0 -40
- package/src/runtime/gateway-client.ts +0 -7
- package/src/runtime/guardian-reply-router.ts +24 -22
- package/src/runtime/http-server.ts +10 -8
- package/src/runtime/http-types.ts +2 -2
- package/src/runtime/invite-redemption-service.ts +19 -1
- package/src/runtime/invite-service.ts +25 -0
- package/src/runtime/middleware/twilio-validation.ts +1 -11
- package/src/runtime/pending-interactions.ts +14 -12
- package/src/runtime/routes/brain-graph-routes.ts +10 -90
- package/src/runtime/routes/channel-delivery-routes.ts +0 -1
- package/src/runtime/routes/conversation-routes.ts +81 -19
- package/src/runtime/routes/events-routes.ts +21 -11
- package/src/runtime/routes/host-cu-routes.ts +97 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +21 -12
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +12 -111
- package/src/runtime/routes/integrations/slack/share.ts +6 -7
- package/src/runtime/routes/log-export-routes.ts +126 -8
- package/src/runtime/routes/memory-item-routes.test.ts +754 -0
- package/src/runtime/routes/memory-item-routes.ts +503 -0
- package/src/runtime/routes/session-management-routes.ts +3 -3
- package/src/runtime/routes/settings-routes.ts +55 -48
- package/src/runtime/routes/surface-action-routes.ts +1 -1
- package/src/runtime/routes/trust-rules-routes.ts +14 -0
- package/src/runtime/routes/watch-routes.ts +128 -0
- package/src/runtime/routes/workspace-routes.ts +2 -1
- package/src/schedule/integration-status.ts +10 -9
- package/src/security/credential-key.ts +0 -156
- package/src/security/keychain-broker-client.ts +22 -10
- package/src/security/oauth2.ts +1 -1
- package/src/security/secure-keys.ts +25 -3
- package/src/security/token-manager.ts +137 -64
- package/src/skills/catalog-install.ts +414 -0
- package/src/skills/include-graph.ts +32 -0
- package/src/skills/skillssh-registry.ts +503 -0
- package/src/telegram/bot-username.ts +2 -3
- package/src/tools/assets/search.ts +5 -1
- package/src/tools/browser/network-recorder.ts +1 -1
- package/src/tools/browser/network-recording-types.ts +1 -1
- package/src/tools/computer-use/definitions.ts +36 -11
- package/src/tools/computer-use/registry.ts +5 -6
- package/src/tools/credentials/broker.ts +1 -2
- package/src/tools/credentials/metadata-store.ts +17 -121
- package/src/tools/credentials/vault.ts +92 -167
- package/src/tools/memory/definitions.ts +4 -13
- package/src/tools/memory/handlers.test.ts +83 -103
- package/src/tools/memory/handlers.ts +50 -85
- package/src/tools/registry.ts +2 -7
- package/src/tools/schedule/create.ts +8 -1
- package/src/tools/schedule/update.ts +8 -1
- package/src/tools/skills/load.ts +85 -3
- package/src/tools/watch/watch-state.ts +0 -12
- package/src/util/logger.ts +7 -41
- package/src/util/platform.ts +9 -28
- package/src/watcher/providers/google-calendar.ts +2 -1
- package/src/__tests__/clarification-resolver.test.ts +0 -193
- package/src/__tests__/computer-use-session-compaction.test.ts +0 -143
- package/src/__tests__/computer-use-session-lifecycle.test.ts +0 -322
- package/src/__tests__/computer-use-session-working-dir.test.ts +0 -166
- package/src/__tests__/computer-use-skill-baseline.test.ts +0 -78
- package/src/__tests__/computer-use-skill-endstate.test.ts +0 -105
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +0 -249
- package/src/__tests__/conflict-intent-tokenization.test.ts +0 -160
- package/src/__tests__/conflict-policy.test.ts +0 -269
- package/src/__tests__/conflict-store.test.ts +0 -372
- package/src/__tests__/contradiction-checker.test.ts +0 -361
- package/src/__tests__/entity-extractor.test.ts +0 -211
- package/src/__tests__/entity-search.test.ts +0 -1117
- package/src/__tests__/profile-compiler.test.ts +0 -392
- package/src/__tests__/ride-shotgun-handler.test.ts +0 -452
- package/src/__tests__/session-conflict-gate.test.ts +0 -1228
- package/src/__tests__/session-profile-injection.test.ts +0 -557
- package/src/cli/commands/dev.ts +0 -129
- package/src/cli/commands/map.ts +0 -391
- package/src/cli/commands/oauth.ts +0 -77
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +0 -25
- package/src/config/bundled-skills/knowledge-graph/TOOLS.json +0 -66
- package/src/config/bundled-skills/knowledge-graph/tools/graph-query.ts +0 -211
- package/src/daemon/computer-use-session.ts +0 -1026
- package/src/daemon/ride-shotgun-handler.ts +0 -569
- package/src/daemon/session-conflict-gate.ts +0 -167
- package/src/daemon/session-dynamic-profile.ts +0 -77
- package/src/memory/clarification-resolver.ts +0 -417
- package/src/memory/conflict-intent.ts +0 -205
- package/src/memory/conflict-policy.ts +0 -127
- package/src/memory/conflict-store.ts +0 -410
- package/src/memory/contradiction-checker.ts +0 -508
- package/src/memory/entity-extractor.ts +0 -535
- package/src/memory/format-recall.ts +0 -47
- package/src/memory/fts-reconciler.ts +0 -165
- package/src/memory/job-handlers/conflict.ts +0 -200
- package/src/memory/profile-compiler.ts +0 -195
- package/src/memory/recall-cache.ts +0 -117
- package/src/memory/search/entity.ts +0 -535
- package/src/memory/search/query-expansion.test.ts +0 -70
- package/src/memory/search/query-expansion.ts +0 -118
- package/src/oauth/provider-base-urls.ts +0 -21
- package/src/oauth/provider-profiles.ts +0 -192
- package/src/prompts/computer-use-prompt.ts +0 -98
- package/src/runtime/routes/computer-use-routes.ts +0 -641
- package/src/runtime/routes/mcp-routes.ts +0 -20
- package/src/runtime/telegram-streaming-delivery.test.ts +0 -729
- package/src/runtime/telegram-streaming-delivery.ts +0 -393
- package/src/tools/computer-use/request-computer-control.ts +0 -56
|
@@ -33,22 +33,6 @@
|
|
|
33
33
|
"description": "Enable messaging skill section in the system prompt",
|
|
34
34
|
"defaultEnabled": true
|
|
35
35
|
},
|
|
36
|
-
{
|
|
37
|
-
"id": "messaging-gmail",
|
|
38
|
-
"scope": "assistant",
|
|
39
|
-
"key": "feature_flags.messaging.gmail.enabled",
|
|
40
|
-
"label": "Messaging: Gmail",
|
|
41
|
-
"description": "Allow messaging tools to operate on the Gmail platform",
|
|
42
|
-
"defaultEnabled": true
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"id": "messaging-telegram",
|
|
46
|
-
"scope": "assistant",
|
|
47
|
-
"key": "feature_flags.messaging.telegram.enabled",
|
|
48
|
-
"label": "Messaging: Telegram",
|
|
49
|
-
"description": "Allow messaging tools to operate on the Telegram platform",
|
|
50
|
-
"defaultEnabled": false
|
|
51
|
-
},
|
|
52
36
|
{
|
|
53
37
|
"id": "collect-usage-data",
|
|
54
38
|
"scope": "assistant",
|
|
@@ -81,6 +65,14 @@
|
|
|
81
65
|
"description": "Show the Contacts tab in Settings for viewing and managing contacts",
|
|
82
66
|
"defaultEnabled": false
|
|
83
67
|
},
|
|
68
|
+
{
|
|
69
|
+
"id": "email-channel",
|
|
70
|
+
"scope": "assistant",
|
|
71
|
+
"key": "feature_flags.email-channel.enabled",
|
|
72
|
+
"label": "Email Channel",
|
|
73
|
+
"description": "Show the Email channel card on the Contacts page and enable the email-setup skill",
|
|
74
|
+
"defaultEnabled": false
|
|
75
|
+
},
|
|
84
76
|
{
|
|
85
77
|
"id": "outbound-proxy-sidecar",
|
|
86
78
|
"scope": "assistant",
|
|
@@ -128,6 +120,14 @@
|
|
|
128
120
|
"label": "Settings Developer Nav",
|
|
129
121
|
"description": "Control Developer nav visibility in macOS settings",
|
|
130
122
|
"defaultEnabled": true
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "logfire",
|
|
126
|
+
"scope": "assistant",
|
|
127
|
+
"key": "feature_flags.logfire.enabled",
|
|
128
|
+
"label": "Logfire LLM Observability",
|
|
129
|
+
"description": "Enable Logfire tracing for LLM request/response telemetry when LOGFIRE_TOKEN is set",
|
|
130
|
+
"defaultEnabled": false
|
|
131
131
|
}
|
|
132
132
|
]
|
|
133
133
|
}
|
package/src/config/loader.ts
CHANGED
|
@@ -333,12 +333,6 @@ export function loadConfig(): AssistantConfig {
|
|
|
333
333
|
}
|
|
334
334
|
|
|
335
335
|
// Environment variables override everything
|
|
336
|
-
if (process.env.VELLUM_CONFIG_SANDBOX_ENABLED === "false") {
|
|
337
|
-
config.sandbox.enabled = false;
|
|
338
|
-
} else if (process.env.VELLUM_CONFIG_SANDBOX_ENABLED === "true") {
|
|
339
|
-
config.sandbox.enabled = true;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
336
|
if (process.env.ANTHROPIC_API_KEY) {
|
|
343
337
|
config.apiKeys.anthropic = process.env.ANTHROPIC_API_KEY;
|
|
344
338
|
}
|
package/src/config/schema.ts
CHANGED
|
@@ -91,27 +91,16 @@ export {
|
|
|
91
91
|
MemoryRetentionConfigSchema,
|
|
92
92
|
} from "./schemas/memory-lifecycle.js";
|
|
93
93
|
export type {
|
|
94
|
-
MemoryConflictsConfig,
|
|
95
|
-
MemoryEntityConfig,
|
|
96
94
|
MemoryExtractionConfig,
|
|
97
|
-
MemoryProfileConfig,
|
|
98
95
|
MemorySummarizationConfig,
|
|
99
96
|
} from "./schemas/memory-processing.js";
|
|
100
97
|
export {
|
|
101
|
-
MemoryConflictsConfigSchema,
|
|
102
|
-
MemoryEntityConfigSchema,
|
|
103
98
|
MemoryExtractionConfigSchema,
|
|
104
|
-
MemoryProfileConfigSchema,
|
|
105
99
|
MemorySummarizationConfigSchema,
|
|
106
100
|
} from "./schemas/memory-processing.js";
|
|
107
|
-
export type {
|
|
108
|
-
MemoryRerankingConfig,
|
|
109
|
-
MemoryRetrievalConfig,
|
|
110
|
-
} from "./schemas/memory-retrieval.js";
|
|
101
|
+
export type { MemoryRetrievalConfig } from "./schemas/memory-retrieval.js";
|
|
111
102
|
export {
|
|
112
103
|
MemoryDynamicBudgetConfigSchema,
|
|
113
|
-
MemoryEarlyTerminationConfigSchema,
|
|
114
|
-
MemoryRerankingConfigSchema,
|
|
115
104
|
MemoryRetrievalConfigSchema,
|
|
116
105
|
} from "./schemas/memory-retrieval.js";
|
|
117
106
|
export type {
|
|
@@ -289,7 +278,9 @@ export const AssistantConfigSchema = z
|
|
|
289
278
|
PermissionsConfigSchema.parse({}),
|
|
290
279
|
),
|
|
291
280
|
auditLog: AuditLogConfigSchema.default(AuditLogConfigSchema.parse({})),
|
|
292
|
-
logFile: LogFileConfigSchema.default(
|
|
281
|
+
logFile: LogFileConfigSchema.default(
|
|
282
|
+
LogFileConfigSchema.parse({ dir: getDataDir() + "/logs" }),
|
|
283
|
+
),
|
|
293
284
|
pricingOverrides: z.array(ModelPricingOverrideSchema).default([]),
|
|
294
285
|
heartbeat: HeartbeatConfigSchema.default(HeartbeatConfigSchema.parse({})),
|
|
295
286
|
swarm: SwarmConfigSchema.default(SwarmConfigSchema.parse({})),
|
|
@@ -33,15 +33,6 @@ export const MemoryCleanupConfigSchema = z.object({
|
|
|
33
33
|
.int("memory.cleanup.enqueueIntervalMs must be an integer")
|
|
34
34
|
.positive("memory.cleanup.enqueueIntervalMs must be a positive integer")
|
|
35
35
|
.default(6 * 60 * 60 * 1000),
|
|
36
|
-
resolvedConflictRetentionMs: z
|
|
37
|
-
.number({
|
|
38
|
-
error: "memory.cleanup.resolvedConflictRetentionMs must be a number",
|
|
39
|
-
})
|
|
40
|
-
.int("memory.cleanup.resolvedConflictRetentionMs must be an integer")
|
|
41
|
-
.positive(
|
|
42
|
-
"memory.cleanup.resolvedConflictRetentionMs must be a positive integer",
|
|
43
|
-
)
|
|
44
|
-
.default(30 * 24 * 60 * 60 * 1000),
|
|
45
36
|
supersededItemRetentionMs: z
|
|
46
37
|
.number({
|
|
47
38
|
error: "memory.cleanup.supersededItemRetentionMs must be a number",
|
|
@@ -1,28 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
const VALID_MEMORY_ITEM_KINDS = [
|
|
4
|
-
"preference",
|
|
5
|
-
"profile",
|
|
6
|
-
"project",
|
|
7
|
-
"decision",
|
|
8
|
-
"todo",
|
|
9
|
-
"fact",
|
|
10
|
-
"constraint",
|
|
11
|
-
"relationship",
|
|
12
|
-
"event",
|
|
13
|
-
"opinion",
|
|
14
|
-
"instruction",
|
|
15
|
-
"style",
|
|
16
|
-
] as const;
|
|
17
|
-
|
|
18
|
-
const DEFAULT_CONFLICTABLE_KINDS = [
|
|
19
|
-
"preference",
|
|
20
|
-
"profile",
|
|
21
|
-
"constraint",
|
|
22
|
-
"instruction",
|
|
23
|
-
"style",
|
|
24
|
-
] as const;
|
|
25
|
-
|
|
26
3
|
export const MemoryExtractionConfigSchema = z.object({
|
|
27
4
|
useLLM: z
|
|
28
5
|
.boolean({ error: "memory.extraction.useLLM must be a boolean" })
|
|
@@ -50,166 +27,9 @@ export const MemorySummarizationConfigSchema = z.object({
|
|
|
50
27
|
.default("latency-optimized"),
|
|
51
28
|
});
|
|
52
29
|
|
|
53
|
-
export const MemoryEntityConfigSchema = z.object({
|
|
54
|
-
enabled: z
|
|
55
|
-
.boolean({ error: "memory.entity.enabled must be a boolean" })
|
|
56
|
-
.default(true),
|
|
57
|
-
modelIntent: z
|
|
58
|
-
.enum(["latency-optimized", "quality-optimized", "vision-optimized"], {
|
|
59
|
-
error: "memory.entity.modelIntent must be a valid model intent",
|
|
60
|
-
})
|
|
61
|
-
.default("latency-optimized"),
|
|
62
|
-
extractRelations: z
|
|
63
|
-
.object({
|
|
64
|
-
enabled: z
|
|
65
|
-
.boolean({
|
|
66
|
-
error: "memory.entity.extractRelations.enabled must be a boolean",
|
|
67
|
-
})
|
|
68
|
-
.default(true),
|
|
69
|
-
backfillBatchSize: z
|
|
70
|
-
.number({
|
|
71
|
-
error:
|
|
72
|
-
"memory.entity.extractRelations.backfillBatchSize must be a number",
|
|
73
|
-
})
|
|
74
|
-
.int(
|
|
75
|
-
"memory.entity.extractRelations.backfillBatchSize must be an integer",
|
|
76
|
-
)
|
|
77
|
-
.positive(
|
|
78
|
-
"memory.entity.extractRelations.backfillBatchSize must be a positive integer",
|
|
79
|
-
)
|
|
80
|
-
.default(200),
|
|
81
|
-
})
|
|
82
|
-
.default({ enabled: true, backfillBatchSize: 200 }),
|
|
83
|
-
relationRetrieval: z
|
|
84
|
-
.object({
|
|
85
|
-
enabled: z
|
|
86
|
-
.boolean({
|
|
87
|
-
error: "memory.entity.relationRetrieval.enabled must be a boolean",
|
|
88
|
-
})
|
|
89
|
-
.default(true),
|
|
90
|
-
maxSeedEntities: z
|
|
91
|
-
.number({
|
|
92
|
-
error:
|
|
93
|
-
"memory.entity.relationRetrieval.maxSeedEntities must be a number",
|
|
94
|
-
})
|
|
95
|
-
.int(
|
|
96
|
-
"memory.entity.relationRetrieval.maxSeedEntities must be an integer",
|
|
97
|
-
)
|
|
98
|
-
.positive(
|
|
99
|
-
"memory.entity.relationRetrieval.maxSeedEntities must be a positive integer",
|
|
100
|
-
)
|
|
101
|
-
.default(8),
|
|
102
|
-
maxNeighborEntities: z
|
|
103
|
-
.number({
|
|
104
|
-
error:
|
|
105
|
-
"memory.entity.relationRetrieval.maxNeighborEntities must be a number",
|
|
106
|
-
})
|
|
107
|
-
.int(
|
|
108
|
-
"memory.entity.relationRetrieval.maxNeighborEntities must be an integer",
|
|
109
|
-
)
|
|
110
|
-
.positive(
|
|
111
|
-
"memory.entity.relationRetrieval.maxNeighborEntities must be a positive integer",
|
|
112
|
-
)
|
|
113
|
-
.default(20),
|
|
114
|
-
maxEdges: z
|
|
115
|
-
.number({
|
|
116
|
-
error: "memory.entity.relationRetrieval.maxEdges must be a number",
|
|
117
|
-
})
|
|
118
|
-
.int("memory.entity.relationRetrieval.maxEdges must be an integer")
|
|
119
|
-
.positive(
|
|
120
|
-
"memory.entity.relationRetrieval.maxEdges must be a positive integer",
|
|
121
|
-
)
|
|
122
|
-
.default(40),
|
|
123
|
-
neighborScoreMultiplier: z
|
|
124
|
-
.number({
|
|
125
|
-
error:
|
|
126
|
-
"memory.entity.relationRetrieval.neighborScoreMultiplier must be a number",
|
|
127
|
-
})
|
|
128
|
-
.gt(
|
|
129
|
-
0,
|
|
130
|
-
"memory.entity.relationRetrieval.neighborScoreMultiplier must be > 0",
|
|
131
|
-
)
|
|
132
|
-
.lte(
|
|
133
|
-
1,
|
|
134
|
-
"memory.entity.relationRetrieval.neighborScoreMultiplier must be <= 1",
|
|
135
|
-
)
|
|
136
|
-
.default(0.7),
|
|
137
|
-
maxDepth: z
|
|
138
|
-
.number({
|
|
139
|
-
error: "memory.entity.relationRetrieval.maxDepth must be a number",
|
|
140
|
-
})
|
|
141
|
-
.int("memory.entity.relationRetrieval.maxDepth must be an integer")
|
|
142
|
-
.positive(
|
|
143
|
-
"memory.entity.relationRetrieval.maxDepth must be a positive integer",
|
|
144
|
-
)
|
|
145
|
-
.default(3),
|
|
146
|
-
depthDecay: z
|
|
147
|
-
.boolean({
|
|
148
|
-
error: "memory.entity.relationRetrieval.depthDecay must be a boolean",
|
|
149
|
-
})
|
|
150
|
-
.default(true),
|
|
151
|
-
})
|
|
152
|
-
.default({
|
|
153
|
-
enabled: true,
|
|
154
|
-
maxSeedEntities: 8,
|
|
155
|
-
maxNeighborEntities: 20,
|
|
156
|
-
maxEdges: 40,
|
|
157
|
-
neighborScoreMultiplier: 0.7,
|
|
158
|
-
maxDepth: 3,
|
|
159
|
-
depthDecay: true,
|
|
160
|
-
}),
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
export const MemoryConflictsConfigSchema = z.object({
|
|
164
|
-
enabled: z
|
|
165
|
-
.boolean({ error: "memory.conflicts.enabled must be a boolean" })
|
|
166
|
-
.default(true),
|
|
167
|
-
gateMode: z
|
|
168
|
-
.enum(["soft"], { error: 'memory.conflicts.gateMode must be "soft"' })
|
|
169
|
-
.default("soft"),
|
|
170
|
-
resolverLlmTimeoutMs: z
|
|
171
|
-
.number({ error: "memory.conflicts.resolverLlmTimeoutMs must be a number" })
|
|
172
|
-
.int("memory.conflicts.resolverLlmTimeoutMs must be an integer")
|
|
173
|
-
.positive(
|
|
174
|
-
"memory.conflicts.resolverLlmTimeoutMs must be a positive integer",
|
|
175
|
-
)
|
|
176
|
-
.default(12000),
|
|
177
|
-
relevanceThreshold: z
|
|
178
|
-
.number({ error: "memory.conflicts.relevanceThreshold must be a number" })
|
|
179
|
-
.min(0, "memory.conflicts.relevanceThreshold must be >= 0")
|
|
180
|
-
.max(1, "memory.conflicts.relevanceThreshold must be <= 1")
|
|
181
|
-
.default(0.3),
|
|
182
|
-
conflictableKinds: z
|
|
183
|
-
.array(
|
|
184
|
-
z.enum(VALID_MEMORY_ITEM_KINDS, {
|
|
185
|
-
error: `memory.conflicts.conflictableKinds entries must be one of: ${VALID_MEMORY_ITEM_KINDS.join(
|
|
186
|
-
", ",
|
|
187
|
-
)}`,
|
|
188
|
-
}),
|
|
189
|
-
)
|
|
190
|
-
.nonempty({
|
|
191
|
-
message: "memory.conflicts.conflictableKinds must not be empty",
|
|
192
|
-
})
|
|
193
|
-
.default([...DEFAULT_CONFLICTABLE_KINDS]),
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
export const MemoryProfileConfigSchema = z.object({
|
|
197
|
-
enabled: z
|
|
198
|
-
.boolean({ error: "memory.profile.enabled must be a boolean" })
|
|
199
|
-
.default(true),
|
|
200
|
-
maxInjectTokens: z
|
|
201
|
-
.number({ error: "memory.profile.maxInjectTokens must be a number" })
|
|
202
|
-
.int("memory.profile.maxInjectTokens must be an integer")
|
|
203
|
-
.positive("memory.profile.maxInjectTokens must be a positive integer")
|
|
204
|
-
.default(800),
|
|
205
|
-
});
|
|
206
|
-
|
|
207
30
|
export type MemoryExtractionConfig = z.infer<
|
|
208
31
|
typeof MemoryExtractionConfigSchema
|
|
209
32
|
>;
|
|
210
33
|
export type MemorySummarizationConfig = z.infer<
|
|
211
34
|
typeof MemorySummarizationConfigSchema
|
|
212
35
|
>;
|
|
213
|
-
export type MemoryEntityConfig = z.infer<typeof MemoryEntityConfigSchema>;
|
|
214
|
-
export type MemoryConflictsConfig = z.infer<typeof MemoryConflictsConfigSchema>;
|
|
215
|
-
export type MemoryProfileConfig = z.infer<typeof MemoryProfileConfigSchema>;
|
|
@@ -1,22 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
export const MemoryRerankingConfigSchema = z.object({
|
|
4
|
-
enabled: z
|
|
5
|
-
.boolean({ error: "memory.retrieval.reranking.enabled must be a boolean" })
|
|
6
|
-
.default(false),
|
|
7
|
-
modelIntent: z
|
|
8
|
-
.enum(["latency-optimized", "quality-optimized", "vision-optimized"], {
|
|
9
|
-
error:
|
|
10
|
-
"memory.retrieval.reranking.modelIntent must be a valid model intent",
|
|
11
|
-
})
|
|
12
|
-
.default("latency-optimized"),
|
|
13
|
-
topK: z
|
|
14
|
-
.number({ error: "memory.retrieval.reranking.topK must be a number" })
|
|
15
|
-
.int("memory.retrieval.reranking.topK must be an integer")
|
|
16
|
-
.positive("memory.retrieval.reranking.topK must be a positive integer")
|
|
17
|
-
.default(20),
|
|
18
|
-
});
|
|
19
|
-
|
|
20
3
|
export const MemoryDynamicBudgetConfigSchema = z.object({
|
|
21
4
|
enabled: z
|
|
22
5
|
.boolean({
|
|
@@ -55,49 +38,6 @@ export const MemoryDynamicBudgetConfigSchema = z.object({
|
|
|
55
38
|
.default(10000),
|
|
56
39
|
});
|
|
57
40
|
|
|
58
|
-
export const MemoryEarlyTerminationConfigSchema = z.object({
|
|
59
|
-
enabled: z
|
|
60
|
-
.boolean({
|
|
61
|
-
error: "memory.retrieval.earlyTermination.enabled must be a boolean",
|
|
62
|
-
})
|
|
63
|
-
.default(true),
|
|
64
|
-
minCandidates: z
|
|
65
|
-
.number({
|
|
66
|
-
error: "memory.retrieval.earlyTermination.minCandidates must be a number",
|
|
67
|
-
})
|
|
68
|
-
.int("memory.retrieval.earlyTermination.minCandidates must be an integer")
|
|
69
|
-
.positive(
|
|
70
|
-
"memory.retrieval.earlyTermination.minCandidates must be a positive integer",
|
|
71
|
-
)
|
|
72
|
-
.default(20),
|
|
73
|
-
minHighConfidence: z
|
|
74
|
-
.number({
|
|
75
|
-
error:
|
|
76
|
-
"memory.retrieval.earlyTermination.minHighConfidence must be a number",
|
|
77
|
-
})
|
|
78
|
-
.int(
|
|
79
|
-
"memory.retrieval.earlyTermination.minHighConfidence must be an integer",
|
|
80
|
-
)
|
|
81
|
-
.positive(
|
|
82
|
-
"memory.retrieval.earlyTermination.minHighConfidence must be a positive integer",
|
|
83
|
-
)
|
|
84
|
-
.default(10),
|
|
85
|
-
confidenceThreshold: z
|
|
86
|
-
.number({
|
|
87
|
-
error:
|
|
88
|
-
"memory.retrieval.earlyTermination.confidenceThreshold must be a number",
|
|
89
|
-
})
|
|
90
|
-
.min(
|
|
91
|
-
0,
|
|
92
|
-
"memory.retrieval.earlyTermination.confidenceThreshold must be >= 0",
|
|
93
|
-
)
|
|
94
|
-
.max(
|
|
95
|
-
1,
|
|
96
|
-
"memory.retrieval.earlyTermination.confidenceThreshold must be <= 1",
|
|
97
|
-
)
|
|
98
|
-
.default(0.7),
|
|
99
|
-
});
|
|
100
|
-
|
|
101
41
|
/**
|
|
102
42
|
* Per-kind freshness windows (in days). Items older than their window
|
|
103
43
|
* (based on lastSeenAt) are down-ranked unless recently reinforced.
|
|
@@ -109,12 +49,13 @@ const MemoryFreshnessConfigSchema = z.object({
|
|
|
109
49
|
.default(true),
|
|
110
50
|
maxAgeDays: z
|
|
111
51
|
.object({
|
|
112
|
-
|
|
52
|
+
identity: z
|
|
113
53
|
.number({
|
|
114
|
-
error:
|
|
54
|
+
error:
|
|
55
|
+
"memory.retrieval.freshness.maxAgeDays.identity must be a number",
|
|
115
56
|
})
|
|
116
57
|
.nonnegative(
|
|
117
|
-
"memory.retrieval.freshness.maxAgeDays.
|
|
58
|
+
"memory.retrieval.freshness.maxAgeDays.identity must be non-negative",
|
|
118
59
|
)
|
|
119
60
|
.default(0),
|
|
120
61
|
preference: z
|
|
@@ -126,34 +67,50 @@ const MemoryFreshnessConfigSchema = z.object({
|
|
|
126
67
|
"memory.retrieval.freshness.maxAgeDays.preference must be non-negative",
|
|
127
68
|
)
|
|
128
69
|
.default(0),
|
|
129
|
-
|
|
70
|
+
project: z
|
|
130
71
|
.number({
|
|
131
72
|
error:
|
|
132
|
-
"memory.retrieval.freshness.maxAgeDays.
|
|
73
|
+
"memory.retrieval.freshness.maxAgeDays.project must be a number",
|
|
133
74
|
})
|
|
134
75
|
.nonnegative(
|
|
135
|
-
"memory.retrieval.freshness.maxAgeDays.
|
|
76
|
+
"memory.retrieval.freshness.maxAgeDays.project must be non-negative",
|
|
136
77
|
)
|
|
137
|
-
.default(
|
|
138
|
-
|
|
78
|
+
.default(30),
|
|
79
|
+
decision: z
|
|
139
80
|
.number({
|
|
140
|
-
error:
|
|
81
|
+
error:
|
|
82
|
+
"memory.retrieval.freshness.maxAgeDays.decision must be a number",
|
|
141
83
|
})
|
|
142
84
|
.nonnegative(
|
|
143
|
-
"memory.retrieval.freshness.maxAgeDays.
|
|
85
|
+
"memory.retrieval.freshness.maxAgeDays.decision must be non-negative",
|
|
144
86
|
)
|
|
145
87
|
.default(30),
|
|
146
|
-
|
|
88
|
+
constraint: z
|
|
147
89
|
.number({
|
|
148
90
|
error:
|
|
149
|
-
"memory.retrieval.freshness.maxAgeDays.
|
|
91
|
+
"memory.retrieval.freshness.maxAgeDays.constraint must be a number",
|
|
92
|
+
})
|
|
93
|
+
.nonnegative(
|
|
94
|
+
"memory.retrieval.freshness.maxAgeDays.constraint must be non-negative",
|
|
95
|
+
)
|
|
96
|
+
.default(90),
|
|
97
|
+
event: z
|
|
98
|
+
.number({
|
|
99
|
+
error: "memory.retrieval.freshness.maxAgeDays.event must be a number",
|
|
150
100
|
})
|
|
151
101
|
.nonnegative(
|
|
152
|
-
"memory.retrieval.freshness.maxAgeDays.
|
|
102
|
+
"memory.retrieval.freshness.maxAgeDays.event must be non-negative",
|
|
153
103
|
)
|
|
154
|
-
.default(
|
|
104
|
+
.default(30),
|
|
155
105
|
})
|
|
156
|
-
.default({
|
|
106
|
+
.default({
|
|
107
|
+
identity: 0,
|
|
108
|
+
preference: 0,
|
|
109
|
+
project: 30,
|
|
110
|
+
decision: 30,
|
|
111
|
+
constraint: 90,
|
|
112
|
+
event: 30,
|
|
113
|
+
}),
|
|
157
114
|
staleDecay: z
|
|
158
115
|
.number({ error: "memory.retrieval.freshness.staleDecay must be a number" })
|
|
159
116
|
.min(0, "memory.retrieval.freshness.staleDecay must be >= 0")
|
|
@@ -171,36 +128,11 @@ const MemoryFreshnessConfigSchema = z.object({
|
|
|
171
128
|
});
|
|
172
129
|
|
|
173
130
|
export const MemoryRetrievalConfigSchema = z.object({
|
|
174
|
-
lexicalTopK: z
|
|
175
|
-
.number({ error: "memory.retrieval.lexicalTopK must be a number" })
|
|
176
|
-
.int("memory.retrieval.lexicalTopK must be an integer")
|
|
177
|
-
.positive("memory.retrieval.lexicalTopK must be a positive integer")
|
|
178
|
-
.default(80),
|
|
179
|
-
semanticTopK: z
|
|
180
|
-
.number({ error: "memory.retrieval.semanticTopK must be a number" })
|
|
181
|
-
.int("memory.retrieval.semanticTopK must be an integer")
|
|
182
|
-
.positive("memory.retrieval.semanticTopK must be a positive integer")
|
|
183
|
-
.default(40),
|
|
184
131
|
maxInjectTokens: z
|
|
185
132
|
.number({ error: "memory.retrieval.maxInjectTokens must be a number" })
|
|
186
133
|
.int("memory.retrieval.maxInjectTokens must be an integer")
|
|
187
134
|
.positive("memory.retrieval.maxInjectTokens must be a positive integer")
|
|
188
135
|
.default(10000),
|
|
189
|
-
injectionFormat: z
|
|
190
|
-
.enum(["markdown", "structured_v1"], {
|
|
191
|
-
error:
|
|
192
|
-
'memory.retrieval.injectionFormat must be "markdown" or "structured_v1"',
|
|
193
|
-
})
|
|
194
|
-
.default("markdown"),
|
|
195
|
-
injectionStrategy: z
|
|
196
|
-
.enum(["prepend_user_block", "separate_context_message"], {
|
|
197
|
-
error:
|
|
198
|
-
'memory.retrieval.injectionStrategy must be "prepend_user_block" or "separate_context_message"',
|
|
199
|
-
})
|
|
200
|
-
.default("prepend_user_block"),
|
|
201
|
-
reranking: MemoryRerankingConfigSchema.default(
|
|
202
|
-
MemoryRerankingConfigSchema.parse({}),
|
|
203
|
-
),
|
|
204
136
|
freshness: MemoryFreshnessConfigSchema.default(
|
|
205
137
|
MemoryFreshnessConfigSchema.parse({}),
|
|
206
138
|
),
|
|
@@ -213,10 +145,6 @@ export const MemoryRetrievalConfigSchema = z.object({
|
|
|
213
145
|
dynamicBudget: MemoryDynamicBudgetConfigSchema.default(
|
|
214
146
|
MemoryDynamicBudgetConfigSchema.parse({}),
|
|
215
147
|
),
|
|
216
|
-
earlyTermination: MemoryEarlyTerminationConfigSchema.default(
|
|
217
|
-
MemoryEarlyTerminationConfigSchema.parse({}),
|
|
218
|
-
),
|
|
219
148
|
});
|
|
220
149
|
|
|
221
|
-
export type MemoryRerankingConfig = z.infer<typeof MemoryRerankingConfigSchema>;
|
|
222
150
|
export type MemoryRetrievalConfig = z.infer<typeof MemoryRetrievalConfigSchema>;
|
|
@@ -6,10 +6,7 @@ import {
|
|
|
6
6
|
MemoryRetentionConfigSchema,
|
|
7
7
|
} from "./memory-lifecycle.js";
|
|
8
8
|
import {
|
|
9
|
-
MemoryConflictsConfigSchema,
|
|
10
|
-
MemoryEntityConfigSchema,
|
|
11
9
|
MemoryExtractionConfigSchema,
|
|
12
|
-
MemoryProfileConfigSchema,
|
|
13
10
|
MemorySummarizationConfigSchema,
|
|
14
11
|
} from "./memory-processing.js";
|
|
15
12
|
import { MemoryRetrievalConfigSchema } from "./memory-retrieval.js";
|
|
@@ -46,13 +43,6 @@ export const MemoryConfigSchema = z.object({
|
|
|
46
43
|
summarization: MemorySummarizationConfigSchema.default(
|
|
47
44
|
MemorySummarizationConfigSchema.parse({}),
|
|
48
45
|
),
|
|
49
|
-
entity: MemoryEntityConfigSchema.default(MemoryEntityConfigSchema.parse({})),
|
|
50
|
-
conflicts: MemoryConflictsConfigSchema.default(
|
|
51
|
-
MemoryConflictsConfigSchema.parse({}),
|
|
52
|
-
),
|
|
53
|
-
profile: MemoryProfileConfigSchema.default(
|
|
54
|
-
MemoryProfileConfigSchema.parse({}),
|
|
55
|
-
),
|
|
56
46
|
});
|
|
57
47
|
|
|
58
48
|
export type MemoryConfig = z.infer<typeof MemoryConfigSchema>;
|
package/src/config/skills.ts
CHANGED
|
@@ -146,14 +146,23 @@ export interface SkillDefinition extends SkillSummary {
|
|
|
146
146
|
body: string;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
export type SkillLookupErrorCode =
|
|
150
|
+
| "not_found"
|
|
151
|
+
| "ambiguous"
|
|
152
|
+
| "empty_catalog"
|
|
153
|
+
| "invalid_selector"
|
|
154
|
+
| "load_failed";
|
|
155
|
+
|
|
149
156
|
export interface SkillLookupResult {
|
|
150
157
|
skill?: SkillDefinition;
|
|
151
158
|
error?: string;
|
|
159
|
+
errorCode?: SkillLookupErrorCode;
|
|
152
160
|
}
|
|
153
161
|
|
|
154
162
|
export interface SkillSelectorResult {
|
|
155
163
|
skill?: SkillSummary;
|
|
156
164
|
error?: string;
|
|
165
|
+
errorCode?: SkillLookupErrorCode;
|
|
157
166
|
}
|
|
158
167
|
|
|
159
168
|
// ─── Skill Tool Manifest Types ────────────────────────────────────────────────
|
|
@@ -1210,6 +1219,7 @@ export function resolveSkillSelector(
|
|
|
1210
1219
|
if (!needle) {
|
|
1211
1220
|
return {
|
|
1212
1221
|
error: "Skill selector is required and must be a non-empty string.",
|
|
1222
|
+
errorCode: "invalid_selector",
|
|
1213
1223
|
};
|
|
1214
1224
|
}
|
|
1215
1225
|
|
|
@@ -1218,6 +1228,7 @@ export function resolveSkillSelector(
|
|
|
1218
1228
|
return {
|
|
1219
1229
|
error:
|
|
1220
1230
|
"No skills are available. Configure ~/.vellum/workspace/skills/SKILLS.md or add skill directories.",
|
|
1231
|
+
errorCode: "empty_catalog",
|
|
1221
1232
|
};
|
|
1222
1233
|
}
|
|
1223
1234
|
|
|
@@ -1236,7 +1247,10 @@ export function resolveSkillSelector(
|
|
|
1236
1247
|
}
|
|
1237
1248
|
if (exactNameMatches.length > 1) {
|
|
1238
1249
|
const ids = exactNameMatches.map((skill) => skill.id).join(", ");
|
|
1239
|
-
return {
|
|
1250
|
+
return {
|
|
1251
|
+
error: `Ambiguous skill name "${needle}". Matching IDs: ${ids}`,
|
|
1252
|
+
errorCode: "ambiguous",
|
|
1253
|
+
};
|
|
1240
1254
|
}
|
|
1241
1255
|
|
|
1242
1256
|
const idPrefixMatches = catalog.filter((skill) =>
|
|
@@ -1249,12 +1263,14 @@ export function resolveSkillSelector(
|
|
|
1249
1263
|
const ids = idPrefixMatches.map((skill) => skill.id).join(", ");
|
|
1250
1264
|
return {
|
|
1251
1265
|
error: `Ambiguous skill id prefix "${needle}". Matching IDs: ${ids}`,
|
|
1266
|
+
errorCode: "ambiguous",
|
|
1252
1267
|
};
|
|
1253
1268
|
}
|
|
1254
1269
|
|
|
1255
1270
|
const knownSkills = catalog.map((skill) => skill.id).join(", ");
|
|
1256
1271
|
return {
|
|
1257
1272
|
error: `No skill matched "${needle}". Available skills: ${knownSkills}`,
|
|
1273
|
+
errorCode: "not_found",
|
|
1258
1274
|
};
|
|
1259
1275
|
}
|
|
1260
1276
|
|
|
@@ -1264,7 +1280,10 @@ export function loadSkillBySelector(
|
|
|
1264
1280
|
): SkillLookupResult {
|
|
1265
1281
|
const resolved = resolveSkillSelector(selector, workspaceSkillsDir);
|
|
1266
1282
|
if (!resolved.skill) {
|
|
1267
|
-
return {
|
|
1283
|
+
return {
|
|
1284
|
+
error: resolved.error ?? "Failed to resolve skill selector.",
|
|
1285
|
+
errorCode: resolved.errorCode ?? "load_failed",
|
|
1286
|
+
};
|
|
1268
1287
|
}
|
|
1269
1288
|
return loadSkillDefinition(resolved.skill);
|
|
1270
1289
|
}
|
package/src/config/types.ts
CHANGED
|
@@ -12,13 +12,9 @@ export type {
|
|
|
12
12
|
IngressConfig,
|
|
13
13
|
LogFileConfig,
|
|
14
14
|
MemoryConfig,
|
|
15
|
-
MemoryConflictsConfig,
|
|
16
15
|
MemoryEmbeddingsConfig,
|
|
17
|
-
MemoryEntityConfig,
|
|
18
16
|
MemoryExtractionConfig,
|
|
19
17
|
MemoryJobsConfig,
|
|
20
|
-
MemoryProfileConfig,
|
|
21
|
-
MemoryRerankingConfig,
|
|
22
18
|
MemoryRetentionConfig,
|
|
23
19
|
MemoryRetrievalConfig,
|
|
24
20
|
MemorySegmentationConfig,
|