@vellumai/assistant 0.8.7 → 0.8.8
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/Dockerfile +20 -4
- package/docker-entrypoint.sh +4 -2
- package/docker-init-apt-root.sh +3 -1
- package/docker-kata-apt-env.sh +3 -1
- package/docker-kata-runtime-family.sh +12 -0
- package/docs/architecture/memory.md +1 -1
- package/docs/plugins.md +75 -79
- package/examples/plugins/echo/README.md +6 -12
- package/examples/plugins/echo/register.ts +0 -41
- package/node_modules/@vellumai/skill-host-contracts/src/server-message.ts +3 -3
- package/openapi.yaml +3381 -348
- package/package.json +1 -1
- package/scripts/generate-openapi.ts +68 -41
- package/src/__tests__/agent-loop-exit-reason.test.ts +34 -39
- package/src/__tests__/agent-loop-provider-error-recording.test.ts +1 -1
- package/src/__tests__/agent-loop.test.ts +37 -87
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +2 -0
- package/src/__tests__/annotate-activity-metadata.test.ts +262 -0
- package/src/__tests__/annotate-risk-options.test.ts +2 -3
- package/src/__tests__/anthropic-provider.test.ts +95 -2
- package/src/__tests__/assistant-event-hub.test.ts +25 -0
- package/src/__tests__/assistant-events-sse-shed.test.ts +8 -0
- package/src/__tests__/{conversation-stream-state.test.ts → assistant-stream-state.test.ts} +252 -91
- package/src/__tests__/auth-fallback-events-store.test.ts +116 -0
- package/src/__tests__/background-workers-disk-pressure.test.ts +6 -0
- package/src/__tests__/btw-routes.test.ts +62 -3
- package/src/__tests__/build-persisted-content.test.ts +184 -0
- package/src/__tests__/catalog-files.test.ts +1 -1
- package/src/__tests__/clawhub-files.test.ts +1 -1
- package/src/__tests__/compaction-pipeline.test.ts +1 -1
- package/src/__tests__/compaction.benchmark.test.ts +0 -30
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +57 -19
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +6 -2
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +10 -4
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +313 -1136
- package/src/__tests__/conversation-agent-loop.test.ts +596 -1616
- package/src/__tests__/conversation-analysis-routes.test.ts +6 -0
- package/src/__tests__/conversation-history-web-search.test.ts +11 -1
- package/src/__tests__/conversation-pairing.test.ts +4 -31
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +6 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +26 -5
- package/src/__tests__/conversation-queue.test.ts +2 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +3 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +6 -5
- package/src/__tests__/conversation-runtime-assembly.test.ts +170 -229
- package/src/__tests__/conversation-runtime-workspace.test.ts +3 -24
- package/src/__tests__/conversation-slash-commands.test.ts +8 -42
- package/src/__tests__/conversation-slash-queue.test.ts +6 -1
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +84 -0
- package/src/__tests__/conversation-sync-tags.test.ts +27 -15
- package/src/__tests__/conversation-title-service.test.ts +135 -2
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -1
- package/src/__tests__/cross-provider-web-search.test.ts +214 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +5 -0
- package/src/__tests__/dm-persistence.test.ts +5 -1
- package/src/__tests__/empty-response-hook.test.ts +304 -0
- package/src/__tests__/feature-flag-test-helpers.ts +2 -2
- package/src/__tests__/gemini-image-service.test.ts +13 -0
- package/src/__tests__/helpers/mock-provider.ts +110 -0
- package/src/__tests__/helpers/native-web-search-harness.ts +129 -0
- package/src/__tests__/history-repair-hook.test.ts +1 -0
- package/src/__tests__/identity-intro-cache.test.ts +12 -100
- package/src/__tests__/identity-routes.test.ts +248 -7
- package/src/__tests__/inbound-slack-persistence.test.ts +5 -1
- package/src/__tests__/injector-background-turn.test.ts +2 -8
- package/src/__tests__/injector-chain.test.ts +106 -270
- package/src/__tests__/injector-disk-pressure.test.ts +3 -12
- package/src/__tests__/injector-document-comments.test.ts +2 -2
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +30 -22
- package/src/__tests__/injector-v3-suppression.test.ts +31 -37
- package/src/__tests__/internal-telemetry-routes.test.ts +109 -0
- package/src/__tests__/list-messages-page-latest.test.ts +60 -0
- package/src/__tests__/list-messages-tool-merge.test.ts +20 -0
- package/src/__tests__/llm-usage-store.test.ts +223 -1
- package/src/__tests__/memory-retrieval-hook.test.ts +297 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +103 -35
- package/src/__tests__/native-web-search.test.ts +191 -0
- package/src/__tests__/onboarding-template-contract.test.ts +2 -0
- package/src/__tests__/openai-image-service.test.ts +17 -0
- package/src/__tests__/openai-provider.test.ts +31 -1
- package/src/__tests__/persist-unsendable-image.test.ts +215 -0
- package/src/__tests__/persistence-secret-redaction.test.ts +1 -0
- package/src/__tests__/pipeline-runner.test.ts +29 -39
- package/src/__tests__/pkb-autoinject.test.ts +2 -5
- package/src/__tests__/plugin-bootstrap.test.ts +13 -28
- package/src/__tests__/plugin-registry.test.ts +0 -27
- package/src/__tests__/plugin-types.test.ts +2 -125
- package/src/__tests__/process-message-display-content.test.ts +6 -2
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +5 -1
- package/src/__tests__/resolve-trust-class.test.ts +4 -4
- package/src/__tests__/runtime-events-sse-reconnect.test.ts +60 -23
- package/src/__tests__/schedule-routes.test.ts +603 -2
- package/src/__tests__/schedule-store.test.ts +41 -0
- package/src/__tests__/schedule-tools.test.ts +35 -0
- package/src/__tests__/server-history-render.test.ts +314 -1
- package/src/__tests__/skillssh-files.test.ts +1 -1
- package/src/__tests__/system-prompt.test.ts +20 -0
- package/src/__tests__/task-scheduler.test.ts +162 -1
- package/src/__tests__/terminal-tools.test.ts +6 -1
- package/src/__tests__/title-generate-hook.test.ts +319 -0
- package/src/__tests__/tool-error-hook.test.ts +278 -0
- package/src/__tests__/tool-preview-lifecycle.test.ts +468 -5
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
- package/src/__tests__/tool-result-truncate-hook.test.ts +127 -0
- package/src/__tests__/tool-result-truncation.test.ts +0 -2
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +254 -0
- package/src/__tests__/ui-work-result-surface.test.ts +159 -0
- package/src/__tests__/usage-routes.test.ts +285 -1
- package/src/__tests__/user-plugin-loader.test.ts +2 -2
- package/src/__tests__/voice-session-bridge.test.ts +6 -3
- package/src/__tests__/web-search-backend-failure.test.ts +166 -0
- package/src/agent/loop.ts +346 -442
- package/src/api/events/assistant-thinking-delta.ts +33 -0
- package/src/api/events/tool-output-chunk.ts +45 -0
- package/src/api/events/tool-use-preview-start.ts +32 -0
- package/src/api/events/trace-event.ts +69 -0
- package/src/api/index.ts +48 -13
- package/src/api/responses/conversation-message.ts +368 -0
- package/src/avatar/__tests__/avatar-store.test.ts +34 -29
- package/src/cli/commands/__tests__/notifications.test.ts +58 -14
- package/src/cli/commands/notifications.ts +112 -60
- package/src/config/assistant-feature-flags.ts +22 -11
- package/src/config/bundled-skills/app-builder/SKILL.md +3 -20
- package/src/config/bundled-skills/app-builder/references/examples/README.md +17 -0
- package/src/config/bundled-skills/app-builder/references/examples/expense-tracker.md +515 -0
- package/src/config/bundled-skills/app-builder/references/examples/focus-timer.md +342 -0
- package/src/config/bundled-skills/app-builder/references/examples/habit-tracker.md +490 -0
- package/src/config/bundled-skills/document-editor/SKILL.md +1 -1
- package/src/config/bundled-skills/messaging/SKILL.md +0 -7
- package/src/config/feature-flag-cache.ts +3 -3
- package/src/config/feature-flag-registry.json +35 -3
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -0
- package/src/config/schemas/__tests__/memory-v3.test.ts +25 -0
- package/src/config/schemas/llm.ts +1 -0
- package/src/config/schemas/memory-v2.ts +8 -0
- package/src/config/schemas/memory-v3.ts +8 -0
- package/src/config/schemas/platform.ts +8 -0
- package/src/config/seed-inference-profiles.ts +2 -2
- package/src/config/skills.ts +13 -0
- package/src/context/compactor.ts +1 -1
- package/src/context/strip-injections.ts +122 -0
- package/src/context/token-estimator.ts +23 -0
- package/src/context/tool-result-truncation.ts +0 -23
- package/src/context/window-manager.ts +3 -6
- package/src/credential-execution/executable-discovery.ts +16 -0
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +6 -0
- package/src/daemon/__tests__/inference-profile-notification.test.ts +153 -0
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +10 -8
- package/src/daemon/assistant-attachments.ts +1 -1
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/context-overflow-reducer.ts +0 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +605 -153
- package/src/daemon/conversation-agent-loop.ts +281 -760
- package/src/daemon/conversation-history.ts +5 -4
- package/src/daemon/conversation-lifecycle.ts +3 -4
- package/src/daemon/conversation-messaging.ts +7 -6
- package/src/daemon/conversation-process.ts +11 -16
- package/src/daemon/conversation-runtime-assembly.ts +130 -347
- package/src/daemon/conversation-slash.ts +6 -25
- package/src/daemon/conversation-surfaces.ts +222 -4
- package/src/daemon/conversation-tool-setup.ts +2 -29
- package/src/daemon/conversation.ts +32 -14
- package/src/daemon/external-plugins-bootstrap.ts +9 -10
- package/src/daemon/handlers/config-a2a.ts +51 -36
- package/src/daemon/handlers/config-slack-channel.ts +20 -14
- package/src/daemon/handlers/config-telegram.ts +16 -2
- package/src/daemon/handlers/shared.ts +156 -84
- package/src/daemon/handlers/skills.ts +39 -10
- package/src/daemon/lifecycle.ts +4 -0
- package/src/daemon/message-types/apps.ts +1 -29
- package/src/daemon/message-types/messages.ts +9 -57
- package/src/daemon/message-types/skills.ts +2 -0
- package/src/daemon/message-types/surfaces.ts +136 -3
- package/src/daemon/now-scratchpad.ts +21 -0
- package/src/daemon/orphan-reaper.test.ts +210 -0
- package/src/daemon/orphan-reaper.ts +240 -0
- package/src/daemon/persist-unsendable-image.ts +117 -0
- package/src/daemon/process-message.ts +1 -3
- package/src/daemon/trace-emitter.ts +6 -4
- package/src/daemon/trust-context.ts +19 -0
- package/src/daemon/wake-target-adapter.ts +3 -1
- package/src/home/home-greeting-cache.ts +24 -1
- package/src/ipc/gateway-client.test.ts +2 -2
- package/src/ipc/gateway-client.ts +3 -3
- package/src/media/gemini-image-service.ts +15 -0
- package/src/media/openai-image-service.ts +14 -0
- package/src/media/types.ts +34 -0
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +56 -0
- package/src/memory/auth-fallback-events-store.ts +94 -0
- package/src/memory/conversation-title-service.ts +65 -41
- package/src/memory/db-init.ts +4 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-registry.test.ts +119 -0
- package/src/memory/graph/conversation-graph-memory.ts +65 -0
- package/src/memory/jobs-store.ts +33 -0
- package/src/memory/jobs-worker.ts +31 -4
- package/src/memory/llm-usage-store.ts +224 -50
- package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +6 -5
- package/src/memory/migrations/270-schedule-source-conversation.ts +13 -0
- package/src/memory/migrations/271-create-auth-fallback-events.ts +21 -0
- package/src/memory/migrations/index.ts +2 -0
- package/src/memory/pkb/autoinject.ts +61 -0
- package/src/memory/pkb/context.ts +50 -0
- package/src/memory/pkb/types.ts +14 -0
- package/src/memory/schedule-attribution-sql.ts +104 -0
- package/src/memory/schema/infrastructure.ts +16 -0
- package/src/memory/usage-grouped-buckets.ts +6 -1
- package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -1
- package/src/memory/v2/consolidation-job.ts +1 -1
- package/src/memory/v3/__tests__/health.test.ts +16 -0
- package/src/memory/v3/__tests__/orchestrate.test.ts +45 -9
- package/src/memory/v3/__tests__/provider-blocks.test.ts +13 -0
- package/src/memory/v3/__tests__/router.test.ts +101 -29
- package/src/memory/v3/__tests__/selector.test.ts +93 -27
- package/src/memory/v3/__tests__/shadow-plugin.test.ts +23 -5
- package/src/memory/v3/health.ts +0 -0
- package/src/memory/v3/llm-retry.ts +32 -0
- package/src/memory/v3/orchestrate.ts +26 -14
- package/src/memory/v3/provider-blocks.ts +15 -5
- package/src/memory/v3/router.ts +48 -42
- package/src/memory/v3/selector.ts +57 -42
- package/src/memory/v3/shadow-plugin.ts +47 -15
- package/src/memory/v3/types.ts +8 -0
- package/src/notifications/conversation-pairing.ts +8 -15
- package/src/notifications/decision-engine.ts +6 -3
- package/src/notifications/home-feed-side-effect.ts +12 -1
- package/src/permissions/prompter.ts +4 -0
- package/src/plugin-api/constants.ts +4 -0
- package/src/plugin-api/index.ts +8 -1
- package/src/plugin-api/types.ts +151 -1
- package/src/plugins/defaults/empty-response/hooks/stop.ts +126 -0
- package/src/plugins/defaults/empty-response/register.ts +8 -13
- package/src/plugins/defaults/index.ts +1 -15
- package/src/plugins/defaults/injectors/register.ts +243 -74
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +91 -0
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +216 -0
- package/src/plugins/defaults/memory-retrieval/injector-chain.ts +35 -0
- package/src/plugins/defaults/title-generate/hooks/stop.ts +75 -0
- package/src/plugins/defaults/title-generate/hooks/user-prompt-submit.ts +35 -0
- package/src/plugins/defaults/title-generate/package.json +1 -1
- package/src/plugins/defaults/title-generate/register.ts +18 -18
- package/src/plugins/defaults/tool-error/hooks/post-tool-use.ts +118 -0
- package/src/plugins/defaults/tool-error/package.json +1 -1
- package/src/plugins/defaults/tool-error/register.ts +9 -21
- package/src/plugins/defaults/tool-result-truncate/hooks/post-tool-use.ts +32 -0
- package/src/plugins/defaults/tool-result-truncate/register.ts +10 -21
- package/src/plugins/defaults/tool-result-truncate/terminal.ts +37 -18
- package/src/plugins/pipeline.ts +6 -18
- package/src/plugins/registry.ts +8 -25
- package/src/plugins/types.ts +43 -474
- package/src/proactive-artifact/aux-message-injector.ts +3 -3
- package/src/proactive-artifact/job.test.ts +7 -12
- package/src/prompts/__tests__/system-prompt.test.ts +36 -0
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +62 -0
- package/src/prompts/templates/BOOTSTRAP.md +2 -2
- package/src/prompts/templates/system-sections.ts +15 -0
- package/src/providers/anthropic/client.ts +37 -29
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +112 -0
- package/src/providers/openai/chat-completions-provider.ts +44 -0
- package/src/providers/openrouter/client.ts +1 -0
- package/src/providers/placeholder-sentinels.ts +35 -0
- package/src/runtime/__tests__/agent-wake.test.ts +5 -1
- package/src/runtime/agent-wake.ts +2 -2
- package/src/runtime/assistant-event-hub.ts +36 -6
- package/src/runtime/{conversation-stream-state.ts → assistant-stream-state.ts} +132 -58
- package/src/runtime/http-router.ts +16 -21
- package/src/runtime/http-types.ts +16 -70
- package/src/runtime/pending-interactions.ts +1 -0
- package/src/runtime/routes/__tests__/consolidation-routes.test.ts +265 -2
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +31 -1
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +6 -2
- package/src/runtime/routes/__tests__/tts-routes.test.ts +6 -2
- package/src/runtime/routes/app-management-routes.ts +6 -117
- package/src/runtime/routes/app-routes.ts +13 -15
- package/src/runtime/routes/attachment-routes.ts +26 -15
- package/src/runtime/routes/avatar-routes.ts +26 -0
- package/src/runtime/routes/btw-routes.ts +29 -23
- package/src/runtime/routes/consolidation-routes.ts +120 -20
- package/src/runtime/routes/conversation-query-routes.ts +2 -0
- package/src/runtime/routes/conversation-routes.ts +358 -184
- package/src/runtime/routes/documents-routes.ts +4 -0
- package/src/runtime/routes/domain-routes.ts +51 -37
- package/src/runtime/routes/epoch-millis-range.ts +34 -0
- package/src/runtime/routes/events-routes.ts +28 -34
- package/src/runtime/routes/gateway-log-routes.ts +26 -4
- package/src/runtime/routes/heartbeat-routes.ts +32 -12
- package/src/runtime/routes/identity-intro-cache.ts +11 -34
- package/src/runtime/routes/identity-routes.ts +208 -17
- package/src/runtime/routes/image-generation-routes.ts +40 -2
- package/src/runtime/routes/index.ts +2 -0
- package/src/runtime/routes/integrations/a2a.ts +12 -10
- package/src/runtime/routes/integrations/slack/__tests__/channel.test.ts +16 -0
- package/src/runtime/routes/integrations/slack/channel.ts +4 -0
- package/src/runtime/routes/integrations/slack/share.ts +27 -6
- package/src/runtime/routes/integrations/telegram.ts +6 -0
- package/src/runtime/routes/integrations/twilio.ts +42 -0
- package/src/runtime/routes/internal-telemetry-routes.ts +88 -0
- package/src/runtime/routes/log-export-routes.ts +8 -0
- package/src/runtime/routes/memory-v2-routes.ts +15 -8
- package/src/runtime/routes/memory-v3-routes.ts +50 -28
- package/src/runtime/routes/oauth-apps.ts +66 -12
- package/src/runtime/routes/oauth-providers.ts +44 -5
- package/src/runtime/routes/platform-routes.ts +81 -5
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +6 -4
- package/src/runtime/routes/playground/force-compact.ts +1 -1
- package/src/runtime/routes/rename-conversation-routes.ts +5 -0
- package/src/runtime/routes/schedule-routes.ts +152 -42
- package/src/runtime/routes/secret-routes.ts +14 -2
- package/src/runtime/routes/skills-routes.ts +43 -14
- package/src/runtime/routes/tool-call-confirmation-enrichment.test.ts +161 -0
- package/src/runtime/routes/tool-call-confirmation-enrichment.ts +107 -0
- package/src/runtime/routes/trust-rules-routes.ts +26 -2
- package/src/runtime/routes/tts-routes.ts +35 -0
- package/src/runtime/routes/types.ts +66 -8
- package/src/runtime/routes/usage-routes.ts +47 -39
- package/src/runtime/routes/webhook-routes.ts +41 -2
- package/src/runtime/routes/workspace-routes.ts +4 -0
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +6 -0
- package/src/runtime/services/analyze-conversation.ts +2 -2
- package/src/schedule/schedule-store.ts +20 -1
- package/src/schedule/schedule-usage-store.ts +83 -0
- package/src/schedule/scheduler.ts +12 -5
- package/src/skills/catalog-files.ts +2 -2
- package/src/skills/catalog-install.ts +3 -0
- package/src/skills/categories-cache.ts +118 -0
- package/src/skills/clawhub-files.ts +1 -2
- package/src/skills/skillssh-files.ts +1 -2
- package/src/telemetry/types.ts +29 -1
- package/src/telemetry/usage-telemetry-reporter.test.ts +112 -3
- package/src/telemetry/usage-telemetry-reporter.ts +57 -2
- package/src/tools/executor.ts +1 -53
- package/src/tools/network/__tests__/web-search-metadata.test.ts +7 -1
- package/src/tools/network/__tests__/web-search.test.ts +11 -3
- package/src/tools/network/web-search-error.test.ts +248 -0
- package/src/tools/network/web-search-error.ts +267 -0
- package/src/tools/network/web-search.ts +207 -48
- package/src/tools/schedule/create.ts +2 -0
- package/src/tools/terminal/safe-env.ts +10 -1
- package/src/tools/ui-surface/definitions.ts +9 -1
- package/src/tts/__tests__/provider-catalog-consistency.test.ts +85 -1
- package/src/tts/provider-catalog.ts +76 -1
- package/src/util/mutex.ts +47 -0
- package/src/workspace/git-service.ts +1 -42
- package/src/workspace/migrations/095-bump-heartbeat-interval-30m-to-60m.ts +51 -0
- package/src/workspace/migrations/096-reduce-quality-profile-effort.ts +72 -0
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +93 -0
- package/src/workspace/migrations/registry.ts +6 -0
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +0 -44
- package/src/__tests__/empty-response-pipeline.test.ts +0 -423
- package/src/__tests__/llm-call-pipeline.test.ts +0 -287
- package/src/__tests__/memory-retrieval-pipeline.test.ts +0 -418
- package/src/__tests__/persistence-pipeline.test.ts +0 -503
- package/src/__tests__/title-generate-pipeline.test.ts +0 -211
- package/src/__tests__/token-estimate-pipeline.test.ts +0 -479
- package/src/__tests__/tool-error-pipeline.test.ts +0 -241
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -417
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +0 -341
- package/src/daemon/bootstrap-turn-cleanup.ts +0 -45
- package/src/gallery/default-gallery.ts +0 -1359
- package/src/gallery/gallery-manifest.ts +0 -28
- package/src/home/feature-gate.ts +0 -22
- package/src/plugins/defaults/empty-response/middlewares/emptyResponse.ts +0 -22
- package/src/plugins/defaults/empty-response/terminal.ts +0 -106
- package/src/plugins/defaults/injectors/package.json +0 -15
- package/src/plugins/defaults/llm-call/middlewares/llmCall.ts +0 -17
- package/src/plugins/defaults/llm-call/package.json +0 -15
- package/src/plugins/defaults/llm-call/register.ts +0 -45
- package/src/plugins/defaults/memory-retrieval/middlewares/memoryRetrieval.ts +0 -17
- package/src/plugins/defaults/memory-retrieval/package.json +0 -15
- package/src/plugins/defaults/memory-retrieval/register.ts +0 -181
- package/src/plugins/defaults/persistence/middlewares/persistence.ts +0 -19
- package/src/plugins/defaults/persistence/package.json +0 -15
- package/src/plugins/defaults/persistence/register.ts +0 -38
- package/src/plugins/defaults/persistence/terminal.ts +0 -83
- package/src/plugins/defaults/title-generate/terminal.ts +0 -31
- package/src/plugins/defaults/token-estimate/middlewares/tokenEstimate.ts +0 -23
- package/src/plugins/defaults/token-estimate/package.json +0 -15
- package/src/plugins/defaults/token-estimate/register.ts +0 -34
- package/src/plugins/defaults/token-estimate/terminal.ts +0 -40
- package/src/plugins/defaults/tool-error/middlewares/toolError.ts +0 -21
- package/src/plugins/defaults/tool-error/terminal.ts +0 -47
- package/src/plugins/defaults/tool-execute/middlewares/toolExecute.ts +0 -23
- package/src/plugins/defaults/tool-execute/package.json +0 -15
- package/src/plugins/defaults/tool-execute/register.ts +0 -49
- package/src/plugins/defaults/tool-result-truncate/middlewares/toolResultTruncate.ts +0 -23
- package/src/plugins/defaults/tool-result-truncate/types.ts +0 -22
- package/src/skills/category-inference.ts +0 -111
|
@@ -352,7 +352,8 @@ export interface HistoryConversationContext {
|
|
|
352
352
|
readonly traceEmitter: TraceEmitter;
|
|
353
353
|
/** @internal */ sendToClient: (msg: ServerMessage) => void;
|
|
354
354
|
messages: Message[];
|
|
355
|
-
|
|
355
|
+
isProcessing(): boolean;
|
|
356
|
+
setProcessing(value: boolean): void;
|
|
356
357
|
abortController: AbortController | null;
|
|
357
358
|
currentRequestId?: string;
|
|
358
359
|
runAgentLoop(
|
|
@@ -371,7 +372,7 @@ export interface HistoryConversationContext {
|
|
|
371
372
|
* Returns the number of messages removed.
|
|
372
373
|
*/
|
|
373
374
|
export function undo(conversation: HistoryConversationContext): number {
|
|
374
|
-
if (conversation.
|
|
375
|
+
if (conversation.isProcessing()) return 0;
|
|
375
376
|
|
|
376
377
|
const lastUserIdx = findLastUndoableUserMessageIndex(conversation.messages);
|
|
377
378
|
if (lastUserIdx === -1) return 0;
|
|
@@ -417,7 +418,7 @@ export async function regenerate(
|
|
|
417
418
|
conversation: HistoryConversationContext,
|
|
418
419
|
requestId?: string,
|
|
419
420
|
): Promise<void> {
|
|
420
|
-
if (conversation.
|
|
421
|
+
if (conversation.isProcessing()) {
|
|
421
422
|
conversation.sendToClient({
|
|
422
423
|
type: "error",
|
|
423
424
|
conversationId: conversation.conversationId,
|
|
@@ -571,7 +572,7 @@ export async function regenerate(
|
|
|
571
572
|
// Set up processing state manually and call runAgentLoop directly,
|
|
572
573
|
// bypassing processMessage to avoid duplicating the user message
|
|
573
574
|
// in both this.messages and the DB.
|
|
574
|
-
conversation.
|
|
575
|
+
conversation.setProcessing(true);
|
|
575
576
|
conversation.abortController = new AbortController();
|
|
576
577
|
const resolvedRequestId = requestId ?? uuid();
|
|
577
578
|
conversation.currentRequestId = resolvedRequestId;
|
|
@@ -30,14 +30,13 @@ import { unregisterCallNotifiers } from "./conversation-notifiers.js";
|
|
|
30
30
|
import type { MessageQueue } from "./conversation-queue-manager.js";
|
|
31
31
|
import { stripInjectionsForCompaction } from "./conversation-runtime-assembly.js";
|
|
32
32
|
import { resetSkillToolProjection } from "./conversation-skill-tools.js";
|
|
33
|
-
import { resolveTrustClass } from "./conversation-tool-setup.js";
|
|
34
33
|
import type {
|
|
35
34
|
SurfaceData,
|
|
36
35
|
SurfaceType,
|
|
37
36
|
UsageStats,
|
|
38
37
|
} from "./message-protocol.js";
|
|
39
38
|
import { filterMessagesForUntrustedActor } from "./message-provenance.js";
|
|
40
|
-
import type
|
|
39
|
+
import { resolveTrustClass, type TrustContext } from "./trust-context.js";
|
|
41
40
|
|
|
42
41
|
const log = getLogger("conversation-lifecycle");
|
|
43
42
|
|
|
@@ -89,7 +88,7 @@ export interface LoadFromDbContext {
|
|
|
89
88
|
|
|
90
89
|
export interface AbortContext {
|
|
91
90
|
readonly conversationId: string;
|
|
92
|
-
|
|
91
|
+
isProcessing(): boolean;
|
|
93
92
|
abortController: AbortController | null;
|
|
94
93
|
prompter: PermissionPrompter;
|
|
95
94
|
secretPrompter: SecretPrompter;
|
|
@@ -364,7 +363,7 @@ export function abortConversation(
|
|
|
364
363
|
ctx: AbortContext,
|
|
365
364
|
reason?: AbortReason,
|
|
366
365
|
): void {
|
|
367
|
-
if (ctx.
|
|
366
|
+
if (ctx.isProcessing()) {
|
|
368
367
|
const effectiveReason =
|
|
369
368
|
reason ??
|
|
370
369
|
createAbortReason(
|
|
@@ -187,7 +187,8 @@ function resolveIngressSecretTarget(
|
|
|
187
187
|
export interface MessagingConversationContext {
|
|
188
188
|
readonly conversationId: string;
|
|
189
189
|
messages: Message[];
|
|
190
|
-
|
|
190
|
+
isProcessing(): boolean;
|
|
191
|
+
setProcessing(value: boolean): void;
|
|
191
192
|
abortController: AbortController | null;
|
|
192
193
|
currentRequestId?: string;
|
|
193
194
|
readonly queue: MessageQueue;
|
|
@@ -323,7 +324,7 @@ export function enqueueMessage(
|
|
|
323
324
|
clientMessageId,
|
|
324
325
|
} = options;
|
|
325
326
|
|
|
326
|
-
if (!ctx.
|
|
327
|
+
if (!ctx.isProcessing()) {
|
|
327
328
|
return { queued: false, requestId };
|
|
328
329
|
}
|
|
329
330
|
|
|
@@ -384,7 +385,7 @@ export async function persistUserMessage(
|
|
|
384
385
|
): Promise<{ id: string; deduplicated: boolean }> {
|
|
385
386
|
const { content, attachments = [] } = options;
|
|
386
387
|
|
|
387
|
-
if (ctx.
|
|
388
|
+
if (ctx.isProcessing()) {
|
|
388
389
|
throw new Error("Conversation is already processing a message");
|
|
389
390
|
}
|
|
390
391
|
|
|
@@ -394,7 +395,7 @@ export async function persistUserMessage(
|
|
|
394
395
|
|
|
395
396
|
const reqId = options.requestId ?? uuid();
|
|
396
397
|
ctx.currentRequestId = reqId;
|
|
397
|
-
ctx.
|
|
398
|
+
ctx.setProcessing(true);
|
|
398
399
|
ctx.abortController = new AbortController();
|
|
399
400
|
|
|
400
401
|
try {
|
|
@@ -404,13 +405,13 @@ export async function persistUserMessage(
|
|
|
404
405
|
requestId: reqId,
|
|
405
406
|
});
|
|
406
407
|
if (result.deduplicated) {
|
|
407
|
-
ctx.
|
|
408
|
+
ctx.setProcessing(false);
|
|
408
409
|
ctx.abortController = null;
|
|
409
410
|
ctx.currentRequestId = undefined;
|
|
410
411
|
}
|
|
411
412
|
return result;
|
|
412
413
|
} catch (err) {
|
|
413
|
-
ctx.
|
|
414
|
+
ctx.setProcessing(false);
|
|
414
415
|
ctx.abortController = null;
|
|
415
416
|
ctx.currentRequestId = undefined;
|
|
416
417
|
throw err;
|
|
@@ -127,7 +127,8 @@ export function isModelSlashCommand(content: string): boolean {
|
|
|
127
127
|
export interface ProcessConversationContext {
|
|
128
128
|
readonly conversationId: string;
|
|
129
129
|
messages: Message[];
|
|
130
|
-
|
|
130
|
+
isProcessing(): boolean;
|
|
131
|
+
setProcessing(value: boolean): void;
|
|
131
132
|
abortController: AbortController | null;
|
|
132
133
|
currentRequestId?: string;
|
|
133
134
|
readonly queue: MessageQueue;
|
|
@@ -203,9 +204,7 @@ export interface ProcessConversationContext {
|
|
|
203
204
|
},
|
|
204
205
|
): void;
|
|
205
206
|
/** Force context compaction regardless of threshold/cooldown. */
|
|
206
|
-
forceCompact(
|
|
207
|
-
targetInputTokensOverride?: number;
|
|
208
|
-
}): Promise<ContextWindowResult>;
|
|
207
|
+
forceCompact(): Promise<ContextWindowResult>;
|
|
209
208
|
/** Strip runtime injections and reset memory-injection state. */
|
|
210
209
|
forceClean(): Promise<CleanResult>;
|
|
211
210
|
/** Set transport-derived hints for the conversation. */
|
|
@@ -757,9 +756,7 @@ async function drainSingleMessage(
|
|
|
757
756
|
conversation.emitActivityState("thinking", "context_compacting", {
|
|
758
757
|
requestId: next.requestId,
|
|
759
758
|
});
|
|
760
|
-
const result = await conversation.forceCompact(
|
|
761
|
-
targetInputTokensOverride: slashResult.targetInputTokensOverride,
|
|
762
|
-
});
|
|
759
|
+
const result = await conversation.forceCompact();
|
|
763
760
|
const responseText = formatCompactResult(result);
|
|
764
761
|
|
|
765
762
|
const assistantMsg = createAssistantMessage(responseText);
|
|
@@ -1022,7 +1019,7 @@ async function drainSingleMessage(
|
|
|
1022
1019
|
});
|
|
1023
1020
|
}
|
|
1024
1021
|
|
|
1025
|
-
// Fire-and-forget: persistUserMessage set
|
|
1022
|
+
// Fire-and-forget: persistUserMessage set the processing flag to true
|
|
1026
1023
|
// so subsequent messages will still be enqueued.
|
|
1027
1024
|
// runAgentLoop's finally block will call drainQueue when this run completes.
|
|
1028
1025
|
const drainLoopOptions: {
|
|
@@ -1215,7 +1212,7 @@ async function drainBatch(
|
|
|
1215
1212
|
// which were already shifted out of the queue by
|
|
1216
1213
|
// buildPassthroughBatch and would otherwise be stranded. Mirrors
|
|
1217
1214
|
// the head persist-failure recovery below.
|
|
1218
|
-
conversation.
|
|
1215
|
+
conversation.setProcessing(false);
|
|
1219
1216
|
conversation.abortController = null;
|
|
1220
1217
|
conversation.currentRequestId = undefined;
|
|
1221
1218
|
conversation.preactivatedSkillIds = undefined;
|
|
@@ -1732,7 +1729,7 @@ export async function processMessage(
|
|
|
1732
1729
|
|
|
1733
1730
|
// /compact — force context compaction, persist exchange, return message ID.
|
|
1734
1731
|
if (slashResult.kind === "compact") {
|
|
1735
|
-
conversation.
|
|
1732
|
+
conversation.setProcessing(true);
|
|
1736
1733
|
let persistedCompactMessage = false;
|
|
1737
1734
|
try {
|
|
1738
1735
|
const pmTurnCtx = conversation.getTurnChannelContext();
|
|
@@ -1773,9 +1770,7 @@ export async function processMessage(
|
|
|
1773
1770
|
conversation.emitActivityState("thinking", "context_compacting", {
|
|
1774
1771
|
requestId,
|
|
1775
1772
|
});
|
|
1776
|
-
const result = await conversation.forceCompact(
|
|
1777
|
-
targetInputTokensOverride: slashResult.targetInputTokensOverride,
|
|
1778
|
-
});
|
|
1773
|
+
const result = await conversation.forceCompact();
|
|
1779
1774
|
const responseText = formatCompactResult(result);
|
|
1780
1775
|
|
|
1781
1776
|
const assistantMsg = createAssistantMessage(responseText);
|
|
@@ -1809,14 +1804,14 @@ export async function processMessage(
|
|
|
1809
1804
|
}
|
|
1810
1805
|
throw err;
|
|
1811
1806
|
} finally {
|
|
1812
|
-
conversation.
|
|
1807
|
+
conversation.setProcessing(false);
|
|
1813
1808
|
await drainQueue(conversation);
|
|
1814
1809
|
}
|
|
1815
1810
|
}
|
|
1816
1811
|
|
|
1817
1812
|
// /clean — strip runtime injections, return message ID. No LLM call.
|
|
1818
1813
|
if (slashResult.kind === "clean") {
|
|
1819
|
-
conversation.
|
|
1814
|
+
conversation.setProcessing(true);
|
|
1820
1815
|
let persistedCleanMessage = false;
|
|
1821
1816
|
try {
|
|
1822
1817
|
const pmTurnCtx = conversation.getTurnChannelContext();
|
|
@@ -1888,7 +1883,7 @@ export async function processMessage(
|
|
|
1888
1883
|
}
|
|
1889
1884
|
throw err;
|
|
1890
1885
|
} finally {
|
|
1891
|
-
conversation.
|
|
1886
|
+
conversation.setProcessing(false);
|
|
1892
1887
|
await drainQueue(conversation);
|
|
1893
1888
|
}
|
|
1894
1889
|
}
|