@vellumai/assistant 0.8.8 → 0.8.9-dev.202606091853.fbaa2ae
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +6 -6
- package/bun.lock +2 -2
- package/docs/activation-funnel-telemetry.md +310 -0
- package/examples/plugins/echo/README.md +61 -60
- 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/skill-host.ts +7 -6
- package/openapi.yaml +263 -121
- package/package.json +2 -2
- package/src/__tests__/activation-early-marking.test.ts +120 -0
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +69 -14
- package/src/__tests__/agent-loop-exit-reason.test.ts +204 -144
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +50 -35
- package/src/__tests__/agent-loop-output-hooks.test.ts +357 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +25 -6
- package/src/__tests__/agent-loop-provider-error-recording.test.ts +41 -21
- package/src/__tests__/agent-loop-thinking.test.ts +36 -20
- package/src/__tests__/agent-loop.test.ts +441 -96
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +14 -14
- package/src/__tests__/agent-wake-override-profile.test.ts +17 -21
- package/src/__tests__/anthropic-provider.test.ts +23 -8
- package/src/__tests__/app-builder-tool-scripts.test.ts +21 -0
- package/src/__tests__/app-control-flow.test.ts +1 -1
- package/src/__tests__/app-dir-path-guard.test.ts +1 -0
- package/src/__tests__/app-executors.test.ts +132 -0
- package/src/__tests__/approval-cascade.test.ts +6 -5
- package/src/__tests__/approval-routes-http.test.ts +4 -1
- package/src/__tests__/background-workers-disk-pressure.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__/compaction-circuit.test.ts +258 -0
- package/src/__tests__/compaction-direct.test.ts +146 -0
- package/src/__tests__/compaction-events.test.ts +7 -7
- package/src/__tests__/compaction.benchmark.test.ts +1 -1
- package/src/__tests__/compactor-web-search-strip.test.ts +213 -0
- package/src/__tests__/context-overflow-reducer.test.ts +265 -125
- package/src/__tests__/context-window-manager-compact-retry.test.ts +121 -15
- package/src/__tests__/conversation-abort-tool-results.test.ts +7 -5
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +7 -10
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +78 -119
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +158 -234
- package/src/__tests__/conversation-agent-loop.test.ts +342 -623
- package/src/__tests__/conversation-clean-command.test.ts +5 -2
- package/src/__tests__/conversation-confirmation-signals.test.ts +6 -5
- package/src/__tests__/conversation-crud-inference-profile.test.ts +7 -9
- package/src/__tests__/conversation-error.test.ts +15 -1
- package/src/__tests__/conversation-history-web-search.test.ts +6 -1
- package/src/__tests__/conversation-media-retry.test.ts +1 -1
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +44 -4
- package/src/__tests__/conversation-process-callsite.test.ts +15 -15
- package/src/__tests__/conversation-provider-retry-repair.test.ts +66 -65
- package/src/__tests__/conversation-queue.test.ts +10 -10
- package/src/__tests__/conversation-runtime-assembly.test.ts +1059 -231
- package/src/__tests__/conversation-runtime-workspace.test.ts +115 -20
- package/src/__tests__/conversation-slash-queue.test.ts +7 -5
- package/src/__tests__/conversation-slash-unknown.test.ts +7 -5
- package/src/__tests__/conversation-speed-override.test.ts +11 -10
- package/src/__tests__/conversation-starter-routes.test.ts +14 -6
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +395 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +48 -1
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +73 -4
- package/src/__tests__/conversation-undo.test.ts +2 -2
- package/src/__tests__/conversation-workspace-cache-state.test.ts +24 -21
- package/src/__tests__/conversation-workspace-injection.test.ts +69 -7
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +15 -12
- package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
- package/src/__tests__/corrected-target.test.ts +93 -0
- package/src/__tests__/credential-security-invariants.test.ts +1 -0
- package/src/__tests__/cu-unified-flow.test.ts +36 -0
- package/src/__tests__/db-acp-history.test.ts +101 -0
- package/src/__tests__/dynamic-page-surface.test.ts +31 -0
- package/src/__tests__/empty-response-hook.test.ts +1 -1
- package/src/__tests__/file-write-tool.test.ts +63 -0
- package/src/__tests__/gateway-only-guard.test.ts +17 -2
- package/src/__tests__/guardian-grant-minting.test.ts +1 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +93 -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__/history-repair-hook.test.ts +5 -1
- package/src/__tests__/host-app-control-proxy.test.ts +45 -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__/inference-profile-reaper.test.ts +62 -0
- package/src/__tests__/inference-profile-session-handler.test.ts +86 -0
- package/src/__tests__/injector-background-turn.test.ts +13 -23
- package/src/__tests__/injector-chain.test.ts +268 -44
- package/src/__tests__/injector-disk-pressure.test.ts +210 -52
- package/src/__tests__/injector-document-comments.test.ts +97 -114
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +2 -2
- package/src/__tests__/injector-v3-suppression.test.ts +4 -4
- package/src/__tests__/list-messages-client-message-id.test.ts +91 -0
- package/src/__tests__/list-messages-hidden-metadata.test.ts +38 -0
- package/src/__tests__/llm-resolver.test.ts +73 -0
- package/src/__tests__/memory-retrieval-hook.test.ts +156 -38
- package/src/__tests__/memory-v2-static-injector.test.ts +86 -8
- package/src/__tests__/notification-decision-strategy.test.ts +3 -3
- package/src/__tests__/parallel-tool.benchmark.test.ts +35 -8
- package/src/__tests__/persist-unsendable-image-downscale.test.ts +145 -0
- package/src/__tests__/persist-unsendable-image.test.ts +97 -1
- package/src/__tests__/plugin-api-shim.test.ts +6 -9
- package/src/__tests__/plugin-bootstrap.test.ts +91 -81
- package/src/__tests__/plugin-registry.test.ts +3 -49
- package/src/__tests__/plugin-skill-contribution.test.ts +15 -14
- package/src/__tests__/plugin-tool-contribution.test.ts +7 -4
- package/src/__tests__/plugin-types.test.ts +0 -70
- package/src/__tests__/post-turn-tool-result-truncation.test.ts +69 -0
- package/src/__tests__/pre-model-call-sanitize.test.ts +109 -0
- package/src/__tests__/published-app-updater.test.ts +138 -0
- package/src/__tests__/reaction-persistence.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +4 -1
- package/src/__tests__/skill-feature-flags-integration.test.ts +31 -0
- package/src/__tests__/steer-tool-repair.test.ts +1 -1
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-detail.test.ts +25 -7
- 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__/title-generate-hook.test.ts +5 -1
- package/src/__tests__/tool-error-hook.test.ts +1 -1
- package/src/__tests__/tool-result-truncate-hook.test.ts +1 -1
- package/src/__tests__/user-plugin-loader.test.ts +54 -286
- package/src/__tests__/web-fetch.test.ts +45 -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-config-stub.ts +0 -2
- package/src/acp/__tests__/helpers/acp-history-db.ts +82 -0
- package/src/acp/__tests__/helpers/exec-file-stub.ts +106 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +97 -0
- package/src/acp/__tests__/session-manager-persistence.test.ts +95 -28
- package/src/acp/__tests__/session-manager-resume.test.ts +888 -0
- package/src/acp/agent-process.ts +61 -1
- package/src/acp/auto-install.test.ts +280 -0
- package/src/acp/auto-install.ts +232 -0
- package/src/acp/client-handler.ts +31 -0
- package/src/acp/prepare-agent-env.ts +80 -27
- package/src/acp/resolve-agent.test.ts +188 -28
- package/src/acp/resolve-agent.ts +119 -42
- package/src/acp/resume-hint.ts +23 -0
- package/src/acp/session-manager.ts +507 -73
- package/src/agent/compaction-circuit.ts +60 -102
- package/src/agent/loop.ts +403 -251
- package/src/api/responses/conversation-message.ts +22 -2
- package/src/api/responses/memory-v3-selection-log.ts +19 -10
- package/src/approvals/guardian-request-resolvers.ts +27 -1
- package/src/background-wake/next-wake.ts +1 -0
- package/src/cli/commands/__tests__/memory-v3.test.ts +191 -210
- package/src/cli/commands/channel-verification-sessions.ts +6 -6
- package/src/cli/commands/db/__tests__/repair.test.ts +3 -1
- package/src/cli/commands/memory-v3.ts +57 -199
- package/src/cli/commands/plugins.ts +43 -37
- package/src/cli/lib/__tests__/install-from-github.test.ts +790 -111
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +196 -0
- package/src/cli/lib/__tests__/plugin-details.test.ts +381 -0
- package/src/cli/lib/__tests__/plugin-marketplace.test.ts +270 -0
- package/src/cli/lib/__tests__/search-plugins.test.ts +233 -32
- package/src/cli/lib/install-from-github.ts +797 -60
- package/src/cli/lib/plugin-catalog-cache.ts +84 -0
- package/src/cli/lib/plugin-details.ts +416 -0
- package/src/cli/lib/plugin-marketplace.ts +215 -0
- package/src/cli/lib/search-plugins.ts +201 -29
- 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 +9 -3
- package/src/config/acp-schema.ts +1 -7
- package/src/config/bundled-skills/acp/SKILL.md +80 -41
- package/src/config/bundled-skills/acp/TOOLS.json +4 -4
- package/src/config/bundled-skills/app-builder/SKILL.md +224 -381
- package/src/config/bundled-skills/app-builder/TOOLS.json +72 -2
- 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/tools/app-list.ts +62 -0
- package/src/config/bundled-skills/app-builder/tools/app-update.ts +18 -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-tool-registry.ts +4 -0
- package/src/config/call-site-defaults.ts +0 -3
- package/src/config/feature-flag-registry.json +10 -16
- package/src/config/llm-resolver.ts +39 -7
- package/src/config/schemas/__tests__/memory-v3.test.ts +25 -9
- package/src/config/schemas/call-site-catalog.ts +0 -21
- package/src/config/schemas/heartbeat.ts +9 -0
- package/src/config/schemas/llm.ts +17 -3
- package/src/config/schemas/memory-v3.ts +58 -8
- package/src/config/seed-inference-profiles.ts +18 -0
- package/src/context/compactor.ts +22 -4
- package/src/context/post-turn-tool-result-truncation.ts +39 -1
- package/src/context/strip-injections.ts +8 -2
- package/src/daemon/conversation-agent-loop-handlers.ts +18 -36
- package/src/daemon/conversation-agent-loop.ts +308 -1297
- package/src/daemon/conversation-error.ts +31 -4
- package/src/daemon/conversation-history.ts +1 -1
- package/src/daemon/conversation-lifecycle.ts +11 -255
- package/src/daemon/conversation-media-retry.ts +19 -6
- package/src/daemon/conversation-messaging.ts +17 -0
- package/src/daemon/conversation-process.ts +22 -141
- package/src/daemon/conversation-queue-manager.ts +8 -0
- package/src/daemon/conversation-registry.ts +159 -0
- package/src/daemon/conversation-runtime-assembly.ts +361 -393
- package/src/daemon/conversation-store.ts +9 -90
- package/src/daemon/conversation-surfaces.ts +165 -11
- package/src/daemon/conversation-workspace.ts +17 -0
- package/src/daemon/conversation.ts +444 -62
- package/src/daemon/disk-pressure-policy.ts +0 -1
- package/src/daemon/external-plugins-bootstrap.ts +36 -46
- package/src/daemon/handlers/config-channels.ts +11 -2
- package/src/daemon/handlers/conversations.ts +3 -1
- package/src/daemon/handlers/skills.ts +4 -1
- package/src/daemon/host-app-control-proxy.ts +72 -57
- package/src/daemon/host-proxy-preactivation.ts +1 -3
- package/src/daemon/lifecycle.ts +21 -7
- package/src/daemon/persist-unsendable-image.ts +62 -25
- package/src/daemon/process-message.ts +1 -1
- package/src/daemon/server.ts +2 -0
- package/src/daemon/tool-side-effects.ts +15 -0
- package/src/daemon/wake-conversation-ops.ts +269 -0
- package/src/embedded/plugin-api.ts +2 -2
- package/src/export/__tests__/transcript-formatter.test.ts +5 -0
- 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/ipc/__tests__/browser-ipc.test.ts +1 -1
- package/src/ipc/__tests__/ui-request-route.test.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/memory/__tests__/activation-session-store.test.ts +41 -0
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +87 -0
- package/src/memory/__tests__/onboarding-events-store.test.ts +80 -0
- package/src/memory/activation-session-store.ts +43 -0
- package/src/memory/conversation-crud.ts +29 -19
- package/src/memory/conversation-starter-checkpoints.ts +1 -0
- package/src/memory/db-init.ts +6 -0
- package/src/memory/job-handlers/conversation-starters.ts +13 -2
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -4
- package/src/memory/jobs-worker.ts +25 -1
- package/src/memory/migrations/272-acp-session-history-cwd.ts +36 -0
- package/src/memory/migrations/273-onboarding-events-funnel-columns.ts +46 -0
- package/src/memory/migrations/274-create-activation-sessions.ts +15 -0
- package/src/memory/migrations/index.ts +3 -0
- package/src/memory/onboarding-events-store.ts +66 -18
- package/src/memory/schema/acp.ts +4 -0
- package/src/memory/schema/infrastructure.ts +13 -0
- package/src/memory/v2/__tests__/consolidation-job.test.ts +4 -97
- package/src/memory/v2/__tests__/page-store.test.ts +22 -0
- package/src/memory/v2/consolidation-job.ts +2 -63
- package/src/memory/v2/types.ts +5 -0
- package/src/messaging/providers/telegram-bot/api.ts +14 -5
- package/src/notifications/__tests__/copy-composer.test.ts +244 -0
- package/src/notifications/access-request-copy.ts +298 -0
- package/src/notifications/adapters/slack.ts +3 -3
- package/src/notifications/adapters/telegram.ts +9 -2
- package/src/notifications/copy-composer.ts +49 -267
- package/src/notifications/decision-engine.ts +16 -35
- package/src/notifications/home-feed-side-effect.ts +1 -6
- package/src/plugin-api/constants.ts +4 -0
- package/src/plugin-api/index.ts +40 -11
- package/src/plugin-api/types.ts +108 -0
- package/src/plugins/defaults/compaction/compact.ts +106 -0
- package/src/{daemon → plugins/defaults/compaction}/context-overflow-reducer.ts +250 -42
- package/src/plugins/defaults/compaction/corrected-target.ts +53 -0
- package/src/plugins/defaults/compaction/manager-store.ts +57 -0
- package/src/plugins/defaults/compaction/package.json +1 -2
- package/src/{context → plugins/defaults/compaction}/window-manager.ts +95 -25
- package/src/plugins/defaults/empty-response/package.json +0 -1
- package/src/plugins/defaults/history-repair/package.json +0 -1
- package/src/plugins/defaults/index.ts +156 -26
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +100 -52
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +285 -0
- package/src/plugins/defaults/memory-retrieval/injector-chain.ts +2 -2
- package/src/plugins/defaults/{injectors/register.ts → memory-retrieval/injectors.ts} +148 -73
- package/src/plugins/defaults/memory-retrieval/package.json +14 -0
- package/src/plugins/defaults/memory-retrieval/unified-turn-context.ts +223 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/capabilities.test.ts +71 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/dense.test.ts +181 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/edge.test.ts +247 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/live-integration.test.ts +147 -134
- package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +456 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +662 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +306 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/render-injection.test.ts +91 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/section-dense-store.test.ts +402 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/section-needle.test.ts +135 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/sections.test.ts +125 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selection-log-store.test.ts +74 -19
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-integration.test.ts +446 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +592 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/types.test.ts +2 -24
- package/src/plugins/defaults/memory-v3-shadow/capabilities.ts +91 -0
- package/src/plugins/defaults/memory-v3-shadow/dense.ts +97 -0
- package/src/plugins/defaults/memory-v3-shadow/edge.ts +252 -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 +76 -0
- package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +555 -0
- package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +266 -0
- package/src/plugins/defaults/memory-v3-shadow/package.json +14 -0
- package/src/plugins/defaults/memory-v3-shadow/page-content.ts +71 -0
- package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +204 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/render-injection.ts +16 -8
- package/src/plugins/defaults/memory-v3-shadow/section-dense-store.ts +236 -0
- package/src/plugins/defaults/memory-v3-shadow/section-needle.ts +200 -0
- package/src/plugins/defaults/memory-v3-shadow/sections.ts +115 -0
- package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +156 -0
- package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +382 -0
- package/src/plugins/defaults/memory-v3-shadow/types.ts +92 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/working-set.ts +4 -1
- package/src/plugins/defaults/title-generate/package.json +0 -1
- package/src/plugins/defaults/tool-error/package.json +0 -1
- package/src/plugins/defaults/tool-result-truncate/package.json +0 -1
- package/src/plugins/external-api.ts +12 -2
- package/src/plugins/pipeline.ts +6 -293
- package/src/plugins/registry.ts +9 -37
- package/src/plugins/types.ts +76 -381
- package/src/plugins/user-loader.ts +30 -127
- package/src/prompts/__tests__/system-prompt.test.ts +6 -0
- package/src/prompts/system-prompt.ts +61 -10
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +71 -4
- package/src/providers/anthropic/client.ts +9 -10
- package/src/providers/inference/kimi-cjk-token-ids.ts +493 -0
- package/src/providers/inference/logit-bias.ts +55 -0
- package/src/providers/model-catalog.ts +34 -0
- package/src/providers/openai/__tests__/vision-not-supported.test.ts +75 -0
- package/src/providers/openai/chat-completions-provider.ts +44 -1
- package/src/providers/retry.ts +22 -0
- package/src/providers/types.ts +6 -0
- package/src/runtime/__tests__/agent-wake.test.ts +555 -691
- package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
- package/src/runtime/agent-wake.ts +108 -209
- package/src/runtime/assistant-event-hub.ts +1 -1
- package/src/runtime/channel-approvals.ts +1 -1
- package/src/runtime/interactive-ui.ts +1 -1
- package/src/runtime/routes/__tests__/acp-routes.test.ts +466 -55
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +423 -73
- package/src/runtime/routes/__tests__/stt-routes.test.ts +112 -0
- 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/acp-routes.test.ts +185 -32
- package/src/runtime/routes/acp-routes.ts +328 -30
- package/src/runtime/routes/app-management-routes.ts +3 -0
- package/src/runtime/routes/approval-routes.ts +1 -1
- package/src/runtime/routes/browser-routes.ts +1 -1
- package/src/runtime/routes/browser-tabs-routes.ts +6 -10
- package/src/runtime/routes/channel-verification-routes.ts +14 -5
- 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 +1 -1
- package/src/runtime/routes/conversation-routes.ts +30 -2
- package/src/runtime/routes/conversation-starter-routes.ts +13 -7
- package/src/runtime/routes/conversations-import-routes.ts +24 -7
- 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-routes.ts +18 -3
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +33 -34
- package/src/runtime/routes/inference-profile-session-handler.ts +11 -0
- package/src/runtime/routes/inference-profile-session-reaper.ts +6 -0
- package/src/runtime/routes/memory-v3-routes.ts +65 -305
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +1 -1
- package/src/runtime/routes/playground/helpers.ts +1 -1
- package/src/runtime/routes/plugins-routes.ts +337 -35
- package/src/runtime/routes/stt-routes.ts +45 -12
- package/src/runtime/routes/surface-conversation-resolver.ts +4 -3
- package/src/runtime/routes/work-items-routes.ts +2 -4
- package/src/runtime/routes/workspace-routes.ts +50 -15
- package/src/runtime/services/conversation-serializer.ts +1 -1
- package/src/runtime/verification-outbound-actions.ts +147 -2
- package/src/runtime/verification-templates.ts +29 -3
- package/src/services/published-app-updater.ts +30 -8
- package/src/signals/cancel.ts +2 -4
- package/src/subagent/manager.ts +21 -5
- package/src/telemetry/__tests__/activation-funnel.test.ts +95 -0
- package/src/telemetry/activation-funnel.ts +167 -0
- package/src/telemetry/types.ts +13 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +154 -0
- package/src/telemetry/usage-telemetry-reporter.ts +26 -1
- package/src/tools/acp/context.ts +20 -0
- package/src/tools/acp/list-agents.test.ts +9 -19
- package/src/tools/acp/list-agents.ts +3 -15
- package/src/tools/acp/spawn.test.ts +173 -202
- package/src/tools/acp/spawn.ts +37 -172
- package/src/tools/acp/steer.test.ts +105 -8
- package/src/tools/acp/steer.ts +48 -17
- package/src/tools/apps/executors.ts +166 -50
- package/src/tools/browser/browser-execution.ts +12 -2
- package/src/tools/filesystem/write.ts +34 -0
- package/src/tools/network/web-fetch.ts +65 -24
- package/src/tools/skills/load.ts +1 -1
- package/src/tools/subagent/spawn.ts +2 -4
- package/src/tools/ui-surface/definitions.ts +32 -5
- package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +4 -5
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +69 -45
- package/docs/plugins.md +0 -832
- package/examples/plugins/echo/register.ts +0 -143
- 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__/overflow-reduce-pipeline.test.ts +0 -667
- package/src/__tests__/pipeline-runner.test.ts +0 -554
- package/src/daemon/wake-target-adapter.ts +0 -253
- package/src/memory/v3/__tests__/assign.test.ts +0 -242
- package/src/memory/v3/__tests__/capabilities.test.ts +0 -118
- package/src/memory/v3/__tests__/core.test.ts +0 -39
- package/src/memory/v3/__tests__/health.test.ts +0 -219
- package/src/memory/v3/__tests__/maintain-job.test.ts +0 -288
- package/src/memory/v3/__tests__/needle.test.ts +0 -107
- package/src/memory/v3/__tests__/orchestrate.test.ts +0 -436
- package/src/memory/v3/__tests__/provider-blocks.test.ts +0 -13
- package/src/memory/v3/__tests__/reconcile.test.ts +0 -274
- package/src/memory/v3/__tests__/render-injection.test.ts +0 -61
- package/src/memory/v3/__tests__/router.test.ts +0 -332
- package/src/memory/v3/__tests__/selector.test.ts +0 -470
- package/src/memory/v3/__tests__/shadow-plugin.test.ts +0 -432
- package/src/memory/v3/__tests__/snapshot.test.ts +0 -168
- package/src/memory/v3/__tests__/tree.test.ts +0 -192
- package/src/memory/v3/assign.ts +0 -268
- package/src/memory/v3/capabilities.ts +0 -124
- package/src/memory/v3/core.ts +0 -26
- package/src/memory/v3/health.ts +0 -0
- package/src/memory/v3/maintain-job.ts +0 -314
- package/src/memory/v3/needle.ts +0 -115
- package/src/memory/v3/orchestrate.ts +0 -126
- package/src/memory/v3/page-content.ts +0 -34
- package/src/memory/v3/provider-blocks.ts +0 -26
- package/src/memory/v3/reconcile.ts +0 -523
- package/src/memory/v3/router.ts +0 -190
- package/src/memory/v3/selection-log-store.ts +0 -84
- package/src/memory/v3/selector.ts +0 -226
- package/src/memory/v3/shadow-plugin.ts +0 -411
- package/src/memory/v3/snapshot.ts +0 -209
- package/src/memory/v3/tree.ts +0 -174
- package/src/memory/v3/types.ts +0 -59
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +0 -187
- 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/register.ts +0 -35
- package/src/plugins/defaults/compaction/terminal.ts +0 -73
- package/src/plugins/defaults/empty-response/register.ts +0 -23
- package/src/plugins/defaults/history-repair/register.ts +0 -24
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +0 -216
- 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/title-generate/register.ts +0 -35
- package/src/plugins/defaults/tool-error/register.ts +0 -23
- package/src/plugins/defaults/tool-result-truncate/register.ts +0 -24
- package/src/proactive-artifact/aux-message-injector.ts +0 -97
- package/src/proactive-artifact/decision.test.ts +0 -226
- package/src/proactive-artifact/decision.ts +0 -165
- package/src/proactive-artifact/index.ts +0 -7
- package/src/proactive-artifact/job.test.ts +0 -962
- package/src/proactive-artifact/job.ts +0 -372
- package/src/proactive-artifact/message-copy.ts +0 -58
- package/src/proactive-artifact/trigger-state.test.ts +0 -286
- package/src/proactive-artifact/trigger-state.ts +0 -123
- package/src/util/map-limit.ts +0 -27
- /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__/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}/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}/llm-retry.ts +0 -0
package/openapi.yaml
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
openapi: 3.1.0
|
|
4
4
|
info:
|
|
5
5
|
title: Vellum Assistant API
|
|
6
|
-
version: 0.8.
|
|
6
|
+
version: 0.8.9
|
|
7
7
|
description: Auto-generated OpenAPI specification for the Vellum Assistant runtime HTTP server.
|
|
8
8
|
servers:
|
|
9
9
|
- url: http://127.0.0.1:7821
|
|
@@ -95,7 +95,12 @@ paths:
|
|
|
95
95
|
post:
|
|
96
96
|
operationId: acp_by_id_steer_post
|
|
97
97
|
summary: Steer ACP session
|
|
98
|
-
description:
|
|
98
|
+
description:
|
|
99
|
+
"Send a steering instruction to an ACP session. Sessions no longer in memory (completed, or lost to a
|
|
100
|
+
daemon restart) are transparently resumed from persisted history first, when the agent supports ACP session
|
|
101
|
+
loading. Resuming a terminal session re-spawns the host agent, so it requires guardian approval: the route acks
|
|
102
|
+
immediately with approvalPending=true and performs the resume in the background once approved, streaming results
|
|
103
|
+
over SSE."
|
|
99
104
|
tags:
|
|
100
105
|
- acp
|
|
101
106
|
responses:
|
|
@@ -110,6 +115,14 @@ paths:
|
|
|
110
115
|
type: string
|
|
111
116
|
steered:
|
|
112
117
|
type: boolean
|
|
118
|
+
resumed:
|
|
119
|
+
description: True when the session was resumed from persisted history before steering.
|
|
120
|
+
type: boolean
|
|
121
|
+
approvalPending:
|
|
122
|
+
description:
|
|
123
|
+
True when the steer triggered a guardian-approval-gated resume that will run asynchronously; watch SSE for
|
|
124
|
+
the outcome.
|
|
125
|
+
type: boolean
|
|
113
126
|
required:
|
|
114
127
|
- acpSessionId
|
|
115
128
|
- steered
|
|
@@ -136,7 +149,9 @@ paths:
|
|
|
136
149
|
delete:
|
|
137
150
|
operationId: acp_sessions_delete
|
|
138
151
|
summary: Bulk-clear terminal ACP sessions
|
|
139
|
-
description:
|
|
152
|
+
description:
|
|
153
|
+
Remove every terminal-state row (completed/failed/cancelled) from the persisted acp_session_history table.
|
|
154
|
+
Rows whose session is currently active in memory (e.g. resumed) or has a resume in flight are excluded.
|
|
140
155
|
tags:
|
|
141
156
|
- acp
|
|
142
157
|
responses:
|
|
@@ -238,8 +253,8 @@ paths:
|
|
|
238
253
|
operationId: acp_sessions_by_id_delete
|
|
239
254
|
summary: Delete ACP session from history
|
|
240
255
|
description:
|
|
241
|
-
Remove a persisted ACP session row. Rejects with 409 when the session is still active in memory
|
|
242
|
-
for unknown ids.
|
|
256
|
+
Remove a persisted ACP session row. Rejects with 409 when the session is still active in memory or has a
|
|
257
|
+
resume in flight; idempotent for unknown ids.
|
|
243
258
|
tags:
|
|
244
259
|
- acp
|
|
245
260
|
responses:
|
|
@@ -473,6 +488,8 @@ paths:
|
|
|
473
488
|
type: string
|
|
474
489
|
createdAt:
|
|
475
490
|
type: number
|
|
491
|
+
updatedAt:
|
|
492
|
+
type: number
|
|
476
493
|
version:
|
|
477
494
|
type: string
|
|
478
495
|
contentId:
|
|
@@ -481,6 +498,7 @@ paths:
|
|
|
481
498
|
- id
|
|
482
499
|
- name
|
|
483
500
|
- createdAt
|
|
501
|
+
- updatedAt
|
|
484
502
|
- version
|
|
485
503
|
- contentId
|
|
486
504
|
additionalProperties: false
|
|
@@ -15847,10 +15865,10 @@ paths:
|
|
|
15847
15865
|
type: object
|
|
15848
15866
|
properties: {}
|
|
15849
15867
|
additionalProperties: false
|
|
15850
|
-
/v1/memory/v3/
|
|
15868
|
+
/v1/memory/v3/backfill-sections:
|
|
15851
15869
|
post:
|
|
15852
|
-
operationId:
|
|
15853
|
-
summary:
|
|
15870
|
+
operationId: memory_v3_backfillsections_post
|
|
15871
|
+
summary: "One-time: embed every page's sections (incl synthetic skill/CLI rows) into the dense store"
|
|
15854
15872
|
tags:
|
|
15855
15873
|
- memory
|
|
15856
15874
|
responses:
|
|
@@ -15861,31 +15879,16 @@ paths:
|
|
|
15861
15879
|
schema:
|
|
15862
15880
|
type: object
|
|
15863
15881
|
properties:
|
|
15864
|
-
|
|
15865
|
-
type:
|
|
15866
|
-
|
|
15867
|
-
type:
|
|
15868
|
-
|
|
15869
|
-
|
|
15870
|
-
type: number
|
|
15871
|
-
danglingRefs:
|
|
15872
|
-
type: number
|
|
15873
|
-
novelClusters:
|
|
15874
|
-
type: number
|
|
15875
|
-
oversizedLeaves:
|
|
15876
|
-
type: number
|
|
15877
|
-
tinyLeaves:
|
|
15878
|
-
type: number
|
|
15879
|
-
required:
|
|
15880
|
-
- unassigned
|
|
15881
|
-
- danglingRefs
|
|
15882
|
-
- novelClusters
|
|
15883
|
-
- oversizedLeaves
|
|
15884
|
-
- tinyLeaves
|
|
15885
|
-
additionalProperties: false
|
|
15882
|
+
articles:
|
|
15883
|
+
type: number
|
|
15884
|
+
sections:
|
|
15885
|
+
type: number
|
|
15886
|
+
failures:
|
|
15887
|
+
type: number
|
|
15886
15888
|
required:
|
|
15887
|
-
-
|
|
15888
|
-
-
|
|
15889
|
+
- articles
|
|
15890
|
+
- sections
|
|
15891
|
+
- failures
|
|
15889
15892
|
additionalProperties: false
|
|
15890
15893
|
/v1/memory/v3/rebuild-index:
|
|
15891
15894
|
post:
|
|
@@ -15907,93 +15910,6 @@ paths:
|
|
|
15907
15910
|
required:
|
|
15908
15911
|
- ok
|
|
15909
15912
|
additionalProperties: false
|
|
15910
|
-
/v1/memory/v3/reconcile:
|
|
15911
|
-
post:
|
|
15912
|
-
operationId: memory_v3_reconcile_post
|
|
15913
|
-
summary: v1 convergence/prune pass over page+core refs (no rename detection without a prior snapshot)
|
|
15914
|
-
tags:
|
|
15915
|
-
- memory
|
|
15916
|
-
responses:
|
|
15917
|
-
"200":
|
|
15918
|
-
description: Successful response
|
|
15919
|
-
content:
|
|
15920
|
-
application/json:
|
|
15921
|
-
schema:
|
|
15922
|
-
type: object
|
|
15923
|
-
properties:
|
|
15924
|
-
renames:
|
|
15925
|
-
type: array
|
|
15926
|
-
items:
|
|
15927
|
-
type: object
|
|
15928
|
-
properties:
|
|
15929
|
-
id:
|
|
15930
|
-
type: string
|
|
15931
|
-
oldPath:
|
|
15932
|
-
type: string
|
|
15933
|
-
newPath:
|
|
15934
|
-
type: string
|
|
15935
|
-
required:
|
|
15936
|
-
- oldPath
|
|
15937
|
-
- newPath
|
|
15938
|
-
additionalProperties: false
|
|
15939
|
-
deleted:
|
|
15940
|
-
type: array
|
|
15941
|
-
items:
|
|
15942
|
-
type: string
|
|
15943
|
-
prunedCore:
|
|
15944
|
-
type: array
|
|
15945
|
-
items:
|
|
15946
|
-
type: string
|
|
15947
|
-
required:
|
|
15948
|
-
- renames
|
|
15949
|
-
- deleted
|
|
15950
|
-
- prunedCore
|
|
15951
|
-
additionalProperties: false
|
|
15952
|
-
/v1/memory/v3/set-core:
|
|
15953
|
-
post:
|
|
15954
|
-
operationId: memory_v3_setcore_post
|
|
15955
|
-
summary: Add/remove always-on core leaves (validates + previews cost)
|
|
15956
|
-
tags:
|
|
15957
|
-
- memory
|
|
15958
|
-
responses:
|
|
15959
|
-
"200":
|
|
15960
|
-
description: Successful response
|
|
15961
|
-
content:
|
|
15962
|
-
application/json:
|
|
15963
|
-
schema:
|
|
15964
|
-
type: object
|
|
15965
|
-
properties:
|
|
15966
|
-
nextCore:
|
|
15967
|
-
type: array
|
|
15968
|
-
items:
|
|
15969
|
-
type: string
|
|
15970
|
-
alwaysOnPageCount:
|
|
15971
|
-
type: number
|
|
15972
|
-
written:
|
|
15973
|
-
type: boolean
|
|
15974
|
-
required:
|
|
15975
|
-
- nextCore
|
|
15976
|
-
- alwaysOnPageCount
|
|
15977
|
-
- written
|
|
15978
|
-
additionalProperties: false
|
|
15979
|
-
requestBody:
|
|
15980
|
-
required: true
|
|
15981
|
-
content:
|
|
15982
|
-
application/json:
|
|
15983
|
-
schema:
|
|
15984
|
-
type: object
|
|
15985
|
-
properties:
|
|
15986
|
-
add:
|
|
15987
|
-
type: array
|
|
15988
|
-
items:
|
|
15989
|
-
type: string
|
|
15990
|
-
remove:
|
|
15991
|
-
type: array
|
|
15992
|
-
items:
|
|
15993
|
-
type: string
|
|
15994
|
-
write:
|
|
15995
|
-
type: boolean
|
|
15996
|
-
additionalProperties: false
|
|
15997
15913
|
/v1/messages:
|
|
15998
15914
|
get:
|
|
15999
15915
|
operationId: messages_get
|
|
@@ -16020,8 +15936,13 @@ paths:
|
|
|
16020
15936
|
type: array
|
|
16021
15937
|
items:
|
|
16022
15938
|
type: string
|
|
15939
|
+
clientMessageId:
|
|
15940
|
+
type: string
|
|
16023
15941
|
role:
|
|
16024
15942
|
type: string
|
|
15943
|
+
enum:
|
|
15944
|
+
- user
|
|
15945
|
+
- assistant
|
|
16025
15946
|
content:
|
|
16026
15947
|
type: string
|
|
16027
15948
|
timestamp:
|
|
@@ -16413,6 +16334,10 @@ paths:
|
|
|
16413
16334
|
const: thinking
|
|
16414
16335
|
thinking:
|
|
16415
16336
|
type: string
|
|
16337
|
+
startedAt:
|
|
16338
|
+
type: number
|
|
16339
|
+
completedAt:
|
|
16340
|
+
type: number
|
|
16416
16341
|
required:
|
|
16417
16342
|
- type
|
|
16418
16343
|
- thinking
|
|
@@ -16985,6 +16910,12 @@ paths:
|
|
|
16985
16910
|
type: string
|
|
16986
16911
|
clientTimezone:
|
|
16987
16912
|
type: string
|
|
16913
|
+
clientMessageId:
|
|
16914
|
+
type: string
|
|
16915
|
+
description:
|
|
16916
|
+
Client-generated idempotency nonce. Persisted on the row and echoed back on the message_echo event and the
|
|
16917
|
+
messages snapshot so the client can correlate its optimistic row by identity. Duplicate sends for
|
|
16918
|
+
the same (conversation, clientMessageId) are deduplicated server-side.
|
|
16988
16919
|
inferenceProfile:
|
|
16989
16920
|
anyOf:
|
|
16990
16921
|
- type: string
|
|
@@ -19416,6 +19347,181 @@ paths:
|
|
|
19416
19347
|
required: true
|
|
19417
19348
|
schema:
|
|
19418
19349
|
type: string
|
|
19350
|
+
get:
|
|
19351
|
+
operationId: plugins_by_name_get
|
|
19352
|
+
summary: Get a plugin's detail view
|
|
19353
|
+
description:
|
|
19354
|
+
Resolve a single plugin's tracked metadata (description, homepage, license, version, source) plus its
|
|
19355
|
+
README markdown. Unions the locally installed copy, the marketplace manifest, and the plugin's repository at the
|
|
19356
|
+
pinned ref — preferring the installed copy. Names that are neither installed nor present in the catalog return
|
|
19357
|
+
404. Powers the web plugin detail page; mirrors `GET /v1/skills/:id`.
|
|
19358
|
+
tags:
|
|
19359
|
+
- plugins
|
|
19360
|
+
responses:
|
|
19361
|
+
"200":
|
|
19362
|
+
description: Successful response
|
|
19363
|
+
content:
|
|
19364
|
+
application/json:
|
|
19365
|
+
schema:
|
|
19366
|
+
type: object
|
|
19367
|
+
properties:
|
|
19368
|
+
name:
|
|
19369
|
+
type: string
|
|
19370
|
+
description: Install name. Matches `assistant plugins install <name>`.
|
|
19371
|
+
installed:
|
|
19372
|
+
type: boolean
|
|
19373
|
+
description: Whether a copy is materialized under `<workspaceDir>/plugins/<name>/`.
|
|
19374
|
+
description:
|
|
19375
|
+
anyOf:
|
|
19376
|
+
- type: string
|
|
19377
|
+
- type: "null"
|
|
19378
|
+
description: Short description, best-effort across disk, manifest, and repo.
|
|
19379
|
+
homepage:
|
|
19380
|
+
anyOf:
|
|
19381
|
+
- type: string
|
|
19382
|
+
- type: "null"
|
|
19383
|
+
description: Project homepage URL, when known.
|
|
19384
|
+
license:
|
|
19385
|
+
anyOf:
|
|
19386
|
+
- type: string
|
|
19387
|
+
- type: "null"
|
|
19388
|
+
description: SPDX license expression, when known.
|
|
19389
|
+
version:
|
|
19390
|
+
anyOf:
|
|
19391
|
+
- type: string
|
|
19392
|
+
- type: "null"
|
|
19393
|
+
description: Resolved version (installed copy first, then repo `package.json`).
|
|
19394
|
+
source:
|
|
19395
|
+
oneOf:
|
|
19396
|
+
- type: object
|
|
19397
|
+
properties:
|
|
19398
|
+
kind:
|
|
19399
|
+
type: string
|
|
19400
|
+
const: first-party
|
|
19401
|
+
required:
|
|
19402
|
+
- kind
|
|
19403
|
+
additionalProperties: false
|
|
19404
|
+
- type: object
|
|
19405
|
+
properties:
|
|
19406
|
+
kind:
|
|
19407
|
+
type: string
|
|
19408
|
+
const: github
|
|
19409
|
+
repo:
|
|
19410
|
+
type: string
|
|
19411
|
+
description: "`owner/repo` of the external plugin repository."
|
|
19412
|
+
path:
|
|
19413
|
+
description: Directory within the repo, when the plugin is not at the root.
|
|
19414
|
+
type: string
|
|
19415
|
+
ref:
|
|
19416
|
+
type: string
|
|
19417
|
+
description: Pinned git ref the plugin is fetched from.
|
|
19418
|
+
required:
|
|
19419
|
+
- kind
|
|
19420
|
+
- repo
|
|
19421
|
+
- ref
|
|
19422
|
+
additionalProperties: false
|
|
19423
|
+
description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
|
|
19424
|
+
readme:
|
|
19425
|
+
anyOf:
|
|
19426
|
+
- type: string
|
|
19427
|
+
- type: "null"
|
|
19428
|
+
description: README markdown, or null when the plugin ships none.
|
|
19429
|
+
ref:
|
|
19430
|
+
type: string
|
|
19431
|
+
description: Git ref the catalog metadata / README were resolved at.
|
|
19432
|
+
required:
|
|
19433
|
+
- name
|
|
19434
|
+
- installed
|
|
19435
|
+
- description
|
|
19436
|
+
- homepage
|
|
19437
|
+
- license
|
|
19438
|
+
- version
|
|
19439
|
+
- source
|
|
19440
|
+
- readme
|
|
19441
|
+
- ref
|
|
19442
|
+
additionalProperties: false
|
|
19443
|
+
"400":
|
|
19444
|
+
description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
|
|
19445
|
+
"404":
|
|
19446
|
+
description: No installed copy and no catalog entry claims the given name.
|
|
19447
|
+
parameters:
|
|
19448
|
+
- name: name
|
|
19449
|
+
in: path
|
|
19450
|
+
required: true
|
|
19451
|
+
schema:
|
|
19452
|
+
type: string
|
|
19453
|
+
- name: ref
|
|
19454
|
+
in: query
|
|
19455
|
+
required: false
|
|
19456
|
+
schema:
|
|
19457
|
+
type: string
|
|
19458
|
+
description: Optional git ref to read catalog metadata / README at. Defaults to the CLI's `DEFAULT_PLUGIN_REF`.
|
|
19459
|
+
/v1/plugins/install:
|
|
19460
|
+
post:
|
|
19461
|
+
operationId: plugins_install_post
|
|
19462
|
+
summary: Install a plugin
|
|
19463
|
+
description:
|
|
19464
|
+
"Install a plugin by name from the canonical source — a whitelisted `experimental/plugins/marketplace.json`
|
|
19465
|
+
entry, else the first-party `experimental/plugins/<name>/` convention. Always resolves against the curated
|
|
19466
|
+
default git ref (no caller-supplied ref): installing from an unreviewed revision would bypass the
|
|
19467
|
+
marketplace/first-party curation boundary and let attacker-controlled code be loaded. Materializes the plugin
|
|
19468
|
+
under `<workspaceDir>/plugins/<name>/`; the assistant must be restarted to load it. Mirrors the CLI's `assistant
|
|
19469
|
+
plugins install <name>`. An already-installed name without `force` returns 409; a name that resolves to nothing
|
|
19470
|
+
returns 404. Sibling to `POST /v1/skills/install`."
|
|
19471
|
+
tags:
|
|
19472
|
+
- plugins
|
|
19473
|
+
responses:
|
|
19474
|
+
"200":
|
|
19475
|
+
description: Successful response
|
|
19476
|
+
content:
|
|
19477
|
+
application/json:
|
|
19478
|
+
schema:
|
|
19479
|
+
type: object
|
|
19480
|
+
properties:
|
|
19481
|
+
ok:
|
|
19482
|
+
type: boolean
|
|
19483
|
+
const: true
|
|
19484
|
+
name:
|
|
19485
|
+
type: string
|
|
19486
|
+
description: Install name that was materialized.
|
|
19487
|
+
target:
|
|
19488
|
+
type: string
|
|
19489
|
+
description: Absolute path the plugin was materialized into on the host.
|
|
19490
|
+
fileCount:
|
|
19491
|
+
type: number
|
|
19492
|
+
description: Number of files written for the installed plugin.
|
|
19493
|
+
ref:
|
|
19494
|
+
type: string
|
|
19495
|
+
description: Git ref the plugin was fetched from.
|
|
19496
|
+
required:
|
|
19497
|
+
- ok
|
|
19498
|
+
- name
|
|
19499
|
+
- target
|
|
19500
|
+
- fileCount
|
|
19501
|
+
- ref
|
|
19502
|
+
additionalProperties: false
|
|
19503
|
+
"400":
|
|
19504
|
+
description: The request body was missing `name` or the name failed sanitization.
|
|
19505
|
+
"404":
|
|
19506
|
+
description: No plugin resolves to the given name at the requested ref.
|
|
19507
|
+
"409":
|
|
19508
|
+
description: A plugin with the same name is already installed and `force` was not set.
|
|
19509
|
+
requestBody:
|
|
19510
|
+
required: true
|
|
19511
|
+
content:
|
|
19512
|
+
application/json:
|
|
19513
|
+
schema:
|
|
19514
|
+
type: object
|
|
19515
|
+
properties:
|
|
19516
|
+
name:
|
|
19517
|
+
type: string
|
|
19518
|
+
description: Install name to resolve against the catalog (first-party directory or marketplace entry).
|
|
19519
|
+
force:
|
|
19520
|
+
description: Overwrite an existing install in place. Defaults to false.
|
|
19521
|
+
type: boolean
|
|
19522
|
+
required:
|
|
19523
|
+
- name
|
|
19524
|
+
additionalProperties: false
|
|
19419
19525
|
/v1/plugins/search:
|
|
19420
19526
|
get:
|
|
19421
19527
|
operationId: plugins_search_get
|
|
@@ -19447,13 +19553,49 @@ paths:
|
|
|
19447
19553
|
properties:
|
|
19448
19554
|
name:
|
|
19449
19555
|
type: string
|
|
19450
|
-
description:
|
|
19556
|
+
description: Install name. Matches `assistant plugins install <name>`.
|
|
19451
19557
|
path:
|
|
19452
19558
|
type: string
|
|
19453
|
-
description:
|
|
19559
|
+
description:
|
|
19560
|
+
"Human-readable origin: a repo-relative path (`experimental/plugins/<name>`) for first-party plugins or a
|
|
19561
|
+
`github:owner/repo@ref` locator for external ones."
|
|
19562
|
+
description:
|
|
19563
|
+
description: Short description, when known (external entries only today).
|
|
19564
|
+
type: string
|
|
19565
|
+
source:
|
|
19566
|
+
oneOf:
|
|
19567
|
+
- type: object
|
|
19568
|
+
properties:
|
|
19569
|
+
kind:
|
|
19570
|
+
type: string
|
|
19571
|
+
const: first-party
|
|
19572
|
+
required:
|
|
19573
|
+
- kind
|
|
19574
|
+
additionalProperties: false
|
|
19575
|
+
- type: object
|
|
19576
|
+
properties:
|
|
19577
|
+
kind:
|
|
19578
|
+
type: string
|
|
19579
|
+
const: github
|
|
19580
|
+
repo:
|
|
19581
|
+
type: string
|
|
19582
|
+
description: "`owner/repo` of the external plugin repository."
|
|
19583
|
+
path:
|
|
19584
|
+
description: Directory within the repo, when the plugin is not at the root.
|
|
19585
|
+
type: string
|
|
19586
|
+
ref:
|
|
19587
|
+
type: string
|
|
19588
|
+
description: Pinned git ref the plugin is fetched from.
|
|
19589
|
+
required:
|
|
19590
|
+
- kind
|
|
19591
|
+
- repo
|
|
19592
|
+
- ref
|
|
19593
|
+
additionalProperties: false
|
|
19594
|
+
description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
|
|
19454
19595
|
required:
|
|
19455
19596
|
- name
|
|
19456
19597
|
- path
|
|
19598
|
+
- source
|
|
19457
19599
|
additionalProperties: false
|
|
19458
19600
|
description: Directory matches, sorted alphabetically by name.
|
|
19459
19601
|
required:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vellumai/assistant",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.9-dev.202606091853.fbaa2ae",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"prepack": "node ../scripts/prepack-bundled-deps.mjs"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@agentclientprotocol/sdk": "0.
|
|
36
|
+
"@agentclientprotocol/sdk": "0.25.0",
|
|
37
37
|
"@anthropic-ai/sdk": "0.78.0",
|
|
38
38
|
"@google/genai": "1.45.0",
|
|
39
39
|
"@modelcontextprotocol/sdk": "1.27.1",
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Early activation-session marking.
|
|
3
|
+
*
|
|
4
|
+
* The agent loop resolves TOOLS before the SYSTEM PROMPT, so the activation
|
|
5
|
+
* marker must be written before tool resolution on the first activation-rail
|
|
6
|
+
* turn — otherwise the `activation` skill is not preactivated and the emit
|
|
7
|
+
* handler is gated off for the very turn that emits Moment 1. The marking lives
|
|
8
|
+
* in `applyBootstrapTemplate`, which is called from `setOnboardingContext` (the
|
|
9
|
+
* earliest point the conversation knows its bootstrap selection) as well as
|
|
10
|
+
* from `buildSystemPrompt` as an idempotent backstop.
|
|
11
|
+
*
|
|
12
|
+
* These tests exercise `applyBootstrapTemplate` directly against the real
|
|
13
|
+
* DB-backed `isActivationSession` and a real workspace BOOTSTRAP.md, proving the
|
|
14
|
+
* marker is set INDEPENDENT of any `buildSystemPrompt` render.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { copyFileSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
20
|
+
|
|
21
|
+
const TEST_DIR = process.env.VELLUM_WORKSPACE_DIR!;
|
|
22
|
+
|
|
23
|
+
mock.module("../util/logger.js", () => ({
|
|
24
|
+
getLogger: () =>
|
|
25
|
+
new Proxy({} as Record<string, unknown>, {
|
|
26
|
+
get: () => () => {},
|
|
27
|
+
}),
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
const { applyBootstrapTemplate } = await import("../prompts/system-prompt.js");
|
|
31
|
+
const { isActivationSession } =
|
|
32
|
+
await import("../memory/activation-session-store.js");
|
|
33
|
+
const { ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE } =
|
|
34
|
+
await import("../telemetry/activation-funnel.js");
|
|
35
|
+
const { getDb } = await import("../memory/db-connection.js");
|
|
36
|
+
const { initializeDb } = await import("../memory/db-init.js");
|
|
37
|
+
const { activationSessions } = await import("../memory/schema.js");
|
|
38
|
+
|
|
39
|
+
initializeDb();
|
|
40
|
+
|
|
41
|
+
/** Seed the workspace BOOTSTRAP.md with the unmodified generic template so the
|
|
42
|
+
* one-shot reseed inside `applyBootstrapTemplate` fires. */
|
|
43
|
+
function seedGenericBootstrap(): void {
|
|
44
|
+
mkdirSync(TEST_DIR, { recursive: true });
|
|
45
|
+
const generic = readFileSync(
|
|
46
|
+
join(import.meta.dirname, "..", "prompts", "templates", "BOOTSTRAP.md"),
|
|
47
|
+
"utf-8",
|
|
48
|
+
);
|
|
49
|
+
writeFileSync(join(TEST_DIR, "BOOTSTRAP.md"), generic, "utf-8");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
describe("applyBootstrapTemplate — early activation marking", () => {
|
|
53
|
+
beforeEach(() => {
|
|
54
|
+
getDb().delete(activationSessions).run();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("marks the conversation when the activation-rail template is applied", () => {
|
|
58
|
+
seedGenericBootstrap();
|
|
59
|
+
expect(isActivationSession("rail-conv")).toBe(false);
|
|
60
|
+
|
|
61
|
+
// No buildSystemPrompt call — marking must happen here.
|
|
62
|
+
applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "rail-conv");
|
|
63
|
+
|
|
64
|
+
expect(isActivationSession("rail-conv")).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("does not mark when a non-rail bootstrap template is applied", () => {
|
|
68
|
+
seedGenericBootstrap();
|
|
69
|
+
|
|
70
|
+
applyBootstrapTemplate("BOOTSTRAP-REFERENCE.md", "non-rail-conv");
|
|
71
|
+
|
|
72
|
+
expect(isActivationSession("non-rail-conv")).toBe(false);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test("does not mark when no conversation id is supplied", () => {
|
|
76
|
+
seedGenericBootstrap();
|
|
77
|
+
|
|
78
|
+
applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE);
|
|
79
|
+
|
|
80
|
+
// Nothing to assert by id; confirm the table stayed empty.
|
|
81
|
+
const rows = getDb().select().from(activationSessions).all();
|
|
82
|
+
expect(rows.length).toBe(0);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test("does not mark when BOOTSTRAP.md is customized to something else", () => {
|
|
86
|
+
mkdirSync(TEST_DIR, { recursive: true });
|
|
87
|
+
// A user-customized BOOTSTRAP.md is neither the generic template (so the
|
|
88
|
+
// reseed no-ops) nor the activation-rail template — the rail is not active.
|
|
89
|
+
writeFileSync(
|
|
90
|
+
join(TEST_DIR, "BOOTSTRAP.md"),
|
|
91
|
+
"# My custom bootstrap\n",
|
|
92
|
+
"utf-8",
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "custom-conv");
|
|
96
|
+
|
|
97
|
+
expect(isActivationSession("custom-conv")).toBe(false);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("marks idempotently when BOOTSTRAP.md already holds the rail template", () => {
|
|
101
|
+
mkdirSync(TEST_DIR, { recursive: true });
|
|
102
|
+
// Simulate a later turn: BOOTSTRAP.md already holds the rail template, so
|
|
103
|
+
// the reseed no-ops but marking still fires (idempotent backstop).
|
|
104
|
+
copyFileSync(
|
|
105
|
+
join(
|
|
106
|
+
import.meta.dirname,
|
|
107
|
+
"..",
|
|
108
|
+
"prompts",
|
|
109
|
+
"templates",
|
|
110
|
+
ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE,
|
|
111
|
+
),
|
|
112
|
+
join(TEST_DIR, "BOOTSTRAP.md"),
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "rail-conv-2");
|
|
116
|
+
applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "rail-conv-2");
|
|
117
|
+
|
|
118
|
+
expect(isActivationSession("rail-conv-2")).toBe(true);
|
|
119
|
+
});
|
|
120
|
+
});
|