@vellumai/assistant 0.8.0 → 0.8.1
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/Dockerfile +5 -4
- package/README.md +2 -2
- package/docker-entrypoint.sh +16 -0
- 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/knip.json +2 -1
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -1
- package/openapi.yaml +4847 -1698
- package/package.json +3 -1
- package/scripts/generate-openapi.ts +52 -4
- package/scripts/sync-llm-catalog.ts +165 -0
- package/scripts/sync-web-search-catalog.ts +107 -0
- package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +169 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +26 -1
- package/src/__tests__/anthropic-provider.test.ts +92 -2
- package/src/__tests__/app-control-flow.test.ts +7 -0
- package/src/__tests__/assistant-events-sse-shed.test.ts +232 -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__/call-site-routing-provider.test.ts +172 -45
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +44 -3
- package/src/__tests__/channel-policy.test.ts +12 -0
- package/src/__tests__/checker.test.ts +89 -0
- 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__/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 +14 -3
- package/src/__tests__/config-set-platform-guard.test.ts +75 -152
- package/src/__tests__/config-set-route.test.ts +198 -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 +42 -16
- package/src/__tests__/context-search-fanout.test.ts +20 -157
- package/src/__tests__/context-search-memory-v2-source.test.ts +3 -3
- package/src/__tests__/context-search-types.test.ts +7 -2
- package/src/__tests__/context-window-manager.test.ts +389 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -0
- package/src/__tests__/conversation-crud-inference-profile.test.ts +100 -0
- package/src/__tests__/conversation-error.test.ts +38 -0
- package/src/__tests__/conversation-fork-crud.test.ts +241 -1
- package/src/__tests__/conversation-inference-profile-route.test.ts +14 -14
- package/src/__tests__/conversation-init.benchmark.test.ts +1 -0
- package/src/__tests__/conversation-lifecycle.test.ts +124 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +100 -1
- package/src/__tests__/conversation-process-callsite.test.ts +21 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +4 -4
- package/src/__tests__/conversation-slash-commands.test.ts +194 -2
- package/src/__tests__/conversation-surfaces-app-control.test.ts +323 -3
- package/src/__tests__/credential-security-invariants.test.ts +5 -6
- 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__/external-plugin-loader.test.ts +458 -0
- package/src/__tests__/filing-service.test.ts +23 -3
- package/src/__tests__/fixtures/mock-chrome-extension.ts +5 -0
- package/src/__tests__/gateway-only-guard.test.ts +0 -1
- package/src/__tests__/graph-extraction-event-date.test.ts +34 -0
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -8
- package/src/__tests__/heartbeat-disk-pressure.test.ts +21 -8
- package/src/__tests__/heartbeat-service.test.ts +50 -233
- package/src/__tests__/history-repair.test.ts +89 -0
- package/src/__tests__/host-app-control-proxy.test.ts +109 -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__/inference-no-mode-boot-e2e.test.ts +246 -0
- package/src/__tests__/inference-profile-reaper.test.ts +154 -0
- package/src/__tests__/inference-profile-session-handler.test.ts +398 -0
- package/src/__tests__/inference-profile-session-ipc.test.ts +236 -0
- package/src/__tests__/inline-skill-load-permissions.test.ts +6 -1
- package/src/__tests__/install-skill-routing.test.ts +2 -2
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +15 -0
- package/src/__tests__/llm-callsite-catalog.test.ts +20 -1
- package/src/__tests__/llm-catalog-parity.test.ts +146 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +188 -0
- package/src/__tests__/llm-request-log-source-factory.test.ts +124 -0
- package/src/__tests__/llm-resolver.test.ts +46 -0
- package/src/__tests__/managed-profile-guard.test.ts +131 -2
- 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__/memory-jobs-worker-lanes.test.ts +18 -11
- package/src/__tests__/message-complete-display-id.test.ts +175 -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 +711 -0
- package/src/__tests__/oauth-connect-routes.test.ts +174 -11
- package/src/__tests__/oauth-providers-routes.test.ts +14 -10
- package/src/__tests__/openai-responses-cutover-guard.test.ts +33 -12
- package/src/__tests__/openai-responses-provider.test.ts +17 -0
- package/src/__tests__/plugin-bootstrap.test.ts +31 -2
- package/src/__tests__/plugin-route-contribution.test.ts +31 -3
- package/src/__tests__/plugin-tool-contribution.test.ts +31 -3
- package/src/__tests__/plugin-types.test.ts +13 -11
- package/src/__tests__/process-message-background-slack.test.ts +46 -0
- package/src/__tests__/profile-entry-status.test.ts +43 -0
- package/src/__tests__/provider-managed-proxy-integration.test.ts +12 -4
- 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__/schedule-retry.test.ts +56 -4
- package/src/__tests__/schedule-routes.test.ts +104 -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 +161 -5
- package/src/__tests__/scheduler-wake.test.ts +0 -63
- package/src/__tests__/secret-allowlist.test.ts +1 -0
- package/src/__tests__/secret-routes-managed-proxy.test.ts +12 -4
- 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 -0
- package/src/__tests__/skill-load-tool.test.ts +2 -4
- package/src/__tests__/subagent-call-site-routing.test.ts +78 -16
- package/src/__tests__/suggestion-routes.test.ts +3 -3
- package/src/__tests__/sync-message-contract.test.ts +63 -0
- package/src/__tests__/task-scheduler.test.ts +88 -23
- 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 +145 -0
- package/src/__tests__/vercel-config.test.ts +168 -0
- package/src/__tests__/web-search-catalog-parity.test.ts +86 -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 +58 -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 +191 -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-unify-llm-callsite-configs.test.ts +3 -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/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 +23 -4
- package/src/channels/config.ts +14 -1
- package/src/channels/types.ts +1 -0
- package/src/cli/AGENTS.md +164 -4
- package/src/cli/__tests__/notifications.test.ts +54 -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 +593 -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__/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 +414 -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 +346 -436
- package/src/cli/commands/credential-execution.ts +9 -6
- package/src/cli/commands/credentials.ts +456 -736
- 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 +33 -7
- 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/routes.ts +153 -336
- 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/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__/register-command.test.ts +85 -0
- package/src/cli/lib/daemon-credential-client.ts +4 -5
- 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/program.ts +2 -4
- 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-control/TOOLS.json +32 -0
- 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/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-tool-registry.ts +0 -2
- package/src/config/feature-flag-registry.json +16 -0
- package/src/config/llm-resolver.ts +16 -1
- package/src/config/loader.ts +76 -14
- package/src/config/raw-config-utils.ts +2 -30
- package/src/config/schema.ts +4 -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/llm-request-logs.ts +57 -0
- package/src/config/schemas/llm.ts +52 -2
- 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/seed-inference-profiles.ts +195 -134
- package/src/contacts/contact-store.ts +0 -61
- package/src/context/window-manager.ts +191 -5
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +79 -0
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +109 -4
- package/src/daemon/__tests__/daemon-skill-host.test.ts +10 -4
- package/src/daemon/approval-generators.ts +23 -29
- package/src/daemon/config-watcher.ts +2 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +24 -0
- package/src/daemon/conversation-agent-loop.ts +127 -97
- package/src/daemon/conversation-error.ts +21 -0
- package/src/daemon/conversation-lifecycle.ts +46 -5
- package/src/daemon/conversation-process.ts +36 -19
- package/src/daemon/conversation-runtime-assembly.ts +14 -5
- package/src/daemon/conversation-slash.ts +175 -23
- package/src/daemon/conversation-store.ts +17 -10
- package/src/daemon/conversation-surfaces.ts +76 -12
- package/src/daemon/conversation-tool-setup.ts +24 -14
- package/src/daemon/conversation.ts +48 -9
- package/src/daemon/external-plugins-bootstrap.ts +18 -8
- package/src/daemon/guardian-action-generators.ts +7 -22
- package/src/daemon/handlers/config-model.ts +8 -126
- package/src/daemon/handlers/config-slack-channel.ts +10 -7
- package/src/daemon/handlers/config-vercel.ts +3 -1
- package/src/daemon/handlers/skills.ts +84 -5
- package/src/daemon/history-repair.ts +33 -6
- package/src/daemon/host-app-control-proxy.ts +44 -19
- 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 +42 -43
- package/src/daemon/meet-host-supervisor.ts +15 -15
- package/src/daemon/memory-v2-startup.ts +9 -2
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/bookmarks.ts +18 -0
- package/src/daemon/message-types/conversations.ts +12 -9
- package/src/daemon/message-types/messages.ts +9 -1
- package/src/daemon/message-types/sync.ts +60 -0
- package/src/daemon/pkb-reminder-builder.test.ts +54 -13
- package/src/daemon/pkb-reminder-builder.ts +21 -7
- package/src/daemon/process-message.ts +56 -23
- package/src/daemon/server.ts +23 -18
- package/src/daemon/shutdown-handlers.ts +0 -2
- 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/export/transcript-formatter.ts +61 -2
- package/src/filing/filing-service.ts +40 -53
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +359 -0
- package/src/heartbeat/heartbeat-run-store.ts +2 -1
- package/src/heartbeat/heartbeat-service.ts +148 -127
- package/src/home/__tests__/feed-types.test.ts +63 -131
- 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 +19 -73
- package/src/home/feed-writer.ts +25 -156
- package/src/home/post-connect-feed.ts +1 -3
- 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__/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/memory/__tests__/bookmark-crud.test.ts +258 -0
- package/src/memory/__tests__/bookmark-schema.test.ts +181 -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__/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 +213 -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/bookmark-crud.ts +179 -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 +18 -6
- 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 +13 -10
- package/src/memory/context-search/types.ts +1 -1
- package/src/memory/conversation-bootstrap.ts +11 -0
- package/src/memory/conversation-crud.ts +312 -10
- package/src/memory/conversation-queries.ts +9 -5
- package/src/memory/conversation-title-service.ts +1 -0
- package/src/memory/conversation-types.ts +16 -0
- package/src/memory/db-init.ts +14 -0
- package/src/memory/embedding-backend.ts +2 -1
- package/src/memory/embedding-runtime-manager.ts +1 -2
- package/src/memory/graph/__tests__/remember-description.test.ts +55 -0
- package/src/memory/graph/conversation-graph-memory.ts +76 -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 +44 -5
- package/src/memory/indexer.ts +17 -0
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +13 -15
- package/src/memory/jobs/embed-concept-page.ts +45 -9
- package/src/memory/jobs-store.ts +51 -1
- package/src/memory/jobs-worker.ts +52 -3
- package/src/memory/llm-request-log-source-clickhouse.ts +317 -0
- package/src/memory/llm-request-log-source-local.ts +26 -0
- package/src/memory/llm-request-log-source.ts +97 -0
- package/src/memory/llm-request-log-store.ts +1 -1
- 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 +108 -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/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 +70 -1
- package/src/memory/migrations/229-delete-private-conversations.ts +12 -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/__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 +7 -0
- package/src/memory/published-pages-store.ts +16 -0
- package/src/memory/schema/bookmarks.ts +38 -0
- package/src/memory/schema/conversations.ts +2 -0
- package/src/memory/schema/index.ts +2 -0
- package/src/memory/schema/inference.ts +29 -0
- package/src/memory/schema/memory-core.ts +9 -0
- package/src/memory/search/semantic.ts +1 -4
- 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 -4
- 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 +628 -10
- package/src/memory/v2/__tests__/migration.test.ts +7 -3
- package/src/memory/v2/__tests__/page-index.test.ts +277 -0
- package/src/memory/v2/__tests__/page-store.test.ts +14 -1
- package/src/memory/v2/__tests__/prompts-router.test.ts +257 -0
- package/src/memory/v2/__tests__/qdrant.test.ts +72 -0
- package/src/memory/v2/__tests__/reranker.test.ts +4 -4
- package/src/memory/v2/__tests__/router.test.ts +516 -0
- package/src/memory/v2/__tests__/sim.test.ts +45 -1
- package/src/memory/v2/__tests__/skill-store.test.ts +58 -3
- 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 +440 -109
- package/src/memory/v2/migration.ts +117 -20
- package/src/memory/v2/page-index.ts +191 -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 +192 -0
- package/src/memory/v2/qdrant.ts +100 -87
- package/src/memory/v2/reranker.ts +14 -7
- package/src/memory/v2/router.ts +322 -0
- package/src/memory/v2/sim.ts +25 -12
- package/src/memory/v2/skill-store.ts +118 -29
- 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/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 +2 -2
- package/src/notifications/copy-composer.ts +15 -0
- package/src/notifications/destination-resolver.ts +21 -0
- package/src/notifications/emit-signal.ts +28 -1
- package/src/notifications/home-feed-side-effect.ts +111 -0
- package/src/notifications/signal.ts +5 -0
- package/src/permissions/checker.ts +12 -0
- package/src/permissions/ipc-risk-types.ts +2 -0
- package/src/plugin-api/index.ts +13 -0
- package/src/plugin-api/package.json +12 -0
- package/src/plugin-api/types.ts +62 -0
- package/src/plugins/defaults/injectors.ts +19 -3
- package/src/plugins/external-plugin-loader.ts +294 -0
- package/src/plugins/types.ts +46 -30
- package/src/plugins/user-loader.ts +64 -41
- package/src/proactive-artifact/job.test.ts +12 -4
- 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 +105 -0
- package/src/prompts/system-prompt.ts +22 -1
- 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 +288 -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 +95 -26
- package/src/providers/call-site-routing.ts +94 -16
- package/src/providers/connection-resolution.ts +163 -0
- package/src/providers/inference/__tests__/connections-status-label.test.ts +250 -0
- package/src/providers/inference/adapter-factory.ts +173 -0
- package/src/providers/inference/auth.ts +112 -0
- package/src/providers/inference/backfill.ts +196 -0
- package/src/providers/inference/connections.ts +356 -0
- package/src/providers/inference/resolve-auth.ts +65 -0
- package/src/providers/model-catalog.ts +104 -6
- package/src/providers/openai/responses-provider.ts +4 -2
- 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 +143 -159
- package/src/providers/retry.ts +18 -10
- package/src/providers/search-provider-catalog.ts +121 -0
- package/src/runtime/AGENTS.md +18 -5
- 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 +35 -6
- package/src/runtime/assistant-event-hub.ts +3 -85
- package/src/runtime/auth/route-policy.ts +303 -8
- package/src/runtime/auth/same-actor.ts +2 -0
- package/src/runtime/background-job-runner.ts +339 -0
- package/src/runtime/btw-sidechain.ts +1 -0
- package/src/runtime/http-router.ts +36 -1
- package/src/runtime/http-server.ts +31 -5
- package/src/runtime/http-types.ts +2 -0
- package/src/runtime/middleware/__tests__/request-logger.test.ts +162 -0
- package/src/runtime/middleware/request-logger.ts +62 -1
- 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 +251 -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 +315 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +189 -0
- 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__/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 +6 -2
- package/src/runtime/routes/acp-routes.ts +10 -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 +154 -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 +192 -0
- package/src/runtime/routes/conversation-management-routes.ts +30 -43
- package/src/runtime/routes/conversation-query-routes.ts +334 -86
- package/src/runtime/routes/conversation-routes.ts +31 -10
- 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/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/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-stages/background-dispatch.test.ts +137 -1
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +87 -7
- 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 +36 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +312 -0
- package/src/runtime/routes/inference-profile-session-reaper.ts +98 -0
- package/src/runtime/routes/inference-profile-session-routes.ts +146 -0
- package/src/runtime/routes/inference-provider-connection-routes.ts +317 -0
- package/src/runtime/routes/inference-send-routes.ts +115 -0
- package/src/runtime/routes/integrations/twilio.ts +1 -0
- 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 +2 -0
- package/src/runtime/routes/oauth-apps.ts +112 -7
- package/src/runtime/routes/oauth-commands-routes.ts +1007 -0
- package/src/runtime/routes/oauth-connect-routes.ts +67 -5
- 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/schedule-routes.ts +82 -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/surface-action-routes.ts +43 -7
- package/src/runtime/routes/tts-routes.ts +67 -0
- 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/sync/resource-sync-events.ts +25 -0
- package/src/runtime/sync/sync-publisher.test.ts +105 -0
- package/src/runtime/sync/sync-publisher.ts +21 -0
- package/src/schedule/scheduler.ts +200 -123
- package/src/security/__tests__/provider-key-env-fallback.test.ts +12 -6
- package/src/security/secret-patterns.ts +3 -0
- package/src/sequence/engine.ts +38 -40
- package/src/subagent/manager.ts +20 -15
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +206 -0
- package/src/tools/browser/browser-execution.ts +15 -4
- 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/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 +13 -5
- package/src/tools/subagent/spawn.ts +3 -3
- package/src/tools/terminal/shell.ts +44 -0
- package/src/usage/attribution.ts +3 -2
- package/src/util/pricing.ts +86 -160
- package/src/watcher/__tests__/engine.test.ts +301 -0
- package/src/watcher/constants.ts +7 -0
- package/src/watcher/engine.ts +90 -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 +28 -4
- package/src/workspace/migrations/069-seed-onboarding-threads.ts +8 -2
- package/src/workspace/migrations/072-seed-reply-suggestion-callsite.ts +104 -0
- package/src/workspace/migrations/073-repair-recall-callsite-empty-profile.ts +93 -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/registry.ts +22 -0
- package/src/workspace/migrations/runner.ts +13 -2
- package/src/workspace/migrations/types.ts +13 -3
- package/src/workspace/provider-commit-message-generator.ts +3 -2
- package/src/__tests__/context-search-pkb-source.test.ts +0 -498
- 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/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/cli/{commands → lib}/cache-fs.ts +0 -0
package/AGENTS.md
CHANGED
|
@@ -34,6 +34,17 @@ Routes in `src/runtime/routes/` are being migrated to a **shared `ROUTES` array*
|
|
|
34
34
|
- **Dual exposure is intentional.** Every route in the shared `ROUTES` array is served over both HTTP and IPC. This is by design — it enables the gateway to call the daemon over IPC instead of HTTP, eliminating JWT token exchange on those paths (ATL-309 → ATL-311). Do not flag IPC exposure of shared routes as unintentional surface area.
|
|
35
35
|
- **`RouteDefinition` carries everything:** `operationId`, `endpoint`, `method`, `handler`, `policyKey?`, `summary?`, `description?`, `tags?`, `responseBody?`. The HTTP adapter reads all fields; the IPC adapter only needs `operationId` and `handler`.
|
|
36
36
|
|
|
37
|
+
### CLI ↔ daemon communication protocol
|
|
38
|
+
|
|
39
|
+
The CLI and daemon communicate over a Unix domain socket using **length-prefixed binary framing**: each frame is a 4-byte big-endian length followed by a payload. Messages use a JSON envelope `{ id, method, params?, headers? }` for requests and `{ id, result?, error?, headers? }` for responses.
|
|
40
|
+
|
|
41
|
+
Three response shapes are supported:
|
|
42
|
+
- **JSON-only**: a single JSON frame (no `content-length` or `transfer-encoding` header).
|
|
43
|
+
- **Binary**: a JSON envelope with `headers: { "content-length": "<n>" }` followed by one binary frame of exactly `n` bytes.
|
|
44
|
+
- **Chunked streaming**: a JSON envelope with `headers: { "transfer-encoding": "chunked" }` followed by one or more binary frames, terminated by a zero-length frame.
|
|
45
|
+
|
|
46
|
+
The server auto-detects legacy newline-delimited JSON from old CLI clients and handles it transparently. New code must use length-prefixed framing via `writeMessage()` / `IpcFrameReader` in `src/ipc/ipc-framing.ts`.
|
|
47
|
+
|
|
37
48
|
### CLI ↔ daemon version skew
|
|
38
49
|
|
|
39
50
|
The CLI and daemon are always shipped and upgraded together — there is no version skew between them. When migrating a route to the shared `ROUTES` array and updating the CLI to send structured params, backward compatibility with older CLI versions is **not required**. Do not add compat shims for flat-param callers that no longer exist.
|
package/Dockerfile
CHANGED
|
@@ -27,12 +27,13 @@ COPY packages/skill-host-contracts ./packages/skill-host-contracts
|
|
|
27
27
|
COPY packages/slack-text ./packages/slack-text
|
|
28
28
|
COPY packages/twilio-client ./packages/twilio-client
|
|
29
29
|
|
|
30
|
-
# Install deps for shared packages
|
|
31
|
-
# Without this, bun's module resolution
|
|
32
|
-
#
|
|
33
|
-
#
|
|
30
|
+
# Install deps for shared packages whose source is loaded at runtime.
|
|
31
|
+
# Without this, bun's module resolution walks up from packages/<name>/src/
|
|
32
|
+
# and can't find the package's own deps (zod, transitive file: refs)
|
|
33
|
+
# because only assistant/node_modules gets populated.
|
|
34
34
|
RUN cd /app/packages/ces-client && bun install --frozen-lockfile
|
|
35
35
|
RUN cd /app/packages/gateway-client && bun install --frozen-lockfile
|
|
36
|
+
RUN cd /app/packages/service-contracts && bun install --frozen-lockfile
|
|
36
37
|
|
|
37
38
|
# Install assistant dependencies first for cache reuse
|
|
38
39
|
COPY assistant/package.json assistant/bun.lock ./assistant/
|
package/README.md
CHANGED
|
@@ -47,9 +47,9 @@ cp .env.example .env
|
|
|
47
47
|
|
|
48
48
|
## Update Bulletin
|
|
49
49
|
|
|
50
|
-
Release notes are surfaced via a background conversation dispatched at daemon startup. Workspace migrations write release notes to `<workspace>/UPDATES.md`; `runUpdateBulletinJobIfNeeded()` then spawns a `conversationType: "background"` conversation
|
|
50
|
+
Release notes are surfaced via a background conversation dispatched at daemon startup. Workspace migrations write release notes to `<workspace>/UPDATES.md`; `runUpdateBulletinJobIfNeeded()` then spawns a `conversationType: "background"` conversation via `runBackgroundJob()` (see `runtime/background-job-runner.ts`) whenever the file's content hash changes. The agent uses judgment to surface updates to the user when relevant, and deletes the file when done.
|
|
51
51
|
|
|
52
|
-
**For release maintainers:** Add a new migration under `assistant/src/workspace/migrations/0XX-release-notes-<slug>.ts` with the release notes inline as a string literal, and append the export to `WORKSPACE_MIGRATIONS` in `assistant/src/workspace/migrations/registry.ts`. Migrations are append-only. Idempotency
|
|
52
|
+
**For release maintainers:** Add a new migration under `assistant/src/workspace/migrations/0XX-release-notes-<slug>.ts` with the release notes inline as a string literal, and append the export to `WORKSPACE_MIGRATIONS` in `assistant/src/workspace/migrations/registry.ts`. Migrations are append-only. Idempotency requires both the workspace-migration runner AND an in-file marker: `runWorkspaceMigrations()` records each migration's `WorkspaceMigration.id` in `<workspace>/data/.workspace-migrations.json` and skips IDs already in the `applied` set, but a crash between `UPDATES.md` append and checkpoint finalize can cause a duplicate append on next boot. Embed an HTML marker like `<!-- release-note-id:<migration-id> -->` in the appended block, and short-circuit when the marker is already present. See the root `AGENTS.md` "Release Update Hygiene" section for the full rationale. Skip the migration entirely for releases with no user/assistant-facing changes.
|
|
53
53
|
|
|
54
54
|
## Usage
|
|
55
55
|
|
package/docker-entrypoint.sh
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env sh
|
|
2
2
|
set -eu
|
|
3
3
|
|
|
4
|
+
# Ensure /tmp has the standard sticky-bit world-writable mode so non-root
|
|
5
|
+
# processes (the `assistant` user, bun's tmpdir, scratch writes) can use it.
|
|
6
|
+
chmod 1777 /tmp 2>/dev/null || true
|
|
7
|
+
|
|
4
8
|
if [ "$(id -u)" = "0" ] && [ "${VELLUM_WORKSPACE_DIR:-}" = "/workspace" ] && [ -d /workspace ]; then
|
|
5
9
|
git config --global --add safe.directory /workspace >/dev/null 2>&1 || true
|
|
6
10
|
git config --global --add safe.directory '/workspace/*' >/dev/null 2>&1 || true
|
|
7
11
|
fi
|
|
8
12
|
|
|
13
|
+
# Source executable scripts from /workspace/.entrypoint.d/ in lexicographic
|
|
14
|
+
# order so an assistant can extend the daemon environment from its own
|
|
15
|
+
# workspace volume — PATH additions, credential helpers, tooling symlinks.
|
|
16
|
+
# Scripts are sourced so env mutations propagate to the daemon. Errors are
|
|
17
|
+
# logged but non-fatal.
|
|
18
|
+
if [ -d /workspace/.entrypoint.d ]; then
|
|
19
|
+
for hook in /workspace/.entrypoint.d/*.sh; do
|
|
20
|
+
[ -r "$hook" ] || continue
|
|
21
|
+
. "$hook" || echo "Warning: workspace hook $hook exited $?" >&2
|
|
22
|
+
done
|
|
23
|
+
fi
|
|
24
|
+
|
|
9
25
|
# ── Bun profiler bootstrap ──────────────────────────────────────────────
|
|
10
26
|
# When VELLUM_PROFILER_RUN_ID and VELLUM_PROFILER_MODE are set, prepare the
|
|
11
27
|
# run directory on the workspace volume and append the appropriate Bun
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
import tsParser from "@typescript-eslint/parser";
|
|
2
|
+
import { RuleTester } from "eslint";
|
|
3
|
+
|
|
4
|
+
import rule from "../cli-no-daemon-internals.js";
|
|
5
|
+
|
|
6
|
+
const tester = new RuleTester({
|
|
7
|
+
languageOptions: {
|
|
8
|
+
ecmaVersion: 2022,
|
|
9
|
+
sourceType: "module",
|
|
10
|
+
parser: tsParser,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
tester.run("cli/no-daemon-internals", rule, {
|
|
15
|
+
valid: [
|
|
16
|
+
// ipc-tagged file importing only allowed sources
|
|
17
|
+
{
|
|
18
|
+
code: `
|
|
19
|
+
import type { Command } from "commander";
|
|
20
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
21
|
+
import { log } from "../logger.js";
|
|
22
|
+
import { printTable } from "../output.js";
|
|
23
|
+
|
|
24
|
+
registerCommand(program, {
|
|
25
|
+
name: "example",
|
|
26
|
+
transport: "ipc",
|
|
27
|
+
build: () => {},
|
|
28
|
+
});
|
|
29
|
+
`,
|
|
30
|
+
},
|
|
31
|
+
// local-tagged file importing allowed sources
|
|
32
|
+
{
|
|
33
|
+
code: `
|
|
34
|
+
import type { Command } from "commander";
|
|
35
|
+
import { loadRawConfig } from "../../config/loader.js";
|
|
36
|
+
import { getWorkspaceDir } from "../../util/platform.js";
|
|
37
|
+
|
|
38
|
+
registerCommand(program, {
|
|
39
|
+
name: "local-example",
|
|
40
|
+
transport: "local",
|
|
41
|
+
build: () => {},
|
|
42
|
+
});
|
|
43
|
+
`,
|
|
44
|
+
},
|
|
45
|
+
// bootstrap-tagged file importing allowed sources
|
|
46
|
+
{
|
|
47
|
+
code: `
|
|
48
|
+
import type { Command } from "commander";
|
|
49
|
+
import { AssistantConfigSchema } from "../../config/schema.js";
|
|
50
|
+
|
|
51
|
+
registerCommand(program, {
|
|
52
|
+
name: "bootstrap-example",
|
|
53
|
+
transport: "bootstrap",
|
|
54
|
+
build: () => {},
|
|
55
|
+
});
|
|
56
|
+
`,
|
|
57
|
+
},
|
|
58
|
+
// ipc-tagged file importing from ../lib/ prefix (shared lib)
|
|
59
|
+
{
|
|
60
|
+
code: `
|
|
61
|
+
import type { Command } from "commander";
|
|
62
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
63
|
+
import { readFileSync } from "../lib/daemon-credential-client.js";
|
|
64
|
+
|
|
65
|
+
registerCommand(program, {
|
|
66
|
+
name: "lib-example",
|
|
67
|
+
transport: "ipc",
|
|
68
|
+
build: () => {},
|
|
69
|
+
});
|
|
70
|
+
`,
|
|
71
|
+
},
|
|
72
|
+
// File with zero imports and no registerCommand — utility file
|
|
73
|
+
{
|
|
74
|
+
code: `
|
|
75
|
+
function utilHelper() {
|
|
76
|
+
return 42;
|
|
77
|
+
}
|
|
78
|
+
export { utilHelper };
|
|
79
|
+
`,
|
|
80
|
+
},
|
|
81
|
+
// Helper module — has imports but does not call registerCommand directly.
|
|
82
|
+
// Helper modules under commands/ (e.g. oauth/shared.ts, lib/cache-fs.ts)
|
|
83
|
+
// are not command entries and the rule must not fire on them, even when
|
|
84
|
+
// they import from outside the registrar allowlists.
|
|
85
|
+
{
|
|
86
|
+
code: `
|
|
87
|
+
import type { Command } from "commander";
|
|
88
|
+
import { getProvider } from "../../../oauth/oauth-store.js";
|
|
89
|
+
|
|
90
|
+
export function buildAuthFlow(program) {
|
|
91
|
+
// helper module — no registerCommand call here; the actual
|
|
92
|
+
// command file imports this and calls registerCommand itself.
|
|
93
|
+
}
|
|
94
|
+
`,
|
|
95
|
+
},
|
|
96
|
+
// local-tagged file importing ../logger and ../output — both must be on
|
|
97
|
+
// the local allowlist (regression test for the allowlist gap that
|
|
98
|
+
// false-positived autonomy/config/completions/keys/credential-execution).
|
|
99
|
+
{
|
|
100
|
+
code: `
|
|
101
|
+
import type { Command } from "commander";
|
|
102
|
+
import { log } from "../logger.js";
|
|
103
|
+
import { writeOutput } from "../output.js";
|
|
104
|
+
|
|
105
|
+
registerCommand(program, {
|
|
106
|
+
name: "local-with-output",
|
|
107
|
+
transport: "local",
|
|
108
|
+
build: () => {},
|
|
109
|
+
});
|
|
110
|
+
`,
|
|
111
|
+
},
|
|
112
|
+
// Type-only imports are erased at compile time and must not count as
|
|
113
|
+
// runtime boundary violations, even when the source path is outside the
|
|
114
|
+
// allowlist (e.g. `import type` from runtime/routes for response shapes).
|
|
115
|
+
{
|
|
116
|
+
code: `
|
|
117
|
+
import type { Command } from "commander";
|
|
118
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
119
|
+
import type { MemoryV2Result } from "../../runtime/routes/memory-v2-routes.js";
|
|
120
|
+
|
|
121
|
+
registerCommand(program, {
|
|
122
|
+
name: "ipc-with-type-import",
|
|
123
|
+
transport: "ipc",
|
|
124
|
+
build: () => {},
|
|
125
|
+
});
|
|
126
|
+
`,
|
|
127
|
+
},
|
|
128
|
+
// Inline `import { type X }` form: importKind is set per specifier,
|
|
129
|
+
// not on the declaration. When every specifier is type-only the import
|
|
130
|
+
// is erased and must not flag a forbidden-runtime-import violation.
|
|
131
|
+
{
|
|
132
|
+
code: `
|
|
133
|
+
import type { Command } from "commander";
|
|
134
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
135
|
+
import { type MemoryV2Result, type ScoreBreakdown } from "../../runtime/routes/memory-v2-routes.js";
|
|
136
|
+
|
|
137
|
+
registerCommand(program, {
|
|
138
|
+
name: "ipc-with-inline-type-import",
|
|
139
|
+
transport: "ipc",
|
|
140
|
+
build: () => {},
|
|
141
|
+
});
|
|
142
|
+
`,
|
|
143
|
+
},
|
|
144
|
+
// Chained registerCommand pattern: `registerCommand(...).command(...)`.
|
|
145
|
+
// The outer call's callee is a MemberExpression whose object is the
|
|
146
|
+
// inner registerCommand call. The AST walker must follow callee +
|
|
147
|
+
// MemberExpression.object so findTransport() locates the registerCommand
|
|
148
|
+
// call and applies the correct transport allowlist.
|
|
149
|
+
{
|
|
150
|
+
code: `
|
|
151
|
+
import type { Command } from "commander";
|
|
152
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
153
|
+
|
|
154
|
+
registerCommand(program, {
|
|
155
|
+
name: "ipc-chained",
|
|
156
|
+
transport: "ipc",
|
|
157
|
+
build: () => {},
|
|
158
|
+
}).command("subcmd").description("desc");
|
|
159
|
+
`,
|
|
160
|
+
},
|
|
161
|
+
// Sibling subcommand composition: an index file (e.g. oauth/index.ts)
|
|
162
|
+
// imports sibling subcommand files (./connect.js, ./disconnect.js) to
|
|
163
|
+
// attach them under a parent group. The imported file is itself a
|
|
164
|
+
// command and the rule checks its imports independently, so this can't
|
|
165
|
+
// smuggle daemon internals.
|
|
166
|
+
{
|
|
167
|
+
code: `
|
|
168
|
+
import type { Command } from "commander";
|
|
169
|
+
import { registerCommand } from "../../lib/register-command.js";
|
|
170
|
+
import { setupConnect } from "./connect.js";
|
|
171
|
+
import { setupDisconnect } from "./disconnect.js";
|
|
172
|
+
|
|
173
|
+
registerCommand(program, {
|
|
174
|
+
name: "ipc-index-composition",
|
|
175
|
+
transport: "ipc",
|
|
176
|
+
build: () => {},
|
|
177
|
+
});
|
|
178
|
+
`,
|
|
179
|
+
},
|
|
180
|
+
// Nested command file (commands/oauth/foo.ts) needs deeper relative
|
|
181
|
+
// paths to the IPC client, lib/, logger, and output. Without the
|
|
182
|
+
// depth-2 entries the rule would false-positive on every nested
|
|
183
|
+
// command (oauth/*, platform/*).
|
|
184
|
+
{
|
|
185
|
+
code: `
|
|
186
|
+
import type { Command } from "commander";
|
|
187
|
+
import { cliIpcCall } from "../../../ipc/cli-client.js";
|
|
188
|
+
import { registerCommand } from "../../lib/register-command.js";
|
|
189
|
+
import { log } from "../../logger.js";
|
|
190
|
+
import { writeOutput } from "../../output.js";
|
|
191
|
+
|
|
192
|
+
registerCommand(program, {
|
|
193
|
+
name: "ipc-nested",
|
|
194
|
+
transport: "ipc",
|
|
195
|
+
build: () => {},
|
|
196
|
+
});
|
|
197
|
+
`,
|
|
198
|
+
},
|
|
199
|
+
// Shared CLI utils (src/cli/utils/*) — sibling utility directory used
|
|
200
|
+
// by task/ui/conversations-defer for ID resolution and parsing. Lives
|
|
201
|
+
// alongside lib/ but historically wasn't on the allowlist.
|
|
202
|
+
{
|
|
203
|
+
code: `
|
|
204
|
+
import type { Command } from "commander";
|
|
205
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
206
|
+
import { resolveConversationId } from "../utils/conversation-id.js";
|
|
207
|
+
import { parseDuration } from "../utils/parse-duration.js";
|
|
208
|
+
|
|
209
|
+
registerCommand(program, {
|
|
210
|
+
name: "ipc-with-utils",
|
|
211
|
+
transport: "ipc",
|
|
212
|
+
build: () => {},
|
|
213
|
+
});
|
|
214
|
+
`,
|
|
215
|
+
},
|
|
216
|
+
// status.ts pattern: when the daemon is unreachable, the command falls
|
|
217
|
+
// back to a local socket-path probe + platform helpers. Both imports
|
|
218
|
+
// are part of the documented daemon-down fallback contract (§3.7).
|
|
219
|
+
{
|
|
220
|
+
code: `
|
|
221
|
+
import type { Command } from "commander";
|
|
222
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
223
|
+
import { getSocketPath } from "../../ipc/socket-path.js";
|
|
224
|
+
import { getWorkspaceDir } from "../../util/platform.js";
|
|
225
|
+
|
|
226
|
+
registerCommand(program, {
|
|
227
|
+
name: "ipc-status",
|
|
228
|
+
transport: "ipc",
|
|
229
|
+
build: () => {},
|
|
230
|
+
});
|
|
231
|
+
`,
|
|
232
|
+
},
|
|
233
|
+
// local-tagged keys.ts pattern: the secure-key helpers are designed to
|
|
234
|
+
// run in-process (not over IPC), so direct security/* imports are part
|
|
235
|
+
// of the contract.
|
|
236
|
+
{
|
|
237
|
+
code: `
|
|
238
|
+
import type { Command } from "commander";
|
|
239
|
+
import { credentialKey } from "../../security/credential-key.js";
|
|
240
|
+
import { getSecureKeyAsync } from "../../security/secure-keys.js";
|
|
241
|
+
|
|
242
|
+
registerCommand(program, {
|
|
243
|
+
name: "local-keys",
|
|
244
|
+
transport: "local",
|
|
245
|
+
build: () => {},
|
|
246
|
+
});
|
|
247
|
+
`,
|
|
248
|
+
},
|
|
249
|
+
// local-tagged credential-execution.ts pattern: speaks to the CES
|
|
250
|
+
// sidecar via service-contracts RPC; the daemon is not involved.
|
|
251
|
+
{
|
|
252
|
+
code: `
|
|
253
|
+
import type { Command } from "commander";
|
|
254
|
+
import { credentialRpc } from "@vellumai/service-contracts/credential-rpc";
|
|
255
|
+
import { connect } from "../../credential-execution/client.js";
|
|
256
|
+
|
|
257
|
+
registerCommand(program, {
|
|
258
|
+
name: "local-ces",
|
|
259
|
+
transport: "local",
|
|
260
|
+
build: () => {},
|
|
261
|
+
});
|
|
262
|
+
`,
|
|
263
|
+
},
|
|
264
|
+
// local-tagged config.ts uses zod for schema validation and reaches
|
|
265
|
+
// across to oauth/shared.ts for the managed-mode platform-connection
|
|
266
|
+
// check (documented cross-namespace helper).
|
|
267
|
+
{
|
|
268
|
+
code: `
|
|
269
|
+
import type { Command } from "commander";
|
|
270
|
+
import { z } from "zod";
|
|
271
|
+
import { loadRawConfig } from "../../config/loader.js";
|
|
272
|
+
import { requirePlatformConnection } from "./oauth/shared.js";
|
|
273
|
+
|
|
274
|
+
registerCommand(program, {
|
|
275
|
+
name: "local-config",
|
|
276
|
+
transport: "local",
|
|
277
|
+
build: () => {},
|
|
278
|
+
});
|
|
279
|
+
`,
|
|
280
|
+
},
|
|
281
|
+
],
|
|
282
|
+
|
|
283
|
+
invalid: [
|
|
284
|
+
// registerCommand called without a string transport prop — the actual
|
|
285
|
+
// missingTransport case (command-entry file forgot to declare its class).
|
|
286
|
+
{
|
|
287
|
+
code: `
|
|
288
|
+
import type { Command } from "commander";
|
|
289
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
290
|
+
|
|
291
|
+
registerCommand(program, {
|
|
292
|
+
name: "no-transport",
|
|
293
|
+
build: () => {},
|
|
294
|
+
});
|
|
295
|
+
`,
|
|
296
|
+
errors: [
|
|
297
|
+
{
|
|
298
|
+
messageId: "missingTransport",
|
|
299
|
+
},
|
|
300
|
+
],
|
|
301
|
+
},
|
|
302
|
+
// ipc-tagged file importing a forbidden runtime route
|
|
303
|
+
{
|
|
304
|
+
code: `
|
|
305
|
+
import type { Command } from "commander";
|
|
306
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
307
|
+
import { healthRoutes } from "../../runtime/routes/health-routes.js";
|
|
308
|
+
|
|
309
|
+
registerCommand(program, {
|
|
310
|
+
name: "bad-ipc",
|
|
311
|
+
transport: "ipc",
|
|
312
|
+
build: () => {},
|
|
313
|
+
});
|
|
314
|
+
`,
|
|
315
|
+
errors: [
|
|
316
|
+
{
|
|
317
|
+
messageId: "forbiddenImport",
|
|
318
|
+
data: {
|
|
319
|
+
transport: "ipc",
|
|
320
|
+
source: "../../runtime/routes/health-routes.js",
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
},
|
|
325
|
+
// ipc-tagged file importing a skills catalog module
|
|
326
|
+
{
|
|
327
|
+
code: `
|
|
328
|
+
import type { Command } from "commander";
|
|
329
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
330
|
+
import { SkillsCatalog } from "../../skills/catalog.js";
|
|
331
|
+
|
|
332
|
+
registerCommand(program, {
|
|
333
|
+
name: "bad-ipc-skills",
|
|
334
|
+
transport: "ipc",
|
|
335
|
+
build: () => {},
|
|
336
|
+
});
|
|
337
|
+
`,
|
|
338
|
+
errors: [
|
|
339
|
+
{
|
|
340
|
+
messageId: "forbiddenImport",
|
|
341
|
+
data: {
|
|
342
|
+
transport: "ipc",
|
|
343
|
+
source: "../../skills/catalog.js",
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
],
|
|
347
|
+
},
|
|
348
|
+
// local-tagged file importing a forbidden runtime route
|
|
349
|
+
{
|
|
350
|
+
code: `
|
|
351
|
+
import type { Command } from "commander";
|
|
352
|
+
import { loadRawConfig } from "../../config/loader.js";
|
|
353
|
+
import { healthRoutes } from "../../runtime/routes/health-routes.js";
|
|
354
|
+
|
|
355
|
+
registerCommand(program, {
|
|
356
|
+
name: "bad-local",
|
|
357
|
+
transport: "local",
|
|
358
|
+
build: () => {},
|
|
359
|
+
});
|
|
360
|
+
`,
|
|
361
|
+
errors: [
|
|
362
|
+
{
|
|
363
|
+
messageId: "forbiddenImport",
|
|
364
|
+
data: {
|
|
365
|
+
transport: "local",
|
|
366
|
+
source: "../../runtime/routes/health-routes.js",
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
],
|
|
370
|
+
},
|
|
371
|
+
// Nested command file (commands/oauth/foo.ts) STILL rejects runtime
|
|
372
|
+
// route imports. Locking in the boundary so the depth-2 allowlist
|
|
373
|
+
// additions don't accidentally open daemon-internal namespaces.
|
|
374
|
+
{
|
|
375
|
+
code: `
|
|
376
|
+
import type { Command } from "commander";
|
|
377
|
+
import { cliIpcCall } from "../../../ipc/cli-client.js";
|
|
378
|
+
import { healthRoutes } from "../../../runtime/routes/health-routes.js";
|
|
379
|
+
|
|
380
|
+
registerCommand(program, {
|
|
381
|
+
name: "bad-ipc-nested",
|
|
382
|
+
transport: "ipc",
|
|
383
|
+
build: () => {},
|
|
384
|
+
});
|
|
385
|
+
`,
|
|
386
|
+
errors: [
|
|
387
|
+
{
|
|
388
|
+
messageId: "forbiddenImport",
|
|
389
|
+
data: {
|
|
390
|
+
transport: "ipc",
|
|
391
|
+
source: "../../../runtime/routes/health-routes.js",
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
],
|
|
395
|
+
},
|
|
396
|
+
// services/, agents/, llm/ namespaces remain forbidden for ipc commands.
|
|
397
|
+
{
|
|
398
|
+
code: `
|
|
399
|
+
import type { Command } from "commander";
|
|
400
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
401
|
+
import { dispatchAgent } from "../../agents/dispatcher.js";
|
|
402
|
+
|
|
403
|
+
registerCommand(program, {
|
|
404
|
+
name: "bad-ipc-agents",
|
|
405
|
+
transport: "ipc",
|
|
406
|
+
build: () => {},
|
|
407
|
+
});
|
|
408
|
+
`,
|
|
409
|
+
errors: [
|
|
410
|
+
{
|
|
411
|
+
messageId: "forbiddenImport",
|
|
412
|
+
data: {
|
|
413
|
+
transport: "ipc",
|
|
414
|
+
source: "../../agents/dispatcher.js",
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
],
|
|
418
|
+
},
|
|
419
|
+
],
|
|
420
|
+
});
|