@vellumai/assistant 0.8.6 → 0.8.7
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/AGENTS.md +4 -4
- package/Dockerfile +1 -0
- package/bun.lock +11 -2
- package/docker-entrypoint.sh +8 -6
- package/docs/plugins.md +63 -28
- package/examples/plugins/echo/register.ts +4 -7
- package/knip.json +1 -0
- package/node_modules/@vellumai/environments/bun.lock +24 -0
- package/node_modules/@vellumai/environments/package.json +18 -0
- package/node_modules/@vellumai/environments/src/__tests__/package-boundary.test.ts +95 -0
- package/node_modules/@vellumai/environments/src/index.ts +11 -0
- package/node_modules/@vellumai/environments/src/seeds.ts +73 -0
- package/node_modules/@vellumai/environments/src/types.ts +70 -0
- package/node_modules/@vellumai/environments/tsconfig.json +20 -0
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +11 -0
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +3 -4
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +6 -2
- package/openapi.yaml +3735 -353
- package/package.json +7 -3
- package/scripts/generate-openapi.ts +20 -13
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +42 -80
- package/src/__tests__/agent-loop-exit-reason.test.ts +240 -39
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +141 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +19 -32
- package/src/__tests__/agent-loop-provider-error-recording.test.ts +6 -4
- package/src/__tests__/agent-loop-thinking.test.ts +17 -12
- package/src/__tests__/agent-loop.test.ts +207 -341
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +4 -2
- package/src/__tests__/agent-wake-override-profile.test.ts +22 -40
- package/src/__tests__/anthropic-provider.test.ts +201 -55
- package/src/__tests__/app-builder-skill-instructions.test.ts +22 -0
- package/src/__tests__/app-control-flow.test.ts +5 -0
- package/src/__tests__/approval-cascade.test.ts +4 -11
- package/src/__tests__/approval-routes-http.test.ts +4 -2
- package/src/__tests__/assistant-event.test.ts +15 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +2 -2
- package/src/__tests__/avatar-e2e.test.ts +7 -37
- package/src/__tests__/avatar-generator.test.ts +12 -42
- package/src/__tests__/avatar-identity-sync.test.ts +28 -3
- package/src/__tests__/background-shell-bash.test.ts +3 -7
- package/src/__tests__/btw-routes.test.ts +7 -12
- package/src/__tests__/call-pointer-messages.test.ts +5 -3
- package/src/__tests__/call-site-routing-provider.test.ts +22 -40
- package/src/__tests__/catalog-files.test.ts +1 -0
- package/src/__tests__/channel-approval-routes.test.ts +48 -20
- package/src/__tests__/channel-approvals.test.ts +3 -1
- package/src/__tests__/channel-invite-transport.test.ts +1 -5
- package/src/__tests__/channel-readiness-routes.test.ts +0 -4
- package/src/__tests__/channel-readiness-slack-remote.test.ts +2 -7
- package/src/__tests__/channel-retry-sweep.test.ts +71 -79
- package/src/__tests__/circuit-breaker-pipeline.test.ts +3 -3
- package/src/__tests__/clawhub-files.test.ts +1 -0
- package/src/__tests__/compaction-events.test.ts +5 -17
- package/src/__tests__/compaction-pipeline.test.ts +1 -1
- package/src/__tests__/compaction-timeout-recovery.test.ts +37 -48
- package/src/__tests__/compaction-trail-store.test.ts +1 -79
- package/src/__tests__/compactor-image-manifest-trust.test.ts +112 -0
- package/src/__tests__/computer-use-tools.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +28 -0
- package/src/__tests__/context-search-agent-runner.test.ts +6 -3
- package/src/__tests__/context-token-estimator.test.ts +34 -0
- package/src/__tests__/context-window-manager-compact-retry.test.ts +291 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +14 -7
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +3 -2
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +12 -27
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +430 -90
- package/src/__tests__/conversation-agent-loop.test.ts +581 -62
- package/src/__tests__/conversation-analysis-routes.test.ts +1 -3
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-clear-safety.test.ts +20 -10
- package/src/__tests__/conversation-confirmation-signals.test.ts +15 -45
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-disk-view.test.ts +10 -17
- package/src/__tests__/conversation-fork-crud.test.ts +86 -172
- package/src/__tests__/conversation-fork-route.test.ts +16 -14
- package/src/__tests__/conversation-init.benchmark.test.ts +6 -6
- package/src/__tests__/conversation-lifecycle.test.ts +3 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +3 -2
- package/src/__tests__/conversation-load-history-stripped.test.ts +1 -1
- package/src/__tests__/conversation-message-sync-tags.test.ts +3 -4
- package/src/__tests__/conversation-pairing.test.ts +34 -4
- package/src/__tests__/conversation-pre-run-repair.test.ts +1 -1
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +4 -0
- package/src/__tests__/conversation-process-callsite.test.ts +27 -30
- package/src/__tests__/conversation-provider-retry-repair.test.ts +53 -44
- package/src/__tests__/conversation-queue.test.ts +270 -164
- package/src/__tests__/conversation-routes-disk-view.test.ts +3 -2
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +2 -2
- package/src/__tests__/conversation-routes-slash-commands.test.ts +2 -2
- package/src/__tests__/conversation-runtime-assembly.test.ts +20 -22
- package/src/__tests__/conversation-runtime-workspace.test.ts +19 -1
- package/src/__tests__/conversation-slash-queue.test.ts +37 -31
- package/src/__tests__/conversation-slash-unknown.test.ts +13 -15
- package/src/__tests__/conversation-speed-override.test.ts +8 -22
- package/src/__tests__/conversation-stream-state.test.ts +484 -0
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +6 -15
- package/src/__tests__/conversation-surfaces-app-control.test.ts +32 -4
- package/src/__tests__/conversation-surfaces-state-update.test.ts +5 -2
- package/src/__tests__/conversation-surfaces-table-action.test.ts +6 -15
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +23 -11
- package/src/__tests__/conversation-unread-route.test.ts +14 -2
- package/src/__tests__/conversation-usage.test.ts +0 -2
- package/src/__tests__/conversation-wipe.test.ts +1 -1
- package/src/__tests__/conversation-workspace-cache-state.test.ts +3 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +48 -22
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +27 -7
- package/src/__tests__/credential-execution-tools.test.ts +1 -2
- package/src/__tests__/credential-security-invariants.test.ts +0 -1
- package/src/__tests__/cross-provider-web-search.test.ts +6 -2
- package/src/__tests__/cu-unified-flow.test.ts +26 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +11 -0
- package/src/__tests__/disk-pressure-guard.test.ts +66 -0
- package/src/__tests__/disk-pressure-routes.test.ts +9 -2
- package/src/__tests__/dm-persistence.test.ts +7 -2
- package/src/__tests__/dynamic-page-surface.test.ts +68 -0
- package/src/__tests__/edit-propagation.test.ts +1 -2
- package/src/__tests__/empty-response-pipeline.test.ts +127 -5
- package/src/__tests__/filing-service.test.ts +2 -2
- package/src/__tests__/first-greeting.test.ts +55 -14
- package/src/__tests__/gemini-inline-media.test.ts +78 -0
- package/src/__tests__/gemini-provider.test.ts +351 -28
- package/src/__tests__/guardian-routing-state.test.ts +60 -71
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +9 -7
- package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
- package/src/__tests__/heartbeat-service.test.ts +2 -1
- package/src/__tests__/history-repair-hook.test.ts +161 -0
- package/src/__tests__/history-repair-observability.test.ts +1 -1
- package/src/__tests__/history-repair.test.ts +2 -1
- package/src/__tests__/host-app-control-proxy.test.ts +2 -0
- package/src/__tests__/host-cu-proxy.test.ts +2 -0
- package/src/__tests__/host-file-edit-tool.test.ts +4 -2
- package/src/__tests__/host-file-proxy.test.ts +31 -0
- package/src/__tests__/host-file-read-tool.test.ts +4 -2
- package/src/__tests__/host-file-write-tool.test.ts +9 -3
- package/src/__tests__/host-proxy-preactivation.test.ts +53 -14
- package/src/__tests__/host-shell-tool.test.ts +9 -4
- package/src/__tests__/http-user-message-parity.test.ts +2 -2
- package/src/__tests__/identity-intro-cache.test.ts +35 -14
- package/src/__tests__/inbound-slack-persistence.test.ts +7 -2
- package/src/__tests__/injector-background-turn.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-disk-pressure.test.ts +1 -1
- package/src/__tests__/injector-document-comments.test.ts +1 -1
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
- package/src/__tests__/injector-v3-suppression.test.ts +220 -0
- package/src/__tests__/list-messages-attachments.test.ts +7 -8
- package/src/__tests__/list-messages-hidden-metadata.test.ts +17 -15
- package/src/__tests__/list-messages-page-latest.test.ts +0 -1
- package/src/__tests__/list-messages-tool-merge.test.ts +36 -6
- package/src/__tests__/llm-call-pipeline.test.ts +21 -15
- package/src/__tests__/llm-request-log-turn-query.test.ts +42 -86
- package/src/__tests__/llm-resolver.test.ts +23 -47
- package/src/__tests__/llm-usage-store.test.ts +45 -0
- package/src/__tests__/log-export-routes.test.ts +59 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +1 -8
- package/src/__tests__/mcp-auth-routes.test.ts +15 -10
- package/src/__tests__/mcp-health-check.test.ts +18 -13
- package/src/__tests__/memory-retrieval-pipeline.test.ts +1 -1
- package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
- package/src/__tests__/messaging-send-tool.test.ts +8 -4
- package/src/__tests__/migration-export-http.test.ts +12 -12
- package/src/__tests__/migration-import-commit-http.test.ts +8 -8
- package/src/__tests__/migration-import-preflight-http.test.ts +7 -7
- package/src/__tests__/migration-validate-http.test.ts +3 -3
- package/src/__tests__/native-web-search.test.ts +14 -20
- package/src/__tests__/notification-decision-identity.test.ts +9 -18
- package/src/__tests__/notification-decision-recipient-context.test.ts +3 -6
- package/src/__tests__/oauth-commands-routes.test.ts +1 -1
- package/src/__tests__/onboarding-template-contract.test.ts +10 -0
- package/src/__tests__/openai-provider.test.ts +66 -70
- package/src/__tests__/openai-responses-provider.test.ts +21 -77
- package/src/__tests__/outbound-slack-persistence.test.ts +2 -1
- package/src/__tests__/overflow-reduce-pipeline.test.ts +2 -4
- package/src/__tests__/parallel-tool.benchmark.test.ts +24 -36
- package/src/__tests__/persistence-pipeline.test.ts +15 -26
- package/src/__tests__/persistence-secret-redaction.test.ts +2 -1
- package/src/__tests__/pipeline-runner.test.ts +2 -3
- package/src/__tests__/plugin-bootstrap.test.ts +51 -25
- package/src/__tests__/plugin-route-contribution.test.ts +6 -16
- package/src/__tests__/plugin-skill-contribution.test.ts +7 -17
- package/src/__tests__/plugin-tool-contribution.test.ts +10 -26
- package/src/__tests__/plugin-types.test.ts +7 -14
- package/src/__tests__/prechat-onboarding-contract.test.ts +23 -0
- package/src/__tests__/process-message-background-slack.test.ts +17 -16
- package/src/__tests__/process-message-display-content.test.ts +30 -42
- package/src/__tests__/provider-commit-message-generator.test.ts +19 -14
- package/src/__tests__/provider-error-scenarios.test.ts +7 -6
- package/src/__tests__/provider-platform-proxy-integration.test.ts +3 -8
- package/src/__tests__/provider-send-message-override-profile.test.ts +9 -25
- package/src/__tests__/provider-streaming.benchmark.test.ts +12 -22
- package/src/__tests__/provider-usage-tracking.test.ts +0 -6
- package/src/__tests__/ratelimit.test.ts +9 -4
- package/src/__tests__/relay-server.test.ts +20 -13
- package/src/__tests__/retry-openrouter-only-normalization.test.ts +5 -8
- package/src/__tests__/retry-thinking-tool-choice.test.ts +10 -13
- package/src/__tests__/retry-verbosity-normalization.test.ts +5 -8
- package/src/__tests__/runtime-events-sse-reconnect.test.ts +353 -0
- package/src/__tests__/schedule-routes.test.ts +80 -10
- package/src/__tests__/schedule-store.test.ts +67 -0
- package/src/__tests__/schedule-tools.test.ts +125 -0
- package/src/__tests__/secret-ingress-http.test.ts +2 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +11 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +11 -9
- package/src/__tests__/secret-response-routing.test.ts +13 -11
- package/src/__tests__/send-endpoint-busy.test.ts +2 -1
- package/src/__tests__/shell-observability.test.ts +249 -0
- package/src/__tests__/skill-feature-flags-integration.test.ts +11 -11
- package/src/__tests__/skill-feature-flags.test.ts +6 -6
- package/src/__tests__/skill-load-feature-flag.test.ts +10 -10
- package/src/__tests__/skills-files-catalog-fallback.test.ts +10 -0
- package/src/__tests__/skillssh-files.test.ts +1 -0
- package/src/__tests__/starter-task-flow.test.ts +6 -6
- package/src/__tests__/strip-memory-injections.test.ts +102 -14
- package/src/__tests__/subagent-call-site-routing.test.ts +2 -2
- package/src/__tests__/suggestion-routes.test.ts +3 -3
- package/src/__tests__/sync-message-contract.test.ts +19 -16
- package/src/__tests__/system-prompt.test.ts +54 -0
- package/src/__tests__/terminal-tools.test.ts +3 -24
- package/src/__tests__/thread-backfill.test.ts +4 -9
- package/src/__tests__/title-generate-pipeline.test.ts +1 -1
- package/src/__tests__/token-estimate-pipeline.test.ts +2 -4
- package/src/__tests__/tool-error-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execute-pipeline.test.ts +1 -1
- package/src/__tests__/tool-preview-lifecycle.test.ts +13 -11
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +9 -12
- package/src/__tests__/tool-result-truncation.test.ts +3 -1
- package/src/__tests__/tools-audio-read.test.ts +113 -0
- package/src/__tests__/turn-boundary-resolution.test.ts +44 -84
- package/src/__tests__/turn-events-store.test.ts +11 -7
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +8 -6
- package/src/__tests__/voice-session-bridge.test.ts +13 -7
- package/src/acp/__tests__/prepare-agent-env.test.ts +143 -31
- package/src/acp/prepare-agent-env.ts +52 -11
- package/src/agent/compaction-circuit.ts +140 -0
- package/src/agent/loop.ts +409 -85
- package/src/api/README.md +19 -17
- package/src/api/constants/tool-execution.ts +21 -0
- package/src/api/events/assistant-activity-state.ts +75 -0
- package/src/api/events/assistant-outbound-attachment.ts +25 -27
- package/src/api/events/assistant-text-delta.ts +6 -8
- package/src/api/events/assistant-turn-start.ts +5 -7
- package/src/api/events/avatar-updated.ts +24 -0
- package/src/api/events/compaction-circuit-closed.ts +26 -0
- package/src/api/events/compaction-circuit-open.ts +28 -0
- package/src/api/events/confirmation-request.ts +114 -0
- package/src/api/events/contact-request.ts +33 -0
- package/src/api/events/conversation-error.ts +77 -0
- package/src/api/events/conversation-list-invalidated.ts +38 -0
- package/src/api/events/conversation-title-updated.ts +24 -0
- package/src/api/events/disk-pressure-status-changed.ts +61 -0
- package/src/api/events/document-comment-created.ts +24 -28
- package/src/api/events/document-comment-deleted.ts +6 -8
- package/src/api/events/document-comment-reopened.ts +6 -8
- package/src/api/events/document-comment-resolved.ts +8 -10
- package/src/api/events/document-editor-update.ts +27 -0
- package/src/api/events/error.ts +32 -0
- package/src/api/events/generation-cancelled.ts +4 -6
- package/src/api/events/generation-handoff.ts +13 -15
- package/src/api/events/home-feed-updated.ts +26 -0
- package/src/api/events/identity-changed.ts +32 -0
- package/src/api/events/interaction-resolved.ts +50 -0
- package/src/api/events/message-complete.ts +10 -12
- package/src/api/events/message-dequeued.ts +21 -0
- package/src/api/events/message-queued-deleted.ts +23 -0
- package/src/api/events/message-queued.ts +22 -0
- package/src/api/events/message-request-complete.ts +29 -0
- package/src/api/events/navigate-settings.ts +20 -0
- package/src/api/events/notification-intent.ts +33 -0
- package/src/api/events/open-url.ts +6 -8
- package/src/api/events/question-request.ts +67 -0
- package/src/api/events/relationship-state-updated.ts +4 -6
- package/src/api/events/secret-request.ts +42 -0
- package/src/api/events/subagent-event.ts +79 -0
- package/src/api/events/subagent-spawned.ts +40 -0
- package/src/api/events/subagent-status-changed.ts +65 -0
- package/src/api/events/sync-changed.ts +29 -0
- package/src/api/events/tool-result.ts +129 -0
- package/src/api/events/tool-use-start.ts +8 -10
- package/src/api/events/turn-profile-auto-routed.ts +28 -0
- package/src/api/events/ui-surface-complete.ts +30 -0
- package/src/api/events/ui-surface-dismiss.ts +22 -0
- package/src/api/events/ui-surface-show.ts +67 -0
- package/src/api/events/ui-surface-update.ts +26 -0
- package/src/api/events/usage-update.ts +34 -0
- package/src/api/events/user-message-echo.ts +35 -0
- package/src/api/index.ts +354 -0
- package/src/api/requests/dictation.ts +45 -0
- package/src/api/responses/disk-pressure-status.ts +26 -0
- package/src/api/responses/home.ts +217 -0
- package/src/api/responses/llm-context-response.ts +2 -0
- package/src/api/responses/memory-v3-selection-log.ts +50 -0
- package/src/api/responses/subagent-detail.ts +48 -0
- package/src/approvals/guardian-decision-primitive.ts +7 -15
- package/src/approvals/guardian-request-resolvers.ts +6 -9
- package/src/avatar/__tests__/avatar-manifest.test.ts +236 -0
- package/src/avatar/__tests__/avatar-store.test.ts +193 -0
- package/src/avatar/avatar-manifest.ts +195 -0
- package/src/avatar/avatar-store.ts +113 -0
- package/src/avatar/traits-png-sync.ts +8 -2
- package/src/background-wake/next-wake.test.ts +31 -1
- package/src/background-wake/next-wake.ts +4 -1
- package/src/calls/call-conversation-messages.ts +6 -4
- package/src/calls/guardian-action-sweep.ts +6 -4
- package/src/calls/relay-server.ts +12 -8
- package/src/calls/voice-session-bridge.ts +13 -27
- package/src/cli/commands/__tests__/memory-v3.test.ts +245 -0
- package/src/cli/commands/avatar.ts +17 -11
- package/src/cli/commands/conversations.ts +15 -1
- package/src/cli/commands/db/__tests__/repair.test.ts +540 -0
- package/src/cli/commands/db/__tests__/status.test.ts +253 -0
- package/src/cli/commands/db/format.ts +48 -0
- package/src/cli/commands/db/index.ts +29 -0
- package/src/cli/commands/db/repair-step-conversation-backfill.ts +345 -0
- package/src/cli/commands/db/repair-step-integrity.ts +146 -0
- package/src/cli/commands/db/repair-steps.ts +164 -0
- package/src/cli/commands/db/repair.ts +141 -0
- package/src/cli/commands/db/status.ts +366 -0
- package/src/cli/commands/memory-v3.ts +159 -445
- package/src/cli/lib/cli-colors.ts +24 -6
- package/src/cli/program.ts +4 -5
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/assistant-feature-flags.ts +2 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -3
- package/src/config/bundled-skills/media-processing/services/reduce.ts +6 -9
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +7 -2
- package/src/config/bundled-skills/schedule/SKILL.md +1 -1
- package/src/config/bundled-skills/schedule/TOOLS.json +8 -0
- package/src/config/call-site-defaults.ts +2 -7
- package/src/config/feature-flag-registry.json +25 -9
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -226
- package/src/config/schemas/call-site-catalog.ts +8 -15
- package/src/config/schemas/llm.ts +2 -3
- package/src/config/schemas/memory-lifecycle.ts +24 -0
- package/src/config/schemas/memory-v2.ts +0 -253
- package/src/config/schemas/memory-v3.ts +39 -0
- package/src/config/schemas/memory.ts +6 -1
- package/src/config/schemas/timeouts.ts +3 -1
- package/src/context/compactor.ts +54 -31
- package/src/context/token-estimator.ts +19 -0
- package/src/context/tool-result-truncation.ts +1 -43
- package/src/context/window-manager.ts +138 -20
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +2 -2
- package/src/daemon/__tests__/web-search-status-text.test.ts +10 -6
- package/src/daemon/approval-generators.ts +4 -4
- package/src/daemon/config-watcher.ts +7 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +225 -88
- package/src/daemon/conversation-agent-loop.ts +284 -584
- package/src/daemon/conversation-error.ts +7 -7
- package/src/daemon/conversation-history.ts +22 -6
- package/src/daemon/conversation-launch.ts +4 -8
- package/src/daemon/conversation-lifecycle.ts +10 -38
- package/src/daemon/conversation-messaging.ts +1 -3
- package/src/daemon/conversation-notifiers.ts +7 -5
- package/src/daemon/conversation-process.ts +100 -79
- package/src/daemon/conversation-runtime-assembly.ts +47 -21
- package/src/daemon/conversation-store.ts +6 -5
- package/src/daemon/conversation-surfaces.ts +55 -69
- package/src/daemon/conversation-tool-setup.ts +3 -0
- package/src/daemon/conversation.ts +91 -126
- package/src/daemon/daemon-skill-host.ts +2 -6
- package/src/daemon/disk-pressure-guard.ts +35 -29
- package/src/daemon/external-plugins-bootstrap.ts +46 -24
- package/src/daemon/first-greeting.ts +26 -4
- package/src/daemon/guardian-action-generators.ts +2 -2
- package/src/daemon/handlers/conversations.ts +6 -22
- package/src/daemon/handlers/shared.ts +4 -0
- package/src/daemon/handlers/skills.ts +15 -14
- package/src/daemon/host-app-control-proxy.ts +54 -1
- package/src/daemon/host-cu-proxy.ts +46 -22
- package/src/daemon/host-file-proxy.ts +25 -1
- package/src/daemon/host-proxy-preactivation.ts +25 -6
- package/src/daemon/lifecycle.ts +28 -55
- package/src/daemon/message-protocol.ts +2 -3
- package/src/daemon/message-provenance.ts +49 -0
- package/src/daemon/message-types/contacts.ts +3 -20
- package/src/daemon/message-types/conversations.ts +13 -111
- package/src/daemon/message-types/documents.ts +3 -9
- package/src/daemon/message-types/home.ts +4 -17
- package/src/daemon/message-types/integrations.ts +2 -6
- package/src/daemon/message-types/messages.ts +28 -343
- package/src/daemon/message-types/notifications.ts +2 -32
- package/src/daemon/message-types/settings.ts +3 -8
- package/src/daemon/message-types/skills.ts +2 -0
- package/src/daemon/message-types/surfaces.ts +2 -0
- package/src/daemon/message-types/sync.ts +12 -25
- package/src/daemon/message-types/workspace.ts +3 -11
- package/src/daemon/process-message.ts +49 -46
- package/src/daemon/server.ts +12 -0
- package/src/daemon/tool-side-effects.ts +10 -7
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +11 -1
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +3 -1
- package/src/heartbeat/heartbeat-run-store.ts +31 -0
- package/src/heartbeat/heartbeat-service.ts +16 -0
- package/src/home/feature-gate.ts +22 -0
- package/src/home/feed-types.ts +36 -221
- package/src/ipc/__tests__/email-ipc.test.ts +0 -9
- package/src/ipc/routes/__tests__/route-adapter.test.ts +244 -0
- package/src/ipc/routes/route-adapter.ts +45 -6
- package/src/ipc/skill-routes/__tests__/memory.test.ts +18 -9
- package/src/ipc/skill-routes/__tests__/providers.test.ts +10 -10
- package/src/ipc/skill-routes/__tests__/registries.test.ts +28 -18
- package/src/ipc/skill-routes/memory.ts +26 -13
- package/src/ipc/skill-routes/providers.ts +5 -6
- package/src/ipc/skill-routes/registries.ts +13 -61
- package/src/live-voice/__tests__/live-voice-archive.test.ts +24 -11
- package/src/memory/__tests__/conversation-queries.test.ts +192 -8
- package/src/memory/__tests__/db-maintenance.test.ts +128 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +5 -4
- package/src/memory/__tests__/memory-retrospective-job.test.ts +10 -6
- package/src/memory/__tests__/memory-v3-selections-migration.test.ts +103 -0
- package/src/memory/context-search/agent-runner.ts +2 -4
- package/src/memory/conversation-crud.ts +39 -8
- package/src/memory/conversation-queries.ts +78 -22
- package/src/memory/db-init.ts +8 -0
- package/src/memory/db-maintenance.ts +18 -2
- package/src/memory/graph/consolidation.ts +8 -11
- package/src/memory/graph/conversation-graph-memory.ts +41 -8
- package/src/memory/graph/extraction.ts +6 -9
- package/src/memory/graph/narrative.ts +2 -2
- package/src/memory/graph/pattern-scan.ts +2 -2
- package/src/memory/graph/retriever.ts +20 -26
- package/src/memory/graph/tools.ts +4 -4
- package/src/memory/job-handlers/conversation-starters.ts +32 -32
- package/src/memory/job-handlers/summarization.ts +1 -2
- package/src/memory/jobs-store.ts +3 -1
- package/src/memory/jobs-worker.ts +51 -39
- package/src/memory/llm-request-log-source-clickhouse.ts +5 -31
- package/src/memory/llm-request-log-source-local.ts +0 -11
- package/src/memory/llm-request-log-source.ts +9 -25
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +10 -0
- package/src/memory/memory-marker.ts +17 -0
- package/src/memory/memory-retrospective-job.ts +6 -2
- package/src/memory/memory-v2-activation-log-store.ts +1 -83
- package/src/memory/migrations/267-llm-usage-events-add-assistant-version.ts +46 -0
- package/src/memory/migrations/268-add-memory-v3-selections.ts +28 -0
- package/src/memory/migrations/269-schedule-script-timeout.ts +11 -0
- package/src/memory/migrations/270-messages-role-created-at-index.ts +18 -0
- package/src/memory/migrations/__tests__/267-llm-usage-events-add-assistant-version.test.ts +117 -0
- package/src/memory/migrations/index.ts +4 -0
- package/src/memory/schema/infrastructure.ts +11 -0
- package/src/memory/v2/__tests__/consolidation-job.test.ts +124 -0
- package/src/memory/v2/__tests__/migration.test.ts +11 -3
- package/src/memory/v2/__tests__/page-index.test.ts +37 -1
- package/src/memory/v2/__tests__/router.test.ts +14 -4
- package/src/memory/v2/__tests__/sweep-job.test.ts +6 -5
- package/src/memory/v2/backfill-jobs.ts +6 -0
- package/src/memory/v2/consolidation-job.ts +89 -9
- package/src/memory/v2/migration.ts +5 -3
- package/src/memory/v2/page-index.ts +11 -0
- package/src/memory/v2/router.ts +8 -11
- package/src/memory/v2/sweep-job.ts +8 -11
- package/src/memory/v2/types.ts +1 -0
- package/src/memory/v3/__tests__/assign.test.ts +242 -0
- package/src/memory/v3/__tests__/capabilities.test.ts +118 -0
- package/src/memory/v3/__tests__/core.test.ts +39 -0
- package/src/memory/v3/__tests__/fixtures/eval-turns.json +36 -0
- package/src/memory/v3/__tests__/fixtures/live-turns.json +37 -0
- package/src/memory/v3/__tests__/health.test.ts +203 -0
- package/src/memory/v3/__tests__/live-integration.test.ts +330 -0
- package/src/memory/v3/__tests__/maintain-job.test.ts +288 -0
- package/src/memory/v3/__tests__/needle.test.ts +107 -0
- package/src/memory/v3/__tests__/orchestrate.test.ts +400 -0
- package/src/memory/v3/__tests__/reconcile.test.ts +274 -0
- package/src/memory/v3/__tests__/render-injection.test.ts +61 -0
- package/src/memory/v3/__tests__/router.test.ts +260 -0
- package/src/memory/v3/__tests__/selection-log-store.test.ts +179 -0
- package/src/memory/v3/__tests__/selector.test.ts +404 -0
- package/src/memory/v3/__tests__/shadow-plugin.test.ts +414 -0
- package/src/memory/v3/__tests__/snapshot.test.ts +168 -0
- package/src/memory/v3/__tests__/tree.test.ts +192 -0
- package/src/memory/v3/__tests__/types.test.ts +54 -0
- package/src/memory/v3/__tests__/working-set-eviction.test.ts +106 -0
- package/src/memory/v3/__tests__/working-set-skeleton.test.ts +44 -0
- package/src/memory/v3/assign.ts +268 -0
- package/src/memory/v3/capabilities.ts +124 -0
- package/src/memory/v3/core.ts +26 -0
- package/src/memory/v3/data/README.md +84 -0
- package/src/memory/v3/data/assignments.json +5 -0
- package/src/memory/v3/data/core.json +1 -0
- package/src/memory/v3/data/leaves/domain-a/topic-x.md +9 -0
- package/src/memory/v3/data/leaves/domain-a/topic-y.md +9 -0
- package/src/memory/v3/data/leaves/domain-b/topic-z.md +9 -0
- package/src/memory/v3/health.ts +0 -0
- package/src/memory/v3/maintain-job.ts +314 -0
- package/src/memory/v3/needle.ts +115 -0
- package/src/memory/v3/orchestrate.ts +114 -0
- package/src/memory/v3/page-content.ts +34 -0
- package/src/memory/v3/provider-blocks.ts +16 -0
- package/src/memory/v3/reconcile.ts +523 -0
- package/src/memory/v3/render-injection.ts +32 -0
- package/src/memory/v3/router.ts +184 -0
- package/src/memory/v3/selection-log-store.ts +84 -0
- package/src/memory/v3/selector.ts +211 -0
- package/src/memory/v3/shadow-plugin.ts +379 -0
- package/src/memory/v3/snapshot.ts +209 -0
- package/src/memory/v3/tree.ts +174 -0
- package/src/memory/v3/types.ts +46 -60
- package/src/memory/v3/working-set.ts +88 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +1 -1
- package/src/messaging/providers/slack/render-transcript.ts +2 -2
- package/src/messaging/style-analyzer.ts +8 -11
- package/src/notifications/conversation-pairing.ts +8 -6
- package/src/notifications/decision-engine.ts +10 -13
- package/src/notifications/preference-extractor.ts +11 -14
- package/src/permissions/prompter.ts +42 -36
- package/src/permissions/question-prompter.test.ts +35 -26
- package/src/permissions/question-prompter.ts +6 -10
- package/src/plugin-api/index.ts +2 -0
- package/src/plugin-api/types.ts +25 -3
- package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +93 -0
- package/src/plugins/defaults/circuit-breaker/package.json +15 -0
- package/src/plugins/defaults/circuit-breaker/register.ts +39 -0
- package/src/plugins/defaults/compaction/middlewares/compaction.ts +25 -0
- package/src/plugins/defaults/compaction/package.json +15 -0
- package/src/plugins/defaults/compaction/register.ts +35 -0
- package/src/plugins/defaults/compaction/terminal.ts +73 -0
- package/src/plugins/defaults/empty-response/middlewares/emptyResponse.ts +22 -0
- package/src/plugins/defaults/empty-response/package.json +15 -0
- package/src/plugins/defaults/empty-response/register.ts +28 -0
- package/src/plugins/defaults/empty-response/terminal.ts +106 -0
- package/src/plugins/defaults/history-repair/hooks/user-prompt-submit.ts +35 -0
- package/src/plugins/defaults/history-repair/package.json +15 -0
- package/src/plugins/defaults/history-repair/register.ts +24 -0
- package/src/{daemon/history-repair.ts → plugins/defaults/history-repair/terminal.ts} +48 -35
- package/src/plugins/defaults/index.ts +29 -40
- package/src/plugins/defaults/injectors/package.json +15 -0
- package/src/plugins/defaults/{injectors.ts → injectors/register.ts} +14 -38
- package/src/plugins/defaults/llm-call/middlewares/llmCall.ts +17 -0
- package/src/plugins/defaults/llm-call/package.json +15 -0
- package/src/plugins/defaults/{llm-call.ts → llm-call/register.ts} +6 -38
- package/src/plugins/defaults/memory-retrieval/middlewares/memoryRetrieval.ts +17 -0
- package/src/plugins/defaults/memory-retrieval/package.json +15 -0
- package/src/plugins/defaults/{memory-retrieval.ts → memory-retrieval/register.ts} +10 -48
- package/src/plugins/defaults/{overflow-reduce.ts → overflow-reduce/middlewares/overflowReduce.ts} +18 -77
- package/src/plugins/defaults/overflow-reduce/package.json +15 -0
- package/src/plugins/defaults/overflow-reduce/register.ts +42 -0
- package/src/plugins/defaults/persistence/middlewares/persistence.ts +19 -0
- package/src/plugins/defaults/persistence/package.json +15 -0
- package/src/plugins/defaults/persistence/register.ts +38 -0
- package/src/plugins/defaults/persistence/terminal.ts +83 -0
- package/src/plugins/defaults/title-generate/package.json +15 -0
- package/src/plugins/defaults/title-generate/register.ts +35 -0
- package/src/plugins/defaults/title-generate/terminal.ts +31 -0
- package/src/plugins/defaults/token-estimate/middlewares/tokenEstimate.ts +23 -0
- package/src/plugins/defaults/token-estimate/package.json +15 -0
- package/src/plugins/defaults/token-estimate/register.ts +34 -0
- package/src/plugins/defaults/token-estimate/terminal.ts +40 -0
- package/src/plugins/defaults/tool-error/middlewares/toolError.ts +21 -0
- package/src/plugins/defaults/tool-error/package.json +15 -0
- package/src/plugins/defaults/tool-error/register.ts +35 -0
- package/src/plugins/defaults/tool-error/terminal.ts +47 -0
- package/src/plugins/defaults/tool-execute/middlewares/toolExecute.ts +23 -0
- package/src/plugins/defaults/tool-execute/package.json +15 -0
- package/src/plugins/defaults/{tool-execute.ts → tool-execute/register.ts} +8 -46
- package/src/plugins/defaults/tool-result-truncate/middlewares/toolResultTruncate.ts +23 -0
- package/src/plugins/defaults/tool-result-truncate/package.json +15 -0
- package/src/plugins/defaults/tool-result-truncate/register.ts +35 -0
- package/src/plugins/defaults/tool-result-truncate/terminal.ts +113 -0
- package/src/plugins/defaults/tool-result-truncate/types.ts +22 -0
- package/src/plugins/external-plugin-loader.ts +2 -2
- package/src/plugins/pipeline.ts +0 -12
- package/src/plugins/types.ts +51 -90
- package/src/plugins/user-loader.ts +4 -3
- package/src/proactive-artifact/aux-message-injector.ts +0 -1
- package/src/proactive-artifact/job.test.ts +20 -8
- package/src/proactive-artifact/job.ts +3 -1
- package/src/prompts/sections.ts +20 -7
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +2 -2
- package/src/prompts/templates/BOOTSTRAP.md +5 -1
- package/src/prompts/templates/system-sections.ts +6 -0
- package/src/providers/__tests__/retry-callsite.test.ts +25 -25
- package/src/providers/__tests__/satellite-connection-routing.test.ts +7 -21
- package/src/providers/anthropic/client.ts +24 -5
- package/src/providers/call-site-routing.ts +1 -9
- package/src/providers/gemini/client.ts +152 -34
- package/src/providers/gemini/inline-media.ts +74 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +0 -2
- package/src/providers/openai/chat-completions-provider.ts +1 -4
- package/src/providers/openai/responses-provider.ts +1 -4
- package/src/providers/openrouter/client.ts +1 -6
- package/src/providers/provider-send-message.ts +6 -6
- package/src/providers/ratelimit.ts +1 -9
- package/src/providers/retry.ts +0 -5
- package/src/providers/types.ts +11 -2
- package/src/providers/usage-tracking.ts +1 -9
- package/src/runtime/__tests__/agent-wake.test.ts +131 -26
- package/src/runtime/__tests__/background-job-runner.test.ts +1 -3
- package/src/runtime/agent-wake.ts +93 -18
- package/src/runtime/assistant-event-hub.ts +2 -2
- package/src/runtime/auth/__tests__/guard-tests.test.ts +75 -109
- package/src/runtime/auth/__tests__/route-policy.test.ts +153 -170
- package/src/runtime/auth/route-policy.ts +42 -1079
- package/src/runtime/background-job-runner.ts +1 -4
- package/src/runtime/btw-sidechain.ts +3 -1
- package/src/runtime/channel-approvals.ts +3 -14
- package/src/runtime/channel-invite-transport.ts +5 -6
- package/src/runtime/channel-readiness-service.ts +2 -5
- package/src/runtime/channel-retry-sweep.ts +12 -16
- package/src/runtime/conversation-stream-state.ts +294 -0
- package/src/runtime/http-router.ts +19 -22
- package/src/runtime/http-types.ts +12 -6
- package/src/runtime/invite-instruction-generator.ts +3 -3
- package/src/runtime/pending-interactions.ts +2 -2
- package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +565 -0
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +4 -4
- package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +62 -32
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +237 -0
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -22
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +7 -2
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +6 -6
- package/src/runtime/routes/__tests__/stt-routes.test.ts +3 -3
- package/src/runtime/routes/__tests__/suggest-trust-rule-routes.test.ts +5 -2
- package/src/runtime/routes/__tests__/tts-routes.test.ts +3 -3
- package/src/runtime/routes/acp-routes.test.ts +97 -75
- package/src/runtime/routes/acp-routes.ts +29 -6
- package/src/runtime/routes/app-management-routes.ts +97 -24
- package/src/runtime/routes/app-routes.ts +25 -5
- package/src/runtime/routes/approval-routes.ts +16 -4
- package/src/runtime/routes/attachment-routes.ts +25 -1
- package/src/runtime/routes/audio-routes.ts +1 -0
- package/src/runtime/routes/audit-routes.ts +5 -0
- package/src/runtime/routes/auth-routes.ts +5 -0
- package/src/runtime/routes/avatar-routes.ts +238 -59
- package/src/runtime/routes/background-tool-routes.ts +9 -0
- package/src/runtime/routes/background-wake-routes.ts +13 -3
- package/src/runtime/routes/backup-routes.ts +45 -0
- package/src/runtime/routes/bookmark-routes.ts +13 -0
- package/src/runtime/routes/brain-graph-routes.ts +9 -0
- package/src/runtime/routes/browser-routes.ts +5 -0
- package/src/runtime/routes/browser-tabs-routes.ts +5 -0
- package/src/runtime/routes/btw-routes.ts +5 -1
- package/src/runtime/routes/cache-routes.ts +13 -0
- package/src/runtime/routes/call-routes.ts +21 -10
- package/src/runtime/routes/channel-availability-routes.ts +5 -1
- package/src/runtime/routes/channel-readiness-routes.ts +37 -4
- package/src/runtime/routes/channel-route-definitions.ts +21 -0
- package/src/runtime/routes/channel-verification-routes.ts +21 -0
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +9 -2
- package/src/runtime/routes/client-routes.ts +9 -0
- package/src/runtime/routes/consolidation-routes.ts +13 -5
- package/src/runtime/routes/contact-prompt-routes.ts +9 -0
- package/src/runtime/routes/contact-routes.ts +90 -23
- package/src/runtime/routes/content-source-routes.ts +5 -1
- package/src/runtime/routes/conversation-analysis-routes.ts +5 -1
- package/src/runtime/routes/conversation-attention-routes.ts +5 -0
- package/src/runtime/routes/conversation-cli-routes.ts +54 -7
- package/src/runtime/routes/conversation-compaction-routes.ts +54 -25
- package/src/runtime/routes/conversation-list-routes.ts +81 -12
- package/src/runtime/routes/conversation-management-routes.ts +57 -14
- package/src/runtime/routes/conversation-query-routes.ts +88 -41
- package/src/runtime/routes/conversation-routes.ts +74 -19
- package/src/runtime/routes/conversation-starter-routes.ts +22 -13
- package/src/runtime/routes/conversations-import-routes.ts +6 -1
- package/src/runtime/routes/credential-prompt-routes.ts +5 -0
- package/src/runtime/routes/credential-routes.ts +25 -6
- package/src/runtime/routes/debug-bash-routes.ts +5 -0
- package/src/runtime/routes/debug-routes.ts +11 -2
- package/src/runtime/routes/defer-routes.ts +13 -0
- package/src/runtime/routes/diagnostics-routes.ts +37 -46
- package/src/runtime/routes/disk-pressure-routes.ts +17 -31
- package/src/runtime/routes/document-comments-routes.ts +46 -27
- package/src/runtime/routes/documents-routes.ts +21 -10
- package/src/runtime/routes/domain-routes.ts +61 -28
- package/src/runtime/routes/email-routes.ts +33 -0
- package/src/runtime/routes/events-routes.ts +114 -9
- package/src/runtime/routes/filing-routes.ts +9 -4
- package/src/runtime/routes/gateway-log-routes.ts +5 -0
- package/src/runtime/routes/global-search-routes.ts +53 -50
- package/src/runtime/routes/group-routes.ts +21 -5
- package/src/runtime/routes/guardian-action-routes.ts +9 -0
- package/src/runtime/routes/guardian-approval-interception.ts +0 -31
- package/src/runtime/routes/heartbeat-routes.ts +25 -9
- package/src/runtime/routes/home-feed-routes.ts +23 -19
- package/src/runtime/routes/home-state-routes.ts +8 -40
- package/src/runtime/routes/host-app-control-routes.ts +5 -0
- package/src/runtime/routes/host-bash-routes.ts +5 -0
- package/src/runtime/routes/host-browser-routes.ts +13 -0
- package/src/runtime/routes/host-cu-routes.ts +5 -0
- package/src/runtime/routes/host-file-routes.ts +26 -6
- package/src/runtime/routes/host-transfer-routes.ts +13 -2
- package/src/runtime/routes/http-adapter.ts +1 -2
- package/src/runtime/routes/identity-intro-cache.ts +17 -6
- package/src/runtime/routes/identity-routes.ts +12 -2
- package/src/runtime/routes/image-generation-routes.ts +5 -0
- package/src/runtime/routes/inbound-message-handler.ts +15 -11
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +0 -12
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +15 -19
- package/src/runtime/routes/inference-profile-session-routes.ts +13 -3
- package/src/runtime/routes/inference-provider-connection-routes.ts +21 -5
- package/src/runtime/routes/inference-send-routes.ts +11 -11
- package/src/runtime/routes/integrations/a2a.ts +30 -7
- package/src/runtime/routes/integrations/slack/channel.ts +19 -3
- package/src/runtime/routes/integrations/slack/share.ts +9 -2
- package/src/runtime/routes/integrations/telegram.ts +28 -9
- package/src/runtime/routes/integrations/twilio.ts +35 -7
- package/src/runtime/routes/integrations/vercel.ts +3 -3
- package/src/runtime/routes/internal-oauth-routes.ts +5 -0
- package/src/runtime/routes/internal-twilio-routes.ts +13 -0
- package/src/runtime/routes/llm-call-sites-routes.ts +39 -4
- package/src/runtime/routes/log-export-routes.ts +28 -10
- package/src/runtime/routes/mcp-auth-routes.ts +25 -0
- package/src/runtime/routes/memory-item-routes.ts +21 -10
- package/src/runtime/routes/memory-v2-routes.ts +90 -36
- package/src/runtime/routes/memory-v3-routes.ts +273 -407
- package/src/runtime/routes/migration-rollback-routes.ts +5 -1
- package/src/runtime/routes/migration-routes.ts +29 -0
- package/src/runtime/routes/notification-routes.ts +17 -1
- package/src/runtime/routes/oauth-apps.ts +33 -11
- package/src/runtime/routes/oauth-commands-routes.ts +37 -14
- package/src/runtime/routes/oauth-connect-routes.ts +9 -0
- package/src/runtime/routes/oauth-lifecycle-routes.ts +5 -1
- package/src/runtime/routes/oauth-providers.ts +35 -10
- package/src/runtime/routes/platform-routes.ts +21 -0
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +3 -2
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +37 -16
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +7 -3
- package/src/runtime/routes/playground/__tests__/state.test.ts +10 -3
- package/src/runtime/routes/playground/force-compact.ts +1 -1
- package/src/runtime/routes/playground/helpers.ts +0 -1
- package/src/runtime/routes/playground/inject-failures.ts +13 -8
- package/src/runtime/routes/playground/reset-circuit.ts +14 -9
- package/src/runtime/routes/playground/seed-conversation.ts +1 -1
- package/src/runtime/routes/playground/seeded-conversations.ts +3 -3
- package/src/runtime/routes/playground/state.ts +4 -3
- package/src/runtime/routes/plugins-routes.ts +22 -19
- package/src/runtime/routes/profiler-routes.ts +17 -4
- package/src/runtime/routes/ps-routes.ts +5 -0
- package/src/runtime/routes/publish-routes.ts +13 -3
- package/src/runtime/routes/question-routes.ts +5 -0
- package/src/runtime/routes/recording-routes.ts +25 -12
- package/src/runtime/routes/rename-conversation-routes.ts +5 -0
- package/src/runtime/routes/sanity-routes.ts +9 -2
- package/src/runtime/routes/schedule-routes.ts +137 -47
- package/src/runtime/routes/secret-routes.ts +17 -4
- package/src/runtime/routes/sequence-routes.ts +33 -0
- package/src/runtime/routes/settings-routes.ts +65 -19
- package/src/runtime/routes/skills-routes.ts +133 -69
- package/src/runtime/routes/slack-channel-routes.ts +5 -0
- package/src/runtime/routes/stt-routes.ts +13 -6
- package/src/runtime/routes/subagents-routes.ts +24 -18
- package/src/runtime/routes/suggest-trust-rule-routes.ts +7 -2
- package/src/runtime/routes/surface-action-routes.ts +9 -0
- package/src/runtime/routes/surface-content-routes.ts +10 -2
- package/src/runtime/routes/task-routes.ts +37 -0
- package/src/runtime/routes/telemetry-routes.ts +9 -0
- package/src/runtime/routes/trace-event-routes.ts +42 -1
- package/src/runtime/routes/trust-rules-routes.ts +5 -0
- package/src/runtime/routes/tts-routes.ts +13 -6
- package/src/runtime/routes/types.ts +17 -8
- package/src/runtime/routes/ui-request-routes.ts +5 -0
- package/src/runtime/routes/upgrade-broadcast-routes.ts +5 -0
- package/src/runtime/routes/usage-routes.ts +71 -3
- package/src/runtime/routes/user-routes-cli.ts +9 -0
- package/src/runtime/routes/user-routes.ts +5 -1
- package/src/runtime/routes/wake-conversation-routes.ts +5 -0
- package/src/runtime/routes/watcher-routes.ts +21 -0
- package/src/runtime/routes/webhook-routes.ts +9 -0
- package/src/runtime/routes/wipe-conversation-routes.ts +5 -0
- package/src/runtime/routes/work-items-routes.ts +47 -19
- package/src/runtime/routes/workspace-commit-routes.ts +5 -0
- package/src/runtime/routes/workspace-routes.test.ts +42 -0
- package/src/runtime/routes/workspace-routes.ts +120 -9
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -4
- package/src/runtime/services/analyze-conversation.ts +3 -6
- package/src/runtime/services/conversation-serializer.ts +24 -2
- package/src/runtime/sync/resource-sync-events.ts +16 -2
- package/src/runtime/sync/sync-publisher.ts +2 -2
- package/src/schedule/run-script.ts +28 -3
- package/src/schedule/schedule-store.ts +8 -0
- package/src/schedule/scheduler.ts +3 -1
- package/src/signals/user-message.ts +5 -8
- package/src/skills/catalog-files.ts +4 -1
- package/src/skills/clawhub-files.ts +2 -0
- package/src/skills/skillssh-files.ts +2 -0
- package/src/subagent/manager.ts +3 -6
- package/src/telemetry/types.ts +26 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +138 -1
- package/src/telemetry/usage-telemetry-reporter.ts +31 -0
- package/src/tools/acp/spawn.test.ts +88 -38
- package/src/tools/apps/definitions.ts +8 -4
- package/src/tools/ask-question/ask-question-tool.test.ts +120 -105
- package/src/tools/ask-question/ask-question-tool.ts +85 -90
- package/src/tools/computer-use/definitions.ts +28 -24
- package/src/tools/credential-execution/make-authenticated-request.ts +56 -51
- package/src/tools/credential-execution/manage-secure-command-tool.ts +2 -2
- package/src/tools/credential-execution/run-authenticated-command.ts +82 -77
- package/src/tools/credentials/vault.ts +112 -111
- package/src/tools/execution-target.ts +1 -1
- package/src/tools/execution-timeout.ts +3 -4
- package/src/tools/filesystem/edit.ts +45 -42
- package/src/tools/filesystem/list.ts +33 -30
- package/src/tools/filesystem/read.ts +54 -35
- package/src/tools/filesystem/write.ts +34 -31
- package/src/tools/host-filesystem/edit.ts +44 -42
- package/src/tools/host-filesystem/read.ts +49 -35
- package/src/tools/host-filesystem/transfer.ts +121 -108
- package/src/tools/host-filesystem/write.ts +33 -31
- package/src/tools/host-terminal/host-shell.ts +50 -48
- package/src/tools/memory/register.ts +23 -24
- package/src/tools/network/web-fetch.ts +49 -46
- package/src/tools/network/web-search.ts +16 -13
- package/src/tools/registry.ts +39 -16
- package/src/tools/schedule/create.ts +11 -0
- package/src/tools/schedule/update.ts +16 -0
- package/src/tools/shared/filesystem/audio-read.ts +122 -0
- package/src/tools/shared/filesystem/image-read.ts +1 -1
- package/src/tools/skills/execute.ts +34 -31
- package/src/tools/skills/load.ts +29 -23
- package/src/tools/subagent/notify-parent.ts +35 -32
- package/src/tools/system/avatar-generator.ts +13 -22
- package/src/tools/system/request-permission.ts +30 -27
- package/src/tools/terminal/shell.ts +190 -61
- package/src/tools/tool-defaults.ts +20 -9
- package/src/tools/tool-manifest.ts +4 -4
- package/src/tools/types.ts +74 -23
- package/src/tools/ui-surface/definitions.ts +69 -9
- package/src/usage/types.ts +10 -0
- package/src/util/errors.ts +2 -2
- package/src/util/map-limit.ts +27 -0
- package/src/util/platform.ts +15 -12
- package/src/work-items/work-item-runner.ts +7 -2
- package/src/workspace/migrations/028-recover-conversations-from-disk-view.ts +7 -20
- package/src/workspace/migrations/092-backfill-v3-leaves.ts +169 -0
- package/src/workspace/migrations/093-backfill-leaf-ids.ts +144 -0
- package/src/workspace/migrations/094-seed-avatar-manifest.ts +155 -0
- package/src/workspace/migrations/__tests__/094-seed-avatar-manifest.test.ts +136 -0
- package/src/workspace/migrations/__tests__/backfill-leaf-ids.test.ts +175 -0
- package/src/workspace/migrations/__tests__/backfill-v3-leaves.test.ts +124 -0
- package/src/workspace/migrations/registry.ts +6 -0
- package/src/workspace/provider-commit-message-generator.ts +15 -17
- package/tsconfig.json +4 -1
- package/src/__tests__/history-repair-pipeline.test.ts +0 -396
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +0 -340
- package/src/cli/commands/memory-v3-render.ts +0 -491
- package/src/daemon/message-types/disk-pressure.ts +0 -9
- package/src/email/feature-gate.ts +0 -23
- package/src/memory/v3/__tests__/coactivation-store.test.ts +0 -422
- package/src/memory/v3/__tests__/consolidation-job.test.ts +0 -466
- package/src/memory/v3/__tests__/coretrieval-seed.test.ts +0 -270
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +0 -324
- package/src/memory/v3/__tests__/edges.test.ts +0 -706
- package/src/memory/v3/__tests__/filter.test.ts +0 -560
- package/src/memory/v3/__tests__/gate.test.ts +0 -637
- package/src/memory/v3/__tests__/index-composition.test.ts +0 -291
- package/src/memory/v3/__tests__/loop.test.ts +0 -775
- package/src/memory/v3/__tests__/retriever.test.ts +0 -226
- package/src/memory/v3/__tests__/scouts.test.ts +0 -489
- package/src/memory/v3/__tests__/shadow-diff.test.ts +0 -225
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +0 -398
- package/src/memory/v3/__tests__/system-prompts.test.ts +0 -154
- package/src/memory/v3/__tests__/traversal.test.ts +0 -508
- package/src/memory/v3/__tests__/tree-index.test.ts +0 -280
- package/src/memory/v3/__tests__/tree-store.test.ts +0 -529
- package/src/memory/v3/__tests__/tree-walk.test.ts +0 -784
- package/src/memory/v3/__tests__/validate.test.ts +0 -277
- package/src/memory/v3/auto-edges.ts +0 -223
- package/src/memory/v3/coactivation-store.ts +0 -124
- package/src/memory/v3/consolidation-job.ts +0 -323
- package/src/memory/v3/coretrieval-seed.ts +0 -240
- package/src/memory/v3/edge-learning-job.ts +0 -160
- package/src/memory/v3/edges.ts +0 -286
- package/src/memory/v3/filter.ts +0 -286
- package/src/memory/v3/gate.ts +0 -349
- package/src/memory/v3/index-composition.ts +0 -126
- package/src/memory/v3/llm-capture.ts +0 -46
- package/src/memory/v3/loop.ts +0 -430
- package/src/memory/v3/maintenance.ts +0 -144
- package/src/memory/v3/prompt-context.ts +0 -33
- package/src/memory/v3/prompts/consolidation.ts +0 -458
- package/src/memory/v3/prompts/system-prompts.ts +0 -196
- package/src/memory/v3/retriever.ts +0 -33
- package/src/memory/v3/scouts.ts +0 -431
- package/src/memory/v3/shadow-diff.ts +0 -287
- package/src/memory/v3/shadow-middleware.ts +0 -347
- package/src/memory/v3/traversal.ts +0 -211
- package/src/memory/v3/tree-index.ts +0 -237
- package/src/memory/v3/tree-store.ts +0 -394
- package/src/memory/v3/tree-walk.ts +0 -356
- package/src/memory/v3/validate.ts +0 -323
- package/src/plugins/defaults/circuit-breaker.ts +0 -141
- package/src/plugins/defaults/compaction.ts +0 -141
- package/src/plugins/defaults/empty-response.ts +0 -124
- package/src/plugins/defaults/history-repair.ts +0 -83
- package/src/plugins/defaults/persistence.ts +0 -146
- package/src/plugins/defaults/title-generate.ts +0 -90
- package/src/plugins/defaults/token-estimate.ts +0 -101
- package/src/plugins/defaults/tool-error.ts +0 -119
- package/src/plugins/defaults/tool-result-truncate.ts +0 -84
- package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +0 -35
|
@@ -710,10 +710,10 @@ describe("DefaultPathResolver", () => {
|
|
|
710
710
|
|
|
711
711
|
describe("route policy registration", () => {
|
|
712
712
|
test("migrations/import-preflight policy requires settings.write scope", async () => {
|
|
713
|
-
const {
|
|
714
|
-
const policy =
|
|
713
|
+
const { ROUTES } = await import("../runtime/routes/index.js");
|
|
714
|
+
const policy = (ROUTES.find((r) => r.endpoint === "migrations/import-preflight")?.policy ?? null);
|
|
715
715
|
|
|
716
|
-
expect(policy).
|
|
716
|
+
expect(policy).not.toBeNull();
|
|
717
717
|
expect(policy?.requiredScopes).toContain("settings.write");
|
|
718
718
|
expect(policy?.allowedPrincipalTypes).toContain("actor");
|
|
719
719
|
expect(policy?.allowedPrincipalTypes).toContain("svc_gateway");
|
|
@@ -721,10 +721,10 @@ describe("route policy registration", () => {
|
|
|
721
721
|
});
|
|
722
722
|
|
|
723
723
|
test("import-preflight policy matches export but differs from validate on scopes", async () => {
|
|
724
|
-
const {
|
|
725
|
-
const preflightPolicy =
|
|
726
|
-
const validatePolicy =
|
|
727
|
-
const exportPolicy =
|
|
724
|
+
const { ROUTES } = await import("../runtime/routes/index.js");
|
|
725
|
+
const preflightPolicy = (ROUTES.find((r) => r.endpoint === "migrations/import-preflight")?.policy ?? null);
|
|
726
|
+
const validatePolicy = (ROUTES.find((r) => r.endpoint === "migrations/validate")?.policy ?? null);
|
|
727
|
+
const exportPolicy = (ROUTES.find((r) => r.endpoint === "migrations/export")?.policy ?? null);
|
|
728
728
|
|
|
729
729
|
// preflight and export both require settings.write
|
|
730
730
|
expect(preflightPolicy!.requiredScopes).toEqual(
|
|
@@ -630,10 +630,10 @@ describe("handleMigrationValidate", () => {
|
|
|
630
630
|
describe("route policy registration", () => {
|
|
631
631
|
test("migrations/validate policy requires settings.read scope", async () => {
|
|
632
632
|
// Import route-policy to verify the registration exists
|
|
633
|
-
const {
|
|
634
|
-
const policy =
|
|
633
|
+
const { ROUTES } = await import("../runtime/routes/index.js");
|
|
634
|
+
const policy = (ROUTES.find((r) => r.endpoint === "migrations/validate")?.policy ?? null);
|
|
635
635
|
|
|
636
|
-
expect(policy).
|
|
636
|
+
expect(policy).not.toBeNull();
|
|
637
637
|
expect(policy?.requiredScopes).toContain("settings.read");
|
|
638
638
|
expect(policy?.allowedPrincipalTypes).toContain("actor");
|
|
639
639
|
expect(policy?.allowedPrincipalTypes).toContain("svc_gateway");
|
|
@@ -324,7 +324,7 @@ describe("Native Web Search — Tool Filtering", () => {
|
|
|
324
324
|
useNativeWebSearch: true,
|
|
325
325
|
});
|
|
326
326
|
|
|
327
|
-
await provider.sendMessage([userMsg("Hi")], sampleTools);
|
|
327
|
+
await provider.sendMessage([userMsg("Hi")], { tools: sampleTools });
|
|
328
328
|
|
|
329
329
|
const tools = lastStreamParams!.tools as Array<Record<string, unknown>>;
|
|
330
330
|
|
|
@@ -351,7 +351,7 @@ describe("Native Web Search — Tool Filtering", () => {
|
|
|
351
351
|
useNativeWebSearch: false,
|
|
352
352
|
});
|
|
353
353
|
|
|
354
|
-
await provider.sendMessage([userMsg("Hi")], sampleTools);
|
|
354
|
+
await provider.sendMessage([userMsg("Hi")], { tools: sampleTools });
|
|
355
355
|
|
|
356
356
|
const tools = lastStreamParams!.tools as Array<Record<string, unknown>>;
|
|
357
357
|
|
|
@@ -385,7 +385,9 @@ describe("Native Web Search — Tool Filtering", () => {
|
|
|
385
385
|
},
|
|
386
386
|
];
|
|
387
387
|
|
|
388
|
-
await provider.sendMessage([userMsg("Hi")],
|
|
388
|
+
await provider.sendMessage([userMsg("Hi")], {
|
|
389
|
+
tools: toolsWithoutWebSearch,
|
|
390
|
+
});
|
|
389
391
|
|
|
390
392
|
const tools = lastStreamParams!.tools as Array<Record<string, unknown>>;
|
|
391
393
|
expect(tools).toHaveLength(1);
|
|
@@ -398,7 +400,7 @@ describe("Native Web Search — Tool Filtering", () => {
|
|
|
398
400
|
useNativeWebSearch: true,
|
|
399
401
|
});
|
|
400
402
|
|
|
401
|
-
await provider.sendMessage([userMsg("Hi")], sampleTools);
|
|
403
|
+
await provider.sendMessage([userMsg("Hi")], { tools: sampleTools });
|
|
402
404
|
|
|
403
405
|
const tools = lastStreamParams!.tools as Array<{
|
|
404
406
|
name: string;
|
|
@@ -445,14 +447,10 @@ describe("Native Web Search — Streaming Events", () => {
|
|
|
445
447
|
];
|
|
446
448
|
|
|
447
449
|
const events: ProviderEvent[] = [];
|
|
448
|
-
await provider.sendMessage(
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
{
|
|
453
|
-
onEvent: (event) => events.push(event),
|
|
454
|
-
},
|
|
455
|
-
);
|
|
450
|
+
await provider.sendMessage([userMsg("Search something")], {
|
|
451
|
+
tools: sampleTools,
|
|
452
|
+
onEvent: (event) => events.push(event),
|
|
453
|
+
});
|
|
456
454
|
|
|
457
455
|
const serverToolEvents = events.filter(
|
|
458
456
|
(e) => e.type === "server_tool_start",
|
|
@@ -484,14 +482,10 @@ describe("Native Web Search — Streaming Events", () => {
|
|
|
484
482
|
];
|
|
485
483
|
|
|
486
484
|
const events: ProviderEvent[] = [];
|
|
487
|
-
await provider.sendMessage(
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
{
|
|
492
|
-
onEvent: (event) => events.push(event),
|
|
493
|
-
},
|
|
494
|
-
);
|
|
485
|
+
await provider.sendMessage([userMsg("Read a file")], {
|
|
486
|
+
tools: sampleTools,
|
|
487
|
+
onEvent: (event) => events.push(event),
|
|
488
|
+
});
|
|
495
489
|
|
|
496
490
|
const serverToolEvents = events.filter(
|
|
497
491
|
(e) => e.type === "server_tool_start",
|
|
@@ -107,12 +107,9 @@ describe("identity context in notification decision engine", () => {
|
|
|
107
107
|
mockIdentityContext = "I am Jarvis, a helpful assistant";
|
|
108
108
|
|
|
109
109
|
configuredProvider = {
|
|
110
|
-
sendMessage: async (
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
systemPrompt: unknown,
|
|
114
|
-
) => {
|
|
115
|
-
capturedSystemPrompt = systemPrompt as string;
|
|
110
|
+
sendMessage: async (...args: unknown[]) => {
|
|
111
|
+
const options = args[1] as { systemPrompt?: string } | undefined;
|
|
112
|
+
capturedSystemPrompt = options?.systemPrompt;
|
|
116
113
|
return { content: [] };
|
|
117
114
|
},
|
|
118
115
|
};
|
|
@@ -146,12 +143,9 @@ describe("identity context in notification decision engine", () => {
|
|
|
146
143
|
mockIdentityContext = null;
|
|
147
144
|
|
|
148
145
|
configuredProvider = {
|
|
149
|
-
sendMessage: async (
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
systemPrompt: unknown,
|
|
153
|
-
) => {
|
|
154
|
-
capturedSystemPrompt = systemPrompt as string;
|
|
146
|
+
sendMessage: async (...args: unknown[]) => {
|
|
147
|
+
const options = args[1] as { systemPrompt?: string } | undefined;
|
|
148
|
+
capturedSystemPrompt = options?.systemPrompt;
|
|
155
149
|
return { content: [] };
|
|
156
150
|
},
|
|
157
151
|
};
|
|
@@ -185,12 +179,9 @@ describe("identity context in notification decision engine", () => {
|
|
|
185
179
|
mockIdentityContext = "A".repeat(3000);
|
|
186
180
|
|
|
187
181
|
configuredProvider = {
|
|
188
|
-
sendMessage: async (
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
systemPrompt: unknown,
|
|
192
|
-
) => {
|
|
193
|
-
capturedSystemPrompt = systemPrompt as string;
|
|
182
|
+
sendMessage: async (...args: unknown[]) => {
|
|
183
|
+
const options = args[1] as { systemPrompt?: string } | undefined;
|
|
184
|
+
capturedSystemPrompt = options?.systemPrompt;
|
|
194
185
|
return { content: [] };
|
|
195
186
|
},
|
|
196
187
|
};
|
|
@@ -104,12 +104,9 @@ function makeSignal(
|
|
|
104
104
|
|
|
105
105
|
function setupLLMProvider() {
|
|
106
106
|
configuredProvider = {
|
|
107
|
-
sendMessage: async (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
systemPrompt: unknown,
|
|
111
|
-
) => {
|
|
112
|
-
capturedSystemPrompt = systemPrompt as string;
|
|
107
|
+
sendMessage: async (...args: unknown[]) => {
|
|
108
|
+
const options = args[1] as { systemPrompt?: string } | undefined;
|
|
109
|
+
capturedSystemPrompt = options?.systemPrompt;
|
|
113
110
|
return { content: [] };
|
|
114
111
|
},
|
|
115
112
|
};
|
|
@@ -248,7 +248,7 @@ describe("oauth-commands-routes route registry", () => {
|
|
|
248
248
|
|
|
249
249
|
test("every route enforces policy", () => {
|
|
250
250
|
for (const route of ROUTES) {
|
|
251
|
-
expect(route.
|
|
251
|
+
expect(route.policy).not.toBeNull();
|
|
252
252
|
}
|
|
253
253
|
});
|
|
254
254
|
});
|
|
@@ -69,6 +69,16 @@ describe("onboarding template contracts", () => {
|
|
|
69
69
|
expect(bootstrap).toContain("One-shot");
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
+
test("offers assistant migration during low-signal first openings", () => {
|
|
73
|
+
expect(bootstrap).toContain("## Assistant migration");
|
|
74
|
+
expect(bootstrap).toContain(
|
|
75
|
+
"If the first real user turn is only a greeting",
|
|
76
|
+
);
|
|
77
|
+
expect(bootstrap).toContain("that first response is the natural opening");
|
|
78
|
+
expect(bootstrap).toContain("assistant-migration");
|
|
79
|
+
expect(bootstrap).toContain("do not load or activate");
|
|
80
|
+
});
|
|
81
|
+
|
|
72
82
|
test("does not contain personality quiz references", () => {
|
|
73
83
|
expect(bootstrap).not.toMatch(/show.*personality quiz/i);
|
|
74
84
|
expect(bootstrap).not.toMatch(/present.*personality quiz/i);
|
|
@@ -379,8 +379,6 @@ describe("OpenAIProvider", () => {
|
|
|
379
379
|
const events: ProviderEvent[] = [];
|
|
380
380
|
await provider.sendMessage(
|
|
381
381
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
382
|
-
undefined,
|
|
383
|
-
undefined,
|
|
384
382
|
{ onEvent: (e) => events.push(e) },
|
|
385
383
|
);
|
|
386
384
|
|
|
@@ -422,7 +420,7 @@ describe("OpenAIProvider", () => {
|
|
|
422
420
|
];
|
|
423
421
|
|
|
424
422
|
const events: ProviderEvent[] = [];
|
|
425
|
-
await provider.sendMessage([userMsg("Hi")],
|
|
423
|
+
await provider.sendMessage([userMsg("Hi")], {
|
|
426
424
|
onEvent: (e) => events.push(e),
|
|
427
425
|
});
|
|
428
426
|
|
|
@@ -470,14 +468,9 @@ describe("OpenAIProvider", () => {
|
|
|
470
468
|
];
|
|
471
469
|
|
|
472
470
|
const events: ProviderEvent[] = [];
|
|
473
|
-
const result = await provider.sendMessage(
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
undefined,
|
|
477
|
-
{
|
|
478
|
-
onEvent: (e) => events.push(e),
|
|
479
|
-
},
|
|
480
|
-
);
|
|
471
|
+
const result = await provider.sendMessage([userMsg("Hi")], {
|
|
472
|
+
onEvent: (e) => events.push(e),
|
|
473
|
+
});
|
|
481
474
|
|
|
482
475
|
expect(result.content).toHaveLength(2);
|
|
483
476
|
expect(result.content[0]).toEqual({
|
|
@@ -504,14 +497,9 @@ describe("OpenAIProvider", () => {
|
|
|
504
497
|
];
|
|
505
498
|
|
|
506
499
|
const events: ProviderEvent[] = [];
|
|
507
|
-
const result = await provider.sendMessage(
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
undefined,
|
|
511
|
-
{
|
|
512
|
-
onEvent: (e) => events.push(e),
|
|
513
|
-
},
|
|
514
|
-
);
|
|
500
|
+
const result = await provider.sendMessage([userMsg("Hi")], {
|
|
501
|
+
onEvent: (e) => events.push(e),
|
|
502
|
+
});
|
|
515
503
|
|
|
516
504
|
expect(result.content).toHaveLength(2);
|
|
517
505
|
expect(result.content[0]).toEqual({
|
|
@@ -544,8 +532,7 @@ describe("OpenAIProvider", () => {
|
|
|
544
532
|
|
|
545
533
|
await provider.sendMessage(
|
|
546
534
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
547
|
-
|
|
548
|
-
"You are a helpful assistant.",
|
|
535
|
+
{ systemPrompt: "You are a helpful assistant." },
|
|
549
536
|
);
|
|
550
537
|
|
|
551
538
|
const messages = lastCreateParams!.messages as Array<
|
|
@@ -578,7 +565,7 @@ describe("OpenAIProvider", () => {
|
|
|
578
565
|
|
|
579
566
|
await provider.sendMessage(
|
|
580
567
|
[{ role: "user", content: [{ type: "text", text: "Read /tmp/test" }] }],
|
|
581
|
-
tools,
|
|
568
|
+
{ tools: tools },
|
|
582
569
|
);
|
|
583
570
|
|
|
584
571
|
const sentTools = lastCreateParams!.tools as Array<Record<string, unknown>>;
|
|
@@ -903,8 +890,6 @@ describe("OpenAIProvider", () => {
|
|
|
903
890
|
|
|
904
891
|
await provider.sendMessage(
|
|
905
892
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
906
|
-
undefined,
|
|
907
|
-
undefined,
|
|
908
893
|
{ config: { max_tokens: 64000 } },
|
|
909
894
|
);
|
|
910
895
|
|
|
@@ -947,8 +932,6 @@ describe("OpenAIProvider", () => {
|
|
|
947
932
|
|
|
948
933
|
await provider.sendMessage(
|
|
949
934
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
950
|
-
undefined,
|
|
951
|
-
undefined,
|
|
952
935
|
{ signal: controller.signal },
|
|
953
936
|
);
|
|
954
937
|
|
|
@@ -967,8 +950,6 @@ describe("OpenAIProvider", () => {
|
|
|
967
950
|
|
|
968
951
|
await provider.sendMessage(
|
|
969
952
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
970
|
-
undefined,
|
|
971
|
-
undefined,
|
|
972
953
|
{ signal: controller.signal },
|
|
973
954
|
);
|
|
974
955
|
|
|
@@ -1024,8 +1005,6 @@ describe("OpenAIProvider", () => {
|
|
|
1024
1005
|
try {
|
|
1025
1006
|
await provider.sendMessage(
|
|
1026
1007
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
1027
|
-
undefined,
|
|
1028
|
-
undefined,
|
|
1029
1008
|
{ signal: controller.signal },
|
|
1030
1009
|
);
|
|
1031
1010
|
expect(true).toBe(false); // should not reach
|
|
@@ -1044,8 +1023,6 @@ describe("OpenAIProvider", () => {
|
|
|
1044
1023
|
try {
|
|
1045
1024
|
await provider.sendMessage(
|
|
1046
1025
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
1047
|
-
undefined,
|
|
1048
|
-
undefined,
|
|
1049
1026
|
{ signal: controller.signal },
|
|
1050
1027
|
);
|
|
1051
1028
|
expect(true).toBe(false);
|
|
@@ -1063,8 +1040,6 @@ describe("OpenAIProvider", () => {
|
|
|
1063
1040
|
try {
|
|
1064
1041
|
await provider.sendMessage(
|
|
1065
1042
|
[{ role: "user", content: [{ type: "text", text: "Hi" }] }],
|
|
1066
|
-
undefined,
|
|
1067
|
-
undefined,
|
|
1068
1043
|
{ signal: controller.signal },
|
|
1069
1044
|
);
|
|
1070
1045
|
expect(true).toBe(false);
|
|
@@ -1412,7 +1387,7 @@ describe("effort config passthrough", () => {
|
|
|
1412
1387
|
): Provider {
|
|
1413
1388
|
return {
|
|
1414
1389
|
name,
|
|
1415
|
-
async sendMessage(_messages
|
|
1390
|
+
async sendMessage(_messages: Message[], options?: SendMessageOptions) {
|
|
1416
1391
|
onCall(options);
|
|
1417
1392
|
return makeResponse();
|
|
1418
1393
|
},
|
|
@@ -1426,7 +1401,7 @@ describe("effort config passthrough", () => {
|
|
|
1426
1401
|
});
|
|
1427
1402
|
const retry = new RetryProvider(inner);
|
|
1428
1403
|
|
|
1429
|
-
await retry.sendMessage(DUMMY_MESSAGES,
|
|
1404
|
+
await retry.sendMessage(DUMMY_MESSAGES, {
|
|
1430
1405
|
config: { effort: "high" },
|
|
1431
1406
|
});
|
|
1432
1407
|
|
|
@@ -1441,7 +1416,7 @@ describe("effort config passthrough", () => {
|
|
|
1441
1416
|
});
|
|
1442
1417
|
const retry = new RetryProvider(inner);
|
|
1443
1418
|
|
|
1444
|
-
await retry.sendMessage(DUMMY_MESSAGES,
|
|
1419
|
+
await retry.sendMessage(DUMMY_MESSAGES, {
|
|
1445
1420
|
config: { effort: "medium" },
|
|
1446
1421
|
});
|
|
1447
1422
|
|
|
@@ -1456,7 +1431,7 @@ describe("effort config passthrough", () => {
|
|
|
1456
1431
|
});
|
|
1457
1432
|
const retry = new RetryProvider(inner);
|
|
1458
1433
|
|
|
1459
|
-
await retry.sendMessage(DUMMY_MESSAGES,
|
|
1434
|
+
await retry.sendMessage(DUMMY_MESSAGES, {
|
|
1460
1435
|
config: { effort: "low" },
|
|
1461
1436
|
});
|
|
1462
1437
|
|
|
@@ -1471,7 +1446,7 @@ describe("effort config passthrough", () => {
|
|
|
1471
1446
|
});
|
|
1472
1447
|
const retry = new RetryProvider(inner);
|
|
1473
1448
|
|
|
1474
|
-
await retry.sendMessage(DUMMY_MESSAGES,
|
|
1449
|
+
await retry.sendMessage(DUMMY_MESSAGES, {
|
|
1475
1450
|
config: { effort: "high" },
|
|
1476
1451
|
});
|
|
1477
1452
|
|
|
@@ -1486,7 +1461,7 @@ describe("effort config passthrough", () => {
|
|
|
1486
1461
|
});
|
|
1487
1462
|
const retry = new RetryProvider(inner);
|
|
1488
1463
|
|
|
1489
|
-
await retry.sendMessage(DUMMY_MESSAGES,
|
|
1464
|
+
await retry.sendMessage(DUMMY_MESSAGES, {
|
|
1490
1465
|
config: { effort: "high" },
|
|
1491
1466
|
});
|
|
1492
1467
|
|
|
@@ -1501,7 +1476,7 @@ describe("effort config passthrough", () => {
|
|
|
1501
1476
|
});
|
|
1502
1477
|
const retry = new RetryProvider(inner);
|
|
1503
1478
|
|
|
1504
|
-
await retry.sendMessage(DUMMY_MESSAGES,
|
|
1479
|
+
await retry.sendMessage(DUMMY_MESSAGES, {
|
|
1505
1480
|
config: {
|
|
1506
1481
|
thinking: { enabled: true, budgetTokens: 10000 },
|
|
1507
1482
|
effort: "high",
|
|
@@ -1520,7 +1495,7 @@ describe("effort config passthrough", () => {
|
|
|
1520
1495
|
});
|
|
1521
1496
|
const retry = new RetryProvider(inner);
|
|
1522
1497
|
|
|
1523
|
-
await retry.sendMessage(DUMMY_MESSAGES,
|
|
1498
|
+
await retry.sendMessage(DUMMY_MESSAGES, {
|
|
1524
1499
|
config: {
|
|
1525
1500
|
thinking: { type: "adaptive" },
|
|
1526
1501
|
},
|
|
@@ -1546,7 +1521,7 @@ describe("OpenRouterProvider reasoning", () => {
|
|
|
1546
1521
|
|
|
1547
1522
|
test("sends reasoning.enabled=true with default detailed summary when thinking config is present", async () => {
|
|
1548
1523
|
const provider = new OpenRouterProvider("or-key", "x-ai/grok-4");
|
|
1549
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1524
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1550
1525
|
config: { thinking: { type: "adaptive" } },
|
|
1551
1526
|
});
|
|
1552
1527
|
|
|
@@ -1559,7 +1534,7 @@ describe("OpenRouterProvider reasoning", () => {
|
|
|
1559
1534
|
|
|
1560
1535
|
test("omits reasoning when thinking is explicitly disabled", async () => {
|
|
1561
1536
|
const provider = new OpenRouterProvider("or-key", "x-ai/grok-4");
|
|
1562
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1537
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1563
1538
|
config: { thinking: { type: "disabled" } },
|
|
1564
1539
|
});
|
|
1565
1540
|
|
|
@@ -1569,7 +1544,7 @@ describe("OpenRouterProvider reasoning", () => {
|
|
|
1569
1544
|
|
|
1570
1545
|
test("omits reasoning when thinking config is absent", async () => {
|
|
1571
1546
|
const provider = new OpenRouterProvider("or-key", "x-ai/grok-4");
|
|
1572
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1547
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1573
1548
|
config: {},
|
|
1574
1549
|
});
|
|
1575
1550
|
|
|
@@ -1587,7 +1562,7 @@ describe("OpenRouterProvider reasoning", () => {
|
|
|
1587
1562
|
|
|
1588
1563
|
test("sends OpenRouter app-attribution headers on OpenAI-compatible requests", async () => {
|
|
1589
1564
|
const provider = new OpenRouterProvider("or-key", "x-ai/grok-4");
|
|
1590
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1565
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1591
1566
|
config: {
|
|
1592
1567
|
usageAttributionHeaders: {
|
|
1593
1568
|
"Vellum-Organization-Id": "org-123",
|
|
@@ -1614,7 +1589,7 @@ describe("OpenRouterProvider reasoning", () => {
|
|
|
1614
1589
|
const retry = new RetryProvider(provider);
|
|
1615
1590
|
|
|
1616
1591
|
// thinking enabled at loop-level → config.thinking set
|
|
1617
|
-
await retry.sendMessage([userMsg("hi")],
|
|
1592
|
+
await retry.sendMessage([userMsg("hi")], {
|
|
1618
1593
|
config: { thinking: { type: "adaptive" } },
|
|
1619
1594
|
});
|
|
1620
1595
|
expect(lastCreateParams!.reasoning).toEqual({
|
|
@@ -1627,7 +1602,7 @@ describe("OpenRouterProvider reasoning", () => {
|
|
|
1627
1602
|
const provider = new OpenRouterProvider("or-key", "x-ai/grok-4");
|
|
1628
1603
|
const retry = new RetryProvider(provider);
|
|
1629
1604
|
|
|
1630
|
-
await retry.sendMessage([userMsg("hi")],
|
|
1605
|
+
await retry.sendMessage([userMsg("hi")], {
|
|
1631
1606
|
config: { thinking: { type: "disabled" } },
|
|
1632
1607
|
});
|
|
1633
1608
|
expect(lastCreateParams!.reasoning).toBeUndefined();
|
|
@@ -1635,7 +1610,7 @@ describe("OpenRouterProvider reasoning", () => {
|
|
|
1635
1610
|
|
|
1636
1611
|
test("nests effort under reasoning and omits top-level reasoning_effort", async () => {
|
|
1637
1612
|
const provider = new OpenRouterProvider("or-key", "moonshotai/kimi-k2.6");
|
|
1638
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1613
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1639
1614
|
config: { thinking: { enabled: true }, effort: "max" },
|
|
1640
1615
|
});
|
|
1641
1616
|
|
|
@@ -1709,7 +1684,8 @@ describe("OpenAIProvider reasoning_effort", () => {
|
|
|
1709
1684
|
});
|
|
1710
1685
|
|
|
1711
1686
|
test('effort: "low" maps to reasoning_effort: "low"', async () => {
|
|
1712
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1687
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1688
|
+
systemPrompt: "system",
|
|
1713
1689
|
config: { effort: "low" },
|
|
1714
1690
|
});
|
|
1715
1691
|
expect(lastCreateParams).toBeTruthy();
|
|
@@ -1717,35 +1693,40 @@ describe("OpenAIProvider reasoning_effort", () => {
|
|
|
1717
1693
|
});
|
|
1718
1694
|
|
|
1719
1695
|
test('effort: "medium" maps to reasoning_effort: "medium"', async () => {
|
|
1720
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1696
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1697
|
+
systemPrompt: "system",
|
|
1721
1698
|
config: { effort: "medium" },
|
|
1722
1699
|
});
|
|
1723
1700
|
expect(lastCreateParams!.reasoning_effort).toBe("medium");
|
|
1724
1701
|
});
|
|
1725
1702
|
|
|
1726
1703
|
test('effort: "high" maps to reasoning_effort: "high"', async () => {
|
|
1727
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1704
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1705
|
+
systemPrompt: "system",
|
|
1728
1706
|
config: { effort: "high" },
|
|
1729
1707
|
});
|
|
1730
1708
|
expect(lastCreateParams!.reasoning_effort).toBe("high");
|
|
1731
1709
|
});
|
|
1732
1710
|
|
|
1733
1711
|
test('effort: "max" maps to reasoning_effort: "xhigh"', async () => {
|
|
1734
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1712
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1713
|
+
systemPrompt: "system",
|
|
1735
1714
|
config: { effort: "max" },
|
|
1736
1715
|
});
|
|
1737
1716
|
expect(lastCreateParams!.reasoning_effort).toBe("xhigh");
|
|
1738
1717
|
});
|
|
1739
1718
|
|
|
1740
1719
|
test('effort: "xhigh" maps to reasoning_effort: "xhigh"', async () => {
|
|
1741
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1720
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1721
|
+
systemPrompt: "system",
|
|
1742
1722
|
config: { effort: "xhigh" },
|
|
1743
1723
|
});
|
|
1744
1724
|
expect(lastCreateParams!.reasoning_effort).toBe("xhigh");
|
|
1745
1725
|
});
|
|
1746
1726
|
|
|
1747
1727
|
test("no effort config means no reasoning_effort in params", async () => {
|
|
1748
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1728
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1729
|
+
systemPrompt: "system",
|
|
1749
1730
|
config: {},
|
|
1750
1731
|
});
|
|
1751
1732
|
expect(lastCreateParams).toBeTruthy();
|
|
@@ -1756,7 +1737,8 @@ describe("OpenAIProvider reasoning_effort", () => {
|
|
|
1756
1737
|
// OpenAI defaults `reasoning_effort` to "medium" when the field is
|
|
1757
1738
|
// omitted, so the user's opt-out is only honored when we send the
|
|
1758
1739
|
// explicit "none" value on the wire.
|
|
1759
|
-
await provider.sendMessage([userMsg("hi")],
|
|
1740
|
+
await provider.sendMessage([userMsg("hi")], {
|
|
1741
|
+
systemPrompt: "system",
|
|
1760
1742
|
config: { effort: "none" },
|
|
1761
1743
|
});
|
|
1762
1744
|
expect(lastCreateParams!.reasoning_effort).toBe("none");
|
|
@@ -1766,7 +1748,8 @@ describe("OpenAIProvider reasoning_effort", () => {
|
|
|
1766
1748
|
const providerWithExtra = new OpenAIProvider("test-key", "gpt-5", {
|
|
1767
1749
|
extraCreateParams: { reasoning_effort: "medium" },
|
|
1768
1750
|
});
|
|
1769
|
-
await providerWithExtra.sendMessage([userMsg("hi")],
|
|
1751
|
+
await providerWithExtra.sendMessage([userMsg("hi")], {
|
|
1752
|
+
systemPrompt: "system",
|
|
1770
1753
|
config: {},
|
|
1771
1754
|
});
|
|
1772
1755
|
expect(lastCreateParams!.reasoning_effort).toBe("medium");
|
|
@@ -1776,15 +1759,18 @@ describe("OpenAIProvider reasoning_effort", () => {
|
|
|
1776
1759
|
const capped = new OpenAIProvider("test-key", "gpt-5", {
|
|
1777
1760
|
maxReasoningEffort: "high",
|
|
1778
1761
|
});
|
|
1779
|
-
await capped.sendMessage([userMsg("hi")],
|
|
1762
|
+
await capped.sendMessage([userMsg("hi")], {
|
|
1763
|
+
systemPrompt: "system",
|
|
1780
1764
|
config: { effort: "xhigh" },
|
|
1781
1765
|
});
|
|
1782
1766
|
expect(lastCreateParams!.reasoning_effort).toBe("high");
|
|
1783
|
-
await capped.sendMessage([userMsg("hi")],
|
|
1767
|
+
await capped.sendMessage([userMsg("hi")], {
|
|
1768
|
+
systemPrompt: "system",
|
|
1784
1769
|
config: { effort: "max" },
|
|
1785
1770
|
});
|
|
1786
1771
|
expect(lastCreateParams!.reasoning_effort).toBe("high");
|
|
1787
|
-
await capped.sendMessage([userMsg("hi")],
|
|
1772
|
+
await capped.sendMessage([userMsg("hi")], {
|
|
1773
|
+
systemPrompt: "system",
|
|
1788
1774
|
config: { effort: "medium" },
|
|
1789
1775
|
});
|
|
1790
1776
|
expect(lastCreateParams!.reasoning_effort).toBe("medium");
|
|
@@ -1794,11 +1780,13 @@ describe("OpenAIProvider reasoning_effort", () => {
|
|
|
1794
1780
|
const uncapped = new OpenAIProvider("test-key", "gpt-5", {
|
|
1795
1781
|
maxReasoningEffort: "max",
|
|
1796
1782
|
});
|
|
1797
|
-
await uncapped.sendMessage([userMsg("hi")],
|
|
1783
|
+
await uncapped.sendMessage([userMsg("hi")], {
|
|
1784
|
+
systemPrompt: "system",
|
|
1798
1785
|
config: { effort: "max" },
|
|
1799
1786
|
});
|
|
1800
1787
|
expect(lastCreateParams!.reasoning_effort).toBe("max");
|
|
1801
|
-
await uncapped.sendMessage([userMsg("hi")],
|
|
1788
|
+
await uncapped.sendMessage([userMsg("hi")], {
|
|
1789
|
+
systemPrompt: "system",
|
|
1802
1790
|
config: { effort: "xhigh" },
|
|
1803
1791
|
});
|
|
1804
1792
|
expect(lastCreateParams!.reasoning_effort).toBe("xhigh");
|
|
@@ -1816,7 +1804,8 @@ describe("FireworksProvider reasoning_effort ceiling", () => {
|
|
|
1816
1804
|
"fw-key",
|
|
1817
1805
|
"accounts/fireworks/models/deepseek-v4-pro",
|
|
1818
1806
|
);
|
|
1819
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1807
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1808
|
+
systemPrompt: "system",
|
|
1820
1809
|
config: { effort: "max" },
|
|
1821
1810
|
});
|
|
1822
1811
|
expect(lastCreateParams!.reasoning_effort).toBe("max");
|
|
@@ -1827,7 +1816,8 @@ describe("FireworksProvider reasoning_effort ceiling", () => {
|
|
|
1827
1816
|
"fw-key",
|
|
1828
1817
|
"accounts/fireworks/models/deepseek-v4-pro",
|
|
1829
1818
|
);
|
|
1830
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1819
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1820
|
+
systemPrompt: "system",
|
|
1831
1821
|
config: { effort: "xhigh" },
|
|
1832
1822
|
});
|
|
1833
1823
|
expect(lastCreateParams!.reasoning_effort).toBe("xhigh");
|
|
@@ -1838,11 +1828,13 @@ describe("FireworksProvider reasoning_effort ceiling", () => {
|
|
|
1838
1828
|
"fw-key",
|
|
1839
1829
|
"accounts/fireworks/models/kimi-k2p6",
|
|
1840
1830
|
);
|
|
1841
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1831
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1832
|
+
systemPrompt: "system",
|
|
1842
1833
|
config: { effort: "xhigh" },
|
|
1843
1834
|
});
|
|
1844
1835
|
expect(lastCreateParams!.reasoning_effort).toBe("high");
|
|
1845
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1836
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1837
|
+
systemPrompt: "system",
|
|
1846
1838
|
config: { effort: "max" },
|
|
1847
1839
|
});
|
|
1848
1840
|
expect(lastCreateParams!.reasoning_effort).toBe("high");
|
|
@@ -1853,7 +1845,8 @@ describe("FireworksProvider reasoning_effort ceiling", () => {
|
|
|
1853
1845
|
"fw-key",
|
|
1854
1846
|
"accounts/fireworks/models/some-future-model",
|
|
1855
1847
|
);
|
|
1856
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1848
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1849
|
+
systemPrompt: "system",
|
|
1857
1850
|
config: { effort: "max" },
|
|
1858
1851
|
});
|
|
1859
1852
|
expect(lastCreateParams!.reasoning_effort).toBe("high");
|
|
@@ -1864,7 +1857,8 @@ describe("FireworksProvider reasoning_effort ceiling", () => {
|
|
|
1864
1857
|
"fw-key",
|
|
1865
1858
|
"accounts/fireworks/models/deepseek-v4-pro",
|
|
1866
1859
|
);
|
|
1867
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1860
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1861
|
+
systemPrompt: "system",
|
|
1868
1862
|
config: { effort: "medium" },
|
|
1869
1863
|
});
|
|
1870
1864
|
expect(lastCreateParams!.reasoning_effort).toBe("medium");
|
|
@@ -1875,7 +1869,8 @@ describe("FireworksProvider reasoning_effort ceiling", () => {
|
|
|
1875
1869
|
"fw-key",
|
|
1876
1870
|
"accounts/fireworks/models/kimi-k2p6",
|
|
1877
1871
|
);
|
|
1878
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1872
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1873
|
+
systemPrompt: "system",
|
|
1879
1874
|
config: { effort: "none" },
|
|
1880
1875
|
});
|
|
1881
1876
|
expect(lastCreateParams!.reasoning_effort).toBe("none");
|
|
@@ -1886,7 +1881,8 @@ describe("FireworksProvider reasoning_effort ceiling", () => {
|
|
|
1886
1881
|
"fw-key",
|
|
1887
1882
|
"accounts/fireworks/models/kimi-k2p6",
|
|
1888
1883
|
);
|
|
1889
|
-
await fw.sendMessage([userMsg("hi")],
|
|
1884
|
+
await fw.sendMessage([userMsg("hi")], {
|
|
1885
|
+
systemPrompt: "system",
|
|
1890
1886
|
config: {
|
|
1891
1887
|
effort: "max",
|
|
1892
1888
|
model: "accounts/fireworks/models/deepseek-v4-pro",
|