@vellumai/assistant 0.8.0 → 0.8.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/AGENTS.md +11 -0
- package/ARCHITECTURE.md +2 -7
- package/Dockerfile +80 -5
- package/README.md +2 -2
- package/bun.lock +11 -1
- package/docker-entrypoint.sh +21 -0
- package/docker-init-apt-root.sh +94 -0
- package/docker-kata-apt-env.sh +39 -0
- package/docs/plugins.md +88 -47
- package/docs/skills.md +9 -7
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +420 -0
- package/eslint-rules/cli-no-daemon-internals.js +283 -0
- package/eslint.config.mjs +12 -0
- package/examples/plugins/echo/README.md +27 -27
- package/examples/plugins/echo/package.json +3 -0
- package/examples/plugins/echo/register.ts +31 -31
- package/knip.json +2 -1
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -1
- package/node_modules/@vellumai/slack-text/src/index.test.ts +114 -14
- package/node_modules/@vellumai/slack-text/src/index.ts +82 -18
- package/openapi.yaml +4462 -991
- package/package.json +5 -1
- package/scripts/generate-openapi.ts +135 -14
- package/scripts/sync-llm-catalog.ts +165 -0
- package/scripts/sync-web-search-catalog.ts +129 -0
- package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +169 -0
- package/src/__tests__/agent-image-optimize.test.ts +11 -3
- package/src/__tests__/agent-loop-override-profile.test.ts +26 -1
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +131 -0
- package/src/__tests__/anthropic-provider.test.ts +137 -2
- package/src/__tests__/app-builder-tool-scripts.test.ts +9 -3
- package/src/__tests__/app-control-flow.test.ts +7 -0
- package/src/__tests__/app-executors.test.ts +220 -4
- package/src/__tests__/assistant-events-sse-shed.test.ts +232 -0
- package/src/__tests__/auto-analysis-end-to-end.test.ts +35 -0
- package/src/__tests__/avatar-identity-sync.test.ts +87 -0
- package/src/__tests__/background-workers-disk-pressure.test.ts +11 -22
- package/src/__tests__/btw-routes.test.ts +1 -0
- package/src/__tests__/bundled-asset.test.ts +6 -6
- package/src/__tests__/call-site-routing-provider.test.ts +172 -45
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +44 -3
- package/src/__tests__/channel-availability-routes.test.ts +206 -0
- package/src/__tests__/channel-delivery-store.test.ts +289 -1
- package/src/__tests__/channel-policy.test.ts +12 -0
- package/src/__tests__/checker.test.ts +89 -0
- package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -1
- package/src/__tests__/clawhub.test.ts +75 -16
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +35 -7
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +33 -5
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +26 -1
- package/src/__tests__/compactor-tail-resolution.test.ts +41 -0
- package/src/__tests__/config-loader-backfill.test.ts +526 -102
- package/src/__tests__/config-loader-corrupt.test.ts +68 -0
- package/src/__tests__/config-loader-platform-defaults.test.ts +77 -23
- package/src/__tests__/config-schema-cmd.test.ts +63 -29
- package/src/__tests__/config-schema.test.ts +35 -3
- package/src/__tests__/config-set-platform-guard.test.ts +75 -152
- package/src/__tests__/config-set-route.test.ts +278 -0
- package/src/__tests__/config-sounds-sync.test.ts +97 -0
- package/src/__tests__/config-watcher-skill-reseed.test.ts +453 -0
- package/src/__tests__/config-watcher.test.ts +6 -0
- package/src/__tests__/contacts-tools.test.ts +51 -199
- package/src/__tests__/context-search-agent-protocol.test.ts +21 -2
- package/src/__tests__/context-search-agent-runner.test.ts +22 -138
- package/src/__tests__/context-search-conversations-source.test.ts +159 -18
- package/src/__tests__/context-search-fanout.test.ts +20 -157
- package/src/__tests__/context-search-memory-v2-source.test.ts +3 -4
- package/src/__tests__/context-search-types.test.ts +7 -2
- package/src/__tests__/context-search-workspace-source.test.ts +7 -0
- package/src/__tests__/context-token-estimator.test.ts +1 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +4 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +93 -92
- package/src/__tests__/conversation-agent-loop.test.ts +2 -0
- package/src/__tests__/conversation-crud-inference-profile.test.ts +100 -0
- package/src/__tests__/conversation-error.test.ts +80 -3
- package/src/__tests__/conversation-fork-crud.test.ts +323 -1
- package/src/__tests__/conversation-inference-profile-route.test.ts +54 -18
- package/src/__tests__/conversation-init.benchmark.test.ts +1 -0
- package/src/__tests__/conversation-lifecycle.test.ts +297 -0
- package/src/__tests__/conversation-message-sync-tags.test.ts +97 -0
- package/src/__tests__/conversation-pairing.test.ts +54 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +100 -1
- package/src/__tests__/conversation-process-callsite.test.ts +25 -2
- package/src/__tests__/conversation-provider-retry-repair.test.ts +5 -1
- package/src/__tests__/conversation-queue.test.ts +4 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +80 -13
- package/src/__tests__/conversation-slash-commands.test.ts +194 -2
- package/src/__tests__/conversation-slash-queue.test.ts +59 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +4 -1
- package/src/__tests__/conversation-surfaces-app-control.test.ts +323 -3
- package/src/__tests__/conversation-surfaces-table-action.test.ts +360 -0
- package/src/__tests__/conversation-sync-tags.test.ts +235 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -1
- package/src/__tests__/credential-security-invariants.test.ts +8 -8
- package/src/__tests__/daemon-credential-client.test.ts +56 -1
- package/src/__tests__/db-activation-state-fk-cascade.test.ts +132 -0
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +37 -0
- package/src/__tests__/db-memory-graph-event-date-repair.test.ts +43 -20
- package/src/__tests__/db-proxy-transaction.test.ts +206 -0
- package/src/__tests__/db-slack-external-content-normalization.test.ts +301 -0
- package/src/__tests__/delete-managed-skill-tool.test.ts +55 -13
- package/src/__tests__/disk-pressure-tools.test.ts +1 -0
- package/src/__tests__/dm-backfill.test.ts +121 -10
- package/src/__tests__/document-tool-security.test.ts +258 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/edit-propagation.test.ts +33 -0
- package/src/__tests__/empty-response-pipeline.test.ts +0 -4
- package/src/__tests__/external-plugin-loader.test.ts +482 -0
- package/src/__tests__/filing-service.test.ts +163 -3
- package/src/__tests__/fixtures/mock-chrome-extension.ts +5 -0
- package/src/__tests__/gateway-only-guard.test.ts +0 -1
- package/src/__tests__/get-skill-detail-audit.test.ts +0 -4
- package/src/__tests__/graph-extraction-event-date.test.ts +34 -0
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +42 -69
- package/src/__tests__/heartbeat-disk-pressure.test.ts +21 -8
- package/src/__tests__/heartbeat-service.test.ts +50 -233
- package/src/__tests__/helpers/tar-fixtures.ts +39 -0
- package/src/__tests__/helpers/wait-for.ts +21 -0
- package/src/__tests__/history-repair-pipeline.test.ts +0 -3
- package/src/__tests__/history-repair.test.ts +162 -0
- package/src/__tests__/host-app-control-proxy.test.ts +365 -1
- package/src/__tests__/host-app-control-routes.test.ts +247 -1
- package/src/__tests__/host-browser-proxy.test.ts +416 -20
- package/src/__tests__/host-browser-routes.test.ts +325 -33
- package/src/__tests__/host-proxy-preactivation.test.ts +211 -0
- package/src/__tests__/image-credentials.test.ts +1 -1
- package/src/__tests__/inbound-slack-persistence.test.ts +2 -0
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +246 -0
- package/src/__tests__/inference-profile-reaper.test.ts +156 -0
- package/src/__tests__/inference-profile-session-handler.test.ts +410 -0
- package/src/__tests__/inference-profile-session-ipc.test.ts +248 -0
- package/src/__tests__/injector-chain.test.ts +10 -8
- package/src/__tests__/inline-skill-load-permissions.test.ts +6 -1
- package/src/__tests__/install-skill-routing.test.ts +157 -39
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +107 -3
- package/src/__tests__/list-messages-page-latest.test.ts +55 -0
- package/src/__tests__/llm-call-pipeline.test.ts +0 -3
- package/src/__tests__/llm-callsite-catalog.test.ts +20 -1
- package/src/__tests__/llm-catalog-parity.test.ts +190 -2
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +222 -0
- package/src/__tests__/llm-request-log-source-factory.test.ts +100 -0
- package/src/__tests__/llm-resolver.test.ts +46 -0
- package/src/__tests__/llm-usage-store.test.ts +114 -0
- package/src/__tests__/managed-profile-guard.test.ts +145 -14
- package/src/__tests__/managed-skill-lifecycle.test.ts +109 -18
- package/src/__tests__/managed-store.test.ts +84 -192
- package/src/__tests__/mcp-auth-routes.test.ts +1 -0
- package/src/__tests__/mcp-cli.test.ts +182 -220
- package/src/__tests__/mcp-health-check.test.ts +56 -27
- package/src/__tests__/media-generate-image.test.ts +1 -1
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +18 -11
- package/src/__tests__/memory-retrieval-pipeline.test.ts +0 -2
- package/src/__tests__/message-complete-display-id.test.ts +175 -0
- package/src/__tests__/messages-after-tiebreaker.test.ts +122 -0
- package/src/__tests__/notification-platform-adapter.test.ts +229 -0
- package/src/__tests__/oauth-cli.test.ts +38 -2009
- package/src/__tests__/oauth-commands-routes.test.ts +863 -0
- package/src/__tests__/oauth-connect-routes.test.ts +174 -11
- package/src/__tests__/oauth-provider-profiles.test.ts +9 -0
- package/src/__tests__/oauth-providers-routes.test.ts +14 -10
- package/src/__tests__/openai-provider.test.ts +24 -0
- package/src/__tests__/openai-responses-cutover-guard.test.ts +48 -19
- package/src/__tests__/openai-responses-provider.test.ts +17 -0
- package/src/__tests__/overflow-reduce-pipeline.test.ts +0 -2
- package/src/__tests__/persistence-pipeline.test.ts +0 -2
- package/src/__tests__/{managed-proxy-context.test.ts → platform-proxy-context.test.ts} +1 -1
- package/src/__tests__/platform.test.ts +2 -0
- package/src/__tests__/plugin-api-shim.test.ts +125 -0
- package/src/__tests__/plugin-bootstrap.test.ts +41 -38
- package/src/__tests__/plugin-external-api.test.ts +68 -0
- package/src/__tests__/plugin-registry.test.ts +0 -77
- package/src/__tests__/plugin-route-contribution.test.ts +31 -4
- package/src/__tests__/plugin-skill-contribution.test.ts +0 -2
- package/src/__tests__/plugin-tool-contribution.test.ts +47 -18
- package/src/__tests__/plugin-types.test.ts +15 -23
- package/src/__tests__/process-message-background-slack.test.ts +53 -0
- package/src/__tests__/process-message-display-content.test.ts +421 -0
- package/src/__tests__/profile-entry-status.test.ts +43 -0
- package/src/__tests__/provider-catalog-visibility.test.ts +142 -0
- package/src/__tests__/provider-error-scenarios.test.ts +111 -0
- package/src/__tests__/{provider-managed-proxy-integration.test.ts → provider-platform-proxy-integration.test.ts} +20 -12
- package/src/__tests__/provider-registry-ollama.test.ts +12 -4
- package/src/__tests__/provider-send-message-override-profile.test.ts +10 -4
- package/src/__tests__/relay-server.test.ts +118 -0
- package/src/__tests__/retry-thinking-tool-choice.test.ts +15 -0
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +65 -13
- package/src/__tests__/schedule-retry.test.ts +56 -4
- package/src/__tests__/schedule-routes.test.ts +151 -0
- package/src/__tests__/schedule-store.test.ts +94 -0
- package/src/__tests__/scheduler-disk-pressure.test.ts +0 -4
- package/src/__tests__/scheduler-recurrence.test.ts +87 -34
- package/src/__tests__/scheduler-reuse-conversation.test.ts +208 -5
- package/src/__tests__/scheduler-wake.test.ts +0 -63
- package/src/__tests__/schema-transforms.test.ts +20 -0
- package/src/__tests__/search-skills-unified.test.ts +0 -5
- package/src/__tests__/secret-allowlist.test.ts +1 -0
- package/src/__tests__/{secret-routes-managed-proxy.test.ts → secret-routes-platform-proxy.test.ts} +12 -4
- package/src/__tests__/server-history-render.test.ts +43 -0
- package/src/__tests__/shell-credential-ref.test.ts +95 -3
- package/src/__tests__/shell-tool-proxy-mode.test.ts +14 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -12
- package/src/__tests__/skill-load-tool.test.ts +29 -93
- package/src/__tests__/skill-memory.test.ts +23 -3
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -38
- package/src/__tests__/skills-files-catalog-fallback.test.ts +0 -3
- package/src/__tests__/skills-install-extract.test.ts +49 -38
- package/src/__tests__/skills-install-staging.test.ts +159 -0
- package/src/__tests__/skills-uninstall.test.ts +9 -41
- package/src/__tests__/skills.test.ts +51 -58
- package/src/__tests__/slack-channel-config.test.ts +9 -0
- package/src/__tests__/subagent-call-site-routing.test.ts +78 -16
- package/src/__tests__/subagent-tool-filtering.test.ts +50 -0
- package/src/__tests__/suggestion-routes.test.ts +3 -3
- package/src/__tests__/sync-message-contract.test.ts +63 -0
- package/src/__tests__/system-prompt.test.ts +737 -63
- package/src/__tests__/task-scheduler.test.ts +88 -23
- package/src/__tests__/terminal-tools.test.ts +28 -1
- package/src/__tests__/thread-backfill.test.ts +557 -27
- package/src/__tests__/title-generate-pipeline.test.ts +0 -13
- package/src/__tests__/token-estimate-pipeline.test.ts +0 -3
- package/src/__tests__/tool-error-pipeline.test.ts +0 -3
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/tool-executor.test.ts +16 -4
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +0 -12
- package/src/__tests__/turn-events-store.test.ts +256 -0
- package/src/__tests__/twilio-routes.test.ts +4 -0
- package/src/__tests__/update-bulletin-job.test.ts +96 -193
- package/src/__tests__/usage-cli.test.ts +11 -73
- package/src/__tests__/user-plugin-loader.test.ts +143 -5
- package/src/__tests__/vercel-config.test.ts +168 -0
- package/src/__tests__/voice-session-bridge.test.ts +198 -0
- package/src/__tests__/web-search-catalog-parity.test.ts +108 -0
- package/src/__tests__/web-search.test.ts +303 -2
- package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +1 -21
- package/src/__tests__/workspace-migration-057-repair-stale-gemini-model-ids.test.ts +170 -0
- package/src/__tests__/workspace-migration-069-seed-onboarding-threads.test.ts +53 -20
- package/src/__tests__/workspace-migration-072-seed-reply-suggestion-callsite.test.ts +241 -0
- package/src/__tests__/workspace-migration-073-repair-recall-callsite-empty-profile.test.ts +153 -0
- package/src/__tests__/workspace-migration-076-drop-services-inference-mode.test.ts +211 -0
- package/src/__tests__/workspace-migration-077-seed-memory-router-callsite.test.ts +174 -0
- package/src/__tests__/workspace-migration-079-home-feed-notification-only.test.ts +323 -0
- package/src/__tests__/workspace-migration-080-restrict-vercel-api-token-metadata.test.ts +299 -0
- package/src/__tests__/workspace-migration-081-backfill-bash-allowed-tools.test.ts +410 -0
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +268 -0
- package/src/__tests__/workspace-migration-085-memory-v2-bm25-b-reembed-disabled-v2-pages.test.ts +220 -0
- package/src/__tests__/workspace-migration-086-revert-stale-gemini-mis-rewrites.test.ts +269 -0
- package/src/__tests__/workspace-migration-remove-legacy-skills-index.test.ts +309 -0
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +3 -3
- package/src/__tests__/workspace-migrations-runner.test.ts +111 -3
- package/src/__tests__/workspace-release-notes-feature-flag-guard.test.ts +115 -0
- package/src/acp/__tests__/helpers/which-stub.ts +4 -2
- package/src/acp/resolve-agent.test.ts +25 -0
- package/src/acp/resolve-agent.ts +13 -2
- package/src/acp/session-manager.ts +14 -0
- package/src/agent/image-optimize.ts +13 -5
- package/src/approvals/guardian-request-resolvers.ts +32 -87
- package/src/calls/relay-server.ts +35 -0
- package/src/calls/relay-setup-router.ts +36 -0
- package/src/calls/types.ts +1 -0
- package/src/calls/voice-session-bridge.ts +74 -36
- package/src/channels/config.ts +14 -1
- package/src/channels/types.ts +109 -0
- package/src/cli/AGENTS.md +164 -4
- package/src/cli/__tests__/notifications.test.ts +54 -0
- package/src/cli/__tests__/unknown-command.test.ts +24 -0
- package/src/cli/commands/__tests__/avatar.test.ts +540 -0
- package/src/cli/commands/__tests__/backup.test.ts +236 -776
- package/src/cli/commands/__tests__/cache.test.ts +1 -1
- package/src/cli/commands/__tests__/changelog.test.ts +578 -0
- package/src/cli/commands/__tests__/channel-verification-sessions.test.ts +503 -0
- package/src/cli/commands/__tests__/conversations-import.test.ts +515 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +140 -167
- package/src/cli/commands/__tests__/domain-status.test.ts +137 -76
- package/src/cli/commands/__tests__/email-attachment.test.ts +314 -337
- package/src/cli/commands/__tests__/email-core.test.ts +579 -0
- package/src/cli/commands/__tests__/image-generation.test.ts +87 -824
- package/src/cli/commands/__tests__/inference-send.test.ts +30 -266
- package/src/cli/commands/__tests__/inference-session.test.ts +423 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +81 -110
- package/src/cli/commands/__tests__/schedules.test.ts +491 -0
- package/src/cli/commands/__tests__/skills.test.ts +563 -0
- package/src/cli/commands/__tests__/status.test.ts +249 -0
- package/src/cli/commands/__tests__/stt.test.ts +320 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +4 -603
- package/src/cli/commands/__tests__/tts.test.ts +321 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +86 -511
- package/src/cli/commands/attachment.ts +8 -3
- package/src/cli/commands/audit.ts +95 -64
- package/src/cli/commands/auth.ts +61 -58
- package/src/cli/commands/avatar.ts +276 -390
- package/src/cli/commands/backup.ts +409 -505
- package/src/cli/commands/bash.ts +9 -5
- package/src/cli/commands/browser.ts +28 -9
- package/src/cli/commands/cache.ts +9 -4
- package/src/cli/commands/changelog.ts +478 -0
- package/src/cli/commands/channel-verification-sessions.ts +238 -317
- package/src/cli/commands/clients.ts +8 -3
- package/src/cli/commands/completions.ts +9 -9
- package/src/cli/commands/config.ts +102 -72
- package/src/cli/commands/contacts.ts +575 -696
- package/src/cli/commands/conversations-defer.ts +17 -69
- package/src/cli/commands/conversations-import.ts +90 -253
- package/src/cli/commands/conversations.ts +429 -434
- package/src/cli/commands/credential-execution.ts +9 -6
- package/src/cli/commands/credentials.ts +456 -736
- package/src/cli/commands/default-action.ts +10 -53
- package/src/cli/commands/domain.ts +128 -206
- package/src/cli/commands/email.ts +606 -794
- package/src/cli/commands/gateway.ts +8 -1
- package/src/cli/commands/image-generation.ts +157 -205
- package/src/cli/commands/inference-providers.ts +352 -0
- package/src/cli/commands/inference-session.ts +415 -0
- package/src/cli/commands/inference.ts +87 -65
- package/src/cli/commands/keys.ts +8 -3
- package/src/cli/commands/mcp.ts +103 -287
- package/src/cli/commands/memory-v2.ts +162 -516
- package/src/cli/commands/notifications.ts +342 -304
- package/src/cli/commands/oauth/apps.ts +292 -261
- package/src/cli/commands/oauth/connect.ts +176 -297
- package/src/cli/commands/oauth/disconnect.ts +16 -215
- package/src/cli/commands/oauth/index.ts +49 -45
- package/src/cli/commands/oauth/mode.ts +43 -199
- package/src/cli/commands/oauth/ping.ts +17 -125
- package/src/cli/commands/oauth/providers.ts +732 -921
- package/src/cli/commands/oauth/request.ts +60 -350
- package/src/cli/commands/oauth/shared.ts +11 -121
- package/src/cli/commands/oauth/status.ts +31 -121
- package/src/cli/commands/oauth/token.ts +13 -55
- package/src/cli/commands/pending.ts +19 -10
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +133 -183
- package/src/cli/commands/platform/__tests__/connect.test.ts +66 -181
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +71 -227
- package/src/cli/commands/platform/__tests__/status.test.ts +169 -287
- package/src/cli/commands/platform/connect.ts +16 -80
- package/src/cli/commands/platform/disconnect.ts +14 -112
- package/src/cli/commands/platform/index.ts +177 -246
- package/src/cli/commands/plugins.ts +185 -0
- package/src/cli/commands/routes.ts +153 -336
- package/src/cli/commands/schedules.ts +391 -0
- package/src/cli/commands/sequence.ts +316 -360
- package/src/cli/commands/skills.ts +449 -671
- package/src/cli/commands/status.ts +58 -37
- package/src/cli/commands/stt.ts +94 -262
- package/src/cli/commands/task.ts +14 -40
- package/src/cli/commands/telemetry.ts +40 -0
- package/src/cli/commands/trust.ts +8 -3
- package/src/cli/commands/tts.ts +162 -167
- package/src/cli/commands/ui.ts +35 -42
- package/src/cli/commands/usage.ts +188 -126
- package/src/cli/commands/watchers.ts +8 -3
- package/src/cli/commands/webhooks.ts +99 -193
- package/src/cli/lib/__tests__/cli-colors.test.ts +48 -0
- package/src/cli/lib/__tests__/confirm-prompt.test.ts +159 -0
- package/src/cli/lib/__tests__/install-from-github.test.ts +355 -0
- package/src/cli/lib/__tests__/list-installed-plugins.test.ts +154 -0
- package/src/cli/lib/__tests__/register-command.test.ts +85 -0
- package/src/cli/lib/__tests__/uninstall-plugin.test.ts +124 -0
- package/src/cli/lib/__tests__/unknown-command.test.ts +106 -0
- package/src/cli/lib/cli-colors.ts +12 -0
- package/src/cli/lib/confirm-prompt.ts +79 -0
- package/src/cli/lib/daemon-credential-client.ts +4 -5
- package/src/cli/lib/install-from-github.ts +304 -0
- package/src/cli/lib/list-installed-plugins.ts +137 -0
- package/src/cli/lib/nested-value.ts +44 -0
- package/src/cli/lib/open-browser.ts +36 -0
- package/src/cli/lib/register-command.ts +19 -0
- package/src/cli/lib/time-ago.ts +34 -0
- package/src/cli/lib/uninstall-plugin.ts +82 -0
- package/src/cli/lib/unknown-command.ts +111 -0
- package/src/cli/program.ts +40 -6
- package/src/cli/utils/__tests__/conversation-id.test.ts +66 -0
- package/src/cli/utils/__tests__/parse-duration.test.ts +49 -0
- package/src/cli/utils/conversation-id.ts +30 -0
- package/src/cli/utils/parse-duration.ts +41 -0
- package/src/config/acp-defaults.test.ts +5 -1
- package/src/config/acp-defaults.ts +11 -4
- package/src/config/bundled-skills/acp/TOOLS.json +2 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +23 -21
- package/src/config/bundled-skills/app-builder/TOOLS.json +7 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +32 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +15 -52
- package/src/config/bundled-skills/contacts/SKILL.md +12 -45
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -57
- package/src/config/bundled-skills/document/SKILL.md +23 -3
- package/src/config/bundled-skills/document/TOOLS.json +53 -0
- package/src/config/bundled-skills/document/tools/document-delete.ts +12 -0
- package/src/config/bundled-skills/document/tools/document-list.ts +12 -0
- package/src/config/bundled-skills/document/tools/document-read.ts +12 -0
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +0 -12
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -58
- package/src/config/bundled-skills/skill-management/SKILL.md +2 -2
- package/src/config/bundled-skills/skill-management/TOOLS.json +7 -7
- package/src/config/bundled-tool-registry.ts +6 -2
- package/src/config/feature-flag-registry.json +57 -1
- package/src/config/llm-resolver.ts +16 -1
- package/src/config/loader.ts +140 -52
- package/src/config/raw-config-utils.ts +2 -30
- package/src/config/schema.ts +8 -7
- package/src/config/schemas/__tests__/llm-request-logs.test.ts +36 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +49 -0
- package/src/config/schemas/call-site-catalog.ts +29 -7
- package/src/config/schemas/channels.ts +8 -0
- package/src/config/schemas/compaction.ts +28 -0
- package/src/config/schemas/heartbeat.ts +9 -0
- package/src/config/schemas/llm-request-logs.ts +81 -0
- package/src/config/schemas/llm.ts +55 -2
- package/src/config/schemas/memory-retrieval.ts +18 -0
- package/src/config/schemas/memory-retrospective.ts +48 -0
- package/src/config/schemas/memory-v2.ts +32 -1
- package/src/config/schemas/memory.ts +4 -0
- package/src/config/schemas/services.ts +15 -12
- package/src/config/schemas/tools.ts +14 -0
- package/src/config/seed-inference-profiles.ts +195 -134
- package/src/config/skills.ts +3 -96
- package/src/contacts/contact-store.ts +0 -61
- package/src/context/compactor.ts +1047 -0
- package/src/context/token-estimator.ts +2 -2
- package/src/context/window-manager.ts +197 -1334
- package/src/credential-execution/managed-catalog.ts +37 -0
- package/src/credential-health/credential-health-service.ts +280 -19
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +113 -0
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +138 -0
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +183 -4
- package/src/daemon/__tests__/daemon-skill-host.test.ts +10 -4
- package/src/daemon/approval-generators.ts +26 -30
- package/src/daemon/config-watcher.ts +94 -29
- package/src/daemon/conversation-agent-loop-handlers.ts +24 -0
- package/src/daemon/conversation-agent-loop.ts +293 -103
- package/src/daemon/conversation-error.ts +188 -33
- package/src/daemon/conversation-lifecycle.ts +80 -26
- package/src/daemon/conversation-messaging.ts +25 -6
- package/src/daemon/conversation-process.ts +85 -31
- package/src/daemon/conversation-runtime-assembly.ts +30 -6
- package/src/daemon/conversation-slash.ts +184 -25
- package/src/daemon/conversation-store.ts +24 -10
- package/src/daemon/conversation-surfaces.ts +76 -12
- package/src/daemon/conversation-tool-setup.ts +63 -21
- package/src/daemon/conversation.ts +81 -10
- package/src/daemon/external-plugins-bootstrap.ts +231 -185
- package/src/daemon/first-greeting.ts +22 -2
- package/src/daemon/guardian-action-generators.ts +7 -22
- package/src/daemon/handlers/config-model.ts +13 -130
- package/src/daemon/handlers/config-slack-channel.ts +25 -10
- package/src/daemon/handlers/config-vercel.ts +3 -1
- package/src/daemon/handlers/shared.ts +14 -5
- package/src/daemon/handlers/skills.ts +166 -84
- package/src/daemon/history-repair.ts +61 -7
- package/src/daemon/host-app-control-proxy.ts +129 -29
- package/src/daemon/host-bash-proxy.ts +85 -158
- package/src/daemon/host-browser-proxy.ts +96 -35
- package/src/daemon/host-proxy-base.ts +13 -1
- package/src/daemon/host-proxy-preactivation.ts +25 -1
- package/src/daemon/identity-helpers.ts +19 -0
- package/src/daemon/lifecycle.ts +79 -70
- package/src/daemon/meet-host-supervisor.ts +20 -19
- package/src/daemon/memory-v2-startup.ts +58 -2
- package/src/daemon/message-protocol.ts +7 -0
- package/src/daemon/message-types/bookmarks.ts +18 -0
- package/src/daemon/message-types/conversations.ts +37 -9
- package/src/daemon/message-types/messages.ts +70 -1
- package/src/daemon/message-types/subagents.ts +1 -0
- package/src/daemon/message-types/sync.ts +61 -0
- package/src/daemon/pkb-reminder-builder.test.ts +54 -13
- package/src/daemon/pkb-reminder-builder.ts +21 -7
- package/src/daemon/plugin-source-watcher.ts +146 -0
- package/src/daemon/process-message.ts +77 -26
- package/src/daemon/server.ts +34 -20
- package/src/daemon/shutdown-handlers.ts +0 -2
- package/src/daemon/skill-memory-refresh.ts +29 -0
- package/src/daemon/tool-setup-types.ts +9 -0
- package/src/daemon/tool-side-effects.ts +6 -4
- package/src/daemon/wake-target-adapter.ts +11 -0
- package/src/documents/document-store.ts +221 -3
- package/src/embedded/plugin-api.ts +40 -0
- package/src/export/transcript-formatter.ts +61 -2
- package/src/filing/filing-service.ts +79 -53
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +444 -0
- package/src/heartbeat/heartbeat-run-store.ts +3 -1
- package/src/heartbeat/heartbeat-service.ts +189 -127
- package/src/home/__tests__/feed-types.test.ts +99 -127
- package/src/home/__tests__/feed-writer.test.ts +77 -278
- package/src/home/__tests__/post-connect-feed.test.ts +9 -12
- package/src/home/feed-types.ts +41 -73
- package/src/home/feed-writer.ts +25 -156
- package/src/home/post-connect-feed.ts +2 -3
- package/src/index.ts +18 -1
- package/src/ipc/__tests__/cli-ipc.test.ts +2 -0
- package/src/ipc/__tests__/email-ipc.test.ts +506 -0
- package/src/ipc/__tests__/exit-helper.test.ts +104 -0
- package/src/ipc/__tests__/streaming-client.test.ts +237 -0
- package/src/ipc/__tests__/streaming-framing.test.ts +142 -0
- package/src/ipc/assistant-server.ts +55 -6
- package/src/ipc/cli-client.ts +370 -50
- package/src/ipc/routes/db-proxy-transaction.ts +151 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +60 -0
- package/src/ipc/skill-routes/events.ts +30 -3
- package/src/live-voice/__tests__/live-voice-session-manager.test.ts +46 -0
- package/src/live-voice/__tests__/live-voice-stt.test.ts +57 -0
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +1 -0
- package/src/live-voice/live-voice-session-manager.ts +11 -4
- package/src/live-voice/live-voice-session.ts +14 -6
- package/src/mcp/client.ts +20 -4
- package/src/media/image-credentials.ts +3 -3
- package/src/memory/__tests__/bookmark-crud.test.ts +264 -0
- package/src/memory/__tests__/bookmark-schema.test.ts +181 -0
- package/src/memory/__tests__/conversation-queries.test.ts +263 -0
- package/src/memory/__tests__/conversation-types.test.ts +36 -0
- package/src/memory/__tests__/find-most-recent-retrospective-for.test.ts +130 -0
- package/src/memory/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +113 -0
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +177 -0
- package/src/memory/__tests__/memory-retrospective-job.test.ts +328 -0
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +318 -0
- package/src/memory/__tests__/memory-retrospective-trigger-check.test.ts +90 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +69 -0
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +3 -0
- package/src/memory/__tests__/message-content.test.ts +35 -0
- package/src/memory/bookmark-crud.ts +211 -0
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +31 -9
- package/src/memory/context-search/agent-protocol.ts +5 -1
- package/src/memory/context-search/agent-runner.ts +60 -85
- package/src/memory/context-search/limits.ts +1 -4
- package/src/memory/context-search/search.ts +23 -113
- package/src/memory/context-search/sources/conversations.ts +80 -8
- package/src/memory/context-search/sources/memory-v2.ts +39 -14
- package/src/memory/context-search/sources/memory.ts +7 -0
- package/src/memory/context-search/sources/workspace.ts +17 -10
- package/src/memory/context-search/types.ts +1 -1
- package/src/memory/conversation-bootstrap.ts +11 -0
- package/src/memory/conversation-crud.ts +368 -22
- package/src/memory/conversation-queries.ts +116 -12
- package/src/memory/conversation-title-service.ts +1 -0
- package/src/memory/conversation-types.ts +16 -0
- package/src/memory/db-init.ts +20 -0
- package/src/memory/delivery-crud.ts +152 -5
- package/src/memory/embedding-backend.ts +6 -5
- package/src/memory/embedding-runtime-manager.ts +1 -2
- package/src/memory/external-conversation-store.ts +66 -5
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +66 -9
- package/src/memory/graph/__tests__/remember-description.test.ts +55 -0
- package/src/memory/graph/conversation-graph-memory.ts +92 -5
- package/src/memory/graph/extraction.ts +4 -0
- package/src/memory/graph/graph-memory-state-store.ts +16 -3
- package/src/memory/graph/tool-handlers.ts +17 -7
- package/src/memory/graph/tools.ts +45 -6
- package/src/memory/indexer.ts +51 -29
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +86 -15
- package/src/memory/jobs/embed-concept-page.ts +65 -20
- package/src/memory/jobs-store.ts +51 -1
- package/src/memory/jobs-worker.ts +57 -3
- package/src/memory/llm-request-log-source-clickhouse.ts +324 -0
- package/src/memory/llm-request-log-source-local.ts +26 -0
- package/src/memory/llm-request-log-source.ts +64 -0
- package/src/memory/llm-request-log-store.ts +1 -1
- package/src/memory/llm-usage-store.ts +125 -5
- package/src/memory/memory-retrospective-constants.ts +13 -0
- package/src/memory/memory-retrospective-enqueue.ts +114 -0
- package/src/memory/memory-retrospective-job.ts +351 -0
- package/src/memory/memory-retrospective-startup-cleanup.ts +175 -0
- package/src/memory/memory-retrospective-state.ts +162 -0
- package/src/memory/memory-retrospective-trigger-check.ts +91 -0
- package/src/memory/memory-v2-activation-log-store.ts +49 -5
- package/src/memory/memory-v2-concept-frequency.ts +4 -0
- package/src/memory/message-content.ts +38 -1
- package/src/memory/migrations/109-external-conversation-bindings.ts +15 -4
- package/src/memory/migrations/227-add-conversation-inference-profile.ts +6 -1
- package/src/memory/migrations/228-rename-inference-profile-snake-case.ts +20 -7
- package/src/memory/migrations/229-delete-private-conversations.test.ts +107 -1
- package/src/memory/migrations/229-delete-private-conversations.ts +19 -0
- package/src/memory/migrations/231-repair-memory-graph-event-dates.ts +16 -2
- package/src/memory/migrations/240-conversation-inference-profile-session.ts +25 -0
- package/src/memory/migrations/241-activation-state-fk-cascade.ts +50 -0
- package/src/memory/migrations/242-message-bookmarks.ts +38 -0
- package/src/memory/migrations/243-provider-connections.ts +68 -0
- package/src/memory/migrations/244-provider-connection-status-label.ts +23 -0
- package/src/memory/migrations/245-memory-retrospective-state.ts +36 -0
- package/src/memory/migrations/246-backfill-provider-connection-label.ts +81 -0
- package/src/memory/migrations/247-external-conversation-binding-thread-id.ts +78 -0
- package/src/memory/migrations/248-create-onboarding-events.ts +21 -0
- package/src/memory/migrations/249-normalize-slack-external-content.ts +240 -0
- package/src/memory/migrations/__tests__/244-provider-connection-status-label.test.ts +84 -0
- package/src/memory/migrations/__tests__/245-memory-retrospective-state.test.ts +125 -0
- package/src/memory/migrations/__tests__/246-backfill-provider-connection-label.test.ts +192 -0
- package/src/memory/migrations/index.ts +13 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/onboarding-events-store.ts +106 -0
- package/src/memory/published-pages-store.ts +16 -0
- package/src/memory/schema/bookmarks.ts +36 -0
- package/src/memory/schema/calls.ts +1 -0
- package/src/memory/schema/conversations.ts +2 -0
- package/src/memory/schema/index.ts +2 -0
- package/src/memory/schema/inference.ts +27 -0
- package/src/memory/schema/infrastructure.ts +12 -0
- package/src/memory/schema/memory-core.ts +9 -0
- package/src/memory/search/semantic.ts +1 -4
- package/src/memory/turn-events-store.ts +127 -2
- package/src/memory/v2/__tests__/__snapshots__/prompts-router.test.ts.snap +27 -0
- package/src/memory/v2/__tests__/activation-store.test.ts +5 -5
- package/src/memory/v2/__tests__/activation.test.ts +11 -12
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +38 -21
- package/src/memory/v2/__tests__/consolidation-job.test.ts +123 -135
- package/src/memory/v2/__tests__/edge-index.test.ts +1 -1
- package/src/memory/v2/__tests__/frontmatter-sweep.test.ts +111 -0
- package/src/memory/v2/__tests__/injection.test.ts +726 -18
- package/src/memory/v2/__tests__/migration.test.ts +94 -3
- package/src/memory/v2/__tests__/page-index.test.ts +360 -0
- package/src/memory/v2/__tests__/page-store.test.ts +14 -1
- package/src/memory/v2/__tests__/prompts-router.test.ts +309 -0
- package/src/memory/v2/__tests__/qdrant.test.ts +138 -3
- package/src/memory/v2/__tests__/reranker.test.ts +4 -4
- package/src/memory/v2/__tests__/router.test.ts +531 -0
- package/src/memory/v2/__tests__/sim.test.ts +45 -1
- package/src/memory/v2/__tests__/skill-store.test.ts +445 -11
- package/src/memory/v2/__tests__/static-context.test.ts +7 -22
- package/src/memory/v2/__tests__/sweep-job.test.ts +95 -0
- package/src/memory/v2/activation-store.ts +34 -5
- package/src/memory/v2/activation.ts +40 -27
- package/src/memory/v2/backfill-jobs.ts +17 -84
- package/src/memory/v2/consolidation-job.ts +85 -78
- package/src/memory/v2/frontmatter-sweep.ts +91 -0
- package/src/memory/v2/injection.ts +466 -109
- package/src/memory/v2/migration.ts +147 -20
- package/src/memory/v2/page-index.ts +221 -0
- package/src/memory/v2/page-store.ts +3 -0
- package/src/memory/v2/prompts/consolidation.ts +9 -7
- package/src/memory/v2/prompts/router.ts +195 -0
- package/src/memory/v2/prompts/sweep.ts +2 -2
- package/src/memory/v2/qdrant.ts +234 -93
- package/src/memory/v2/reranker.ts +14 -7
- package/src/memory/v2/router.ts +323 -0
- package/src/memory/v2/sim.ts +25 -12
- package/src/memory/v2/skill-store.ts +204 -30
- package/src/memory/v2/static-context.ts +16 -9
- package/src/memory/v2/sweep-job.ts +122 -96
- package/src/memory/v2/types.ts +10 -6
- package/src/memory/validation.ts +13 -0
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +45 -5
- package/src/messaging/providers/slack/__tests__/download.test.ts +231 -0
- package/src/messaging/providers/slack/adapter.ts +43 -5
- package/src/messaging/providers/slack/client.ts +27 -0
- package/src/messaging/providers/slack/deep-link.ts +65 -0
- package/src/messaging/providers/slack/download.ts +104 -0
- package/src/messaging/providers/slack/message-metadata.test.ts +32 -0
- package/src/messaging/providers/slack/message-metadata.ts +27 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +134 -0
- package/src/messaging/providers/slack/render-transcript.ts +69 -5
- package/src/messaging/providers/slack/types.ts +20 -1
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +182 -0
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +199 -0
- package/src/notifications/__tests__/signal-registry.test.ts +17 -0
- package/src/notifications/adapters/platform.ts +171 -0
- package/src/notifications/conversation-pairing.ts +4 -3
- package/src/notifications/copy-composer.ts +15 -0
- package/src/notifications/decision-engine.ts +2 -1
- package/src/notifications/destination-resolver.ts +21 -0
- package/src/notifications/emit-signal.ts +48 -2
- package/src/notifications/home-feed-side-effect.ts +165 -0
- package/src/notifications/signal.ts +8 -1
- package/src/oauth/connection-resolver.ts +8 -4
- package/src/oauth/platform-connection.ts +6 -2
- package/src/oauth/seed-providers.ts +10 -1
- package/src/permissions/checker.ts +14 -0
- package/src/permissions/ipc-risk-types.ts +3 -0
- package/src/permissions/question-prompter.test.ts +416 -0
- package/src/permissions/question-prompter.ts +294 -0
- package/src/platform/client.test.ts +1 -1
- package/src/platform/client.ts +1 -1
- package/src/plugin-api/constants.ts +26 -0
- package/src/plugin-api/index.ts +46 -0
- package/src/plugin-api/package.json +12 -0
- package/src/plugin-api/types.ts +144 -0
- package/src/plugins/defaults/circuit-breaker.ts +0 -5
- package/src/plugins/defaults/compaction.ts +0 -4
- package/src/plugins/defaults/empty-response.ts +0 -2
- package/src/plugins/defaults/history-repair.ts +0 -2
- package/src/plugins/defaults/injectors.ts +55 -6
- package/src/plugins/defaults/llm-call.ts +0 -2
- package/src/plugins/defaults/memory-retrieval.ts +0 -1
- package/src/plugins/defaults/overflow-reduce.ts +0 -1
- package/src/plugins/defaults/persistence.ts +0 -2
- package/src/plugins/defaults/title-generate.ts +0 -5
- package/src/plugins/defaults/token-estimate.ts +0 -2
- package/src/plugins/defaults/tool-error.ts +0 -7
- package/src/plugins/defaults/tool-execute.ts +0 -2
- package/src/plugins/defaults/tool-result-truncate.ts +0 -4
- package/src/plugins/ensure-plugin-api-shim.ts +96 -0
- package/src/plugins/external-api.ts +104 -0
- package/src/plugins/external-plugin-loader.ts +367 -0
- package/src/plugins/feature-gate.ts +22 -0
- package/src/plugins/pipeline.ts +37 -0
- package/src/plugins/registry.ts +48 -80
- package/src/plugins/types.ts +74 -53
- package/src/plugins/user-loader.ts +85 -43
- package/src/proactive-artifact/aux-message-injector.ts +11 -0
- package/src/proactive-artifact/job.test.ts +49 -9
- package/src/proactive-artifact/job.ts +4 -0
- package/src/proactive-artifact/trigger-state.test.ts +9 -0
- package/src/proactive-artifact/trigger-state.ts +4 -0
- package/src/prompts/__tests__/system-prompt.test.ts +117 -0
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +99 -0
- package/src/prompts/normalize-onboarding.ts +27 -0
- package/src/prompts/sections.ts +302 -0
- package/src/prompts/system-prompt.ts +72 -154
- package/src/prompts/templates/BOOTSTRAP.md +17 -1
- package/src/prompts/templates/system-sections.ts +173 -0
- package/src/prompts/update-bulletin-job.ts +61 -73
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +279 -0
- package/src/providers/__tests__/inference.test.ts +303 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +6 -0
- package/src/providers/__tests__/provider-secret-catalog.test.ts +6 -0
- package/src/providers/__tests__/retry-callsite.test.ts +14 -32
- package/src/providers/__tests__/satellite-connection-routing.test.ts +510 -0
- package/src/providers/__tests__/search-provider-catalog.test.ts +80 -0
- package/src/providers/anthropic/client.ts +123 -54
- package/src/providers/call-site-routing.ts +94 -16
- package/src/providers/connection-resolution.ts +170 -0
- package/src/providers/inference/__tests__/connections-status-label.test.ts +250 -0
- package/src/providers/inference/adapter-factory.ts +210 -0
- package/src/providers/inference/auth.ts +112 -0
- package/src/providers/inference/backfill.ts +196 -0
- package/src/providers/inference/connections.ts +401 -0
- package/src/providers/inference/resolve-auth.ts +73 -0
- package/src/providers/model-catalog.ts +386 -6
- package/src/providers/openai/chat-completions-provider.ts +10 -2
- package/src/providers/openai/responses-provider.ts +4 -2
- package/src/providers/openrouter/client.ts +7 -0
- package/src/providers/{managed-proxy → platform-proxy}/constants.ts +4 -1
- package/src/providers/{managed-proxy → platform-proxy}/context.ts +3 -3
- package/src/providers/provider-availability.ts +17 -2
- package/src/providers/provider-catalog-visibility.ts +36 -0
- package/src/providers/provider-env-vars.ts +17 -7
- package/src/providers/provider-secret-catalog.ts +49 -30
- package/src/providers/provider-send-message.ts +41 -20
- package/src/providers/registry.ts +151 -159
- package/src/providers/retry.ts +65 -11
- package/src/providers/search-provider-catalog.ts +121 -0
- package/src/runtime/AGENTS.md +18 -5
- package/src/runtime/__tests__/agent-wake.test.ts +152 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +357 -0
- package/src/runtime/__tests__/pre-first-message-gate.test.ts +82 -0
- package/src/runtime/actor-trust-resolver.ts +32 -10
- package/src/runtime/agent-wake.ts +64 -7
- package/src/runtime/assistant-event-hub.ts +3 -85
- package/src/runtime/auth/route-policy.ts +311 -9
- package/src/runtime/auth/same-actor.ts +2 -0
- package/src/runtime/background-job-runner.ts +339 -0
- package/src/runtime/btw-sidechain.ts +3 -0
- package/src/runtime/http-router.ts +36 -1
- package/src/runtime/http-server.ts +31 -5
- package/src/runtime/http-types.ts +21 -0
- package/src/runtime/middleware/__tests__/request-logger.test.ts +162 -0
- package/src/runtime/middleware/request-logger.ts +62 -1
- package/src/runtime/migrations/origin-mode.ts +1 -1
- package/src/runtime/pending-interactions.ts +1 -0
- package/src/runtime/pre-first-message-gate.ts +83 -0
- package/src/runtime/routes/__tests__/backup-routes.test.ts +8 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +268 -0
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +142 -0
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +319 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +280 -4
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +15 -136
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +736 -0
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +4 -4
- package/src/runtime/routes/__tests__/question-routes.test.ts +395 -0
- package/src/runtime/routes/__tests__/stt-routes.test.ts +5 -1
- package/src/runtime/routes/__tests__/surface-action-routes.test.ts +384 -0
- package/src/runtime/routes/__tests__/tts-routes.test.ts +70 -3
- package/src/runtime/routes/acp-routes-list.test.ts +143 -0
- package/src/runtime/routes/acp-routes.ts +12 -8
- package/src/runtime/routes/app-management-routes.ts +228 -3
- package/src/runtime/routes/approval-routes.ts +0 -18
- package/src/runtime/routes/audit-routes.ts +43 -0
- package/src/runtime/routes/auth-routes.ts +72 -0
- package/src/runtime/routes/avatar-routes.ts +273 -20
- package/src/runtime/routes/backup-routes.ts +406 -2
- package/src/runtime/routes/bookmark-routes.ts +156 -0
- package/src/runtime/routes/btw-routes.ts +5 -1
- package/src/runtime/routes/channel-availability-routes.ts +121 -0
- package/src/runtime/routes/channel-verification-routes.ts +2 -1
- package/src/runtime/routes/contact-routes.ts +0 -160
- package/src/runtime/routes/conversation-cli-routes.ts +233 -0
- package/src/runtime/routes/conversation-list-routes.ts +3 -20
- package/src/runtime/routes/conversation-management-routes.ts +47 -85
- package/src/runtime/routes/conversation-query-routes.ts +350 -97
- package/src/runtime/routes/conversation-routes.ts +121 -21
- package/src/runtime/routes/conversations-import-routes.ts +229 -0
- package/src/runtime/routes/credential-routes.ts +540 -0
- package/src/runtime/routes/debug-routes.ts +2 -2
- package/src/runtime/routes/document-pdf-renderer.ts +5 -1
- package/src/runtime/routes/documents-routes.ts +25 -86
- package/src/runtime/routes/domain-routes.ts +167 -0
- package/src/runtime/routes/email-routes.ts +603 -0
- package/src/runtime/routes/errors.ts +2 -2
- package/src/runtime/routes/events-routes.ts +192 -0
- package/src/runtime/routes/group-routes.ts +5 -0
- package/src/runtime/routes/home-feed-routes.ts +6 -78
- package/src/runtime/routes/host-app-control-routes.ts +44 -2
- package/src/runtime/routes/host-browser-routes.ts +103 -22
- package/src/runtime/routes/http-adapter.ts +2 -0
- package/src/runtime/routes/identity-routes.ts +5 -0
- package/src/runtime/routes/image-generation-routes.ts +99 -0
- package/src/runtime/routes/inbound-conversation.ts +28 -8
- package/src/runtime/routes/inbound-message-handler.ts +236 -41
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +248 -1
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +118 -7
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +17 -4
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +156 -0
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +22 -4
- package/src/runtime/routes/index.ts +42 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +285 -0
- package/src/runtime/routes/inference-profile-session-reaper.ts +84 -0
- package/src/runtime/routes/inference-profile-session-routes.ts +146 -0
- package/src/runtime/routes/inference-provider-connection-routes.ts +361 -0
- package/src/runtime/routes/inference-send-routes.ts +115 -0
- package/src/runtime/routes/integrations/slack/share.ts +4 -52
- package/src/runtime/routes/integrations/slack/token.ts +43 -0
- package/src/runtime/routes/integrations/twilio.ts +7 -13
- package/src/runtime/routes/mcp-auth-routes.ts +283 -9
- package/src/runtime/routes/memory-v2-routes.ts +13 -398
- package/src/runtime/routes/notification-routes.ts +3 -1
- package/src/runtime/routes/oauth-apps.ts +112 -7
- package/src/runtime/routes/oauth-commands-routes.ts +1097 -0
- package/src/runtime/routes/oauth-connect-routes.ts +67 -5
- package/src/runtime/routes/oauth-lifecycle-routes.ts +43 -0
- package/src/runtime/routes/oauth-providers.ts +298 -8
- package/src/runtime/routes/platform-routes.ts +336 -0
- package/src/runtime/routes/playground/inject-failures.ts +2 -1
- package/src/runtime/routes/playground/reset-circuit.ts +2 -1
- package/src/runtime/routes/playground/state.ts +2 -1
- package/src/runtime/routes/publish-routes.ts +221 -0
- package/src/runtime/routes/question-routes.ts +259 -0
- package/src/runtime/routes/rename-conversation-routes.ts +2 -33
- package/src/runtime/routes/schedule-routes.ts +79 -0
- package/src/runtime/routes/sequence-routes.ts +291 -0
- package/src/runtime/routes/settings-routes.ts +2 -10
- package/src/runtime/routes/skills-routes.ts +31 -1
- package/src/runtime/routes/stt-routes.ts +240 -3
- package/src/runtime/routes/subagents-routes.ts +57 -18
- package/src/runtime/routes/surface-action-routes.ts +43 -7
- package/src/runtime/routes/telemetry-routes.ts +27 -0
- package/src/runtime/routes/tts-routes.ts +93 -1
- package/src/runtime/routes/types.ts +32 -0
- package/src/runtime/routes/user-routes-cli.ts +243 -0
- package/src/runtime/routes/webhook-routes.ts +165 -0
- package/src/runtime/routes/workspace-routes.test.ts +43 -0
- package/src/runtime/routes/workspace-routes.ts +28 -0
- package/src/runtime/services/conversation-serializer.ts +39 -7
- package/src/runtime/sync/resource-sync-events.ts +117 -0
- package/src/runtime/sync/sync-publisher.test.ts +105 -0
- package/src/runtime/sync/sync-publisher.ts +21 -0
- package/src/schedule/schedule-store.ts +27 -2
- package/src/schedule/scheduler.ts +208 -123
- package/src/security/__tests__/provider-key-env-fallback.test.ts +12 -6
- package/src/security/__tests__/untrusted-content.test.ts +86 -0
- package/src/security/secret-patterns.ts +3 -0
- package/src/security/untrusted-content.ts +93 -8
- package/src/sequence/engine.ts +38 -40
- package/src/skills/catalog-files.ts +1 -1
- package/src/skills/catalog-install.ts +233 -116
- package/src/skills/clawhub.ts +70 -13
- package/src/skills/managed-store.ts +4 -119
- package/src/skills/skillssh-registry.ts +27 -48
- package/src/subagent/manager.ts +28 -15
- package/src/telemetry/types.ts +113 -1
- package/src/telemetry/usage-telemetry-reporter.test.ts +312 -5
- package/src/telemetry/usage-telemetry-reporter.ts +113 -7
- package/src/tools/apps/executors.ts +58 -7
- package/src/tools/ask-question/ask-question-tool.test.ts +509 -0
- package/src/tools/ask-question/ask-question-tool.ts +304 -0
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +206 -0
- package/src/tools/browser/browser-execution.ts +29 -14
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +174 -0
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +16 -13
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +24 -1
- package/src/tools/browser/cdp-client/factory.ts +66 -5
- package/src/tools/browser/runtime-check.ts +77 -0
- package/src/tools/computer-use/definitions.ts +3 -3
- package/src/tools/credentials/vault.ts +1 -1
- package/src/tools/document/document-tool.ts +124 -1
- package/src/tools/filesystem/edit.ts +1 -1
- package/src/tools/filesystem/list.ts +1 -1
- package/src/tools/filesystem/read.ts +1 -1
- package/src/tools/filesystem/write.ts +5 -2
- package/src/tools/host-filesystem/transfer.ts +1 -1
- package/src/tools/host-terminal/host-shell.ts +1 -1
- package/src/tools/memory/register.test.ts +3 -3
- package/src/tools/memory/register.ts +9 -1
- package/src/tools/network/__tests__/web-search.test.ts +156 -0
- package/src/tools/network/web-search.ts +280 -37
- package/src/tools/permission-checker.ts +14 -6
- package/src/tools/registry.ts +17 -7
- package/src/tools/schedule/create.ts +2 -2
- package/src/tools/schema-transforms.ts +7 -2
- package/src/tools/side-effects.ts +1 -0
- package/src/tools/skills/delete-managed.ts +4 -4
- package/src/tools/skills/execute.ts +1 -1
- package/src/tools/skills/scaffold-managed.ts +3 -2
- package/src/tools/subagent/notify-parent.ts +1 -1
- package/src/tools/subagent/spawn.ts +3 -3
- package/src/tools/system/request-permission.ts +2 -2
- package/src/tools/terminal/safe-env.ts +60 -1
- package/src/tools/terminal/shell.ts +44 -0
- package/src/tools/tool-manifest.ts +2 -0
- package/src/tools/types.ts +72 -21
- package/src/tools/ui-surface/definitions.ts +6 -5
- package/src/tts/__tests__/provider-adapters.test.ts +76 -2
- package/src/tts/providers/elevenlabs-provider.ts +75 -1
- package/src/types/onboarding-context.ts +2 -0
- package/src/usage/attribution.ts +3 -2
- package/src/util/errors.ts +17 -0
- package/src/util/platform.ts +10 -0
- package/src/util/pricing.ts +86 -160
- package/src/watcher/__tests__/engine.test.ts +323 -0
- package/src/watcher/constants.ts +7 -0
- package/src/watcher/engine.ts +94 -90
- package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +6 -9
- package/src/workspace/migrations/054-seed-recall-callsite.ts +10 -1
- package/src/workspace/migrations/057-repair-stale-gemini-model-ids.ts +94 -5
- package/src/workspace/migrations/069-seed-onboarding-threads.ts +8 -2
- package/src/workspace/migrations/072-seed-reply-suggestion-callsite.ts +117 -0
- package/src/workspace/migrations/073-repair-recall-callsite-empty-profile.ts +95 -0
- package/src/workspace/migrations/074-drop-deprecated-secret-detection-keys.ts +117 -0
- package/src/workspace/migrations/075-memory-v2-bm25-b-default-reembed.ts +61 -0
- package/src/workspace/migrations/076-drop-services-inference-mode.ts +62 -0
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +89 -0
- package/src/workspace/migrations/078-release-notes-tavily-web-search.ts +66 -0
- package/src/workspace/migrations/079-home-feed-notification-only.ts +197 -0
- package/src/workspace/migrations/080-restrict-vercel-api-token-metadata.ts +182 -0
- package/src/workspace/migrations/081-backfill-bash-allowed-tools-for-injection-credentials.ts +160 -0
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +154 -0
- package/src/workspace/migrations/083-system-prompt-prefix-to-file.ts +191 -0
- package/src/workspace/migrations/084-remove-legacy-skills-index.ts +276 -0
- package/src/workspace/migrations/085-memory-v2-bm25-b-reembed-disabled-v2-pages.ts +137 -0
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +198 -0
- package/src/workspace/migrations/registry.ts +30 -0
- package/src/workspace/migrations/runner.ts +46 -5
- package/src/workspace/migrations/types.ts +17 -3
- package/src/workspace/provider-commit-message-generator.ts +3 -2
- package/examples/plugins/echo/bun.lock +0 -25
- package/src/__tests__/context-search-pkb-source.test.ts +0 -498
- package/src/__tests__/context-window-manager.test.ts +0 -2093
- package/src/__tests__/credentials-cli.test.ts +0 -1225
- package/src/__tests__/memory-admin-recall.test.ts +0 -213
- package/src/approvals/__tests__/guardian-feed-event.test.ts +0 -303
- package/src/cli/commands/__tests__/email-download.test.ts +0 -260
- package/src/cli/commands/__tests__/email-list.test.ts +0 -216
- package/src/cli/commands/__tests__/email-register.test.ts +0 -186
- package/src/cli/commands/__tests__/email-send.test.ts +0 -416
- package/src/cli/commands/__tests__/email-status.test.ts +0 -185
- package/src/cli/commands/__tests__/email-unregister.test.ts +0 -168
- package/src/cli/commands/__tests__/routes.test.ts +0 -562
- package/src/cli/commands/__tests__/stt-transcribe.test.ts +0 -454
- package/src/cli/commands/autonomy.ts +0 -365
- package/src/cli/commands/memory.ts +0 -424
- package/src/cli/commands/oauth/__tests__/connect.test.ts +0 -947
- package/src/cli/commands/oauth/__tests__/disconnect.test.ts +0 -686
- package/src/cli/commands/oauth/__tests__/mode.test.ts +0 -632
- package/src/cli/commands/oauth/__tests__/ping.test.ts +0 -631
- package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +0 -573
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +0 -330
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +0 -521
- package/src/cli/commands/oauth/__tests__/status.test.ts +0 -551
- package/src/cli/commands/oauth/__tests__/token.test.ts +0 -420
- package/src/cli/lib/daemon-avatar-client.ts +0 -37
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +0 -87
- package/src/config/bundled-skills/messaging/tools/__tests__/messaging-feed-events.test.ts +0 -207
- package/src/context/__tests__/compact-prompt.test.ts +0 -63
- package/src/context/prompts/compact.md +0 -26
- package/src/daemon/__tests__/conversation-feed-event.test.ts +0 -304
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +0 -233
- package/src/home/__tests__/assistant-feed-authoring.test.ts +0 -156
- package/src/home/__tests__/emit-feed-event.test.ts +0 -169
- package/src/home/__tests__/feed-population-integration.test.ts +0 -312
- package/src/home/__tests__/feed-scheduler.test.ts +0 -222
- package/src/home/__tests__/phase5-exit-criteria.test.ts +0 -229
- package/src/home/__tests__/platform-gmail-digest.test.ts +0 -222
- package/src/home/__tests__/rollup-producer.test.ts +0 -507
- package/src/home/assistant-feed-authoring.ts +0 -135
- package/src/home/emit-feed-event.ts +0 -169
- package/src/home/feed-scheduler.ts +0 -281
- package/src/home/platform-gmail-digest.ts +0 -163
- package/src/home/rewrite-command-preview.ts +0 -66
- package/src/home/rewrite-feed-title.ts +0 -58
- package/src/home/rollup-producer.ts +0 -426
- package/src/memory/admin.ts +0 -326
- package/src/memory/context-search/sources/pkb.ts +0 -476
- package/src/memory/graph/compaction.ts +0 -299
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +0 -37
- /package/src/cli/{commands → lib}/cache-fs.ts +0 -0
|
@@ -15,7 +15,7 @@ let mockAssistantId = "";
|
|
|
15
15
|
// Module mocks
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
17
17
|
|
|
18
|
-
mock.module("../providers/
|
|
18
|
+
mock.module("../providers/platform-proxy/context.js", () => ({
|
|
19
19
|
resolveManagedProxyContext: async () => mockManagedProxyCtx,
|
|
20
20
|
}));
|
|
21
21
|
|
package/src/platform/client.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { getPlatformAssistantId } from "../config/env.js";
|
|
9
|
-
import { resolveManagedProxyContext } from "../providers/
|
|
9
|
+
import { resolveManagedProxyContext } from "../providers/platform-proxy/context.js";
|
|
10
10
|
import { credentialKey } from "../security/credential-key.js";
|
|
11
11
|
import { getSecureKeyAsync } from "../security/secure-keys.js";
|
|
12
12
|
import { getLogger } from "../util/logger.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public hook-name constants.
|
|
3
|
+
*
|
|
4
|
+
* Plugin authors reference hooks by name in two places: the keys on
|
|
5
|
+
* `Plugin.hooks` and the daemon's `runHook(name, ctx)` call sites.
|
|
6
|
+
* Centralizing the string literals here keeps the typo surface minimal
|
|
7
|
+
* and lets call sites import a typed constant instead of repeating a
|
|
8
|
+
* free-form string.
|
|
9
|
+
*
|
|
10
|
+
* New hooks land here as additional `HOOKS.*` entries. The runtime
|
|
11
|
+
* `runHook(name, ctx)` accepts any string (so test fixtures and
|
|
12
|
+
* forward-compat hooks can still chain through), but call sites in
|
|
13
|
+
* first-party code should always reach for a `HOOKS.*` constant.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export const HOOKS = {
|
|
17
|
+
/** Plugin bootstrap. Fires once when the daemon loads the plugin. */
|
|
18
|
+
INIT: "init",
|
|
19
|
+
/** Plugin teardown. Fires once when the daemon unloads the plugin. */
|
|
20
|
+
SHUTDOWN: "shutdown",
|
|
21
|
+
/** Fires once per user turn, immediately before the agent loop receives `runMessages`. */
|
|
22
|
+
USER_PROMPT_SUBMIT: "user-prompt-submit",
|
|
23
|
+
} as const;
|
|
24
|
+
|
|
25
|
+
/** Union of every hook name declared in {@link HOOKS}. */
|
|
26
|
+
export type HookName = (typeof HOOKS)[keyof typeof HOOKS];
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public entry point for the `@vellumai/plugin-api` package.
|
|
3
|
+
*
|
|
4
|
+
* Plugin authors import from `"@vellumai/plugin-api"`; this file is what
|
|
5
|
+
* their import lands on (directly via the published npm package, or via a
|
|
6
|
+
* boot-time shim that re-exports from the assistant binary's embedded
|
|
7
|
+
* bundle).
|
|
8
|
+
*
|
|
9
|
+
* Keep this file's surface stable across minor/patch releases. Anything
|
|
10
|
+
* exported here is part of the public contract.
|
|
11
|
+
*
|
|
12
|
+
* ## Surface today
|
|
13
|
+
*
|
|
14
|
+
* The public package is intentionally **declarative**: a plugin is a
|
|
15
|
+
* directory whose `package.json` is the manifest and whose `hooks/` /
|
|
16
|
+
* `tools/` / `skills/` / `routes/` subdirectories are the contributions.
|
|
17
|
+
* The host introspects the directory at load time and wires it into the
|
|
18
|
+
* runtime — plugin authors never call a runtime registration function.
|
|
19
|
+
*
|
|
20
|
+
* What this module exposes is therefore types-only: the context shapes
|
|
21
|
+
* the host hands to plugin hooks, and the logger shape they include.
|
|
22
|
+
*
|
|
23
|
+
* - {@link PluginInitContext} — passed to `init` hook at bootstrap
|
|
24
|
+
* - {@link PluginShutdownContext} — passed to `shutdown` hook at teardown
|
|
25
|
+
* - {@link UserPromptSubmitContext} — passed to `user-prompt-submit` hook,
|
|
26
|
+
* fired immediately before the agent loop receives a user's prompt
|
|
27
|
+
* - {@link PluginLogger} — pino-compatible logger shape on the contexts
|
|
28
|
+
* - {@link ToolContext} — passed to a plugin tool's `execute` method
|
|
29
|
+
* - {@link ToolExecutionResult} — return shape of a plugin tool's `execute`
|
|
30
|
+
*
|
|
31
|
+
* Pipeline-argument types (`LLMCallArgs`, `MemoryArgs`, etc.) currently
|
|
32
|
+
* live in `assistant/src/plugins/types.ts` and have not yet migrated into
|
|
33
|
+
* this package. A follow-up PR will move them into this surface as the
|
|
34
|
+
* per-pipeline schemas stabilize.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
export type { HookName } from "./constants.js";
|
|
38
|
+
export { HOOKS } from "./constants.js";
|
|
39
|
+
export type {
|
|
40
|
+
PluginInitContext,
|
|
41
|
+
PluginLogger,
|
|
42
|
+
PluginShutdownContext,
|
|
43
|
+
ToolContext,
|
|
44
|
+
ToolExecutionResult,
|
|
45
|
+
UserPromptSubmitContext,
|
|
46
|
+
} from "./types.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vellumai/plugin-api",
|
|
3
|
+
"version": "0.0.0-source",
|
|
4
|
+
"description": "Public API surface for Vellum assistant plugins. Source-of-truth lives here; the bundled artifact is what gets published to npm and embedded into the assistant binary.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": true,
|
|
7
|
+
"main": "./index.ts",
|
|
8
|
+
"types": "./index.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./index.ts"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public plugin-API types.
|
|
3
|
+
*
|
|
4
|
+
* This module is the entry point plugin authors land on when they import
|
|
5
|
+
* from `@vellumai/plugin-api`. The shapes here are the canonical public
|
|
6
|
+
* contract — anything exported is part of the surface that semver gates.
|
|
7
|
+
*
|
|
8
|
+
* ## Tool-execution types
|
|
9
|
+
*
|
|
10
|
+
* `ToolContext` and `ToolExecutionResult` are re-exports of the narrow,
|
|
11
|
+
* stable bases defined alongside their daemon-internal counterparts in
|
|
12
|
+
* `assistant/src/tools/types.ts`. The daemon-internal `ToolContext` /
|
|
13
|
+
* `ToolExecutionResult` (with CES, trust classification, lifecycle
|
|
14
|
+
* events, sensitive-output bindings, risk metadata, etc.) `extends`
|
|
15
|
+
* the public bases, so the runtime can hand plugins the full value
|
|
16
|
+
* without a manual cast and tsc enforces the structural relationship.
|
|
17
|
+
* Plugin tools see the narrow surface only — they MUST NOT set fields
|
|
18
|
+
* that belong to the daemon-internal extension.
|
|
19
|
+
*
|
|
20
|
+
* ## Hook contexts
|
|
21
|
+
*
|
|
22
|
+
* The init / shutdown hook contexts are owned by this module directly.
|
|
23
|
+
* They have no daemon-internal extension today (the daemon constructs
|
|
24
|
+
* and hands them straight through), so there's nothing to inherit from.
|
|
25
|
+
*
|
|
26
|
+
* ## Compatibility
|
|
27
|
+
*
|
|
28
|
+
* Adding fields to any public shape is non-breaking. Renaming or
|
|
29
|
+
* removing fields is breaking and gated on a major bump of
|
|
30
|
+
* `@vellumai/plugin-api`.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import type { Message } from "../providers/types.js";
|
|
34
|
+
|
|
35
|
+
// ─── Tool-execution types (re-exported from daemon source-of-truth) ──────────
|
|
36
|
+
|
|
37
|
+
export type {
|
|
38
|
+
PluginToolContext as ToolContext,
|
|
39
|
+
PluginToolExecutionResult as ToolExecutionResult,
|
|
40
|
+
} from "../tools/types.js";
|
|
41
|
+
|
|
42
|
+
// ─── Logger ──────────────────────────────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Minimal pino-compatible logger surface handed to plugin hooks. The host
|
|
46
|
+
* supplies a pino child logger bound to `{ plugin: <name> }`; this
|
|
47
|
+
* interface intentionally captures only the two call shapes plugin code
|
|
48
|
+
* needs (structured object + optional message), so the public surface
|
|
49
|
+
* doesn't take a dependency on pino's full type machinery.
|
|
50
|
+
*
|
|
51
|
+
* Each method accepts a structured-fields object followed by an optional
|
|
52
|
+
* message string. Plugin authors that need pino's wider API (`child()`,
|
|
53
|
+
* `level`, etc.) can cast to their own narrower interface in plugin code
|
|
54
|
+
* — but the canonical contract here covers the 99% case.
|
|
55
|
+
*/
|
|
56
|
+
export interface PluginLogger {
|
|
57
|
+
info(obj: Record<string, unknown>, msg?: string): void;
|
|
58
|
+
warn(obj: Record<string, unknown>, msg?: string): void;
|
|
59
|
+
error(obj: Record<string, unknown>, msg?: string): void;
|
|
60
|
+
debug(obj: Record<string, unknown>, msg?: string): void;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ─── Init context ────────────────────────────────────────────────────────────
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Context passed to `Plugin.init()` during bootstrap. Carries resolved
|
|
67
|
+
* config/credentials, a pino-compatible logger scoped to the plugin, a
|
|
68
|
+
* per-plugin writable data directory, and the assistant's version metadata.
|
|
69
|
+
*/
|
|
70
|
+
export interface PluginInitContext {
|
|
71
|
+
/** Parsed config for this plugin (may be `unknown` until the manifest validates). */
|
|
72
|
+
config: unknown;
|
|
73
|
+
/** Resolved credential values keyed by the entries of `manifest.requiresCredential`. */
|
|
74
|
+
credentials: Record<string, string>;
|
|
75
|
+
/** Pino-compatible child logger bound to `{ plugin: <name> }`. */
|
|
76
|
+
logger: PluginLogger;
|
|
77
|
+
/** Absolute path to `<workspaceDir>/plugins-data/<plugin>/` (created by bootstrap). */
|
|
78
|
+
pluginStorageDir: string;
|
|
79
|
+
/**
|
|
80
|
+
* Assistant semver. Plugins can compare against this for defensive
|
|
81
|
+
* runtime checks — but the canonical compat contract is the host
|
|
82
|
+
* version against the plugin's `peerDependencies["@vellumai/plugin-api"]`
|
|
83
|
+
* semver range, enforced at load time by the external-plugin loader.
|
|
84
|
+
*/
|
|
85
|
+
assistantVersion: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// ─── Shutdown context ────────────────────────────────────────────────────────
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Context passed to the `shutdown` hook during daemon teardown. Kept
|
|
92
|
+
* intentionally narrower than {@link PluginInitContext} — most teardown
|
|
93
|
+
* paths only need to know which assistant version they're shutting
|
|
94
|
+
* down against (e.g. for version-conditional cleanup of state files
|
|
95
|
+
* written by a previous boot).
|
|
96
|
+
*
|
|
97
|
+
* Additional fields may be added as concrete plugin needs surface; the
|
|
98
|
+
* `assistantVersion` field mirrors the init context's so plugins that
|
|
99
|
+
* stash a version stamp at init can compare against the same name on
|
|
100
|
+
* tear-down without keeping their own copy.
|
|
101
|
+
*/
|
|
102
|
+
export interface PluginShutdownContext {
|
|
103
|
+
/** Assistant semver for compatibility checks inside the plugin. */
|
|
104
|
+
assistantVersion: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ─── User-prompt-submit hook context ─────────────────────────────────────────
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Context passed to the `user-prompt-submit` hook. Fires once per user
|
|
111
|
+
* turn, after the agent loop has prepared the message list (PKB / NOW /
|
|
112
|
+
* memory-graph injections, history repair, overflow reduction all already
|
|
113
|
+
* applied) and immediately before the messages are handed to the agent
|
|
114
|
+
* loop's tool/LLM iteration.
|
|
115
|
+
*
|
|
116
|
+
* The hook may transform `latestMessages` either by mutating it in place
|
|
117
|
+
* (`push` / `splice` / `length = 0`) or by returning a new context with
|
|
118
|
+
* a fresh `latestMessages` array — see {@link PluginHookFn}'s polymorphic
|
|
119
|
+
* return shape. The daemon threads the final `latestMessages` value into
|
|
120
|
+
* `agentLoop.run()` as the run-messages argument.
|
|
121
|
+
*
|
|
122
|
+
* `originalMessages` is the user's original message list, frozen for the
|
|
123
|
+
* hook. Plugins should treat it as a stable reference point if they need
|
|
124
|
+
* to recover from earlier transformations or compare against the pristine
|
|
125
|
+
* state.
|
|
126
|
+
*
|
|
127
|
+
* Multiple plugins' hooks chain in registration order — each plugin's
|
|
128
|
+
* hook sees the previous plugin's mutations (whether by reassignment or
|
|
129
|
+
* in-place mutation).
|
|
130
|
+
*/
|
|
131
|
+
export interface UserPromptSubmitContext {
|
|
132
|
+
/** Conversation ID the user prompt was submitted on. */
|
|
133
|
+
readonly conversationId: string;
|
|
134
|
+
/**
|
|
135
|
+
* The user's original message list, immutable for the hook. Plugins
|
|
136
|
+
* may snapshot or compare against this but MUST NOT mutate it.
|
|
137
|
+
*/
|
|
138
|
+
readonly originalMessages: ReadonlyArray<Message>;
|
|
139
|
+
/**
|
|
140
|
+
* The working message list that flows into `agentLoop.run`. Plugins
|
|
141
|
+
* may mutate this in place or replace it by returning a new context.
|
|
142
|
+
*/
|
|
143
|
+
latestMessages: Message[];
|
|
144
|
+
}
|
|
@@ -55,11 +55,6 @@ export const defaultCircuitBreakerPlugin: Plugin = {
|
|
|
55
55
|
manifest: {
|
|
56
56
|
name: "default-circuit-breaker",
|
|
57
57
|
version: "1.0.0",
|
|
58
|
-
provides: { circuitBreakerApi: "v1" },
|
|
59
|
-
requires: {
|
|
60
|
-
pluginRuntime: "v1",
|
|
61
|
-
circuitBreakerApi: "v1",
|
|
62
|
-
},
|
|
63
58
|
},
|
|
64
59
|
|
|
65
60
|
middleware: {
|
|
@@ -112,10 +112,6 @@ export const defaultCompactionPlugin: Plugin = {
|
|
|
112
112
|
manifest: {
|
|
113
113
|
name: DEFAULT_COMPACTION_PLUGIN_NAME,
|
|
114
114
|
version: "1.0.0",
|
|
115
|
-
requires: {
|
|
116
|
-
pluginRuntime: "v1",
|
|
117
|
-
compactionApi: "v1",
|
|
118
|
-
},
|
|
119
115
|
},
|
|
120
116
|
middleware: {
|
|
121
117
|
compaction: defaultCompactionMiddleware,
|
|
@@ -95,8 +95,6 @@ export const defaultEmptyResponsePlugin: Plugin = {
|
|
|
95
95
|
manifest: {
|
|
96
96
|
name: "default-empty-response",
|
|
97
97
|
version: "1.0.0",
|
|
98
|
-
provides: { emptyResponseApi: "v1" },
|
|
99
|
-
requires: { pluginRuntime: "v1", emptyResponseApi: "v1" },
|
|
100
98
|
},
|
|
101
99
|
middleware: {
|
|
102
100
|
emptyResponse: passthrough,
|
|
@@ -54,8 +54,6 @@ export const defaultHistoryRepairPlugin: Plugin = {
|
|
|
54
54
|
manifest: {
|
|
55
55
|
name: "default-history-repair",
|
|
56
56
|
version: "1.0.0",
|
|
57
|
-
provides: { historyRepair: "v1" },
|
|
58
|
-
requires: { pluginRuntime: "v1", historyRepairApi: "v1" },
|
|
59
57
|
},
|
|
60
58
|
middleware: {
|
|
61
59
|
historyRepair: passthrough,
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* | `pkb-reminder` | 35 | after-memory-prefix |
|
|
20
20
|
* | `memory-v2-static` | 38 | after-memory-prefix |
|
|
21
21
|
* | `now-md` | 40 | after-memory-prefix |
|
|
22
|
+
* | `active-documents` | 45 | prepend-user-tail |
|
|
22
23
|
* | `subagent-status` | 50 | append-user-tail |
|
|
23
24
|
* | `slack-messages` | 60 | replace-run-messages |
|
|
24
25
|
* | `thread-focus` | 70 | append-user-tail |
|
|
@@ -91,6 +92,7 @@ export const DEFAULT_INJECTOR_ORDER = {
|
|
|
91
92
|
pkbReminder: 35,
|
|
92
93
|
memoryV2Static: 38,
|
|
93
94
|
nowMd: 40,
|
|
95
|
+
activeDocuments: 45,
|
|
94
96
|
subagentStatus: 50,
|
|
95
97
|
slackMessages: 60,
|
|
96
98
|
threadFocus: 70,
|
|
@@ -251,9 +253,24 @@ const pkbReminderInjector: Injector = {
|
|
|
251
253
|
const mode = inputs.mode ?? "full";
|
|
252
254
|
if (mode !== "full") return null;
|
|
253
255
|
if (!inputs.pkbActive) return null;
|
|
256
|
+
// The `memory-retrospective` feature flag enables a focused background
|
|
257
|
+
// retrospective pass that catches what the in-conversation `remember`
|
|
258
|
+
// calls miss. When that backstop is on, the per-turn pressure to call
|
|
259
|
+
// `remember` softens to a judgment framing. When it's off, the original
|
|
260
|
+
// high-pressure BODY is used so users without the retrospective still
|
|
261
|
+
// get aggressive capture in-conversation.
|
|
262
|
+
let relaxed = false;
|
|
263
|
+
try {
|
|
264
|
+
relaxed = isAssistantFeatureFlagEnabled(
|
|
265
|
+
"memory-retrospective",
|
|
266
|
+
getConfig(),
|
|
267
|
+
);
|
|
268
|
+
} catch {
|
|
269
|
+
// Best-effort — fall back to the default (non-relaxed) BODY.
|
|
270
|
+
}
|
|
254
271
|
const reminder = isPkbInjectionSilencedByV2()
|
|
255
|
-
? buildPkbReminder([])
|
|
256
|
-
: await buildPkbReminderWithHints(inputs);
|
|
272
|
+
? buildPkbReminder([], relaxed)
|
|
273
|
+
: await buildPkbReminderWithHints(inputs, relaxed);
|
|
257
274
|
return {
|
|
258
275
|
id: "pkb-reminder",
|
|
259
276
|
text: reminder,
|
|
@@ -283,6 +300,7 @@ function buildPkbContextBlock(content: string): string {
|
|
|
283
300
|
*/
|
|
284
301
|
async function buildPkbReminderWithHints(
|
|
285
302
|
inputs: TurnInjectionInputs,
|
|
303
|
+
relaxed: boolean,
|
|
286
304
|
): Promise<string> {
|
|
287
305
|
let hints: string[] = [];
|
|
288
306
|
const queryVector = inputs.pkbQueryVector;
|
|
@@ -343,7 +361,7 @@ async function buildPkbReminderWithHints(
|
|
|
343
361
|
hints = [];
|
|
344
362
|
}
|
|
345
363
|
}
|
|
346
|
-
return buildPkbReminder(hints);
|
|
364
|
+
return buildPkbReminder(hints, relaxed);
|
|
347
365
|
}
|
|
348
366
|
|
|
349
367
|
/**
|
|
@@ -422,6 +440,39 @@ const nowMdInjector: Injector = {
|
|
|
422
440
|
},
|
|
423
441
|
};
|
|
424
442
|
|
|
443
|
+
/**
|
|
444
|
+
* `active-documents` injector — order 45, prepend-user-tail.
|
|
445
|
+
*
|
|
446
|
+
* Injects an `<active_documents>` block listing open documents in the
|
|
447
|
+
* conversation so the assistant can target them with `document_update`
|
|
448
|
+
* instead of creating duplicates via `document_create`.
|
|
449
|
+
*
|
|
450
|
+
* Gating:
|
|
451
|
+
* - `mode === "full"`.
|
|
452
|
+
* - `activeDocuments` has at least one entry.
|
|
453
|
+
*/
|
|
454
|
+
const activeDocumentsInjector: Injector = {
|
|
455
|
+
name: "active-documents",
|
|
456
|
+
order: DEFAULT_INJECTOR_ORDER.activeDocuments,
|
|
457
|
+
async produce(ctx: TurnContext): Promise<InjectionBlock | null> {
|
|
458
|
+
const inputs = readInjectionInputs(ctx);
|
|
459
|
+
const mode = inputs.mode ?? "full";
|
|
460
|
+
if (mode !== "full") return null;
|
|
461
|
+
const docs = inputs.activeDocuments;
|
|
462
|
+
if (!docs || docs.length === 0) return null;
|
|
463
|
+
const lines = docs.map(
|
|
464
|
+
(d) =>
|
|
465
|
+
`- surface_id: "${d.surfaceId}", title: "${d.title}", words: ${d.wordCount}`,
|
|
466
|
+
);
|
|
467
|
+
const text = `<active_documents>\nThe following documents are open in this conversation. Use document_update with the surface_id to edit them — do NOT call document_create for documents that already exist.\n${lines.join("\n")}\n</active_documents>`;
|
|
468
|
+
return {
|
|
469
|
+
id: "active-documents",
|
|
470
|
+
text,
|
|
471
|
+
placement: "prepend-user-tail",
|
|
472
|
+
};
|
|
473
|
+
},
|
|
474
|
+
};
|
|
475
|
+
|
|
425
476
|
/**
|
|
426
477
|
* `subagent-status` injector — order 50, append-user-tail.
|
|
427
478
|
*
|
|
@@ -546,9 +597,6 @@ export const defaultInjectorsPlugin: Plugin = {
|
|
|
546
597
|
manifest: {
|
|
547
598
|
name: "default-injectors",
|
|
548
599
|
version: "1.0.0",
|
|
549
|
-
requires: {
|
|
550
|
-
pluginRuntime: "v1",
|
|
551
|
-
},
|
|
552
600
|
},
|
|
553
601
|
injectors: [
|
|
554
602
|
diskPressureWarningInjector,
|
|
@@ -558,6 +606,7 @@ export const defaultInjectorsPlugin: Plugin = {
|
|
|
558
606
|
pkbReminderInjector,
|
|
559
607
|
memoryV2StaticInjector,
|
|
560
608
|
nowMdInjector,
|
|
609
|
+
activeDocumentsInjector,
|
|
561
610
|
subagentStatusInjector,
|
|
562
611
|
slackMessagesInjector,
|
|
563
612
|
threadFocusInjector,
|
|
@@ -190,7 +190,6 @@ export const defaultMemoryRetrievalPlugin: Plugin = {
|
|
|
190
190
|
manifest: {
|
|
191
191
|
name: "default-memory-retrieval",
|
|
192
192
|
version: "0.0.1",
|
|
193
|
-
requires: { pluginRuntime: "v1", memoryApi: "v1" },
|
|
194
193
|
},
|
|
195
194
|
middleware: {
|
|
196
195
|
memoryRetrieval: defaultMemoryRetrievalMiddleware,
|
|
@@ -156,7 +156,6 @@ export const defaultOverflowReducePlugin: Plugin = {
|
|
|
156
156
|
manifest: {
|
|
157
157
|
name: "default-overflow-reduce",
|
|
158
158
|
version: "1.0.0",
|
|
159
|
-
requires: { pluginRuntime: "v1", overflowReduceApi: "v1" },
|
|
160
159
|
},
|
|
161
160
|
middleware: {
|
|
162
161
|
overflowReduce: defaultOverflowReduceMiddleware,
|
|
@@ -72,8 +72,6 @@ export const defaultTokenEstimatePlugin: Plugin = {
|
|
|
72
72
|
manifest: {
|
|
73
73
|
name: "default-token-estimate",
|
|
74
74
|
version: "1.0.0",
|
|
75
|
-
provides: { tokenEstimate: "v1" },
|
|
76
|
-
requires: { pluginRuntime: "v1", tokenEstimateApi: "v1" },
|
|
77
75
|
},
|
|
78
76
|
middleware: {
|
|
79
77
|
tokenEstimate: passthrough,
|
|
@@ -90,13 +90,6 @@ export const defaultToolErrorPlugin: Plugin = {
|
|
|
90
90
|
manifest: {
|
|
91
91
|
name: "default-tool-error",
|
|
92
92
|
version: "1.0.0",
|
|
93
|
-
requires: {
|
|
94
|
-
pluginRuntime: "v1",
|
|
95
|
-
toolErrorApi: "v1",
|
|
96
|
-
},
|
|
97
|
-
provides: {
|
|
98
|
-
toolError: "v1",
|
|
99
|
-
},
|
|
100
93
|
},
|
|
101
94
|
middleware: {
|
|
102
95
|
toolError: defaultToolErrorMiddleware,
|
|
@@ -58,8 +58,6 @@ export const defaultToolExecutePlugin: Plugin = {
|
|
|
58
58
|
manifest: {
|
|
59
59
|
name: "default-tool-execute",
|
|
60
60
|
version: "1.0.0",
|
|
61
|
-
provides: { toolExecuteApi: "v1" },
|
|
62
|
-
requires: { pluginRuntime: "v1", toolExecuteApi: "v1" },
|
|
63
61
|
},
|
|
64
62
|
middleware: {
|
|
65
63
|
toolExecute: defaultToolExecute,
|
|
@@ -55,10 +55,6 @@ export const defaultToolResultTruncatePlugin: Plugin = {
|
|
|
55
55
|
manifest: {
|
|
56
56
|
name: "default-tool-result-truncate",
|
|
57
57
|
version: "1.0.0",
|
|
58
|
-
requires: {
|
|
59
|
-
pluginRuntime: "v1",
|
|
60
|
-
toolResultTruncateApi: "v1",
|
|
61
|
-
},
|
|
62
58
|
},
|
|
63
59
|
middleware: {
|
|
64
60
|
toolResultTruncate: passthrough,
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materializes the workspace-level `@vellumai/plugin-api` shim so that
|
|
3
|
+
* user plugins under `<workspaceDir>/plugins/<name>/` can resolve a
|
|
4
|
+
* standard bare import:
|
|
5
|
+
*
|
|
6
|
+
* import { ... } from "@vellumai/plugin-api";
|
|
7
|
+
*
|
|
8
|
+
* Bun's Node-style resolution walks up from the plugin directory and
|
|
9
|
+
* finds `<workspaceDir>/node_modules/@vellumai/plugin-api/` — a tiny
|
|
10
|
+
* shim package whose `index.js` re-binds the plugin-api namespace that
|
|
11
|
+
* the assistant already loaded into its module graph (and parked on
|
|
12
|
+
* `globalThis` under {@link PLUGIN_API_REGISTRY_KEY}).
|
|
13
|
+
*
|
|
14
|
+
* This avoids duplicating the plugin-api package per plugin while still
|
|
15
|
+
* letting the assistant's compiled binary be the single source of truth
|
|
16
|
+
* for the public API. The runtime mechanism is uniform across:
|
|
17
|
+
* - JIT / Docker: plugin-api loads from source, shim re-binds via globalThis
|
|
18
|
+
* - `bun --compile` (macOS bare-metal): plugin-api ships inside the
|
|
19
|
+
* binary's regular code graph (Bun's bundler resolves
|
|
20
|
+
* `import * as pluginApi from "../plugin-api/index.js"` at compile
|
|
21
|
+
* time, inlining relative imports), shim re-binds via globalThis
|
|
22
|
+
*
|
|
23
|
+
* Idempotent: safe to call repeatedly. The shim's contents are
|
|
24
|
+
* deterministic given the runtime export list — fresh exports (added in
|
|
25
|
+
* later PRs) automatically expand the generated `index.js`.
|
|
26
|
+
*
|
|
27
|
+
* Called from {@link loadUserPlugins} at the top of its body so the
|
|
28
|
+
* ordering constraint (shim exists before any plugin's
|
|
29
|
+
* `import "@vellumai/plugin-api"` is parsed) is enforced by code, not
|
|
30
|
+
* by a docstring in `lifecycle.ts`.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
34
|
+
import { join } from "node:path";
|
|
35
|
+
|
|
36
|
+
import assistantPkg from "../../package.json" with { type: "json" };
|
|
37
|
+
import {
|
|
38
|
+
PLUGIN_API_EXPORTS,
|
|
39
|
+
PLUGIN_API_REGISTRY_KEY,
|
|
40
|
+
} from "../embedded/plugin-api.js";
|
|
41
|
+
import { getLogger } from "../util/logger.js";
|
|
42
|
+
import { getWorkspaceDir } from "../util/platform.js";
|
|
43
|
+
|
|
44
|
+
const log = getLogger("plugin-api-shim");
|
|
45
|
+
|
|
46
|
+
const PACKAGE_NAME = "@vellumai/plugin-api";
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Build the body of the workspace shim's `index.js`. Exported so the
|
|
50
|
+
* smoke test can assert against the same generator the daemon uses.
|
|
51
|
+
*/
|
|
52
|
+
export function buildShimSource(
|
|
53
|
+
exports: readonly string[] = PLUGIN_API_EXPORTS,
|
|
54
|
+
registryKey: symbol = PLUGIN_API_REGISTRY_KEY,
|
|
55
|
+
): string {
|
|
56
|
+
const description = registryKey.description ?? "";
|
|
57
|
+
const lines = [
|
|
58
|
+
`const api = globalThis[Symbol.for(${JSON.stringify(description)})];`,
|
|
59
|
+
...exports.map((name) => `export const ${name} = api.${name};`),
|
|
60
|
+
];
|
|
61
|
+
return `${lines.join("\n")}\n`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export async function ensurePluginApiShim(opts?: {
|
|
65
|
+
/** Override the workspace root. Defaults to `getWorkspaceDir()`. */
|
|
66
|
+
workspaceDir?: string;
|
|
67
|
+
}): Promise<void> {
|
|
68
|
+
const workspaceDir = opts?.workspaceDir ?? getWorkspaceDir();
|
|
69
|
+
const shimDir = join(workspaceDir, "node_modules", PACKAGE_NAME);
|
|
70
|
+
|
|
71
|
+
await mkdir(shimDir, { recursive: true });
|
|
72
|
+
|
|
73
|
+
const indexJs = buildShimSource();
|
|
74
|
+
const packageJson = `${JSON.stringify(
|
|
75
|
+
{
|
|
76
|
+
name: PACKAGE_NAME,
|
|
77
|
+
version: assistantPkg.version,
|
|
78
|
+
type: "module",
|
|
79
|
+
main: "./index.js",
|
|
80
|
+
},
|
|
81
|
+
null,
|
|
82
|
+
2,
|
|
83
|
+
)}\n`;
|
|
84
|
+
|
|
85
|
+
await writeFile(join(shimDir, "index.js"), indexJs);
|
|
86
|
+
await writeFile(join(shimDir, "package.json"), packageJson);
|
|
87
|
+
|
|
88
|
+
log.info(
|
|
89
|
+
{
|
|
90
|
+
shimDir,
|
|
91
|
+
exports: PLUGIN_API_EXPORTS,
|
|
92
|
+
version: assistantPkg.version,
|
|
93
|
+
},
|
|
94
|
+
"plugin-api shim materialized",
|
|
95
|
+
);
|
|
96
|
+
}
|