@vellumai/assistant 0.8.8 → 0.8.9-staging.2
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/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 +235 -6
- package/package.json +2 -2
- 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 +1 -1
- 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 +5 -4
- 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 +132 -0
- package/src/__tests__/compaction-events.test.ts +5 -5
- package/src/__tests__/compactor-web-search-strip.test.ts +213 -0
- package/src/__tests__/context-overflow-reducer.test.ts +1 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +6 -4
- 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 +142 -218
- package/src/__tests__/conversation-agent-loop.test.ts +297 -586
- package/src/__tests__/conversation-clean-command.test.ts +5 -2
- package/src/__tests__/conversation-confirmation-signals.test.ts +5 -4
- package/src/__tests__/conversation-crud-inference-profile.test.ts +7 -9
- package/src/__tests__/conversation-history-web-search.test.ts +1 -1
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +4 -4
- package/src/__tests__/conversation-process-callsite.test.ts +14 -14
- package/src/__tests__/conversation-provider-retry-repair.test.ts +70 -65
- package/src/__tests__/conversation-queue.test.ts +9 -9
- package/src/__tests__/conversation-runtime-assembly.test.ts +923 -231
- package/src/__tests__/conversation-runtime-workspace.test.ts +115 -20
- package/src/__tests__/conversation-slash-queue.test.ts +6 -4
- package/src/__tests__/conversation-slash-unknown.test.ts +6 -4
- package/src/__tests__/conversation-speed-override.test.ts +10 -9
- package/src/__tests__/conversation-starter-routes.test.ts +14 -6
- package/src/__tests__/conversation-workspace-cache-state.test.ts +23 -20
- package/src/__tests__/conversation-workspace-injection.test.ts +68 -6
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +14 -11
- package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
- package/src/__tests__/credential-security-invariants.test.ts +0 -1
- 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 +12 -2
- 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__/history-repair-hook.test.ts +1 -1
- 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__/memory-retrieval-hook.test.ts +131 -26
- package/src/__tests__/memory-v2-static-injector.test.ts +86 -8
- package/src/__tests__/parallel-tool.benchmark.test.ts +35 -8
- package/src/__tests__/plugin-api-shim.test.ts +6 -9
- package/src/__tests__/plugin-bootstrap.test.ts +12 -23
- package/src/__tests__/plugin-registry.test.ts +3 -49
- package/src/__tests__/plugin-types.test.ts +0 -70
- package/src/__tests__/pre-model-call-sanitize.test.ts +109 -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 +33 -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 +1 -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/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 +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/feature-gate.test.ts +48 -0
- package/src/acp/feature-gate.ts +34 -0
- package/src/acp/prepare-agent-env.ts +80 -27
- package/src/acp/resolve-agent.test.ts +225 -9
- package/src/acp/resolve-agent.ts +122 -17
- 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 +414 -248
- package/src/api/responses/conversation-message.ts +14 -1
- package/src/approvals/guardian-request-resolvers.ts +1 -1
- package/src/background-wake/next-wake.ts +1 -0
- package/src/cli/commands/db/__tests__/repair.test.ts +3 -1
- package/src/cli/commands/plugins.ts +43 -37
- package/src/cli/lib/__tests__/install-from-github.test.ts +429 -111
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +196 -0
- package/src/cli/lib/__tests__/plugin-details.test.ts +372 -0
- package/src/cli/lib/__tests__/plugin-marketplace.test.ts +220 -0
- package/src/cli/lib/__tests__/search-plugins.test.ts +226 -32
- package/src/cli/lib/install-from-github.ts +464 -55
- package/src/cli/lib/plugin-catalog-cache.ts +84 -0
- package/src/cli/lib/plugin-details.ts +409 -0
- package/src/cli/lib/plugin-marketplace.ts +197 -0
- package/src/cli/lib/search-plugins.ts +195 -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 +6 -0
- package/src/config/bundled-skills/acp/SKILL.md +85 -33
- 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 -2
- package/src/config/feature-flag-registry.json +15 -6
- package/src/config/schemas/call-site-catalog.ts +0 -14
- package/src/config/schemas/heartbeat.ts +9 -0
- package/src/config/schemas/llm.ts +0 -2
- package/src/context/compactor.ts +22 -4
- package/src/context/strip-injections.ts +8 -2
- package/src/context/window-manager.ts +27 -13
- package/src/daemon/conversation-agent-loop-handlers.ts +10 -35
- package/src/daemon/conversation-agent-loop.ts +175 -1055
- package/src/daemon/conversation-lifecycle.ts +11 -255
- package/src/daemon/conversation-process.ts +8 -136
- package/src/daemon/conversation-registry.ts +159 -0
- package/src/daemon/conversation-runtime-assembly.ts +293 -392
- package/src/daemon/conversation-store.ts +9 -90
- package/src/daemon/conversation-surfaces.ts +24 -8
- package/src/daemon/conversation-workspace.ts +17 -0
- package/src/daemon/conversation.ts +404 -57
- package/src/daemon/disk-pressure-policy.ts +0 -1
- package/src/daemon/external-plugins-bootstrap.ts +14 -19
- package/src/daemon/handlers/conversations.ts +3 -1
- package/src/daemon/handlers/skills.ts +4 -1
- package/src/daemon/host-proxy-preactivation.ts +1 -3
- package/src/daemon/lifecycle.ts +21 -7
- package/src/daemon/server.ts +2 -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__/jobs-worker-v2-schedule.test.ts +87 -0
- package/src/memory/conversation-crud.ts +29 -19
- package/src/memory/conversation-starter-checkpoints.ts +1 -0
- package/src/memory/db-init.ts +2 -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/index.ts +1 -0
- package/src/memory/schema/acp.ts +4 -0
- package/src/memory/v2/__tests__/consolidation-job.test.ts +3 -3
- package/src/memory/v2/consolidation-job.ts +13 -4
- package/src/plugin-api/constants.ts +4 -0
- package/src/plugin-api/index.ts +6 -5
- package/src/plugin-api/types.ts +75 -0
- package/src/plugins/defaults/compaction/compact.ts +59 -0
- package/src/{daemon → plugins/defaults/compaction}/context-overflow-reducer.ts +7 -7
- package/src/plugins/defaults/compaction/manager-store.ts +57 -0
- package/src/plugins/defaults/compaction/package.json +1 -2
- 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 +135 -26
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +100 -52
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +184 -74
- 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/unified-turn-context.ts +223 -0
- 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__/live-integration.test.ts +9 -6
- 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 +8 -5
- 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 +10 -5
- 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 +5 -5
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/shadow-plugin.test.ts +16 -17
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/types.test.ts +2 -2
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/assign.ts +9 -5
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/capabilities.ts +5 -2
- 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/{memory/v3 → plugins/defaults/memory-v3-shadow}/maintain-job.ts +15 -8
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/orchestrate.ts +2 -2
- package/src/plugins/defaults/memory-v3-shadow/package.json +14 -0
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/page-content.ts +2 -2
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/provider-blocks.ts +1 -1
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/reconcile.ts +7 -3
- 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 +5 -5
- 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 +7 -7
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/shadow-plugin.ts +32 -94
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/tree.ts +1 -1
- package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/types.ts +1 -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/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/templates/BOOTSTRAP-ACTIVATION-RAIL.md +35 -3
- 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 +315 -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__/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 +89 -25
- package/src/runtime/routes/acp-routes.ts +81 -29
- 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/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 +28 -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/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 +16 -6
- package/src/runtime/routes/playground/helpers.ts +1 -1
- package/src/runtime/routes/plugins-routes.ts +337 -35
- package/src/runtime/routes/surface-conversation-resolver.ts +4 -3
- package/src/runtime/routes/work-items-routes.ts +2 -4
- package/src/runtime/services/conversation-serializer.ts +1 -1
- package/src/signals/cancel.ts +2 -4
- package/src/subagent/manager.ts +21 -5
- package/src/tools/acp/context.ts +20 -0
- package/src/tools/acp/list-agents.test.ts +8 -2
- package/src/tools/acp/spawn.test.ts +176 -195
- 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/filesystem/write.ts +34 -0
- package/src/tools/subagent/spawn.ts +2 -4
- package/src/tools/ui-surface/definitions.ts +25 -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/__tests__/plugin-external-api.test.ts +0 -68
- package/src/daemon/wake-target-adapter.ts +0 -253
- 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/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/plugins/external-api.ts +0 -104
- 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/{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__/health.test.ts +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__/provider-blocks.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__/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}/health.ts +0 -0
- /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/llm-retry.ts +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/ARCHITECTURE.md
CHANGED
|
@@ -1088,12 +1088,12 @@ All overflow recovery settings live under `contextWindow.overflowRecovery` in th
|
|
|
1088
1088
|
|
|
1089
1089
|
### Key Source Files
|
|
1090
1090
|
|
|
1091
|
-
| File
|
|
1092
|
-
|
|
|
1093
|
-
| `src/
|
|
1094
|
-
| `src/daemon/context-overflow-policy.ts`
|
|
1095
|
-
| `src/daemon/conversation-agent-loop.ts`
|
|
1096
|
-
| `src/config/core-schema.ts`
|
|
1091
|
+
| File | Purpose |
|
|
1092
|
+
| ------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
|
1093
|
+
| `src/plugins/defaults/compaction/context-overflow-reducer.ts` | Tiered reducer: four-tier pipeline with idempotent steps and cumulative state |
|
|
1094
|
+
| `src/daemon/context-overflow-policy.ts` | Overflow policy resolver: maps config + interactivity to concrete action |
|
|
1095
|
+
| `src/daemon/conversation-agent-loop.ts` | Integration: preflight budget check, convergence loop, emergency compaction |
|
|
1096
|
+
| `src/config/core-schema.ts` | `ContextOverflowRecoveryConfigSchema` with defaults and validation |
|
|
1097
1097
|
|
|
1098
1098
|
---
|
|
1099
1099
|
|
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
|
|
|
@@ -1,43 +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
|
-
|
|
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
|
+
```
|
|
28
50
|
|
|
29
51
|
## Install locally
|
|
30
52
|
|
|
31
53
|
The assistant scans `<workspaceDir>/plugins/*` (e.g.
|
|
32
|
-
`~/.vellum/workspace/plugins/`) for subdirectories containing a
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
enable it.
|
|
36
|
-
|
|
37
|
-
The plugin reads `registerPlugin` from `globalThis.__vellumPluginRuntime`,
|
|
38
|
-
which the daemon attaches before scanning plugins. This works against both
|
|
39
|
-
the `bun --compile`-bundled daemon binary AND a daemon running from
|
|
40
|
-
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.
|
|
41
57
|
|
|
42
58
|
### Option 1 — symlink from the repo (simplest in-repo dev)
|
|
43
59
|
|
|
@@ -54,23 +70,10 @@ pick up changes.
|
|
|
54
70
|
### Option 2 — standalone copy
|
|
55
71
|
|
|
56
72
|
A plain `cp -R` of this directory into `~/.vellum/workspace/plugins/echo/`
|
|
57
|
-
works
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
at an absolute path inside any checkout — they're erased at compile time
|
|
62
|
-
and have no module-identity effect at runtime:
|
|
63
|
-
|
|
64
|
-
```ts
|
|
65
|
-
// before (repo-local):
|
|
66
|
-
import type { VellumPluginRuntime } from "../../../src/plugins/external-api.js";
|
|
67
|
-
import type { Plugin } from "../../../src/plugins/types.js";
|
|
68
|
-
// after (standalone, edit to your checkout path):
|
|
69
|
-
import type { VellumPluginRuntime } from "/path/to/vellum-assistant/assistant/src/plugins/external-api.js";
|
|
70
|
-
import type { Plugin } from "/path/to/vellum-assistant/assistant/src/plugins/types.js";
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
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.
|
|
74
77
|
|
|
75
78
|
### Restart the assistant
|
|
76
79
|
|
|
@@ -84,24 +87,23 @@ vellum restart
|
|
|
84
87
|
## Verify it works
|
|
85
88
|
|
|
86
89
|
With the plugin installed and the assistant restarted, send any message
|
|
87
|
-
that exercises a
|
|
88
|
-
|
|
90
|
+
that exercises a turn — a conversation reply, a tool call — and tail the
|
|
91
|
+
assistant's stderr log:
|
|
89
92
|
|
|
90
93
|
```bash
|
|
91
94
|
tail -f ~/.vellum/daemon.log
|
|
92
95
|
```
|
|
93
96
|
|
|
94
|
-
You should see one line per
|
|
97
|
+
You should see one line per hook invocation, similar to:
|
|
95
98
|
|
|
96
99
|
```json
|
|
97
|
-
{
|
|
98
|
-
|
|
100
|
+
{
|
|
101
|
+
"plugin": "echo",
|
|
102
|
+
"hook": "post-tool-use",
|
|
103
|
+
"conversationId": "conv_abc123"
|
|
104
|
+
}
|
|
99
105
|
```
|
|
100
106
|
|
|
101
|
-
If a pipeline throws (for example, a tool that errors out), you'll see a
|
|
102
|
-
line with `"outcome":"error"` — the plugin rethrows after logging so the
|
|
103
|
-
original error still propagates.
|
|
104
|
-
|
|
105
107
|
## Uninstall
|
|
106
108
|
|
|
107
109
|
Remove the symlink (or the copied directory) and restart the assistant:
|
|
@@ -113,14 +115,13 @@ vellum restart
|
|
|
113
115
|
|
|
114
116
|
## Next steps
|
|
115
117
|
|
|
116
|
-
- Read [`
|
|
117
|
-
plugin authoring guide: manifest shape,
|
|
118
|
-
(observe / transform
|
|
119
|
-
|
|
120
|
-
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.
|
|
121
122
|
- Look at the first-party default plugins under
|
|
122
|
-
`assistant/src/plugins/defaults/` for examples of
|
|
123
|
-
|
|
123
|
+
`assistant/src/plugins/defaults/` for examples of hooks that transform a
|
|
124
|
+
turn rather than just observing it.
|
|
124
125
|
- Build your own plugin by copying this directory, renaming the manifest
|
|
125
|
-
`name`, and replacing the observer with
|
|
126
|
-
|
|
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
|
+
}
|
|
@@ -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
|
// ---------------------------------------------------------------------------
|
package/openapi.yaml
CHANGED
|
@@ -95,7 +95,9 @@ 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 daemon
|
|
100
|
+
restart) are transparently resumed from persisted history first, when the agent supports ACP session loading.
|
|
99
101
|
tags:
|
|
100
102
|
- acp
|
|
101
103
|
responses:
|
|
@@ -110,6 +112,9 @@ paths:
|
|
|
110
112
|
type: string
|
|
111
113
|
steered:
|
|
112
114
|
type: boolean
|
|
115
|
+
resumed:
|
|
116
|
+
description: True when the session was resumed from persisted history before steering.
|
|
117
|
+
type: boolean
|
|
113
118
|
required:
|
|
114
119
|
- acpSessionId
|
|
115
120
|
- steered
|
|
@@ -136,7 +141,9 @@ paths:
|
|
|
136
141
|
delete:
|
|
137
142
|
operationId: acp_sessions_delete
|
|
138
143
|
summary: Bulk-clear terminal ACP sessions
|
|
139
|
-
description:
|
|
144
|
+
description:
|
|
145
|
+
Remove every terminal-state row (completed/failed/cancelled) from the persisted acp_session_history table.
|
|
146
|
+
Rows whose session is currently active in memory (e.g. resumed) or has a resume in flight are excluded.
|
|
140
147
|
tags:
|
|
141
148
|
- acp
|
|
142
149
|
responses:
|
|
@@ -238,8 +245,8 @@ paths:
|
|
|
238
245
|
operationId: acp_sessions_by_id_delete
|
|
239
246
|
summary: Delete ACP session from history
|
|
240
247
|
description:
|
|
241
|
-
Remove a persisted ACP session row. Rejects with 409 when the session is still active in memory
|
|
242
|
-
for unknown ids.
|
|
248
|
+
Remove a persisted ACP session row. Rejects with 409 when the session is still active in memory or has a
|
|
249
|
+
resume in flight; idempotent for unknown ids.
|
|
243
250
|
tags:
|
|
244
251
|
- acp
|
|
245
252
|
responses:
|
|
@@ -16020,8 +16027,13 @@ paths:
|
|
|
16020
16027
|
type: array
|
|
16021
16028
|
items:
|
|
16022
16029
|
type: string
|
|
16030
|
+
clientMessageId:
|
|
16031
|
+
type: string
|
|
16023
16032
|
role:
|
|
16024
16033
|
type: string
|
|
16034
|
+
enum:
|
|
16035
|
+
- user
|
|
16036
|
+
- assistant
|
|
16025
16037
|
content:
|
|
16026
16038
|
type: string
|
|
16027
16039
|
timestamp:
|
|
@@ -16985,6 +16997,12 @@ paths:
|
|
|
16985
16997
|
type: string
|
|
16986
16998
|
clientTimezone:
|
|
16987
16999
|
type: string
|
|
17000
|
+
clientMessageId:
|
|
17001
|
+
type: string
|
|
17002
|
+
description:
|
|
17003
|
+
Client-generated idempotency nonce. Persisted on the row and echoed back on the message_echo event and the
|
|
17004
|
+
messages snapshot so the client can correlate its optimistic row by identity. Duplicate sends for
|
|
17005
|
+
the same (conversation, clientMessageId) are deduplicated server-side.
|
|
16988
17006
|
inferenceProfile:
|
|
16989
17007
|
anyOf:
|
|
16990
17008
|
- type: string
|
|
@@ -19416,6 +19434,181 @@ paths:
|
|
|
19416
19434
|
required: true
|
|
19417
19435
|
schema:
|
|
19418
19436
|
type: string
|
|
19437
|
+
get:
|
|
19438
|
+
operationId: plugins_by_name_get
|
|
19439
|
+
summary: Get a plugin's detail view
|
|
19440
|
+
description:
|
|
19441
|
+
Resolve a single plugin's tracked metadata (description, homepage, license, version, source) plus its
|
|
19442
|
+
README markdown. Unions the locally installed copy, the marketplace manifest, and the plugin's repository at the
|
|
19443
|
+
pinned ref — preferring the installed copy. Names that are neither installed nor present in the catalog return
|
|
19444
|
+
404. Powers the web plugin detail page; mirrors `GET /v1/skills/:id`.
|
|
19445
|
+
tags:
|
|
19446
|
+
- plugins
|
|
19447
|
+
responses:
|
|
19448
|
+
"200":
|
|
19449
|
+
description: Successful response
|
|
19450
|
+
content:
|
|
19451
|
+
application/json:
|
|
19452
|
+
schema:
|
|
19453
|
+
type: object
|
|
19454
|
+
properties:
|
|
19455
|
+
name:
|
|
19456
|
+
type: string
|
|
19457
|
+
description: Install name. Matches `assistant plugins install <name>`.
|
|
19458
|
+
installed:
|
|
19459
|
+
type: boolean
|
|
19460
|
+
description: Whether a copy is materialized under `<workspaceDir>/plugins/<name>/`.
|
|
19461
|
+
description:
|
|
19462
|
+
anyOf:
|
|
19463
|
+
- type: string
|
|
19464
|
+
- type: "null"
|
|
19465
|
+
description: Short description, best-effort across disk, manifest, and repo.
|
|
19466
|
+
homepage:
|
|
19467
|
+
anyOf:
|
|
19468
|
+
- type: string
|
|
19469
|
+
- type: "null"
|
|
19470
|
+
description: Project homepage URL, when known.
|
|
19471
|
+
license:
|
|
19472
|
+
anyOf:
|
|
19473
|
+
- type: string
|
|
19474
|
+
- type: "null"
|
|
19475
|
+
description: SPDX license expression, when known.
|
|
19476
|
+
version:
|
|
19477
|
+
anyOf:
|
|
19478
|
+
- type: string
|
|
19479
|
+
- type: "null"
|
|
19480
|
+
description: Resolved version (installed copy first, then repo `package.json`).
|
|
19481
|
+
source:
|
|
19482
|
+
oneOf:
|
|
19483
|
+
- type: object
|
|
19484
|
+
properties:
|
|
19485
|
+
kind:
|
|
19486
|
+
type: string
|
|
19487
|
+
const: first-party
|
|
19488
|
+
required:
|
|
19489
|
+
- kind
|
|
19490
|
+
additionalProperties: false
|
|
19491
|
+
- type: object
|
|
19492
|
+
properties:
|
|
19493
|
+
kind:
|
|
19494
|
+
type: string
|
|
19495
|
+
const: github
|
|
19496
|
+
repo:
|
|
19497
|
+
type: string
|
|
19498
|
+
description: "`owner/repo` of the external plugin repository."
|
|
19499
|
+
path:
|
|
19500
|
+
description: Directory within the repo, when the plugin is not at the root.
|
|
19501
|
+
type: string
|
|
19502
|
+
ref:
|
|
19503
|
+
type: string
|
|
19504
|
+
description: Pinned git ref the plugin is fetched from.
|
|
19505
|
+
required:
|
|
19506
|
+
- kind
|
|
19507
|
+
- repo
|
|
19508
|
+
- ref
|
|
19509
|
+
additionalProperties: false
|
|
19510
|
+
description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
|
|
19511
|
+
readme:
|
|
19512
|
+
anyOf:
|
|
19513
|
+
- type: string
|
|
19514
|
+
- type: "null"
|
|
19515
|
+
description: README markdown, or null when the plugin ships none.
|
|
19516
|
+
ref:
|
|
19517
|
+
type: string
|
|
19518
|
+
description: Git ref the catalog metadata / README were resolved at.
|
|
19519
|
+
required:
|
|
19520
|
+
- name
|
|
19521
|
+
- installed
|
|
19522
|
+
- description
|
|
19523
|
+
- homepage
|
|
19524
|
+
- license
|
|
19525
|
+
- version
|
|
19526
|
+
- source
|
|
19527
|
+
- readme
|
|
19528
|
+
- ref
|
|
19529
|
+
additionalProperties: false
|
|
19530
|
+
"400":
|
|
19531
|
+
description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
|
|
19532
|
+
"404":
|
|
19533
|
+
description: No installed copy and no catalog entry claims the given name.
|
|
19534
|
+
parameters:
|
|
19535
|
+
- name: name
|
|
19536
|
+
in: path
|
|
19537
|
+
required: true
|
|
19538
|
+
schema:
|
|
19539
|
+
type: string
|
|
19540
|
+
- name: ref
|
|
19541
|
+
in: query
|
|
19542
|
+
required: false
|
|
19543
|
+
schema:
|
|
19544
|
+
type: string
|
|
19545
|
+
description: Optional git ref to read catalog metadata / README at. Defaults to the CLI's `DEFAULT_PLUGIN_REF`.
|
|
19546
|
+
/v1/plugins/install:
|
|
19547
|
+
post:
|
|
19548
|
+
operationId: plugins_install_post
|
|
19549
|
+
summary: Install a plugin
|
|
19550
|
+
description:
|
|
19551
|
+
"Install a plugin by name from the canonical source — a whitelisted `experimental/plugins/marketplace.json`
|
|
19552
|
+
entry, else the first-party `experimental/plugins/<name>/` convention. Always resolves against the curated
|
|
19553
|
+
default git ref (no caller-supplied ref): installing from an unreviewed revision would bypass the
|
|
19554
|
+
marketplace/first-party curation boundary and let attacker-controlled code be loaded. Materializes the plugin
|
|
19555
|
+
under `<workspaceDir>/plugins/<name>/`; the assistant must be restarted to load it. Mirrors the CLI's `assistant
|
|
19556
|
+
plugins install <name>`. An already-installed name without `force` returns 409; a name that resolves to nothing
|
|
19557
|
+
returns 404. Sibling to `POST /v1/skills/install`."
|
|
19558
|
+
tags:
|
|
19559
|
+
- plugins
|
|
19560
|
+
responses:
|
|
19561
|
+
"200":
|
|
19562
|
+
description: Successful response
|
|
19563
|
+
content:
|
|
19564
|
+
application/json:
|
|
19565
|
+
schema:
|
|
19566
|
+
type: object
|
|
19567
|
+
properties:
|
|
19568
|
+
ok:
|
|
19569
|
+
type: boolean
|
|
19570
|
+
const: true
|
|
19571
|
+
name:
|
|
19572
|
+
type: string
|
|
19573
|
+
description: Install name that was materialized.
|
|
19574
|
+
target:
|
|
19575
|
+
type: string
|
|
19576
|
+
description: Absolute path the plugin was materialized into on the host.
|
|
19577
|
+
fileCount:
|
|
19578
|
+
type: number
|
|
19579
|
+
description: Number of files written for the installed plugin.
|
|
19580
|
+
ref:
|
|
19581
|
+
type: string
|
|
19582
|
+
description: Git ref the plugin was fetched from.
|
|
19583
|
+
required:
|
|
19584
|
+
- ok
|
|
19585
|
+
- name
|
|
19586
|
+
- target
|
|
19587
|
+
- fileCount
|
|
19588
|
+
- ref
|
|
19589
|
+
additionalProperties: false
|
|
19590
|
+
"400":
|
|
19591
|
+
description: The request body was missing `name` or the name failed sanitization.
|
|
19592
|
+
"404":
|
|
19593
|
+
description: No plugin resolves to the given name at the requested ref.
|
|
19594
|
+
"409":
|
|
19595
|
+
description: A plugin with the same name is already installed and `force` was not set.
|
|
19596
|
+
requestBody:
|
|
19597
|
+
required: true
|
|
19598
|
+
content:
|
|
19599
|
+
application/json:
|
|
19600
|
+
schema:
|
|
19601
|
+
type: object
|
|
19602
|
+
properties:
|
|
19603
|
+
name:
|
|
19604
|
+
type: string
|
|
19605
|
+
description: Install name to resolve against the catalog (first-party directory or marketplace entry).
|
|
19606
|
+
force:
|
|
19607
|
+
description: Overwrite an existing install in place. Defaults to false.
|
|
19608
|
+
type: boolean
|
|
19609
|
+
required:
|
|
19610
|
+
- name
|
|
19611
|
+
additionalProperties: false
|
|
19419
19612
|
/v1/plugins/search:
|
|
19420
19613
|
get:
|
|
19421
19614
|
operationId: plugins_search_get
|
|
@@ -19447,13 +19640,49 @@ paths:
|
|
|
19447
19640
|
properties:
|
|
19448
19641
|
name:
|
|
19449
19642
|
type: string
|
|
19450
|
-
description:
|
|
19643
|
+
description: Install name. Matches `assistant plugins install <name>`.
|
|
19451
19644
|
path:
|
|
19452
19645
|
type: string
|
|
19453
|
-
description:
|
|
19646
|
+
description:
|
|
19647
|
+
"Human-readable origin: a repo-relative path (`experimental/plugins/<name>`) for first-party plugins or a
|
|
19648
|
+
`github:owner/repo@ref` locator for external ones."
|
|
19649
|
+
description:
|
|
19650
|
+
description: Short description, when known (external entries only today).
|
|
19651
|
+
type: string
|
|
19652
|
+
source:
|
|
19653
|
+
oneOf:
|
|
19654
|
+
- type: object
|
|
19655
|
+
properties:
|
|
19656
|
+
kind:
|
|
19657
|
+
type: string
|
|
19658
|
+
const: first-party
|
|
19659
|
+
required:
|
|
19660
|
+
- kind
|
|
19661
|
+
additionalProperties: false
|
|
19662
|
+
- type: object
|
|
19663
|
+
properties:
|
|
19664
|
+
kind:
|
|
19665
|
+
type: string
|
|
19666
|
+
const: github
|
|
19667
|
+
repo:
|
|
19668
|
+
type: string
|
|
19669
|
+
description: "`owner/repo` of the external plugin repository."
|
|
19670
|
+
path:
|
|
19671
|
+
description: Directory within the repo, when the plugin is not at the root.
|
|
19672
|
+
type: string
|
|
19673
|
+
ref:
|
|
19674
|
+
type: string
|
|
19675
|
+
description: Pinned git ref the plugin is fetched from.
|
|
19676
|
+
required:
|
|
19677
|
+
- kind
|
|
19678
|
+
- repo
|
|
19679
|
+
- ref
|
|
19680
|
+
additionalProperties: false
|
|
19681
|
+
description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
|
|
19454
19682
|
required:
|
|
19455
19683
|
- name
|
|
19456
19684
|
- path
|
|
19685
|
+
- source
|
|
19457
19686
|
additionalProperties: false
|
|
19458
19687
|
description: Directory matches, sorted alphabetically by name.
|
|
19459
19688
|
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-staging.2",
|
|
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",
|