@vellumai/assistant 0.8.2 → 0.8.4
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 +11 -12
- package/docker-entrypoint.sh +13 -2
- package/docker-init-apt-root.sh +79 -6
- package/node_modules/@vellumai/gateway-client/src/types.ts +2 -0
- package/openapi.yaml +945 -36
- package/package.json +1 -1
- package/src/__tests__/agent-loop-exit-reason.test.ts +271 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +1 -1
- package/src/__tests__/agent-loop-provider-error-recording.test.ts +195 -0
- package/src/__tests__/agent-loop.test.ts +88 -3
- package/src/__tests__/anthropic-provider.test.ts +272 -0
- package/src/__tests__/approval-cascade.test.ts +1 -1
- package/src/__tests__/background-workers-disk-pressure.test.ts +2 -1
- package/src/__tests__/channel-delivery-store.test.ts +193 -0
- package/src/__tests__/channel-reply-delivery.test.ts +284 -5
- package/src/__tests__/channel-retry-sweep.test.ts +274 -1
- package/src/__tests__/compaction-events.test.ts +1 -1
- package/src/__tests__/compactor-preserved-tail-count.test.ts +110 -0
- package/src/__tests__/compactor-tail-resolution.test.ts +107 -1
- package/src/__tests__/config-get-vision-flag.test.ts +136 -0
- package/src/__tests__/config-loader-backfill.test.ts +115 -18
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/context-token-estimator.test.ts +112 -57
- package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +54 -3
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +31 -6
- package/src/__tests__/conversation-agent-loop.test.ts +77 -3
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-clean-command.test.ts +137 -0
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -1
- package/src/__tests__/conversation-fork-crud.test.ts +161 -0
- package/src/__tests__/conversation-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-load-cleaned-at.test.ts +279 -0
- package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
- package/src/__tests__/conversation-media-retry.test.ts +19 -8
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-process-callsite.test.ts +1 -1
- package/src/__tests__/conversation-provider-retry-repair.test.ts +1 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +290 -85
- package/src/__tests__/conversation-seed-composer.test.ts +66 -4
- package/src/__tests__/conversation-slash-commands.test.ts +36 -8
- package/src/__tests__/conversation-slash-queue.test.ts +1 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +1 -1
- package/src/__tests__/conversation-speed-override.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +220 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -1
- package/src/__tests__/credential-security-invariants.test.ts +6 -0
- package/src/__tests__/cu-unified-flow.test.ts +10 -1
- package/src/__tests__/date-context.test.ts +45 -0
- package/src/__tests__/dm-backfill.test.ts +64 -0
- package/src/__tests__/dm-persistence.test.ts +33 -0
- package/src/__tests__/document-find-replace.test.ts +501 -0
- package/src/__tests__/external-plugin-loader.test.ts +91 -19
- package/src/__tests__/first-greeting.test.ts +23 -2
- package/src/__tests__/guardian-action-no-hardcoded-copy.test.ts +0 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -0
- package/src/__tests__/headless-browser-navigate.test.ts +172 -0
- package/src/__tests__/heartbeat-service.test.ts +24 -164
- package/src/__tests__/helpers/channel-test-adapter.ts +0 -2
- package/src/__tests__/host-app-control-proxy.test.ts +241 -0
- package/src/__tests__/host-bash-proxy.test.ts +6 -0
- package/src/__tests__/host-browser-proxy.test.ts +10 -0
- package/src/__tests__/host-cu-proxy.test.ts +8 -1
- package/src/__tests__/host-file-proxy.test.ts +8 -1
- package/src/__tests__/host-proxy-preactivation.test.ts +200 -13
- package/src/__tests__/host-transfer-proxy.test.ts +8 -1
- package/src/__tests__/identity-routes.test.ts +57 -0
- package/src/__tests__/inbound-slack-persistence.test.ts +3 -0
- package/src/__tests__/injector-background-turn.test.ts +153 -0
- package/src/__tests__/injector-chain.test.ts +7 -0
- package/src/__tests__/injector-document-comments.test.ts +378 -0
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +4 -25
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +9 -2
- package/src/__tests__/list-messages-attachments.test.ts +21 -17
- package/src/__tests__/list-messages-hidden-metadata.test.ts +217 -0
- package/src/__tests__/list-messages-page-latest.test.ts +130 -14
- package/src/__tests__/list-messages-tool-merge.test.ts +17 -16
- package/src/__tests__/llm-callsite-catalog.test.ts +25 -0
- package/src/__tests__/llm-catalog-parity.test.ts +3 -0
- package/src/__tests__/llm-context-normalization.test.ts +0 -2
- package/src/__tests__/llm-request-log-agent-loop-exit-reason.test.ts +116 -0
- package/src/__tests__/llm-request-log-error-payload.test.ts +138 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -0
- package/src/__tests__/llm-resolver.test.ts +340 -3
- package/src/__tests__/log-export-routes.test.ts +99 -2
- package/src/__tests__/managed-profile-guard.test.ts +10 -0
- package/src/__tests__/message-queue-steer.test.ts +114 -0
- package/src/__tests__/notification-decision-fallback.test.ts +0 -91
- package/src/__tests__/notification-decision-strategy.test.ts +14 -31
- package/src/__tests__/notification-deep-link.test.ts +15 -0
- package/src/__tests__/notification-guardian-path.test.ts +1 -2
- package/src/__tests__/notification-platform-adapter.test.ts +5 -4
- package/src/__tests__/notification-telegram-adapter.test.ts +1 -0
- package/src/__tests__/notification-vellum-adapter.test.ts +113 -0
- package/src/__tests__/openai-provider.test.ts +323 -3
- package/src/__tests__/openai-responses-cutover-guard.test.ts +3 -3
- package/src/__tests__/openai-responses-provider.test.ts +4 -4
- package/src/__tests__/openrouter-provider-only.test.ts +51 -3
- package/src/__tests__/openrouter-token-estimation.test.ts +34 -25
- package/src/__tests__/outbound-slack-persistence.test.ts +187 -20
- package/src/__tests__/pending-interactions-resolved-event.test.ts +190 -0
- package/src/__tests__/platform-proxy-context.test.ts +6 -1
- package/src/__tests__/platform.test.ts +0 -3
- package/src/__tests__/plugin-source-watcher.test.ts +302 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +3 -3
- package/src/__tests__/plugin-types.test.ts +2 -2
- package/src/__tests__/process-message-background-slack.test.ts +1 -51
- package/src/__tests__/process-message-display-content.test.ts +21 -16
- package/src/__tests__/provider-catalog-visibility.test.ts +16 -0
- package/src/__tests__/provider-platform-proxy-integration.test.ts +27 -25
- package/src/__tests__/secret-routes-platform-proxy.test.ts +1 -1
- package/src/__tests__/server-history-render.test.ts +83 -4
- package/src/__tests__/steer-tool-repair.test.ts +249 -0
- package/src/__tests__/system-prompt.test.ts +57 -101
- package/src/__tests__/terminal-tools.test.ts +11 -1
- package/src/__tests__/thinking-block-replay.test.ts +113 -0
- package/src/__tests__/thread-backfill.test.ts +370 -22
- package/src/__tests__/tool-executor.test.ts +90 -1
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +167 -0
- package/src/__tests__/twilio-routes.test.ts +1 -1
- package/src/__tests__/web-fetch.test.ts +2 -2
- package/src/__tests__/workspace-git-service.test.ts +88 -5
- package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +228 -0
- package/src/__tests__/workspace-migration-088-deprecate-background-conversation-override.test.ts +158 -0
- package/src/a2a/__tests__/agent-card.test.ts +98 -0
- package/src/a2a/__tests__/e2e-a2a-channel.test.ts +597 -0
- package/src/a2a/__tests__/protocol-helpers.test.ts +113 -0
- package/src/a2a/__tests__/task-store.test.ts +246 -0
- package/src/a2a/agent-card.ts +58 -0
- package/src/a2a/feature-gate.ts +8 -0
- package/src/a2a/protocol-constants.ts +21 -0
- package/src/a2a/protocol-errors.ts +50 -0
- package/src/a2a/protocol-types.ts +162 -0
- package/src/a2a/task-store.ts +168 -0
- package/src/agent/attachments.ts +1 -0
- package/src/agent/loop.ts +208 -22
- package/src/background-wake/next-wake.test.ts +289 -0
- package/src/background-wake/next-wake.ts +172 -0
- package/src/browser/operations.ts +15 -0
- package/src/channels/config.ts +9 -0
- package/src/channels/types.ts +14 -0
- package/src/cli/commands/__tests__/conversations-slack.test.ts +572 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +9 -12
- package/src/cli/{__tests__ → commands/__tests__}/notifications.test.ts +201 -28
- package/src/cli/commands/__tests__/schedules.test.ts +469 -0
- package/src/cli/commands/conversations.ts +128 -1
- package/src/cli/commands/inference-providers.ts +147 -1
- package/src/cli/commands/memory-v2.ts +308 -0
- package/src/cli/commands/notifications.ts +89 -37
- package/src/cli/commands/plugins.ts +67 -0
- package/src/cli/commands/schedules.ts +297 -5
- package/src/cli/lib/__tests__/search-plugins.test.ts +261 -0
- package/src/cli/lib/install-from-github.ts +8 -9
- package/src/cli/lib/search-plugins.ts +163 -0
- package/src/cli/program.ts +14 -0
- package/src/cli/utils/conversation-id.ts +17 -5
- package/src/config/assistant-feature-flags.ts +24 -54
- package/src/config/bundled-skills/app-builder/SKILL.md +117 -1
- package/src/config/bundled-skills/document-editor/SKILL.md +115 -0
- package/src/config/bundled-skills/document-editor/TOOLS.json +240 -0
- package/src/config/bundled-skills/document-editor/tools/comment-list.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-reply.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-resolve.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-find.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-replace-text.ts +12 -0
- package/src/config/bundled-skills/media-processing/SKILL.md +8 -0
- package/src/config/bundled-skills/phone-calls/SKILL.md +1 -1
- package/src/config/bundled-skills/schedule/SKILL.md +8 -0
- package/src/config/bundled-tool-registry.ts +22 -12
- package/src/config/call-site-defaults.ts +124 -0
- package/src/config/feature-flag-registry.json +111 -23
- package/src/config/llm-resolver.ts +66 -1
- package/src/config/schema.ts +2 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +7 -3
- package/src/config/schemas/call-site-catalog.ts +21 -0
- package/src/config/schemas/channels.ts +9 -0
- package/src/config/schemas/conversations.ts +10 -0
- package/src/config/schemas/heartbeat.ts +14 -0
- package/src/config/schemas/llm.ts +4 -3
- package/src/config/schemas/memory-retrospective.ts +1 -1
- package/src/config/schemas/memory-v2.ts +51 -4
- package/src/config/schemas/memory.ts +3 -1
- package/src/config/seed-inference-profiles.ts +99 -29
- package/src/context/compactor.ts +80 -13
- package/src/context/token-estimator.ts +72 -31
- package/src/context/window-manager.ts +25 -0
- package/src/credential-health/credential-health-service.ts +34 -19
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -22
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +66 -6
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +357 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +287 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +231 -23
- package/src/daemon/conversation-agent-loop.ts +252 -56
- package/src/daemon/conversation-lifecycle.ts +142 -116
- package/src/daemon/conversation-messaging.ts +3 -0
- package/src/daemon/conversation-process.ts +273 -0
- package/src/daemon/conversation-queue-manager.ts +14 -0
- package/src/daemon/conversation-runtime-assembly.ts +144 -75
- package/src/daemon/conversation-slash.ts +37 -5
- package/src/daemon/conversation-surfaces.ts +45 -2
- package/src/daemon/conversation-tool-setup.ts +7 -0
- package/src/daemon/conversation.ts +42 -12
- package/src/daemon/date-context.ts +40 -0
- package/src/daemon/first-greeting.ts +10 -0
- package/src/daemon/guardian-action-generators.ts +1 -125
- package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +498 -0
- package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +248 -0
- package/src/daemon/handlers/__tests__/config-a2a-invite.test.ts +154 -0
- package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +133 -0
- package/src/daemon/handlers/__tests__/config-a2a.test.ts +95 -0
- package/src/daemon/handlers/config-a2a.ts +449 -0
- package/src/daemon/handlers/config-model.test.ts +1 -0
- package/src/daemon/handlers/conversations.ts +80 -0
- package/src/daemon/handlers/shared.ts +92 -29
- package/src/daemon/host-app-control-proxy.ts +69 -18
- package/src/daemon/host-bash-proxy.ts +1 -1
- package/src/daemon/host-cu-proxy.ts +1 -1
- package/src/daemon/host-file-proxy.ts +1 -1
- package/src/daemon/host-proxy-preactivation.ts +85 -18
- package/src/daemon/host-transfer-proxy.ts +1 -1
- package/src/daemon/lifecycle.ts +67 -65
- package/src/daemon/memory-v2-startup.ts +49 -13
- package/src/daemon/message-protocol.ts +4 -0
- package/src/daemon/message-types/conversations.ts +8 -0
- package/src/daemon/message-types/document-comments.ts +50 -0
- package/src/daemon/message-types/messages.ts +68 -1
- package/src/daemon/message-types/notifications.ts +21 -0
- package/src/daemon/message-types/surfaces.ts +3 -1
- package/src/daemon/message-types/web-activity.ts +57 -0
- package/src/daemon/pkb-reminder-builder.test.ts +10 -53
- package/src/daemon/pkb-reminder-builder.ts +4 -19
- package/src/daemon/plugin-source-watcher.ts +135 -3
- package/src/daemon/process-message.ts +72 -12
- package/src/daemon/query-complexity-router.ts +75 -0
- package/src/daemon/skill-memory-refresh.ts +5 -1
- package/src/daemon/trust-context.ts +6 -0
- package/src/daemon/wake-target-adapter.ts +2 -0
- package/src/documents/document-comments-store.test.ts +338 -0
- package/src/documents/document-comments-store.ts +237 -0
- package/src/documents/document-store.ts +202 -0
- package/src/export/__tests__/transcript-formatter.test.ts +121 -0
- package/src/export/transcript-formatter.ts +54 -20
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +44 -1
- package/src/heartbeat/heartbeat-service.ts +35 -191
- package/src/home/__tests__/feed-types.test.ts +40 -0
- package/src/home/__tests__/suggested-prompts.test.ts +33 -2
- package/src/home/feed-types.ts +20 -3
- package/src/home/home-content-refresh.ts +52 -0
- package/src/home/home-greeting-cache.ts +69 -0
- package/src/home/home-greeting.ts +94 -0
- package/src/home/suggested-prompts.ts +177 -9
- package/src/ipc/cli-client.ts +147 -45
- package/src/memory/__tests__/conversation-queries.test.ts +220 -0
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +135 -2
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +2 -50
- package/src/memory/__tests__/memory-retrospective-job.test.ts +407 -10
- package/src/memory/conversation-crud.ts +133 -43
- package/src/memory/conversation-queries.ts +87 -1
- package/src/memory/conversation-title-service.ts +26 -4
- package/src/memory/db-init.ts +22 -0
- package/src/memory/delivery-crud.ts +41 -0
- package/src/memory/delivery-status.ts +141 -15
- package/src/memory/external-conversation-store.ts +32 -1
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +84 -3
- package/src/memory/graph/conversation-graph-memory.ts +18 -6
- package/src/memory/graph/tools.ts +6 -37
- package/src/memory/invite-store.ts +53 -0
- package/src/memory/jobs-worker.ts +21 -1
- package/src/memory/llm-request-log-source-clickhouse.ts +7 -2
- package/src/memory/llm-request-log-store.ts +92 -1
- package/src/memory/memory-retrospective-constants.ts +28 -0
- package/src/memory/memory-retrospective-enqueue.ts +4 -22
- package/src/memory/memory-retrospective-job.ts +438 -21
- package/src/memory/memory-retrospective-startup-cleanup.ts +3 -3
- package/src/memory/memory-v2-activation-log-store.ts +26 -8
- package/src/memory/migrations/100-core-tables.ts +1 -0
- package/src/memory/migrations/109-external-conversation-bindings.ts +1 -0
- package/src/memory/migrations/250-provider-connection-base-url-and-models.ts +28 -0
- package/src/memory/migrations/251-a2a-tasks.ts +49 -0
- package/src/memory/migrations/252-llm-request-log-agent-loop-exit-reason.ts +32 -0
- package/src/memory/migrations/253-conversation-last-notified-profile.ts +15 -0
- package/src/memory/migrations/253-document-comments.ts +47 -0
- package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +43 -0
- package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +24 -0
- package/src/memory/migrations/256-memory-v2-injection-events.ts +113 -0
- package/src/memory/migrations/257-strip-base-url-non-openai-compatible.ts +22 -0
- package/src/memory/migrations/258-onboarding-events-prior-assistants.ts +13 -0
- package/src/memory/migrations/259-conversation-cleaned-at.ts +33 -0
- package/src/memory/migrations/index.ts +20 -0
- package/src/memory/migrations/registry.ts +33 -0
- package/src/memory/onboarding-events-store.ts +7 -0
- package/src/memory/schema/a2a.ts +15 -0
- package/src/memory/schema/calls.ts +1 -0
- package/src/memory/schema/conversations.ts +3 -0
- package/src/memory/schema/index.ts +1 -0
- package/src/memory/schema/inference.ts +2 -0
- package/src/memory/schema/infrastructure.ts +2 -0
- package/src/memory/v2/__tests__/activation-store.test.ts +25 -23
- package/src/memory/v2/__tests__/cli-command-store.test.ts +404 -0
- package/src/memory/v2/__tests__/frontmatter-sweep.test.ts +25 -4
- package/src/memory/v2/__tests__/injection-events.test.ts +318 -0
- package/src/memory/v2/__tests__/injection.test.ts +221 -17
- package/src/memory/v2/__tests__/page-index.test.ts +365 -1
- package/src/memory/v2/__tests__/router.test.ts +489 -1
- package/src/memory/v2/__tests__/static-context.test.ts +12 -1
- package/src/memory/v2/activation-store.ts +14 -16
- package/src/memory/v2/cli-command-content.ts +19 -0
- package/src/memory/v2/cli-command-store.ts +304 -0
- package/src/memory/v2/consolidation-job.ts +14 -0
- package/src/memory/v2/frontmatter-sweep.ts +7 -1
- package/src/memory/v2/injection-events.ts +101 -0
- package/src/memory/v2/injection.ts +69 -29
- package/src/memory/v2/page-index.ts +246 -19
- package/src/memory/v2/page-store.ts +18 -0
- package/src/memory/v2/router.ts +209 -55
- package/src/memory/v2/static-context.ts +4 -4
- package/src/memory/v2/types.ts +23 -0
- package/src/messaging/providers/a2a/__tests__/deliver.test.ts +274 -0
- package/src/messaging/providers/a2a/deliver.ts +156 -0
- package/src/messaging/providers/gmail/client.ts +9 -2
- package/src/messaging/providers/index.ts +18 -3
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +329 -3
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +34 -1
- package/src/messaging/providers/slack/adapter.ts +178 -25
- package/src/messaging/providers/slack/api.test.ts +54 -0
- package/src/messaging/providers/slack/api.ts +119 -3
- package/src/messaging/providers/slack/client.ts +12 -0
- package/src/messaging/providers/slack/deep-link.ts +20 -1
- package/src/messaging/providers/slack/message-metadata.test.ts +48 -0
- package/src/messaging/providers/slack/message-metadata.ts +156 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +107 -75
- package/src/messaging/providers/slack/render-transcript.ts +176 -49
- package/src/messaging/providers/slack/send.test.ts +77 -0
- package/src/messaging/providers/slack/send.ts +8 -2
- package/src/messaging/providers/slack/types.ts +14 -0
- package/src/notifications/__tests__/broadcaster.test.ts +203 -0
- package/src/notifications/__tests__/decision-engine.test.ts +283 -0
- package/src/notifications/__tests__/deterministic-checks.test.ts +286 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +5 -1
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +521 -36
- package/src/notifications/adapters/macos.ts +12 -2
- package/src/notifications/broadcaster.ts +29 -4
- package/src/notifications/conversation-seed-composer.ts +14 -2
- package/src/notifications/copy-composer.ts +17 -64
- package/src/notifications/decision-engine.ts +111 -44
- package/src/notifications/deferred-emit.ts +135 -0
- package/src/notifications/deterministic-checks.ts +96 -0
- package/src/notifications/emit-signal.ts +10 -1
- package/src/notifications/home-feed-side-effect.ts +136 -27
- package/src/notifications/signal.ts +0 -4
- package/src/notifications/types.ts +8 -0
- package/src/oauth/connect-orchestrator.ts +3 -0
- package/src/oauth/credential-token-resolver.ts +2 -0
- package/src/oauth/manual-token-connection.ts +19 -0
- package/src/oauth/oauth-store.ts +12 -0
- package/src/oauth/platform-connection.test.ts +43 -3
- package/src/oauth/platform-connection.ts +13 -4
- package/src/oauth/seed-providers.ts +22 -0
- package/src/permissions/prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +4 -1
- package/src/plugins/defaults/injectors.ts +118 -26
- package/src/plugins/external-plugin-loader.ts +82 -10
- package/src/plugins/types.ts +16 -7
- package/src/prompts/__tests__/system-prompt.test.ts +44 -45
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +4 -8
- package/src/prompts/normalize-onboarding.ts +40 -0
- package/src/prompts/sections.ts +32 -14
- package/src/prompts/system-prompt.ts +105 -76
- package/src/prompts/template-detection.ts +37 -0
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +141 -0
- package/src/prompts/templates/BOOTSTRAP.md +13 -5
- package/src/prompts/templates/VOICE.md +3 -0
- package/src/prompts/templates/system-sections.ts +51 -10
- package/src/providers/__tests__/inference.test.ts +2 -0
- package/src/providers/anthropic/client.ts +132 -5
- package/src/providers/call-site-routing.ts +24 -6
- package/src/providers/connection-resolution.ts +63 -13
- package/src/providers/fireworks/client.ts +20 -2
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +74 -0
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +342 -0
- package/src/providers/inference/__tests__/base-url-security.test.ts +189 -0
- package/src/providers/inference/__tests__/codex-token-refresh.test.ts +254 -0
- package/src/providers/inference/__tests__/connections-openai-compatible.test.ts +175 -0
- package/src/providers/inference/__tests__/connections-status-label.test.ts +15 -0
- package/src/providers/inference/adapter-factory.ts +24 -21
- package/src/providers/inference/auth.ts +15 -3
- package/src/providers/inference/backfill.ts +14 -1
- package/src/providers/inference/codex-token-refresh.ts +128 -0
- package/src/providers/inference/connections.ts +85 -5
- package/src/providers/inference/resolve-auth.ts +50 -5
- package/src/providers/model-catalog.ts +244 -242
- package/src/providers/model-intents.ts +3 -3
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +235 -0
- package/src/providers/openai/chat-completions-provider.ts +215 -25
- package/src/providers/openai/responses-provider.ts +9 -3
- package/src/providers/openrouter/client.ts +46 -4
- package/src/providers/platform-proxy/constants.ts +3 -4
- package/src/providers/provider-catalog-visibility.ts +3 -1
- package/src/providers/provider-send-message.ts +27 -12
- package/src/providers/registry.ts +30 -1
- package/src/providers/types.ts +25 -0
- package/src/runtime/__tests__/agent-wake.test.ts +214 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +128 -0
- package/src/runtime/agent-wake.ts +212 -57
- package/src/runtime/auth/route-policy.ts +20 -3
- package/src/runtime/background-job-runner.ts +26 -0
- package/src/runtime/channel-reply-delivery.ts +182 -47
- package/src/runtime/channel-retry-sweep.ts +141 -16
- package/src/runtime/http-server.ts +7 -16
- package/src/runtime/http-types.ts +7 -51
- package/src/runtime/pending-interactions.ts +51 -8
- package/src/runtime/routes/__tests__/consolidation-routes.test.ts +258 -0
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +162 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +121 -5
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +275 -44
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +12 -0
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +14 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +271 -0
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +280 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +266 -0
- package/src/runtime/routes/approval-routes.ts +4 -1
- package/src/runtime/routes/channel-availability-routes.ts +5 -0
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +246 -0
- package/src/runtime/routes/consolidation-routes.ts +100 -0
- package/src/runtime/routes/content-source-routes.ts +78 -0
- package/src/runtime/routes/conversation-cli-routes.ts +146 -1
- package/src/runtime/routes/conversation-query-routes.ts +130 -12
- package/src/runtime/routes/conversation-routes.ts +288 -76
- package/src/runtime/routes/document-comments-routes.ts +287 -0
- package/src/runtime/routes/documents-routes.ts +33 -0
- package/src/runtime/routes/home-feed-routes.ts +6 -3
- package/src/runtime/routes/host-app-control-routes.ts +1 -1
- package/src/runtime/routes/host-browser-routes.ts +8 -1
- package/src/runtime/routes/identity-routes.ts +21 -0
- package/src/runtime/routes/inbound-message-handler.ts +288 -58
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +365 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +283 -82
- package/src/runtime/routes/index.ts +14 -4
- package/src/runtime/routes/inference-provider-connection-routes.ts +192 -3
- package/src/runtime/routes/integrations/a2a.ts +294 -0
- package/src/runtime/routes/llm-call-sites-routes.ts +11 -1
- package/src/runtime/routes/log-export-routes.ts +39 -0
- package/src/runtime/routes/memory-v2-routes.ts +217 -0
- package/src/runtime/routes/notification-routes.ts +19 -2
- package/src/runtime/routes/question-routes.ts +4 -1
- package/src/runtime/routes/sanity-routes.ts +159 -0
- package/src/runtime/routes/slack-channel-routes.ts +187 -0
- package/src/runtime/routes/subagents-routes.ts +41 -0
- package/src/runtime/services/conversation-serializer.ts +30 -4
- package/src/schedule/integration-status.ts +3 -1
- package/src/security/__tests__/oauth2-device-code.test.ts +479 -0
- package/src/security/oauth2-device-code.ts +307 -0
- package/src/security/oauth2.ts +26 -9
- package/src/security/secure-keys.ts +5 -0
- package/src/skills/catalog-install.ts +6 -2
- package/src/subagent/manager.ts +2 -0
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +80 -0
- package/src/tools/browser/browser-execution.ts +93 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +28 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +1 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +10 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +15 -1
- package/src/tools/browser/cdp-client/factory.ts +87 -3
- package/src/tools/browser/cdp-client/local-cdp-client.ts +9 -0
- package/src/tools/browser/cdp-client/types.ts +36 -0
- package/src/tools/browser/pinned-tabs.ts +90 -0
- package/src/tools/document/document-comment-tool.test.ts +379 -0
- package/src/tools/document/document-comment-tool.ts +156 -0
- package/src/tools/document/document-tool.ts +128 -2
- package/src/tools/memory/register.ts +1 -9
- package/src/tools/network/__tests__/web-fetch-metadata.test.ts +229 -0
- package/src/tools/network/__tests__/web-search-metadata.test.ts +346 -0
- package/src/tools/network/domain-normalize.ts +17 -0
- package/src/tools/network/web-fetch.ts +213 -64
- package/src/tools/network/web-search.ts +191 -66
- package/src/tools/registry.ts +2 -2
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/tool-approval-handler.ts +19 -12
- package/src/tools/types.ts +41 -2
- package/src/tools/ui-surface/definitions.ts +3 -1
- package/src/types/onboarding-context.ts +4 -0
- package/src/util/__tests__/favicon.test.ts +84 -0
- package/src/util/favicon.ts +40 -0
- package/src/util/platform.ts +0 -5
- package/src/workspace/git-service.ts +75 -4
- package/src/workspace/migrations/087-memory-router-balanced-profile.ts +91 -0
- package/src/workspace/migrations/088-deprecate-background-conversation-override.ts +103 -0
- package/src/workspace/migrations/registry.ts +4 -0
- package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -441
- package/src/config/bundled-skills/document/SKILL.md +0 -54
- package/src/config/bundled-skills/document/TOOLS.json +0 -106
- package/src/daemon/seed-files.ts +0 -18
- package/src/memory/graph/__tests__/remember-description.test.ts +0 -55
- package/src/runtime/guardian-action-conversation-turn.ts +0 -99
- package/src/runtime/routes/interface-routes.ts +0 -43
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-create.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-delete.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-list.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-read.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-update.ts +0 -0
|
@@ -50,12 +50,17 @@ import * as computerUseWait from "./bundled-skills/computer-use/tools/computer-u
|
|
|
50
50
|
import * as contactMerge from "./bundled-skills/contacts/tools/contact-merge.js";
|
|
51
51
|
import * as contactSearch from "./bundled-skills/contacts/tools/contact-search.js";
|
|
52
52
|
import * as googleContacts from "./bundled-skills/contacts/tools/google-contacts.js";
|
|
53
|
-
// ── document
|
|
54
|
-
import * as
|
|
55
|
-
import * as
|
|
56
|
-
import * as
|
|
57
|
-
import * as
|
|
58
|
-
import * as
|
|
53
|
+
// ── document-editor ────────────────────────────────────────────────────────────
|
|
54
|
+
import * as commentList from "./bundled-skills/document-editor/tools/comment-list.js";
|
|
55
|
+
import * as commentReply from "./bundled-skills/document-editor/tools/comment-reply.js";
|
|
56
|
+
import * as commentResolve from "./bundled-skills/document-editor/tools/comment-resolve.js";
|
|
57
|
+
import * as documentCreate from "./bundled-skills/document-editor/tools/document-create.js";
|
|
58
|
+
import * as documentDelete from "./bundled-skills/document-editor/tools/document-delete.js";
|
|
59
|
+
import * as documentFind from "./bundled-skills/document-editor/tools/document-find.js";
|
|
60
|
+
import * as documentList from "./bundled-skills/document-editor/tools/document-list.js";
|
|
61
|
+
import * as documentRead from "./bundled-skills/document-editor/tools/document-read.js";
|
|
62
|
+
import * as documentReplaceText from "./bundled-skills/document-editor/tools/document-replace-text.js";
|
|
63
|
+
import * as documentUpdate from "./bundled-skills/document-editor/tools/document-update.js";
|
|
59
64
|
// ── followups ──────────────────────────────────────────────────────────────────
|
|
60
65
|
import * as followupCreate from "./bundled-skills/followups/tools/followup-create.js";
|
|
61
66
|
import * as followupList from "./bundled-skills/followups/tools/followup-list.js";
|
|
@@ -169,12 +174,17 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
|
|
|
169
174
|
["contacts:tools/contact-merge.ts", contactMerge],
|
|
170
175
|
["contacts:tools/google-contacts.ts", googleContacts],
|
|
171
176
|
|
|
172
|
-
// document
|
|
173
|
-
["document:tools/document-create.ts", documentCreate],
|
|
174
|
-
["document:tools/document-
|
|
175
|
-
["document:tools/document-
|
|
176
|
-
["document:tools/document-
|
|
177
|
-
["document:tools/document-
|
|
177
|
+
// document-editor
|
|
178
|
+
["document-editor:tools/document-create.ts", documentCreate],
|
|
179
|
+
["document-editor:tools/document-update.ts", documentUpdate],
|
|
180
|
+
["document-editor:tools/document-read.ts", documentRead],
|
|
181
|
+
["document-editor:tools/document-list.ts", documentList],
|
|
182
|
+
["document-editor:tools/document-delete.ts", documentDelete],
|
|
183
|
+
["document-editor:tools/document-find.ts", documentFind],
|
|
184
|
+
["document-editor:tools/document-replace-text.ts", documentReplaceText],
|
|
185
|
+
["document-editor:tools/comment-list.ts", commentList],
|
|
186
|
+
["document-editor:tools/comment-resolve.ts", commentResolve],
|
|
187
|
+
["document-editor:tools/comment-reply.ts", commentReply],
|
|
178
188
|
|
|
179
189
|
// followups
|
|
180
190
|
["followups:tools/followup-create.ts", followupCreate],
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { type LLMCallSite } from "./schemas/llm.js";
|
|
2
|
+
|
|
3
|
+
type CallSiteDefaultConfig = {
|
|
4
|
+
profile: string;
|
|
5
|
+
maxTokens?: number;
|
|
6
|
+
effort?: "none" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
7
|
+
temperature?: number | null;
|
|
8
|
+
thinking?: { enabled?: boolean; streamThinking?: boolean };
|
|
9
|
+
contextWindow?: { maxInputTokens?: number };
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const CALL_SITE_DEFAULTS: Record<LLMCallSite, CallSiteDefaultConfig> = {
|
|
13
|
+
mainAgent: { profile: "balanced" },
|
|
14
|
+
subagentSpawn: { profile: "balanced" },
|
|
15
|
+
compactionAgent: { profile: "balanced" },
|
|
16
|
+
analyzeConversation: { profile: "balanced" },
|
|
17
|
+
patternScan: { profile: "balanced" },
|
|
18
|
+
narrativeRefinement: { profile: "balanced" },
|
|
19
|
+
callAgent: { profile: "balanced" },
|
|
20
|
+
proactiveArtifactBuild: { profile: "balanced" },
|
|
21
|
+
memoryConsolidation: { profile: "balanced" },
|
|
22
|
+
identityIntro: { profile: "balanced" },
|
|
23
|
+
emptyStateGreeting: { profile: "balanced" },
|
|
24
|
+
|
|
25
|
+
memoryRouter: {
|
|
26
|
+
profile: "balanced",
|
|
27
|
+
contextWindow: { maxInputTokens: 1000000 },
|
|
28
|
+
},
|
|
29
|
+
recall: {
|
|
30
|
+
profile: "balanced",
|
|
31
|
+
maxTokens: 4096,
|
|
32
|
+
effort: "low",
|
|
33
|
+
thinking: { enabled: false, streamThinking: false },
|
|
34
|
+
temperature: 0,
|
|
35
|
+
},
|
|
36
|
+
conversationStarters: {
|
|
37
|
+
profile: "balanced",
|
|
38
|
+
effort: "low",
|
|
39
|
+
thinking: { enabled: false },
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
filingAgent: { profile: "cost-optimized" },
|
|
43
|
+
proactiveArtifactDecision: { profile: "cost-optimized" },
|
|
44
|
+
memoryExtraction: { profile: "cost-optimized" },
|
|
45
|
+
memoryRetrieval: { profile: "cost-optimized" },
|
|
46
|
+
memoryRetrospective: { profile: "cost-optimized" },
|
|
47
|
+
memoryV2Migration: { profile: "cost-optimized" },
|
|
48
|
+
memoryV2Sweep: { profile: "cost-optimized" },
|
|
49
|
+
memoryV2Consolidation: { profile: "balanced" },
|
|
50
|
+
conversationSummarization: { profile: "cost-optimized" },
|
|
51
|
+
conversationTitle: { profile: "cost-optimized" },
|
|
52
|
+
approvalCopy: { profile: "cost-optimized" },
|
|
53
|
+
approvalConversation: { profile: "cost-optimized" },
|
|
54
|
+
trustRuleSuggestion: { profile: "cost-optimized" },
|
|
55
|
+
styleAnalyzer: { profile: "cost-optimized" },
|
|
56
|
+
meetConsentMonitor: { profile: "cost-optimized" },
|
|
57
|
+
meetChatOpportunity: { profile: "cost-optimized" },
|
|
58
|
+
inference: { profile: "cost-optimized" },
|
|
59
|
+
|
|
60
|
+
heartbeatAgent: {
|
|
61
|
+
profile: "cost-optimized",
|
|
62
|
+
},
|
|
63
|
+
commitMessage: {
|
|
64
|
+
profile: "cost-optimized",
|
|
65
|
+
maxTokens: 120,
|
|
66
|
+
temperature: 0.2,
|
|
67
|
+
effort: "low",
|
|
68
|
+
thinking: { enabled: false },
|
|
69
|
+
},
|
|
70
|
+
replySuggestion: {
|
|
71
|
+
profile: "cost-optimized",
|
|
72
|
+
effort: "low",
|
|
73
|
+
thinking: { enabled: false },
|
|
74
|
+
},
|
|
75
|
+
guardianQuestionCopy: {
|
|
76
|
+
profile: "cost-optimized",
|
|
77
|
+
effort: "low",
|
|
78
|
+
thinking: { enabled: false },
|
|
79
|
+
},
|
|
80
|
+
notificationDecision: {
|
|
81
|
+
profile: "cost-optimized",
|
|
82
|
+
effort: "low",
|
|
83
|
+
thinking: { enabled: false },
|
|
84
|
+
},
|
|
85
|
+
preferenceExtraction: {
|
|
86
|
+
profile: "cost-optimized",
|
|
87
|
+
effort: "low",
|
|
88
|
+
thinking: { enabled: false },
|
|
89
|
+
},
|
|
90
|
+
interactionClassifier: {
|
|
91
|
+
profile: "cost-optimized",
|
|
92
|
+
effort: "low",
|
|
93
|
+
thinking: { enabled: false },
|
|
94
|
+
},
|
|
95
|
+
inviteInstructionGenerator: {
|
|
96
|
+
profile: "cost-optimized",
|
|
97
|
+
effort: "low",
|
|
98
|
+
thinking: { enabled: false },
|
|
99
|
+
},
|
|
100
|
+
skillCategoryInference: {
|
|
101
|
+
profile: "cost-optimized",
|
|
102
|
+
effort: "low",
|
|
103
|
+
thinking: { enabled: false },
|
|
104
|
+
},
|
|
105
|
+
homeGreeting: {
|
|
106
|
+
profile: "cost-optimized",
|
|
107
|
+
maxTokens: 60,
|
|
108
|
+
effort: "low",
|
|
109
|
+
thinking: { enabled: false },
|
|
110
|
+
temperature: 0.7,
|
|
111
|
+
},
|
|
112
|
+
homeSuggestedPrompts: {
|
|
113
|
+
profile: "cost-optimized",
|
|
114
|
+
maxTokens: 512,
|
|
115
|
+
effort: "low",
|
|
116
|
+
thinking: { enabled: false },
|
|
117
|
+
},
|
|
118
|
+
queryComplexityRouter: {
|
|
119
|
+
profile: "cost-optimized",
|
|
120
|
+
maxTokens: 16,
|
|
121
|
+
effort: "low",
|
|
122
|
+
thinking: { enabled: false },
|
|
123
|
+
},
|
|
124
|
+
};
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"defaultEnabled": false
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
|
-
"id": "memory-retrospective",
|
|
13
|
+
"id": "memory-retrospective-fork",
|
|
14
14
|
"scope": "assistant",
|
|
15
|
-
"key": "memory-retrospective",
|
|
16
|
-
"label": "
|
|
17
|
-
"description": "
|
|
15
|
+
"key": "memory-retrospective-fork",
|
|
16
|
+
"label": "Fork-based memory retrospective",
|
|
17
|
+
"description": "Fork the source conversation through its latest message for memory retrospectives, instead of rendering the slice into a transcript and waking an empty background conversation. Lets the retrospective hit the provider prompt cache and read compaction summary + tail messages natively.",
|
|
18
18
|
"defaultEnabled": false
|
|
19
19
|
},
|
|
20
20
|
{
|
|
@@ -33,6 +33,14 @@
|
|
|
33
33
|
"description": "When enabled, the Local hosting option uses Docker under the hood for sandboxed execution, hiding the separate Docker card",
|
|
34
34
|
"defaultEnabled": false
|
|
35
35
|
},
|
|
36
|
+
{
|
|
37
|
+
"id": "a2a-channel",
|
|
38
|
+
"scope": "assistant",
|
|
39
|
+
"key": "a2a-channel",
|
|
40
|
+
"label": "A2A Channel",
|
|
41
|
+
"description": "Enable the A2A (Agent-to-Agent) channel for inter-assistant communication via the open A2A protocol",
|
|
42
|
+
"defaultEnabled": false
|
|
43
|
+
},
|
|
36
44
|
{
|
|
37
45
|
"id": "email-channel",
|
|
38
46
|
"scope": "assistant",
|
|
@@ -43,7 +51,7 @@
|
|
|
43
51
|
},
|
|
44
52
|
{
|
|
45
53
|
"id": "settings-developer-nav",
|
|
46
|
-
"scope": "
|
|
54
|
+
"scope": "assistant",
|
|
47
55
|
"key": "settings-developer-nav",
|
|
48
56
|
"label": "Settings Developer Nav",
|
|
49
57
|
"description": "Control Developer nav visibility in macOS settings",
|
|
@@ -89,6 +97,14 @@
|
|
|
89
97
|
"description": "Surface credential grant and audit inspection endpoints for reviewing active grants and access logs",
|
|
90
98
|
"defaultEnabled": false
|
|
91
99
|
},
|
|
100
|
+
{
|
|
101
|
+
"id": "chatgpt-subscription-auth",
|
|
102
|
+
"scope": "assistant",
|
|
103
|
+
"key": "chatgpt-subscription-auth",
|
|
104
|
+
"label": "ChatGPT Subscription Auth",
|
|
105
|
+
"description": "Enable ChatGPT subscription OAuth as a provider auth type for OpenAI models, using the Codex device-code flow.",
|
|
106
|
+
"defaultEnabled": false
|
|
107
|
+
},
|
|
92
108
|
{
|
|
93
109
|
"id": "deploy-to-vercel",
|
|
94
110
|
"scope": "assistant",
|
|
@@ -145,6 +161,14 @@
|
|
|
145
161
|
"description": "Show a speaker button on assistant messages to generate and play the message as audio via Fish Audio TTS",
|
|
146
162
|
"defaultEnabled": false
|
|
147
163
|
},
|
|
164
|
+
{
|
|
165
|
+
"id": "openai-compatible-endpoints",
|
|
166
|
+
"scope": "assistant",
|
|
167
|
+
"key": "openai-compatible-endpoints",
|
|
168
|
+
"label": "OpenAI-Compatible Endpoints",
|
|
169
|
+
"description": "Enable user-configured OpenAI-compatible inference endpoints with custom base URLs and model identifiers",
|
|
170
|
+
"defaultEnabled": false
|
|
171
|
+
},
|
|
148
172
|
{
|
|
149
173
|
"id": "backward-releases",
|
|
150
174
|
"scope": "assistant",
|
|
@@ -267,7 +291,7 @@
|
|
|
267
291
|
},
|
|
268
292
|
{
|
|
269
293
|
"id": "account-deletion",
|
|
270
|
-
"scope": "
|
|
294
|
+
"scope": "assistant",
|
|
271
295
|
"key": "account-deletion",
|
|
272
296
|
"label": "Account Deletion",
|
|
273
297
|
"description": "Surfaces the user-initiated account deletion flow in client settings.",
|
|
@@ -281,14 +305,6 @@
|
|
|
281
305
|
"description": "Enable the app-control skill (per-app screenshot + raw input bypassing AX tree)",
|
|
282
306
|
"defaultEnabled": false
|
|
283
307
|
},
|
|
284
|
-
{
|
|
285
|
-
"id": "species-migration",
|
|
286
|
-
"scope": "assistant",
|
|
287
|
-
"key": "species-migration",
|
|
288
|
-
"label": "Species Migration",
|
|
289
|
-
"description": "Enable the Species Migration skill for migrating from OpenClaw, Hermes, Manus, and other assistant species into Vellum.",
|
|
290
|
-
"defaultEnabled": false
|
|
291
|
-
},
|
|
292
308
|
{
|
|
293
309
|
"id": "analyze-conversation",
|
|
294
310
|
"scope": "assistant",
|
|
@@ -299,7 +315,7 @@
|
|
|
299
315
|
},
|
|
300
316
|
{
|
|
301
317
|
"id": "pro-plan-adjust",
|
|
302
|
-
"scope": "
|
|
318
|
+
"scope": "client",
|
|
303
319
|
"key": "pro-plan-adjust",
|
|
304
320
|
"label": "Pro Plan Adjust",
|
|
305
321
|
"description": "Show the rich Plan card (current plan, features, Manage/Upgrade CTA) at the top of the macOS Settings \u2192 Billing tab.",
|
|
@@ -322,19 +338,91 @@
|
|
|
322
338
|
"defaultEnabled": false
|
|
323
339
|
},
|
|
324
340
|
{
|
|
325
|
-
"id": "
|
|
341
|
+
"id": "velvet-theme",
|
|
342
|
+
"scope": "client",
|
|
343
|
+
"key": "velvet-theme",
|
|
344
|
+
"label": "Velvet Theme",
|
|
345
|
+
"description": "Show the Velvet theme option in the macOS appearance settings. Velvet is a dark-mode variant with red/pink accent colors.",
|
|
346
|
+
"defaultEnabled": false
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"id": "query-complexity-routing",
|
|
350
|
+
"scope": "assistant",
|
|
351
|
+
"key": "query-complexity-routing",
|
|
352
|
+
"label": "Query Complexity Routing",
|
|
353
|
+
"description": "Automatically route user messages to the most appropriate inference profile based on query complexity. Simple queries use the speed profile, complex queries escalate to the quality profile. The user is notified of each switch and can opt out by pinning a profile on the conversation.",
|
|
354
|
+
"defaultEnabled": false
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"id": "queue-steering",
|
|
326
358
|
"scope": "assistant",
|
|
327
|
-
"key": "
|
|
328
|
-
"label": "
|
|
329
|
-
"description": "Enable the
|
|
359
|
+
"key": "queue-steering",
|
|
360
|
+
"label": "Queue Steering",
|
|
361
|
+
"description": "Enable the 'Push to agent' button on queued messages, allowing users to steer the assistant to a specific queued message by aborting the current generation and promoting the message to the head of the queue.",
|
|
362
|
+
"defaultEnabled": false
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"id": "chat-pull-to-refresh-enabled",
|
|
366
|
+
"scope": "client",
|
|
367
|
+
"key": "chat-pull-to-refresh-enabled",
|
|
368
|
+
"label": "Chat Pull to Refresh",
|
|
369
|
+
"description": "Enable pull-to-refresh gesture in the chat view.",
|
|
330
370
|
"defaultEnabled": false
|
|
331
371
|
},
|
|
332
372
|
{
|
|
333
|
-
"id": "
|
|
373
|
+
"id": "doctor",
|
|
374
|
+
"scope": "client",
|
|
375
|
+
"key": "doctor",
|
|
376
|
+
"label": "Doctor",
|
|
377
|
+
"description": "Enable the Doctor diagnostic tab in Debug settings.",
|
|
378
|
+
"defaultEnabled": false
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"id": "home-page",
|
|
382
|
+
"scope": "client",
|
|
383
|
+
"key": "home-page",
|
|
384
|
+
"label": "Home Page",
|
|
385
|
+
"description": "Enable the Home page as the default landing view.",
|
|
386
|
+
"defaultEnabled": false
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"id": "platform-notifications",
|
|
390
|
+
"scope": "client",
|
|
391
|
+
"key": "platform-notifications",
|
|
392
|
+
"label": "Platform Notifications",
|
|
393
|
+
"description": "Enable the Notifications tab in settings.",
|
|
394
|
+
"defaultEnabled": false
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"id": "rollback-enabled",
|
|
398
|
+
"scope": "assistant",
|
|
399
|
+
"key": "rollback-enabled",
|
|
400
|
+
"label": "Rollback Enabled",
|
|
401
|
+
"description": "Show older versions in the version picker, allowing rollback to previous releases.",
|
|
402
|
+
"defaultEnabled": false
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"id": "self-hosted-assistant",
|
|
406
|
+
"scope": "client",
|
|
407
|
+
"key": "self-hosted-assistant",
|
|
408
|
+
"label": "Self-Hosted Assistant",
|
|
409
|
+
"description": "Enable self-hosted assistant configuration.",
|
|
410
|
+
"defaultEnabled": false
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"id": "settings-sleep-policy",
|
|
334
414
|
"scope": "assistant",
|
|
335
|
-
"key": "
|
|
336
|
-
"label": "
|
|
337
|
-
"description": "Enable
|
|
415
|
+
"key": "settings-sleep-policy",
|
|
416
|
+
"label": "Settings Sleep Policy",
|
|
417
|
+
"description": "Enable sleep policy settings.",
|
|
418
|
+
"defaultEnabled": false
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"id": "velvet",
|
|
422
|
+
"scope": "client",
|
|
423
|
+
"key": "velvet",
|
|
424
|
+
"label": "Velvet",
|
|
425
|
+
"description": "Enable the Velvet design theme.",
|
|
338
426
|
"defaultEnabled": false
|
|
339
427
|
}
|
|
340
428
|
]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
3
|
import { getCatalogProviderForModel } from "../providers/model-catalog.js";
|
|
4
|
+
import { CALL_SITE_DEFAULTS } from "./call-site-defaults.js";
|
|
4
5
|
import {
|
|
5
6
|
type LLMCallSite,
|
|
6
7
|
LLMConfigBase,
|
|
@@ -56,7 +57,9 @@ export function resolveCallSiteConfig(
|
|
|
56
57
|
opts.overrideProfile != null
|
|
57
58
|
? llm.profiles?.[opts.overrideProfile]
|
|
58
59
|
: undefined;
|
|
59
|
-
const site =
|
|
60
|
+
const site =
|
|
61
|
+
llm.callSites?.[callSite] ??
|
|
62
|
+
effectiveDefault(callSite, llm, opts.overrideProfile != null);
|
|
60
63
|
|
|
61
64
|
if (callSite === "mainAgent") {
|
|
62
65
|
appendCallSiteLayers(layers, callSite, llm, site);
|
|
@@ -77,6 +80,68 @@ export function resolveCallSiteConfig(
|
|
|
77
80
|
|
|
78
81
|
type Mergeable = Record<string, unknown>;
|
|
79
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Returns the effective default profile key the resolver would actually
|
|
85
|
+
* select for a call site when no per-turn `overrideProfile` is supplied.
|
|
86
|
+
*
|
|
87
|
+
* Mirrors the layering in `resolveCallSiteConfig`:
|
|
88
|
+
* - For `mainAgent`, the workspace's `activeProfile` sits ABOVE the
|
|
89
|
+
* call-site catalog default (and above any static `llm.callSites.mainAgent`
|
|
90
|
+
* override), so a non-disabled `activeProfile` wins.
|
|
91
|
+
* - For other call sites, the catalog default sits ABOVE `activeProfile`,
|
|
92
|
+
* so the catalog default (with `custom-*` fallback) wins.
|
|
93
|
+
*/
|
|
94
|
+
export function resolveDefaultProfileKey(
|
|
95
|
+
callSite: LLMCallSite,
|
|
96
|
+
llm: z.infer<typeof LLMSchema>,
|
|
97
|
+
): string | undefined {
|
|
98
|
+
if (callSite === "mainAgent" && llm.activeProfile != null) {
|
|
99
|
+
const active = llm.profiles?.[llm.activeProfile];
|
|
100
|
+
if (active != null && active.status !== "disabled") {
|
|
101
|
+
return llm.activeProfile;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const dflt = CALL_SITE_DEFAULTS[callSite];
|
|
106
|
+
if (dflt?.profile == null) return undefined;
|
|
107
|
+
const target = llm.profiles?.[dflt.profile];
|
|
108
|
+
if (target != null && target.status !== "disabled") return dflt.profile;
|
|
109
|
+
const customKey = `custom-${dflt.profile}`;
|
|
110
|
+
const customTarget = llm.profiles?.[customKey];
|
|
111
|
+
if (customTarget != null && customTarget.status !== "disabled")
|
|
112
|
+
return customKey;
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function effectiveDefault(
|
|
117
|
+
callSite: LLMCallSite,
|
|
118
|
+
llm: z.infer<typeof LLMSchema>,
|
|
119
|
+
hasOverrideProfile = false,
|
|
120
|
+
): z.infer<typeof LLMSchema>["callSites"][LLMCallSite] | undefined {
|
|
121
|
+
const dflt = CALL_SITE_DEFAULTS[callSite];
|
|
122
|
+
if (dflt == null) return undefined;
|
|
123
|
+
const targetProfile =
|
|
124
|
+
dflt.profile != null ? llm.profiles?.[dflt.profile] : undefined;
|
|
125
|
+
const profileUnavailable =
|
|
126
|
+
dflt.profile != null &&
|
|
127
|
+
(targetProfile == null || targetProfile.status === "disabled");
|
|
128
|
+
|
|
129
|
+
if (profileUnavailable && !hasOverrideProfile) {
|
|
130
|
+
const customKey = `custom-${dflt.profile}`;
|
|
131
|
+
const customProfile = llm.profiles?.[customKey];
|
|
132
|
+
if (customProfile != null && customProfile.status !== "disabled") {
|
|
133
|
+
return { ...dflt, profile: customKey };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const stripProfile = hasOverrideProfile || profileUnavailable;
|
|
138
|
+
if (stripProfile) {
|
|
139
|
+
const { profile: _profile, ...rest } = dflt;
|
|
140
|
+
return Object.keys(rest).length > 0 ? rest : undefined;
|
|
141
|
+
}
|
|
142
|
+
return dflt;
|
|
143
|
+
}
|
|
144
|
+
|
|
80
145
|
function withImpliedProviderForKnownModel(source: Mergeable): Mergeable {
|
|
81
146
|
if (source.provider !== undefined) return source;
|
|
82
147
|
const model = source.model;
|
package/src/config/schema.ts
CHANGED
|
@@ -20,6 +20,7 @@ import { AnalysisConfigSchema } from "./schemas/analysis.js";
|
|
|
20
20
|
import { BackupConfigSchema } from "./schemas/backup.js";
|
|
21
21
|
import { CallsConfigSchema } from "./schemas/calls.js";
|
|
22
22
|
import {
|
|
23
|
+
A2AConfigSchema,
|
|
23
24
|
SlackConfigSchema,
|
|
24
25
|
TelegramConfigSchema,
|
|
25
26
|
TwilioConfigSchema,
|
|
@@ -111,6 +112,7 @@ export const AssistantConfigSchema = z
|
|
|
111
112
|
whatsapp: WhatsAppConfigSchema.default(WhatsAppConfigSchema.parse({})),
|
|
112
113
|
telegram: TelegramConfigSchema.default(TelegramConfigSchema.parse({})),
|
|
113
114
|
slack: SlackConfigSchema.default(SlackConfigSchema.parse({})),
|
|
115
|
+
a2a: A2AConfigSchema.default(A2AConfigSchema.parse({})),
|
|
114
116
|
ingress: IngressConfigSchema,
|
|
115
117
|
platform: PlatformConfigSchema.default(PlatformConfigSchema.parse({})),
|
|
116
118
|
daemon: DaemonConfigSchema.default(DaemonConfigSchema.parse({})),
|
|
@@ -23,6 +23,7 @@ describe("MemoryV2ConfigSchema", () => {
|
|
|
23
23
|
bm25_k1: 1.2,
|
|
24
24
|
bm25_b: 0.4,
|
|
25
25
|
consolidation_interval_hours: 4,
|
|
26
|
+
consolidation_max_buffer_lines: 100,
|
|
26
27
|
max_page_chars: 5000,
|
|
27
28
|
consolidation_prompt_path: null,
|
|
28
29
|
rerank: {
|
|
@@ -33,9 +34,12 @@ describe("MemoryV2ConfigSchema", () => {
|
|
|
33
34
|
dtype: "q8",
|
|
34
35
|
},
|
|
35
36
|
router: {
|
|
36
|
-
enabled:
|
|
37
|
+
enabled: true,
|
|
37
38
|
max_page_ids: 25,
|
|
38
39
|
router_prompt_path: null,
|
|
40
|
+
batch_size: null,
|
|
41
|
+
tier1_size: null,
|
|
42
|
+
tier2_size: null,
|
|
39
43
|
},
|
|
40
44
|
});
|
|
41
45
|
});
|
|
@@ -161,9 +165,9 @@ describe("MemoryV2ConfigSchema", () => {
|
|
|
161
165
|
expect(() => MemoryV2ConfigSchema.parse({ epsilon: 1.5 })).toThrow();
|
|
162
166
|
});
|
|
163
167
|
|
|
164
|
-
test("router defaults to
|
|
168
|
+
test("router defaults to enabled with max_page_ids=25", () => {
|
|
165
169
|
const parsed = MemoryV2ConfigSchema.parse({});
|
|
166
|
-
expect(parsed.router.enabled).toBe(
|
|
170
|
+
expect(parsed.router.enabled).toBe(true);
|
|
167
171
|
expect(parsed.router.max_page_ids).toBe(25);
|
|
168
172
|
});
|
|
169
173
|
|
|
@@ -300,6 +300,27 @@ const CATALOG_RECORD: CatalogRecord = {
|
|
|
300
300
|
"Builds the personalized artifact in a background conversation with tool access.",
|
|
301
301
|
domain: "agentLoop",
|
|
302
302
|
},
|
|
303
|
+
homeGreeting: {
|
|
304
|
+
id: "homeGreeting",
|
|
305
|
+
displayName: "Home Greeting",
|
|
306
|
+
description:
|
|
307
|
+
"Generates the personalized greeting shown on the Home page in the assistant's tone/persona.",
|
|
308
|
+
domain: "ui",
|
|
309
|
+
},
|
|
310
|
+
homeSuggestedPrompts: {
|
|
311
|
+
id: "homeSuggestedPrompts",
|
|
312
|
+
displayName: "Home Suggested Prompts",
|
|
313
|
+
description:
|
|
314
|
+
"Generates contextual conversation-starter suggestions for the Home page.",
|
|
315
|
+
domain: "ui",
|
|
316
|
+
},
|
|
317
|
+
queryComplexityRouter: {
|
|
318
|
+
id: "queryComplexityRouter",
|
|
319
|
+
displayName: "Query Complexity Router",
|
|
320
|
+
description:
|
|
321
|
+
"Classifies user message complexity to route to the appropriate inference profile.",
|
|
322
|
+
domain: "agentLoop",
|
|
323
|
+
},
|
|
303
324
|
};
|
|
304
325
|
|
|
305
326
|
// Source of truth for call-site display metadata. API responses and usage
|
|
@@ -99,6 +99,15 @@ export const TelegramConfigSchema = z
|
|
|
99
99
|
})
|
|
100
100
|
.describe("Telegram bot channel configuration");
|
|
101
101
|
|
|
102
|
+
export const A2AConfigSchema = z
|
|
103
|
+
.object({
|
|
104
|
+
enabled: z
|
|
105
|
+
.boolean({ error: "a2a.enabled must be a boolean" })
|
|
106
|
+
.default(false)
|
|
107
|
+
.describe("Whether the A2A channel is enabled"),
|
|
108
|
+
})
|
|
109
|
+
.describe("Agent-to-Agent protocol channel configuration");
|
|
110
|
+
|
|
102
111
|
export const SlackConfigSchema = z
|
|
103
112
|
.object({
|
|
104
113
|
deliverAuthBypass: z
|
|
@@ -10,6 +10,16 @@ export const ConversationsConfigSchema = z
|
|
|
10
10
|
.describe(
|
|
11
11
|
"When true, skip the second-pass title regeneration that fires after the third user turn. The initial auto-generated title and manual renames are unaffected.",
|
|
12
12
|
),
|
|
13
|
+
backgroundInjection: z
|
|
14
|
+
.string({
|
|
15
|
+
error: "conversations.backgroundInjection must be a string",
|
|
16
|
+
})
|
|
17
|
+
.default(
|
|
18
|
+
"This is a background turn — your guardian isn't watching. If anything noteworthy comes up, send them a notification so they see it when they're back by invoking the `notifications` skill (`assistant notifications send --message \"...\"`)",
|
|
19
|
+
)
|
|
20
|
+
.describe(
|
|
21
|
+
"Inner text injected into the tail user message of non-interactive turns in background/scheduled conversations. The injector wraps this in <background_turn>...</background_turn> tags. Empty string disables the injection.",
|
|
22
|
+
),
|
|
13
23
|
})
|
|
14
24
|
.describe("Conversation behavior configuration");
|
|
15
25
|
|
|
@@ -56,6 +56,20 @@ export const HeartbeatConfigSchema = z
|
|
|
56
56
|
.describe(
|
|
57
57
|
"Maximum heartbeats that can run consecutively without a guardian message. Counter resets when the guardian sends a message. Set to null for unlimited.",
|
|
58
58
|
),
|
|
59
|
+
disposition: z
|
|
60
|
+
.string({ error: "heartbeat.disposition must be a string" })
|
|
61
|
+
.default(
|
|
62
|
+
`This is your time to do something useful, interesting, or creative while your guardian is away.
|
|
63
|
+
|
|
64
|
+
Before checking on anything, ask yourself: is there something I want to work on, think about, or make progress on right now? A project, an idea, something I noticed, something I've been meaning to get to. If so, do it.
|
|
65
|
+
|
|
66
|
+
If you do something worth sharing — built something, noticed something, had an idea — send your guardian a notification so they see it when they're back.
|
|
67
|
+
|
|
68
|
+
If nothing needs attention and nothing stirs, that's fine. But make sure you actually considered it first rather than defaulting to "nothing to do."`,
|
|
69
|
+
)
|
|
70
|
+
.describe(
|
|
71
|
+
"Inner text injected into the heartbeat prompt. The service wraps this in <heartbeat-disposition>...</heartbeat-disposition> tags. Empty string disables the block.",
|
|
72
|
+
),
|
|
59
73
|
})
|
|
60
74
|
.describe("Periodic heartbeat configuration for health monitoring")
|
|
61
75
|
.superRefine((config, ctx) => {
|
|
@@ -20,9 +20,7 @@ const LLMProvider = z.enum([
|
|
|
20
20
|
"ollama",
|
|
21
21
|
"fireworks",
|
|
22
22
|
"openrouter",
|
|
23
|
-
"
|
|
24
|
-
"deepseek",
|
|
25
|
-
"minimax",
|
|
23
|
+
"openai-compatible",
|
|
26
24
|
]);
|
|
27
25
|
type LLMProvider = z.infer<typeof LLMProvider>;
|
|
28
26
|
|
|
@@ -78,6 +76,9 @@ export const LLMCallSiteEnum = z.enum([
|
|
|
78
76
|
"trustRuleSuggestion",
|
|
79
77
|
"proactiveArtifactDecision",
|
|
80
78
|
"proactiveArtifactBuild",
|
|
79
|
+
"homeGreeting",
|
|
80
|
+
"homeSuggestedPrompts",
|
|
81
|
+
"queryComplexityRouter",
|
|
81
82
|
]);
|
|
82
83
|
export type LLMCallSite = z.infer<typeof LLMCallSiteEnum>;
|
|
83
84
|
|
|
@@ -40,7 +40,7 @@ export const MemoryRetrospectiveConfigSchema = z
|
|
|
40
40
|
),
|
|
41
41
|
})
|
|
42
42
|
.describe(
|
|
43
|
-
"Controls the memory-retrospective background pass
|
|
43
|
+
"Controls the memory-retrospective background pass. Model selection lives under llm.callSites.memoryRetrospective.",
|
|
44
44
|
);
|
|
45
45
|
|
|
46
46
|
export type MemoryRetrospectiveConfig = z.infer<
|