@vellumai/assistant 0.8.7 → 0.8.8-dev.202606052332.17fc8ea
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/bun.lock +2 -2
- 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/examples/plugins/echo/README.md +61 -66
- package/examples/plugins/echo/hooks/post-tool-use.ts +18 -0
- package/examples/plugins/echo/hooks/stop.ts +16 -0
- package/examples/plugins/echo/hooks/user-prompt-submit.ts +18 -0
- package/examples/plugins/echo/package.json +1 -2
- package/examples/plugins/echo/src/emit.ts +19 -0
- package/node_modules/@vellumai/skill-host-contracts/src/server-message.ts +3 -3
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +7 -6
- package/openapi.yaml +3378 -335
- package/package.json +2 -2
- package/scripts/generate-openapi.ts +68 -41
- package/src/__tests__/agent-loop-exit-reason.test.ts +35 -93
- 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__/app-control-flow.test.ts +1 -1
- package/src/__tests__/app-dir-path-guard.test.ts +1 -0
- package/src/__tests__/approval-routes-http.test.ts +4 -1
- 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__/channel-approval-routes.test.ts +1 -1
- package/src/__tests__/channel-approvals.test.ts +1 -1
- package/src/__tests__/clawhub-files.test.ts +1 -1
- package/src/__tests__/compaction-circuit.test.ts +258 -0
- package/src/__tests__/compaction-direct.test.ts +132 -0
- 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 -5
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +10 -7
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +316 -1143
- package/src/__tests__/conversation-agent-loop.test.ts +638 -1655
- package/src/__tests__/conversation-analysis-routes.test.ts +6 -0
- package/src/__tests__/conversation-clean-command.test.ts +5 -2
- 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 +30 -10
- 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 +310 -300
- package/src/__tests__/conversation-runtime-workspace.test.ts +105 -45
- package/src/__tests__/conversation-slash-commands.test.ts +8 -42
- package/src/__tests__/conversation-slash-queue.test.ts +6 -1
- package/src/__tests__/conversation-starter-routes.test.ts +14 -6
- 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-cache-state.test.ts +17 -16
- package/src/__tests__/conversation-workspace-injection.test.ts +67 -2
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +7 -6
- package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
- package/src/__tests__/cross-provider-web-search.test.ts +214 -1
- package/src/__tests__/db-acp-history.test.ts +101 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +5 -0
- package/src/__tests__/dm-persistence.test.ts +5 -1
- package/src/__tests__/dynamic-page-surface.test.ts +31 -0
- package/src/__tests__/empty-response-hook.test.ts +304 -0
- package/src/__tests__/feature-flag-test-helpers.ts +2 -2
- package/src/__tests__/file-write-tool.test.ts +63 -0
- package/src/__tests__/gateway-only-guard.test.ts +12 -2
- package/src/__tests__/gemini-image-service.test.ts +13 -0
- package/src/__tests__/guardian-grant-minting.test.ts +1 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +2 -4
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
- package/src/__tests__/heartbeat-service.test.ts +1 -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__/host-app-control-routes.test.ts +1 -1
- package/src/__tests__/host-cu-routes-targeted.test.ts +3 -3
- 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 +3 -9
- package/src/__tests__/injector-chain.test.ts +139 -275
- package/src/__tests__/injector-disk-pressure.test.ts +75 -41
- package/src/__tests__/injector-document-comments.test.ts +3 -3
- 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-hidden-metadata.test.ts +38 -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__/{overflow-reduce-pipeline.test.ts → overflow-reduction-loop.test.ts} +64 -284
- package/src/__tests__/persist-unsendable-image.test.ts +215 -0
- package/src/__tests__/persistence-secret-redaction.test.ts +1 -0
- package/src/__tests__/pkb-autoinject.test.ts +2 -5
- package/src/__tests__/plugin-api-shim.test.ts +3 -6
- package/src/__tests__/plugin-bootstrap.test.ts +14 -40
- package/src/__tests__/plugin-registry.test.ts +3 -76
- package/src/__tests__/plugin-types.test.ts +0 -193
- package/src/__tests__/process-message-display-content.test.ts +6 -2
- package/src/__tests__/reaction-persistence.test.ts +1 -1
- 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__/send-endpoint-busy.test.ts +4 -1
- package/src/__tests__/server-history-render.test.ts +314 -1
- package/src/__tests__/skill-feature-flags-integration.test.ts +33 -0
- package/src/__tests__/skillssh-files.test.ts +1 -1
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-fork-notifications.test.ts +1 -3
- package/src/__tests__/subagent-fork-spawn.test.ts +1 -1
- package/src/__tests__/subagent-manager-notify.test.ts +1 -3
- package/src/__tests__/subagent-notify-parent.test.ts +1 -3
- package/src/__tests__/subagent-spawn-tool-fork.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 +54 -286
- package/src/__tests__/voice-session-bridge.test.ts +6 -3
- package/src/__tests__/web-search-backend-failure.test.ts +166 -0
- package/src/acp/__tests__/agent-process.test.ts +161 -0
- package/src/acp/__tests__/client-handler.test.ts +40 -0
- package/src/acp/__tests__/helpers/acp-history-db.ts +82 -0
- package/src/acp/__tests__/helpers/exec-file-stub.ts +101 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +137 -0
- package/src/acp/__tests__/session-manager-persistence.test.ts +95 -28
- package/src/acp/__tests__/session-manager-resume.test.ts +736 -0
- package/src/acp/agent-process.ts +61 -1
- package/src/acp/auto-install.test.ts +196 -0
- package/src/acp/auto-install.ts +177 -0
- package/src/acp/client-handler.ts +31 -0
- package/src/acp/feature-gate.test.ts +48 -0
- package/src/acp/feature-gate.ts +34 -0
- package/src/acp/prepare-agent-env.ts +83 -29
- package/src/acp/resolve-agent.test.ts +320 -7
- package/src/acp/resolve-agent.ts +182 -18
- package/src/acp/resume-hint.ts +25 -0
- package/src/acp/session-manager.ts +495 -73
- package/src/acp/types.ts +8 -0
- package/src/agent/compaction-circuit.ts +60 -102
- package/src/agent/loop.ts +362 -485
- 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 +374 -0
- package/src/approvals/guardian-request-resolvers.ts +1 -1
- package/src/avatar/__tests__/avatar-store.test.ts +34 -29
- package/src/background-wake/next-wake.ts +1 -0
- package/src/cli/commands/__tests__/notifications.test.ts +58 -14
- package/src/cli/commands/notifications.ts +112 -60
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/acp-defaults.test.ts +10 -0
- package/src/config/acp-defaults.ts +6 -0
- package/src/config/assistant-feature-flags.ts +22 -11
- package/src/config/bundled-skills/acp/SKILL.md +83 -31
- package/src/config/bundled-skills/acp/TOOLS.json +4 -4
- package/src/config/bundled-skills/app-builder/SKILL.md +224 -398
- package/src/config/bundled-skills/app-builder/TOOLS.json +29 -0
- package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +48 -0
- package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +57 -0
- package/src/config/bundled-skills/app-builder/references/SLIDES.md +38 -0
- 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/app-builder/tools/app-list.ts +62 -0
- package/src/config/bundled-skills/document-editor/SKILL.md +28 -23
- package/src/config/bundled-skills/document-editor/TOOLS.json +1 -1
- package/src/config/bundled-skills/messaging/SKILL.md +0 -7
- package/src/config/bundled-tool-registry.ts +2 -0
- package/src/config/feature-flag-cache.ts +3 -3
- package/src/config/feature-flag-registry.json +48 -7
- 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/heartbeat.ts +9 -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 +128 -0
- package/src/context/token-estimator.ts +23 -0
- package/src/context/tool-result-truncation.ts +0 -23
- package/src/context/window-manager.ts +5 -7
- 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 +594 -153
- package/src/daemon/conversation-agent-loop.ts +301 -997
- 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-registry.ts +159 -0
- package/src/daemon/conversation-runtime-assembly.ts +218 -398
- package/src/daemon/conversation-slash.ts +6 -25
- package/src/daemon/conversation-store.ts +9 -90
- package/src/daemon/conversation-surfaces.ts +222 -4
- package/src/daemon/conversation-tool-setup.ts +2 -29
- package/src/daemon/conversation-workspace.ts +17 -0
- package/src/daemon/conversation.ts +32 -20
- package/src/daemon/external-plugins-bootstrap.ts +17 -18
- 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/conversations.ts +3 -1
- package/src/daemon/handlers/shared.ts +156 -84
- package/src/daemon/handlers/skills.ts +42 -10
- package/src/daemon/lifecycle.ts +25 -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/overflow-reduction-loop.ts +230 -0
- package/src/daemon/persist-unsendable-image.ts +117 -0
- package/src/daemon/process-message.ts +1 -3
- package/src/daemon/server.ts +2 -0
- 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/heartbeat/__tests__/heartbeat-service.test.ts +3 -0
- package/src/heartbeat/heartbeat-run-store.ts +23 -1
- package/src/heartbeat/heartbeat-service.ts +26 -0
- package/src/home/home-greeting-cache.ts +24 -1
- package/src/ipc/__tests__/browser-ipc.test.ts +1 -1
- package/src/ipc/__tests__/ui-request-route.test.ts +3 -3
- package/src/ipc/gateway-client.test.ts +2 -2
- package/src/ipc/gateway-client.ts +3 -3
- package/src/ipc/skill-routes/__tests__/memory.test.ts +15 -0
- package/src/ipc/skill-routes/memory.ts +4 -2
- 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-starter-checkpoints.ts +1 -0
- package/src/memory/conversation-title-service.ts +65 -41
- package/src/memory/db-init.ts +6 -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/job-handlers/conversation-starters.ts +13 -2
- package/src/memory/jobs-store.ts +33 -0
- package/src/memory/jobs-worker.ts +32 -5
- 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/272-acp-session-history-cwd.ts +36 -0
- package/src/memory/migrations/index.ts +3 -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/acp.ts +4 -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 +4 -4
- package/src/memory/v2/consolidation-job.ts +14 -5
- 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 +7 -5
- package/src/plugin-api/types.ts +151 -1
- package/src/plugins/defaults/compaction/compact.ts +59 -0
- package/src/plugins/defaults/compaction/package.json +1 -1
- package/src/plugins/defaults/compaction/register.ts +8 -19
- 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 +2 -18
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +95 -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/{injectors/register.ts → memory-retrieval/injectors.ts} +288 -81
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/assign.test.ts +4 -4
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/health.test.ts +16 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/live-integration.test.ts +4 -4
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/maintain-job.test.ts +5 -5
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/orchestrate.test.ts +48 -12
- package/src/plugins/defaults/memory-v3-shadow/__tests__/provider-blocks.test.ts +13 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/reconcile.test.ts +2 -2
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/render-injection.test.ts +1 -1
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/router.test.ts +104 -32
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selection-log-store.test.ts +8 -8
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selector.test.ts +96 -30
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/shadow-plugin.test.ts +34 -16
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/assign.ts +5 -5
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/capabilities.ts +2 -2
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/health.ts +0 -0
- package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +14 -0
- package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +19 -0
- package/src/plugins/defaults/memory-v3-shadow/injector.ts +75 -0
- package/src/plugins/defaults/memory-v3-shadow/llm-retry.ts +32 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/maintain-job.ts +8 -8
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/orchestrate.ts +26 -14
- package/src/plugins/defaults/{llm-call → memory-v3-shadow}/package.json +2 -2
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/page-content.ts +2 -2
- package/src/plugins/defaults/memory-v3-shadow/provider-blocks.ts +26 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/reconcile.ts +3 -3
- package/src/plugins/defaults/memory-v3-shadow/register.ts +26 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/render-injection.ts +1 -1
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/router.ts +51 -45
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/selection-log-store.ts +4 -4
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/selector.ts +61 -46
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/shadow-plugin.ts +69 -99
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/tree.ts +1 -1
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/types.ts +8 -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/external-api.ts +2 -2
- package/src/plugins/pipeline.ts +6 -305
- package/src/plugins/registry.ts +10 -55
- package/src/plugins/types.ts +62 -797
- package/src/plugins/user-loader.ts +30 -127
- package/src/proactive-artifact/aux-message-injector.ts +4 -4
- package/src/proactive-artifact/job.test.ts +8 -13
- package/src/prompts/__tests__/system-prompt.test.ts +42 -0
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +64 -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 +10 -6
- package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
- package/src/runtime/agent-wake.ts +2 -5
- package/src/runtime/assistant-event-hub.ts +37 -7
- package/src/runtime/{conversation-stream-state.ts → assistant-stream-state.ts} +132 -58
- package/src/runtime/channel-approvals.ts +1 -1
- package/src/runtime/http-router.ts +16 -21
- package/src/runtime/http-types.ts +16 -70
- package/src/runtime/interactive-ui.ts +1 -1
- package/src/runtime/pending-interactions.ts +1 -0
- package/src/runtime/routes/__tests__/acp-routes.test.ts +283 -55
- package/src/runtime/routes/__tests__/consolidation-routes.test.ts +265 -2
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
- 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__/surface-action-routes.test.ts +5 -4
- package/src/runtime/routes/__tests__/surface-content-routes.test.ts +4 -1
- package/src/runtime/routes/__tests__/tts-routes.test.ts +6 -2
- package/src/runtime/routes/acp-routes.test.ts +89 -25
- package/src/runtime/routes/acp-routes.ts +81 -29
- package/src/runtime/routes/app-management-routes.ts +6 -117
- package/src/runtime/routes/app-routes.ts +13 -15
- package/src/runtime/routes/approval-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +26 -15
- package/src/runtime/routes/avatar-routes.ts +26 -0
- package/src/runtime/routes/browser-routes.ts +1 -1
- package/src/runtime/routes/browser-tabs-routes.ts +6 -10
- package/src/runtime/routes/btw-routes.ts +29 -23
- package/src/runtime/routes/consolidation-routes.ts +120 -20
- package/src/runtime/routes/conversation-cli-routes.ts +1 -1
- package/src/runtime/routes/conversation-list-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +3 -1
- package/src/runtime/routes/conversation-routes.ts +372 -185
- package/src/runtime/routes/conversation-starter-routes.ts +13 -7
- package/src/runtime/routes/conversations-import-routes.ts +24 -7
- 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/host-app-control-routes.ts +1 -1
- package/src/runtime/routes/host-cu-routes.ts +1 -1
- package/src/runtime/routes/identity-intro-cache.ts +11 -34
- package/src/runtime/routes/identity-routes.ts +224 -18
- package/src/runtime/routes/image-generation-routes.ts +40 -2
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- 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 +66 -34
- 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/playground/helpers.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/surface-conversation-resolver.ts +4 -3
- 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/work-items-routes.ts +2 -4
- 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/runtime/services/conversation-serializer.ts +1 -1
- 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/signals/cancel.ts +2 -4
- 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/subagent/manager.ts +17 -5
- 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/acp/context.ts +20 -0
- package/src/tools/acp/list-agents.test.ts +7 -1
- package/src/tools/acp/spawn.test.ts +158 -55
- package/src/tools/acp/spawn.ts +47 -72
- package/src/tools/acp/steer.test.ts +105 -8
- package/src/tools/acp/steer.ts +48 -17
- package/src/tools/apps/executors.ts +13 -8
- package/src/tools/executor.ts +1 -53
- package/src/tools/filesystem/write.ts +34 -0
- 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/subagent/spawn.ts +2 -4
- package/src/tools/terminal/safe-env.ts +10 -1
- package/src/tools/ui-surface/definitions.ts +34 -5
- 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/051-seed-conversation-summarization-callsite.ts +4 -5
- 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 +117 -0
- package/src/workspace/migrations/registry.ts +6 -0
- package/docs/plugins.md +0 -836
- package/examples/plugins/echo/register.ts +0 -184
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +0 -44
- package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -405
- package/src/__tests__/compaction-pipeline.test.ts +0 -210
- package/src/__tests__/compaction-timeout-recovery.test.ts +0 -251
- 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__/pipeline-runner.test.ts +0 -564
- 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/memory/v3/provider-blocks.ts +0 -16
- package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +0 -93
- package/src/plugins/defaults/circuit-breaker/package.json +0 -15
- package/src/plugins/defaults/circuit-breaker/register.ts +0 -39
- package/src/plugins/defaults/compaction/middlewares/compaction.ts +0 -25
- package/src/plugins/defaults/compaction/terminal.ts +0 -73
- 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/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/overflow-reduce/middlewares/overflowReduce.ts +0 -126
- package/src/plugins/defaults/overflow-reduce/package.json +0 -15
- package/src/plugins/defaults/overflow-reduce/register.ts +0 -42
- 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
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/capabilities.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/core.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/eval-turns.json +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/live-turns.json +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/needle.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/snapshot.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/tree.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/types.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-eviction.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-skeleton.test.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/core.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/README.md +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/assignments.json +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/core.json +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-x.md +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-y.md +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-b/topic-z.md +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/needle.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/snapshot.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/working-set.ts +0 -0
package/Dockerfile
CHANGED
|
@@ -77,6 +77,7 @@ RUN apt-get update && apt-get install -y \
|
|
|
77
77
|
debootstrap \
|
|
78
78
|
debian-archive-keyring \
|
|
79
79
|
debconf \
|
|
80
|
+
e2fsprogs \
|
|
80
81
|
ffmpeg \
|
|
81
82
|
fonts-freefont-ttf \
|
|
82
83
|
g++ \
|
|
@@ -113,11 +114,13 @@ RUN apt-get update && apt-get install -y \
|
|
|
113
114
|
libxtst6 \
|
|
114
115
|
lsof \
|
|
115
116
|
make \
|
|
117
|
+
mount \
|
|
116
118
|
openssl \
|
|
117
119
|
procps \
|
|
118
120
|
python3 \
|
|
119
121
|
sqlite3 \
|
|
120
122
|
sudo \
|
|
123
|
+
util-linux \
|
|
121
124
|
unzip \
|
|
122
125
|
uuid-runtime \
|
|
123
126
|
vim \
|
|
@@ -180,7 +183,8 @@ RUN printf '%s\n' \
|
|
|
180
183
|
RUN printf '%s\n' \
|
|
181
184
|
'#!/usr/bin/env sh' \
|
|
182
185
|
'set -eu' \
|
|
183
|
-
'
|
|
186
|
+
'. /app/assistant/docker-kata-runtime-family.sh' \
|
|
187
|
+
'if ! vellum_is_kata_family_runtime; then' \
|
|
184
188
|
' exec /usr/bin/apt-get "$@"' \
|
|
185
189
|
'fi' \
|
|
186
190
|
'export DEBIAN_FRONTEND=noninteractive' \
|
|
@@ -195,7 +199,8 @@ RUN printf '%s\n' \
|
|
|
195
199
|
printf '%s\n' \
|
|
196
200
|
'#!/usr/bin/env sh' \
|
|
197
201
|
'set -eu' \
|
|
198
|
-
'
|
|
202
|
+
'. /app/assistant/docker-kata-runtime-family.sh' \
|
|
203
|
+
'if ! vellum_is_kata_family_runtime; then' \
|
|
199
204
|
' exec /usr/bin/apt "$@"' \
|
|
200
205
|
'fi' \
|
|
201
206
|
'export DEBIAN_FRONTEND=noninteractive' \
|
|
@@ -210,7 +215,8 @@ RUN printf '%s\n' \
|
|
|
210
215
|
printf '%s\n' \
|
|
211
216
|
'#!/usr/bin/env sh' \
|
|
212
217
|
'set -eu' \
|
|
213
|
-
'
|
|
218
|
+
'. /app/assistant/docker-kata-runtime-family.sh' \
|
|
219
|
+
'if ! vellum_is_kata_family_runtime; then' \
|
|
214
220
|
' exec /usr/bin/dpkg "$@"' \
|
|
215
221
|
'fi' \
|
|
216
222
|
'DATA_ROOT="${VELLUM_APT_DATA_ROOT:-/data/system}"' \
|
|
@@ -236,7 +242,17 @@ ENV IS_CONTAINERIZED=true
|
|
|
236
242
|
# and the generated meet-join manifest from the builder stage.
|
|
237
243
|
COPY --from=builder /app /app
|
|
238
244
|
|
|
239
|
-
|
|
245
|
+
COPY packages/block-volume-bootstrap/scripts/*.sh /usr/local/bin/
|
|
246
|
+
|
|
247
|
+
RUN chmod +x \
|
|
248
|
+
/app/assistant/docker-entrypoint.sh \
|
|
249
|
+
/app/assistant/docker-init-apt-root.sh \
|
|
250
|
+
/app/assistant/docker-kata-apt-env.sh \
|
|
251
|
+
/app/assistant/docker-kata-runtime-family.sh \
|
|
252
|
+
/usr/local/bin/vellum-block-volume-common.sh \
|
|
253
|
+
/usr/local/bin/vellum-block-volume-init.sh \
|
|
254
|
+
/usr/local/bin/vellum-block-volume-mount.sh \
|
|
255
|
+
/usr/local/bin/vellum-block-volume-resize.sh
|
|
240
256
|
|
|
241
257
|
# Run the daemon + http server
|
|
242
258
|
CMD ["/app/assistant/docker-entrypoint.sh"]
|
package/bun.lock
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"": {
|
|
6
6
|
"name": "@vellumai/assistant",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@agentclientprotocol/sdk": "0.
|
|
8
|
+
"@agentclientprotocol/sdk": "0.25.0",
|
|
9
9
|
"@anthropic-ai/sdk": "0.78.0",
|
|
10
10
|
"@google/genai": "1.45.0",
|
|
11
11
|
"@modelcontextprotocol/sdk": "1.27.1",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"path-to-regexp": "8.4.2",
|
|
72
72
|
},
|
|
73
73
|
"packages": {
|
|
74
|
-
"@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.
|
|
74
|
+
"@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.25.0", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-wU1VgXNtMvdVotX49txc3WJUDV+/QbLpsgjMvFhlRmp37osdLbI7L7y+iwAlQATwfjLxcv1r1p3ZxZBcXlGhcQ=="],
|
|
75
75
|
|
|
76
76
|
"@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.78.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-PzQhR715td/m1UaaN5hHXjYB8Gl2lF9UVhrrGrZeysiF6Rb74Wc9GCB8hzLdzmQtBd1qe89F9OptgB9Za1Ib5w=="],
|
|
77
77
|
|
package/docker-entrypoint.sh
CHANGED
|
@@ -6,9 +6,11 @@ set -eu
|
|
|
6
6
|
chmod 1777 /tmp 2>/dev/null || true
|
|
7
7
|
|
|
8
8
|
KATA_APT_INIT_PID=""
|
|
9
|
-
|
|
9
|
+
. /app/assistant/docker-kata-runtime-family.sh
|
|
10
|
+
|
|
11
|
+
if vellum_is_kata_family_runtime && [ -x /app/assistant/docker-init-apt-root.sh ]; then
|
|
10
12
|
export VELLUM_APT_DATA_ROOT="${VELLUM_APT_DATA_ROOT:-/data/system}"
|
|
11
|
-
# Warm the chroot used by
|
|
13
|
+
# Warm the chroot used by Kata-family apt wrappers without blocking assistant readiness.
|
|
12
14
|
/app/assistant/docker-init-apt-root.sh &
|
|
13
15
|
KATA_APT_INIT_PID="$!"
|
|
14
16
|
fi
|
package/docker-init-apt-root.sh
CHANGED
|
@@ -10,7 +10,9 @@ LOCK_DIR="${DATA_ROOT}.rootfs-init.lock"
|
|
|
10
10
|
LOCK_PID="${LOCK_DIR}/pid"
|
|
11
11
|
HOST_PATH="/usr/sbin:/usr/bin:/sbin:/bin"
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
. /app/assistant/docker-kata-runtime-family.sh
|
|
14
|
+
|
|
15
|
+
if ! vellum_is_kata_family_runtime; then
|
|
14
16
|
exit 0
|
|
15
17
|
fi
|
|
16
18
|
|
package/docker-kata-apt-env.sh
CHANGED
|
@@ -244,7 +244,7 @@ graph TB
|
|
|
244
244
|
|
|
245
245
|
Normal context compaction (the "Context Window Management" subgraph above) runs proactively as the conversation approaches the token limit, using cooldown guards and a severity-pressure override to balance compaction frequency against cost. This is the primary defense against context overflow.
|
|
246
246
|
|
|
247
|
-
When compaction alone is insufficient — either because the conversation grew too fast between turns or because a single turn contains extremely large payloads — the overflow recovery pipeline takes over. The pipeline's first tier (forced compaction) reuses the same `maybeCompact()` summarization machinery but with emergency parameters: `force: true` bypasses cooldown guards
|
|
247
|
+
When compaction alone is insufficient — either because the conversation grew too fast between turns or because a single turn contains extremely large payloads — the overflow recovery pipeline takes over. The pipeline's first tier (forced compaction) reuses the same `maybeCompact()` summarization machinery but with emergency parameters: `force: true` bypasses cooldown guards and `minKeepRecentUserTurns: 0` allows summarizing even the most recent history. The reducer drives convergence toward a tighter budget by re-invoking each tier until the estimated tokens fall under its `targetTokens` ceiling. Subsequent tiers (tool-result truncation, media stubbing, injection downgrade) apply progressively more aggressive payload reduction without involving the summarizer.
|
|
248
248
|
|
|
249
249
|
If all four reducer tiers are exhausted, the overflow policy resolver determines whether to compress the latest user turn. All sessions — interactive and non-interactive alike — auto-compress the latest turn without prompting. The only explicit opt-out is setting `contextWindow.overflowRecovery.interactiveLatestTurnCompression` (or `nonInteractiveLatestTurnCompression`) to `"drop"`, which short-circuits to a graceful failure instead. Disabling overflow recovery entirely (`contextWindow.overflowRecovery.enabled: false`) also yields a graceful failure.
|
|
250
250
|
|
|
@@ -1,45 +1,59 @@
|
|
|
1
1
|
# Echo plugin
|
|
2
2
|
|
|
3
|
-
Minimal example plugin. Observes
|
|
4
|
-
line per invocation to `stderr`:
|
|
3
|
+
Minimal example plugin. Observes the assistant's turn-lifecycle hooks and logs
|
|
4
|
+
one JSON line per hook invocation to `stderr`:
|
|
5
5
|
|
|
6
6
|
```json
|
|
7
|
-
{
|
|
8
|
-
|
|
7
|
+
{
|
|
8
|
+
"plugin": "echo",
|
|
9
|
+
"hook": "post-tool-use",
|
|
10
|
+
"conversationId": "conv_abc123"
|
|
11
|
+
}
|
|
9
12
|
```
|
|
10
13
|
|
|
11
14
|
Use this as a starting point for writing your own plugin, or as a quick way
|
|
12
|
-
to eyeball which
|
|
13
|
-
take.
|
|
15
|
+
to eyeball which hooks fire during a conversation.
|
|
14
16
|
|
|
15
|
-
For the full plugin authoring guide,
|
|
16
|
-
|
|
17
|
+
For the full plugin authoring guide — manifest shape, every contribution
|
|
18
|
+
surface, hook patterns, and conventions — see
|
|
19
|
+
[`experimental/plugins/README.md`](../../../../experimental/plugins/README.md).
|
|
20
|
+
[`simple-memory`](../../../../experimental/plugins/simple-memory/) is the
|
|
21
|
+
canonical reference implementation that exercises every wired surface.
|
|
17
22
|
|
|
18
23
|
## What it does
|
|
19
24
|
|
|
20
|
-
-
|
|
21
|
-
`
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
- Contributes one observer hook per turn-lifecycle event:
|
|
26
|
+
`user-prompt-submit`, `post-tool-use`, and `stop`.
|
|
27
|
+
- Each hook emits one line to `stderr` and returns `void`, so the threaded
|
|
28
|
+
context flows through unchanged.
|
|
29
|
+
- Never modifies the turn's messages, tool results, or stop decision. It is
|
|
30
|
+
purely observational — safe to stack alongside any other plugin.
|
|
31
|
+
|
|
32
|
+
## Directory layout
|
|
33
|
+
|
|
34
|
+
The assistant discovers a plugin by its `package.json` manifest and builds the
|
|
35
|
+
`Plugin` from the interface directories — `hooks/<name>.ts` files whose default
|
|
36
|
+
export is the hook function. Files under `src/` are internal helpers and are
|
|
37
|
+
not walked by the loader.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
echo/
|
|
41
|
+
├── package.json # Manifest (name + @vellumai/plugin-api range)
|
|
42
|
+
├── README.md
|
|
43
|
+
├── hooks/
|
|
44
|
+
│ ├── user-prompt-submit.ts # default export = hook function
|
|
45
|
+
│ ├── post-tool-use.ts
|
|
46
|
+
│ └── stop.ts
|
|
47
|
+
└── src/
|
|
48
|
+
└── emit.ts # shared stderr emitter (not a surface)
|
|
49
|
+
```
|
|
30
50
|
|
|
31
51
|
## Install locally
|
|
32
52
|
|
|
33
53
|
The assistant scans `<workspaceDir>/plugins/*` (e.g.
|
|
34
|
-
`~/.vellum/workspace/plugins/`) for subdirectories containing a
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
enable it.
|
|
38
|
-
|
|
39
|
-
The plugin reads `registerPlugin` from `globalThis.__vellumPluginRuntime`,
|
|
40
|
-
which the daemon attaches before scanning plugins. This works against both
|
|
41
|
-
the `bun --compile`-bundled daemon binary AND a daemon running from
|
|
42
|
-
source — no special install procedure required either way.
|
|
54
|
+
`~/.vellum/workspace/plugins/`) for subdirectories containing a `package.json`
|
|
55
|
+
and loads each one during assistant startup. Dropping (or symlinking) this
|
|
56
|
+
directory in place is enough to enable it.
|
|
43
57
|
|
|
44
58
|
### Option 1 — symlink from the repo (simplest in-repo dev)
|
|
45
59
|
|
|
@@ -56,23 +70,10 @@ pick up changes.
|
|
|
56
70
|
### Option 2 — standalone copy
|
|
57
71
|
|
|
58
72
|
A plain `cp -R` of this directory into `~/.vellum/workspace/plugins/echo/`
|
|
59
|
-
works
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
at an absolute path inside any checkout — they're erased at compile time
|
|
64
|
-
and have no module-identity effect at runtime:
|
|
65
|
-
|
|
66
|
-
```ts
|
|
67
|
-
// before (repo-local):
|
|
68
|
-
import type { VellumPluginRuntime } from "../../../src/plugins/external-api.js";
|
|
69
|
-
import type { Plugin } from "../../../src/plugins/types.js";
|
|
70
|
-
// after (standalone, edit to your checkout path):
|
|
71
|
-
import type { VellumPluginRuntime } from "/path/to/vellum-assistant/assistant/src/plugins/external-api.js";
|
|
72
|
-
import type { Plugin } from "/path/to/vellum-assistant/assistant/src/plugins/types.js";
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
No runtime-import rewriting is needed — the bridge already handles that.
|
|
73
|
+
works as-is. The hooks import their types from the public `@vellumai/plugin-api`
|
|
74
|
+
specifier, which the daemon materializes as a workspace-level shim before it
|
|
75
|
+
loads any plugin — so the copied directory resolves it without any path
|
|
76
|
+
rewriting, in or out of a vellum-assistant checkout.
|
|
76
77
|
|
|
77
78
|
### Restart the assistant
|
|
78
79
|
|
|
@@ -86,28 +87,23 @@ vellum restart
|
|
|
86
87
|
## Verify it works
|
|
87
88
|
|
|
88
89
|
With the plugin installed and the assistant restarted, send any message
|
|
89
|
-
that exercises a
|
|
90
|
-
|
|
90
|
+
that exercises a turn — a conversation reply, a tool call — and tail the
|
|
91
|
+
assistant's stderr log:
|
|
91
92
|
|
|
92
93
|
```bash
|
|
93
94
|
tail -f ~/.vellum/daemon.log
|
|
94
95
|
```
|
|
95
96
|
|
|
96
|
-
You should see one line per
|
|
97
|
+
You should see one line per hook invocation, similar to:
|
|
97
98
|
|
|
98
99
|
```json
|
|
99
|
-
{
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
{"plugin":"echo","pipeline":"turn","durationMs":1590,"outcome":"success"}
|
|
100
|
+
{
|
|
101
|
+
"plugin": "echo",
|
|
102
|
+
"hook": "post-tool-use",
|
|
103
|
+
"conversationId": "conv_abc123"
|
|
104
|
+
}
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
If a pipeline throws (for example, a tool that errors out), you'll see a
|
|
108
|
-
line with `"outcome":"error"` — the plugin rethrows after logging so the
|
|
109
|
-
original error still propagates.
|
|
110
|
-
|
|
111
107
|
## Uninstall
|
|
112
108
|
|
|
113
109
|
Remove the symlink (or the copied directory) and restart the assistant:
|
|
@@ -119,14 +115,13 @@ vellum restart
|
|
|
119
115
|
|
|
120
116
|
## Next steps
|
|
121
117
|
|
|
122
|
-
- Read [`
|
|
123
|
-
plugin authoring guide: manifest shape,
|
|
124
|
-
(observe / transform
|
|
125
|
-
|
|
126
|
-
troubleshooting.
|
|
118
|
+
- Read [`experimental/plugins/README.md`](../../../../experimental/plugins/README.md)
|
|
119
|
+
for the full plugin authoring guide: manifest shape, every contribution
|
|
120
|
+
surface, hook patterns (observe / transform), tool contributions, and
|
|
121
|
+
conventions.
|
|
127
122
|
- Look at the first-party default plugins under
|
|
128
|
-
`assistant/src/plugins/defaults/` for examples of
|
|
129
|
-
|
|
123
|
+
`assistant/src/plugins/defaults/` for examples of hooks that transform a
|
|
124
|
+
turn rather than just observing it.
|
|
130
125
|
- Build your own plugin by copying this directory, renaming the manifest
|
|
131
|
-
`name`, and replacing the observer with
|
|
132
|
-
|
|
126
|
+
`name`, and replacing the observer hooks with ones that do whatever you
|
|
127
|
+
need.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `post-tool-use` hook for the echo plugin.
|
|
3
|
+
*
|
|
4
|
+
* Purely observational — logs one structured line to stderr and returns
|
|
5
|
+
* `void`, leaving the tool result untouched.
|
|
6
|
+
*
|
|
7
|
+
* Convention: the default export is the function the harness invokes.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { PostToolUseContext } from "@vellumai/plugin-api";
|
|
11
|
+
|
|
12
|
+
import { emit } from "../src/emit.js";
|
|
13
|
+
|
|
14
|
+
export default async function postToolUse(
|
|
15
|
+
ctx: PostToolUseContext,
|
|
16
|
+
): Promise<void> {
|
|
17
|
+
emit("post-tool-use", ctx.conversationId);
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `stop` hook for the echo plugin.
|
|
3
|
+
*
|
|
4
|
+
* Purely observational — logs one structured line to stderr and returns
|
|
5
|
+
* `void`, leaving the stop decision untouched.
|
|
6
|
+
*
|
|
7
|
+
* Convention: the default export is the function the harness invokes.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { StopContext } from "@vellumai/plugin-api";
|
|
11
|
+
|
|
12
|
+
import { emit } from "../src/emit.js";
|
|
13
|
+
|
|
14
|
+
export default async function stop(ctx: StopContext): Promise<void> {
|
|
15
|
+
emit("stop", ctx.conversationId);
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `user-prompt-submit` hook for the echo plugin.
|
|
3
|
+
*
|
|
4
|
+
* Purely observational — logs one structured line to stderr and returns
|
|
5
|
+
* `void`, leaving the threaded context (message list, injections) untouched.
|
|
6
|
+
*
|
|
7
|
+
* Convention: the default export is the function the harness invokes.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { UserPromptSubmitContext } from "@vellumai/plugin-api";
|
|
11
|
+
|
|
12
|
+
import { emit } from "../src/emit.js";
|
|
13
|
+
|
|
14
|
+
export default async function userPromptSubmit(
|
|
15
|
+
ctx: UserPromptSubmitContext,
|
|
16
|
+
): Promise<void> {
|
|
17
|
+
emit("user-prompt-submit", ctx.conversationId);
|
|
18
|
+
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vellumai/plugin-echo-example",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"description": "Example plugin that observes every assistant
|
|
4
|
+
"description": "Example plugin that observes every assistant turn-lifecycle hook and logs one structured line per invocation to stderr. Meant as an authoring reference — not shipped with the assistant runtime.",
|
|
5
5
|
"private": true,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
|
-
"main": "./register.ts",
|
|
9
8
|
"engines": {
|
|
10
9
|
"node": ">=20.12.0"
|
|
11
10
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared stderr emitter for the echo plugin's hooks.
|
|
3
|
+
*
|
|
4
|
+
* Files under `src/` are internal helpers — the external-plugin loader does
|
|
5
|
+
* not walk this directory, so it contributes no surface of its own. The
|
|
6
|
+
* `hooks/` files import from here.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export const PLUGIN_NAME = "echo";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* One line written to stderr per hook invocation. Kept intentionally compact —
|
|
13
|
+
* pino-style JSON so operators can pipe the assistant's stderr through `jq`
|
|
14
|
+
* without reshaping.
|
|
15
|
+
*/
|
|
16
|
+
export function emit(hook: string, conversationId: string): void {
|
|
17
|
+
const record = { plugin: PLUGIN_NAME, hook, conversationId };
|
|
18
|
+
process.stderr.write(`${JSON.stringify(record)}\n`);
|
|
19
|
+
}
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
* Moving the fully typed discriminated union into this package would
|
|
17
17
|
* require relocating `assistant/src/daemon/message-types/` and its
|
|
18
18
|
* cross-file type dependencies (`channels/types.ts`,
|
|
19
|
-
* `skills/skillssh-registry.ts`, `runtime/guardian-decision-types.ts
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* `skills/skillssh-registry.ts`, `runtime/guardian-decision-types.ts`).
|
|
20
|
+
* That is out of scope for PR 3 of the skill-isolation plan and is
|
|
21
|
+
* tracked for later iteration.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
/**
|
|
@@ -194,8 +194,12 @@ export interface ProvidersFacet {
|
|
|
194
194
|
// Memory
|
|
195
195
|
// ---------------------------------------------------------------------------
|
|
196
196
|
|
|
197
|
-
/**
|
|
198
|
-
|
|
197
|
+
/**
|
|
198
|
+
* Valid message roles for `memory.addMessage`. The messages store is
|
|
199
|
+
* UI-facing (`ConversationMessage`), so only renderable turns are accepted —
|
|
200
|
+
* agent-context `system` rows are not persisted via this facet.
|
|
201
|
+
*/
|
|
202
|
+
export type MessageRole = "user" | "assistant";
|
|
199
203
|
|
|
200
204
|
/**
|
|
201
205
|
* Callable signature for `memory.addMessage`. Mirrors the daemon's
|
|
@@ -247,10 +251,7 @@ export interface Subscription {
|
|
|
247
251
|
export interface EventsFacet {
|
|
248
252
|
publish(event: AssistantEvent): Promise<void>;
|
|
249
253
|
subscribe(filter: Filter, cb: AssistantEventCallback): Subscription;
|
|
250
|
-
buildEvent(
|
|
251
|
-
message: ServerMessage,
|
|
252
|
-
conversationId?: string,
|
|
253
|
-
): AssistantEvent;
|
|
254
|
+
buildEvent(message: ServerMessage, conversationId?: string): AssistantEvent;
|
|
254
255
|
}
|
|
255
256
|
|
|
256
257
|
// ---------------------------------------------------------------------------
|