@vellumai/assistant 0.9.0 → 0.10.0-dev.202606192226.8ed8a6a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +19 -35
- package/bun.lock +7 -8
- package/docs/activation-funnel-telemetry.md +28 -22
- package/docs/architecture/security.md +29 -28
- package/docs/stt-provider-onboarding.md +3 -5
- package/docs/workflows-testing.md +13 -44
- package/docs/workflows.md +3 -5
- package/node_modules/@vellumai/ces-client/src/__tests__/ces-client.test.ts +47 -0
- package/node_modules/@vellumai/ces-client/src/rpc-client.ts +28 -5
- package/node_modules/@vellumai/environments/src/seeds.ts +2 -5
- package/node_modules/@vellumai/gateway-client/src/admission-policy-contract.ts +97 -0
- package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +10 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +32 -6
- package/node_modules/@vellumai/gateway-client/src/outbound-contract.ts +119 -0
- package/node_modules/@vellumai/gateway-client/src/types.ts +15 -84
- package/openapi.yaml +1128 -119
- package/package.json +2 -1
- package/scripts/sync-llm-catalog.ts +6 -15
- package/scripts/sync-web-search-catalog.ts +3 -11
- package/src/__tests__/access-request-card-view.test.ts +98 -0
- package/src/__tests__/access-request-seed-content-blocks.test.ts +2 -4
- package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +72 -32
- package/src/__tests__/agent-loop-compaction-strip.test.ts +241 -0
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +16 -13
- package/src/__tests__/agent-loop-output-hooks.test.ts +69 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +25 -0
- package/src/__tests__/agent-loop-pushes-post-hook-prompt.test.ts +306 -0
- package/src/__tests__/always-loaded-tools-guard.test.ts +2 -3
- package/src/__tests__/app-compiler.test.ts +15 -1
- package/src/__tests__/app-dir-path-guard.test.ts +0 -1
- package/src/__tests__/approval-cascade.test.ts +6 -0
- package/src/__tests__/approval-routes-http.test.ts +128 -0
- package/src/__tests__/assistant-feature-flag-guard.test.ts +1 -4
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
- package/src/__tests__/auth-fallback-events-store.test.ts +6 -14
- package/src/__tests__/avatar-identity-sync.test.ts +2 -27
- package/src/__tests__/btw-routes.test.ts +6 -8
- package/src/__tests__/call-pointer-messages.test.ts +28 -0
- package/src/__tests__/cancel-clears-processing.test.ts +89 -0
- package/src/__tests__/channel-approval-routes.test.ts +0 -4
- package/src/__tests__/channel-inbound-disk-pressure.test.ts +5 -15
- package/src/__tests__/checker.test.ts +0 -3
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +3 -4
- package/src/__tests__/compaction-events.test.ts +6 -0
- package/src/__tests__/compactor-image-manifest-trust.test.ts +21 -1
- package/src/__tests__/compactor-summary-call-truncation.test.ts +223 -0
- package/src/__tests__/config-loader-backfill.test.ts +268 -27
- package/src/__tests__/config-schema.test.ts +35 -0
- package/src/__tests__/config-watcher.test.ts +0 -18
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +2 -2
- package/src/__tests__/contact-store-user-file.test.ts +0 -6
- package/src/__tests__/contacts-tools.test.ts +29 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +22 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -0
- package/src/__tests__/conversation-agent-loop.test.ts +58 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +0 -1
- package/src/__tests__/conversation-confirmation-signals.test.ts +6 -0
- package/src/__tests__/conversation-lifecycle.test.ts +7 -9
- package/src/__tests__/conversation-load-history-repair.test.ts +101 -0
- package/src/__tests__/conversation-process-callsite.test.ts +6 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-queue.test.ts +6 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +15 -12
- package/src/__tests__/conversation-slash-queue.test.ts +6 -0
- package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
- package/src/__tests__/conversation-speed-override.test.ts +6 -0
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +6 -3
- package/src/__tests__/conversation-title-service.test.ts +62 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +6 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
- package/src/__tests__/credential-broker.test.ts +449 -1
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +18 -11
- package/src/__tests__/credential-execution-tools.test.ts +0 -1
- package/src/__tests__/credential-prompt-route.test.ts +4 -4
- package/src/__tests__/credential-routes.test.ts +360 -0
- package/src/__tests__/credential-security-invariants.test.ts +4 -13
- package/src/__tests__/disk-pressure-policy.test.ts +12 -0
- package/src/__tests__/disk-pressure-tools.test.ts +41 -1
- package/src/__tests__/disk-usage.test.ts +65 -0
- package/src/__tests__/document-tool-security.test.ts +9 -6
- package/src/__tests__/document-update-default-surface.test.ts +202 -0
- package/src/__tests__/dynamic-page-surface.test.ts +152 -1
- package/src/__tests__/fixtures/credential-security-fixtures.ts +2 -33
- package/src/__tests__/gateway-flag-listener.test.ts +110 -1
- package/src/__tests__/gateway-only-guard.test.ts +3 -7
- package/src/__tests__/gemini-count-tokens.test.ts +70 -0
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-card-withdrawal.test.ts +403 -0
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +5 -3
- package/src/__tests__/guardian-grant-minting.test.ts +3 -35
- package/src/__tests__/guardian-routing-invariants.test.ts +64 -26
- package/src/__tests__/guardian-routing-state.test.ts +0 -1
- package/src/__tests__/headless-browser-mode.test.ts +10 -0
- package/src/__tests__/headless-browser-navigate.test.ts +8 -3
- package/src/__tests__/helpers/create-guardian-binding.ts +0 -1
- package/src/__tests__/host-browser-proxy.test.ts +87 -0
- package/src/__tests__/identity-routes.test.ts +0 -189
- package/src/__tests__/inbound-invite-redemption.test.ts +4 -4
- package/src/__tests__/injector-disk-pressure.test.ts +10 -5
- package/src/__tests__/injector-v3-suppression.test.ts +27 -20
- package/src/__tests__/internal-telemetry-routes.test.ts +6 -14
- package/src/__tests__/invite-redemption-service.test.ts +4 -7
- package/src/__tests__/llm-callsite-catalog.test.ts +5 -6
- package/src/__tests__/llm-catalog-parity.test.ts +30 -23
- package/src/__tests__/llm-resolver.test.ts +70 -24
- package/src/__tests__/llm-schema.test.ts +1 -0
- package/src/__tests__/managed-profile-guard.test.ts +163 -4
- package/src/__tests__/mcp-health-check.test.ts +6 -7
- package/src/__tests__/media-stream-server-integration.test.ts +317 -13
- package/src/__tests__/oauth-provider-seed-logos.test.ts +4 -6
- package/src/__tests__/onboarding-persona-write.test.ts +1 -1
- package/src/__tests__/path-policy.test.ts +34 -0
- package/src/__tests__/persona-resolver.test.ts +49 -14
- package/src/__tests__/plugin-api-model-profiles.test.ts +178 -0
- package/src/__tests__/plugin-api-provider.test.ts +24 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +6 -3
- package/src/__tests__/post-compaction-reinjection-idempotency.test.ts +214 -0
- package/src/__tests__/provider-send-message-override-profile.test.ts +76 -0
- package/src/__tests__/reaction-persistence.test.ts +150 -29
- package/src/__tests__/registry.test.ts +2 -7
- package/src/__tests__/relay-server.test.ts +285 -0
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
- package/src/__tests__/schedule-routes-workflow-validation.test.ts +1 -10
- package/src/__tests__/schedule-routes.test.ts +0 -30
- package/src/__tests__/schedule-tools.test.ts +2 -18
- package/src/__tests__/scheduler-reuse-conversation.test.ts +8 -5
- package/src/__tests__/secret-response-routing.test.ts +35 -0
- package/src/__tests__/secret-routes-platform-proxy.test.ts +16 -2
- package/src/__tests__/skill-execute-input.test.ts +177 -1
- package/src/__tests__/skill-load-tool.test.ts +72 -0
- package/src/__tests__/skill-runtime-path.test.ts +2 -3
- package/src/__tests__/skills.test.ts +51 -0
- package/src/__tests__/slack-notification-approval-card.test.ts +176 -0
- package/src/__tests__/slack-reaction-canonical-approval.test.ts +285 -0
- package/src/__tests__/subagent-tools.test.ts +266 -0
- package/src/__tests__/surface-completion-nudge-hook.test.ts +367 -0
- package/src/__tests__/system-storage-cleanup-skill.test.ts +56 -0
- package/src/__tests__/task-progress-nudge-hook.test.ts +1 -1
- package/src/__tests__/title-generate-hook.test.ts +100 -3
- package/src/__tests__/token-estimator-accuracy.benchmark.test.ts +1 -29
- package/src/__tests__/token-manager.test.ts +519 -0
- package/src/__tests__/tool-approval-seed-content-blocks.test.ts +1 -1
- package/src/__tests__/tool-audit-listener.test.ts +7 -7
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +6 -3
- package/src/__tests__/tool-executor.test.ts +0 -79
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +4 -2
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +220 -3
- package/src/__tests__/trusted-contact-multichannel.test.ts +3 -3
- package/src/__tests__/trusted-contact-verification.test.ts +8 -10
- package/src/__tests__/twilio-routes.test.ts +81 -1
- package/src/__tests__/voice-invite-redemption.test.ts +2 -3
- package/src/__tests__/weak-open-model.test.ts +30 -0
- package/src/__tests__/web-search-catalog-parity.test.ts +6 -25
- package/src/__tests__/workspace-greetings.test.ts +152 -0
- package/src/__tests__/workspace-migration-105-enable-memory-v3-live-for-new-workspaces.test.ts +149 -0
- package/src/__tests__/workspace-migration-108-drop-balanced-economy-profile.test.ts +285 -0
- package/src/__tests__/workspace-migration-add-send-diagnostics.test.ts +1 -1
- package/src/__tests__/workspace-migration-drop-collect-usage-data.test.ts +118 -0
- package/src/__tests__/workspace-migration-drop-send-diagnostics.test.ts +118 -0
- package/src/a2a/__tests__/e2e-a2a-channel.test.ts +0 -4
- package/src/agent/loop.ts +75 -29
- package/src/api/README.md +6 -6
- package/src/api/events/tool-result.ts +6 -0
- package/src/api/events/workflow-completed.ts +53 -0
- package/src/api/events/workflow-leaf-finished.ts +38 -0
- package/src/api/events/workflow-leaf-started.ts +35 -0
- package/src/api/events/workflow-progress.ts +32 -0
- package/src/api/events/workflow-started.ts +31 -0
- package/src/api/index.ts +40 -0
- package/src/api/responses/conversation-message.ts +28 -4
- package/src/api/responses/home.ts +26 -4
- package/src/api/responses/workflow-journal.ts +53 -0
- package/src/approvals/guardian-card-withdrawal.ts +145 -0
- package/src/approvals/guardian-decision-primitive.ts +26 -3
- package/src/approvals/guardian-request-resolvers.ts +183 -80
- package/src/calls/__tests__/channel-admission-reader.test.ts +132 -0
- package/src/calls/__tests__/relay-setup-router.test.ts +350 -0
- package/src/calls/call-pointer-messages.ts +10 -4
- package/src/calls/channel-admission-reader.ts +104 -0
- package/src/calls/guardian-dispatch.ts +17 -45
- package/src/calls/media-stream-server.ts +84 -2
- package/src/calls/relay-access-wait.ts +1 -1
- package/src/calls/relay-server.ts +66 -0
- package/src/calls/relay-setup-router.ts +82 -1
- package/src/calls/twilio-routes.ts +17 -8
- package/src/calls/voice-session-bridge.ts +2 -2
- package/src/cli/commands/clients.ts +3 -0
- package/src/cli/commands/db/status.ts +37 -3
- package/src/cli/commands/{__tests__ → memory/__tests__}/memory-v2-compare-render.test.ts +1 -1
- package/src/cli/commands/{__tests__ → memory/__tests__}/memory-v2.test.ts +8 -7
- package/src/cli/commands/{__tests__ → memory/__tests__}/memory-v3.test.ts +5 -4
- package/src/cli/commands/memory/index.ts +30 -0
- package/src/cli/commands/{memory-v2-compare-render.ts → memory/memory-v2-compare-render.ts} +1 -1
- package/src/cli/commands/{memory-v2.ts → memory/memory-v2.ts} +6 -15
- package/src/cli/commands/{memory-v3.ts → memory/memory-v3.ts} +97 -11
- package/src/cli/commands/oauth/status.test.ts +36 -0
- package/src/cli/commands/oauth/status.ts +23 -3
- package/src/cli/commands/plugins.ts +400 -14
- package/src/cli/lib/__tests__/diff-plugin.test.ts +443 -0
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +54 -0
- package/src/cli/lib/__tests__/install-from-github.test.ts +31 -0
- package/src/cli/lib/__tests__/merge-plugin-tree.test.ts +443 -0
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +162 -0
- package/src/cli/lib/__tests__/plugin-surfaces.test.ts +111 -0
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +295 -2
- package/src/cli/lib/diff-plugin.ts +346 -0
- package/src/cli/lib/inspect-plugin.ts +12 -1
- package/src/cli/lib/install-from-github.ts +128 -19
- package/src/cli/lib/merge-plugin-tree.ts +328 -0
- package/src/cli/lib/plugin-fingerprint.ts +14 -0
- package/src/cli/lib/plugin-marketplace.ts +11 -0
- package/src/cli/lib/plugin-pin-history.ts +257 -0
- package/src/cli/lib/plugin-surfaces.ts +104 -0
- package/src/cli/lib/upgrade-plugin.ts +298 -10
- package/src/cli/program.ts +2 -6
- package/src/config/__tests__/sync-gated-profiles.test.ts +368 -0
- package/src/config/assistant-feature-flags.ts +22 -7
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +0 -1
- package/src/config/bundled-skills/document-editor/SKILL.md +3 -3
- package/src/config/bundled-skills/document-editor/TOOLS.json +2 -2
- package/src/config/bundled-skills/messaging/SKILL.md +6 -4
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +9 -8
- package/src/config/bundled-skills/subagent/SKILL.md +4 -0
- package/src/config/bundled-skills/subagent/TOOLS.json +4 -0
- package/src/config/bundled-skills/system-storage-cleanup/SKILL.md +74 -0
- package/src/config/bundled-skills/workflows/SKILL.md +14 -8
- package/src/config/bundled-tool-registry.ts +2 -7
- package/src/config/call-site-defaults.ts +15 -2
- package/src/config/feature-flag-registry.json +46 -31
- package/src/config/inference-profile-validation.ts +26 -0
- package/src/config/llm-resolver.ts +3 -0
- package/src/config/loader.ts +4 -0
- package/src/config/memory-v3-gate.ts +11 -0
- package/src/config/profile-order.ts +28 -0
- package/src/config/schema.ts +8 -6
- package/src/config/schemas/__tests__/memory-v3.test.ts +1 -0
- package/src/config/schemas/call-site-catalog.ts +7 -0
- package/src/config/schemas/channels.ts +11 -0
- package/src/config/schemas/elevenlabs.ts +0 -1
- package/src/config/schemas/llm.ts +31 -0
- package/src/config/schemas/memory-lifecycle.ts +3 -7
- package/src/config/schemas/memory-v3.ts +6 -0
- package/src/config/schemas/platform.ts +0 -8
- package/src/config/schemas/services.ts +18 -0
- package/src/config/seed-inference-profiles.ts +109 -44
- package/src/config/skills.ts +21 -0
- package/src/config/sync-gated-profiles.ts +220 -0
- package/src/contacts/contact-store.ts +89 -106
- package/src/contacts/contacts-write.ts +5 -22
- package/src/contacts/types.ts +0 -1
- package/src/context/compactor.ts +88 -54
- package/src/context/strip-injections.ts +58 -10
- package/src/context/token-estimator.ts +1 -1
- package/src/credential-execution/process-manager.ts +55 -14
- package/src/credential-execution/prompted-credential.ts +2 -3
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -2
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +44 -0
- package/src/daemon/config-watcher.ts +0 -4
- package/src/daemon/conversation-agent-loop-handlers.ts +2 -0
- package/src/daemon/conversation-agent-loop.ts +114 -22
- package/src/daemon/conversation-history.ts +1 -1
- package/src/daemon/conversation-lifecycle.ts +3 -5
- package/src/daemon/conversation-process.ts +13 -5
- package/src/daemon/conversation-runtime-assembly.ts +13 -15
- package/src/daemon/conversation-slash.ts +2 -23
- package/src/daemon/conversation-surfaces.ts +26 -0
- package/src/daemon/conversation-tool-setup.ts +53 -19
- package/src/daemon/conversation.ts +131 -20
- package/src/daemon/disk-pressure-policy.ts +5 -3
- package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +0 -1
- package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +0 -1
- package/src/daemon/handlers/config-a2a.ts +0 -2
- package/src/daemon/handlers/config-channels.ts +15 -16
- package/src/daemon/handlers/config-slack-channel.ts +22 -3
- package/src/daemon/handlers/conversations.ts +107 -0
- package/src/daemon/host-browser-proxy.ts +41 -0
- package/src/daemon/lifecycle.ts +55 -27
- package/src/daemon/memory-v2-startup.test.ts +131 -0
- package/src/daemon/memory-v2-startup.ts +100 -1
- package/src/daemon/message-provenance.ts +2 -0
- package/src/daemon/message-types/contacts.ts +0 -1
- package/src/daemon/message-types/conversations.ts +3 -3
- package/src/daemon/message-types/sync.ts +0 -1
- package/src/daemon/message-types/web-activity.ts +7 -1
- package/src/daemon/message-types/workflows.ts +83 -1
- package/src/daemon/orphan-reaper.test.ts +0 -19
- package/src/daemon/orphan-reaper.ts +2 -24
- package/src/daemon/server.ts +0 -10
- package/src/daemon/tool-setup-types.ts +4 -0
- package/src/daemon/trust-context.ts +1 -1
- package/src/daemon/wake-conversation-ops.ts +1 -0
- package/src/events/tool-audit-listener.ts +2 -2
- package/src/home/feed-source-enrichment.test.ts +151 -0
- package/src/home/feed-source-enrichment.ts +176 -0
- package/src/home/relationship-state.ts +2 -4
- package/src/instrument.ts +18 -6
- package/src/ipc/__tests__/binary-result-ipc.test.ts +81 -0
- package/src/ipc/__tests__/clients-list-ipc.test.ts +20 -0
- package/src/ipc/assistant-server.ts +37 -4
- package/src/ipc/gateway-flag-listener.ts +18 -2
- package/src/memory/__tests__/auto-analysis-enqueue.test.ts +5 -16
- package/src/memory/__tests__/db-logs-attach.test.ts +122 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +7 -11
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +37 -7
- package/src/memory/__tests__/memory-retrospective-job.test.ts +229 -401
- package/src/memory/__tests__/onboarding-events-store.test.ts +7 -7
- package/src/memory/auth-fallback-events-store.ts +2 -2
- package/src/memory/auto-analysis-enqueue.ts +3 -5
- package/src/memory/bookmark-crud.ts +1 -2
- package/src/memory/canonical-guardian-store.ts +39 -1
- package/src/memory/conversation-crud.ts +9 -4
- package/src/memory/conversation-key-store.ts +17 -2
- package/src/memory/conversation-title-service.ts +64 -7
- package/src/memory/db-async-query.ts +20 -2
- package/src/memory/db-connection.ts +49 -5
- package/src/memory/db-init.ts +17 -17
- package/src/memory/embedding-backend.ts +38 -1
- package/src/memory/embedding-billing-breaker.ts +96 -0
- package/src/memory/jobs-store.ts +25 -13
- package/src/memory/jobs-worker.ts +54 -1
- package/src/memory/lifecycle-events-store.ts +2 -2
- package/src/memory/memory-retrospective-constants.ts +4 -4
- package/src/memory/memory-retrospective-enqueue.ts +31 -6
- package/src/memory/memory-retrospective-job.ts +28 -227
- package/src/memory/migrations/129-contact-channels-access-fields.ts +18 -9
- package/src/memory/migrations/131-drop-legacy-member-guardian-tables.ts +14 -2
- package/src/memory/migrations/289-contact-channels-unique-ext-user.ts +10 -0
- package/src/memory/migrations/291-contact-channels-renormalize-addresses.ts +72 -0
- package/src/memory/migrations/292-schedule-default-no-reuse-conversation.test.ts +67 -0
- package/src/memory/migrations/292-schedule-default-no-reuse-conversation.ts +25 -0
- package/src/memory/migrations/293-workflow-journal-leaf-tokens.ts +32 -0
- package/src/memory/migrations/294-drop-external-user-id.ts +31 -0
- package/src/memory/migrations/295-drop-approval-prompt-ts-tracker.ts +20 -0
- package/src/memory/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +110 -0
- package/src/memory/migrations/296-rewrite-balanced-economy-profile-pins.ts +68 -0
- package/src/memory/migrations/__tests__/131-drop-legacy-member-guardian-tables.test.ts +154 -0
- package/src/memory/migrations/__tests__/289-contact-channels-unique-ext-user.test.ts +31 -0
- package/src/memory/migrations/__tests__/291-contact-channels-renormalize-addresses.test.ts +341 -0
- package/src/memory/migrations/__tests__/run-migrations.test.ts +52 -0
- package/src/memory/migrations/index.ts +6 -0
- package/src/memory/migrations/run-migrations.ts +41 -0
- package/src/memory/migrations/validate-migration-state.ts +1 -1
- package/src/memory/onboarding-events-store.ts +3 -3
- package/src/memory/schema/contacts.ts +0 -5
- package/src/memory/skill-loaded-events-store.test.ts +7 -15
- package/src/memory/skill-loaded-events-store.ts +2 -2
- package/src/memory/tool-executed-events-store.test.ts +7 -7
- package/src/memory/turn-trace-store.test.ts +736 -0
- package/src/memory/turn-trace-store.ts +364 -0
- package/src/memory/v2/__tests__/consolidation-job.test.ts +8 -0
- package/src/memory/v2/__tests__/skill-content.test.ts +30 -0
- package/src/memory/v2/consolidation-job.ts +2 -2
- package/src/memory/v2/skill-content.ts +25 -7
- package/src/memory/v2/skill-store.ts +7 -1
- package/src/memory/v3-eval/__tests__/eval-packets.test.ts +248 -0
- package/src/memory/v3-eval/eval-packets.ts +546 -0
- package/src/messaging/providers/slack/adapter.ts +1 -1
- package/src/messaging/providers/slack/api.ts +31 -0
- package/src/messaging/providers/slack/send.test.ts +114 -2
- package/src/messaging/providers/slack/send.ts +30 -7
- package/src/messaging/providers/slack/withdraw.test.ts +200 -0
- package/src/messaging/providers/slack/withdraw.ts +161 -0
- package/src/notifications/AGENTS.md +2 -0
- package/src/notifications/access-request-copy.ts +72 -59
- package/src/notifications/adapters/shared.ts +29 -0
- package/src/notifications/adapters/slack.ts +58 -103
- package/src/notifications/adapters/telegram.ts +2 -20
- package/src/notifications/approval-card-data.ts +333 -0
- package/src/notifications/broadcaster.ts +16 -3
- package/src/notifications/canonical-delivery-recorder.ts +139 -0
- package/src/notifications/copy-composer.ts +3 -3
- package/src/notifications/decision-engine.ts +4 -2
- package/src/notifications/destination-resolver.ts +4 -6
- package/src/notifications/guardian-question-mode.ts +10 -0
- package/src/notifications/home-feed-side-effect.ts +7 -16
- package/src/notifications/notification-utils.ts +19 -20
- package/src/notifications/signal.ts +79 -43
- package/src/notifications/types.ts +98 -121
- package/src/oauth/AGENTS.md +5 -24
- package/src/permissions/checker.test.ts +51 -0
- package/src/permissions/checker.ts +185 -26
- package/src/permissions/ipc-risk-types.ts +24 -0
- package/src/permissions/question-prompter.test.ts +27 -0
- package/src/permissions/question-prompter.ts +4 -0
- package/src/permissions/secret-prompter.ts +15 -1
- package/src/platform/client.test.ts +119 -0
- package/src/platform/client.ts +66 -0
- package/src/platform/consent-cache.test.ts +267 -0
- package/src/platform/consent-cache.ts +174 -0
- package/src/plugin-api/constants.ts +1 -1
- package/src/plugin-api/index.ts +33 -1
- package/src/plugin-api/model-profiles.ts +33 -0
- package/src/plugin-api/types.ts +50 -2
- package/src/plugins/defaults/advisor/__tests__/advisor-gate.test.ts +56 -0
- package/src/plugins/defaults/advisor/__tests__/advisor-state-store.test.ts +43 -0
- package/src/plugins/defaults/advisor/__tests__/agent-loop-integration.test.ts +137 -0
- package/src/plugins/defaults/advisor/__tests__/consult.test.ts +153 -0
- package/src/plugins/defaults/advisor/__tests__/hooks.test.ts +138 -0
- package/src/plugins/defaults/advisor/__tests__/transcript.test.ts +147 -0
- package/src/plugins/defaults/advisor/advisor-gate.ts +29 -0
- package/src/plugins/defaults/advisor/advisor-state-store.ts +94 -0
- package/src/plugins/defaults/advisor/config.ts +21 -0
- package/src/plugins/defaults/advisor/consult.ts +93 -0
- package/src/plugins/defaults/advisor/hooks/post-model-call.ts +34 -0
- package/src/plugins/defaults/advisor/hooks/pre-model-call.ts +30 -0
- package/src/plugins/defaults/advisor/hooks/user-prompt-submit.ts +19 -0
- package/src/plugins/defaults/advisor/package.json +14 -0
- package/src/plugins/defaults/advisor/steering.ts +67 -0
- package/src/plugins/defaults/advisor/tools/advisor.ts +65 -0
- package/src/plugins/defaults/advisor/transcript.ts +76 -0
- package/src/plugins/defaults/compaction/window-manager.ts +18 -0
- package/src/plugins/defaults/index.ts +60 -0
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +22 -9
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +2 -2
- package/src/plugins/defaults/memory-retrieval/injectors.ts +4 -4
- package/src/plugins/defaults/memory-retrieval/tail-reinjection-strip.ts +64 -0
- package/src/plugins/defaults/memory-retrieval/unified-turn-context.ts +29 -21
- package/src/plugins/defaults/memory-v3-shadow/__tests__/carry-integration.test.ts +1 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +1 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +129 -9
- package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +31 -4
- package/src/plugins/defaults/memory-v3-shadow/__tests__/selection-log-store.test.ts +77 -2
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +1 -0
- package/src/plugins/defaults/memory-v3-shadow/injector.ts +7 -10
- package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +144 -11
- package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +32 -20
- package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +56 -3
- package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +23 -2
- package/src/plugins/defaults/surface-completion-nudge/hooks/post-model-call.ts +276 -0
- package/src/plugins/defaults/surface-completion-nudge/hooks/stop.ts +22 -0
- package/src/plugins/defaults/surface-completion-nudge/nudge-state-store.ts +46 -0
- package/src/plugins/defaults/surface-completion-nudge/package.json +14 -0
- package/src/plugins/defaults/task-progress-nudge/hooks/post-tool-use.ts +3 -13
- package/src/plugins/defaults/title-generate/hooks/stop.ts +56 -21
- package/src/prompts/persona-resolver.ts +14 -4
- package/src/prompts/templates/system-sections.ts +7 -2
- package/src/providers/__tests__/count-tokens-forwarding.test.ts +98 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +6 -0
- package/src/providers/__tests__/provider-secret-catalog.test.ts +1 -0
- package/src/providers/__tests__/retry-callsite.test.ts +176 -0
- package/src/providers/anthropic/client.ts +230 -175
- package/src/providers/atlascloud/client.ts +85 -0
- package/src/providers/call-site-routing.ts +10 -0
- package/src/providers/fetch-provider-catalog.ts +85 -0
- package/src/providers/gemini/client.ts +43 -0
- package/src/providers/inference/adapter-factory.ts +3 -0
- package/src/providers/model-catalog.ts +58 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +33 -0
- package/src/providers/openai/chat-completions-provider.ts +7 -0
- package/src/providers/openai/responses-provider.ts +10 -0
- package/src/providers/provider-send-message.ts +11 -3
- package/src/providers/ratelimit.ts +9 -0
- package/src/providers/retry.ts +62 -12
- package/src/providers/search-provider-catalog.ts +10 -0
- package/src/providers/types.ts +16 -0
- package/src/providers/usage-tracking.ts +7 -0
- package/src/providers/weak-open-model.ts +22 -0
- package/src/runtime/AGENTS.md +0 -1
- package/src/runtime/__tests__/agent-wake.test.ts +227 -0
- package/src/runtime/__tests__/client-health.test.ts +44 -0
- package/src/runtime/access-request-helper.ts +21 -53
- package/src/runtime/actor-trust-resolver.ts +59 -63
- package/src/runtime/agent-wake.ts +71 -0
- package/src/runtime/assistant-event-hub.ts +18 -4
- package/src/runtime/auth/__tests__/route-policy.test.ts +12 -0
- package/src/runtime/auth/require-bound-guardian.ts +1 -4
- package/src/runtime/btw-sidechain.ts +3 -6
- package/src/runtime/capabilities.test.ts +120 -0
- package/src/runtime/capabilities.ts +197 -0
- package/src/runtime/channel-approval-types.ts +22 -45
- package/src/runtime/channel-invite-transports/telegram.ts +4 -4
- package/src/runtime/channel-retry-sweep.ts +1 -0
- package/src/runtime/channel-verification-service.ts +3 -3
- package/src/runtime/client-health.ts +26 -0
- package/src/runtime/confirmation-request-guardian-bridge.ts +38 -29
- package/src/runtime/effective-capabilities.test.ts +128 -0
- package/src/runtime/effective-capabilities.ts +84 -0
- package/src/runtime/guardian-reply-router.ts +106 -21
- package/src/runtime/invite-redemption-service.ts +9 -25
- package/src/runtime/migrations/__tests__/vbundle-builder-fd-leak.test.ts +126 -0
- package/src/runtime/migrations/vbundle-builder.ts +49 -20
- package/src/runtime/pending-interactions.ts +35 -0
- package/src/runtime/routes/__tests__/client-routes.test.ts +13 -0
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +67 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +383 -1
- package/src/runtime/routes/app-routes.ts +1 -1
- package/src/runtime/routes/approval-routes.ts +40 -9
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +2 -2
- package/src/runtime/routes/assets/vellum-design-system.css +1959 -0
- package/src/runtime/routes/browser-tabs-routes.ts +9 -0
- package/src/runtime/routes/btw-routes.ts +1 -27
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +17 -8
- package/src/runtime/routes/client-routes.ts +10 -0
- package/src/runtime/routes/contact-routes.ts +31 -8
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-management-routes.ts +80 -1
- package/src/runtime/routes/conversation-query-routes.ts +68 -22
- package/src/runtime/routes/conversation-routes.ts +39 -14
- package/src/runtime/routes/credential-routes.ts +40 -16
- package/src/runtime/routes/empty-state-greeting-cache.ts +1 -2
- package/src/runtime/routes/events-routes.ts +1 -3
- package/src/runtime/routes/guardian-approval-interception.ts +14 -73
- package/src/runtime/routes/guardian-approval-prompt.ts +22 -4
- package/src/runtime/routes/home-feed-routes.ts +8 -3
- package/src/runtime/routes/identity-routes.ts +1 -296
- package/src/runtime/routes/inbound-message-handler.ts +214 -228
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +89 -7
- package/src/runtime/routes/inbound-stages/admission-policy.test.ts +154 -0
- package/src/runtime/routes/inbound-stages/admission-policy.ts +140 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +3 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +11 -6
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +1 -2
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +1 -2
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +7 -7
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +47 -28
- package/src/runtime/routes/inbound-stages/reaction-intercept.ts +358 -0
- package/src/runtime/routes/index.ts +2 -0
- package/src/runtime/routes/integrations/slack/__tests__/channel.test.ts +8 -0
- package/src/runtime/routes/integrations/slack/channel.ts +36 -0
- package/src/runtime/routes/internal-telemetry-routes.ts +1 -1
- package/src/runtime/routes/mcp-auth-routes.ts +233 -41
- package/src/runtime/routes/memory-eval-routes.ts +87 -0
- package/src/runtime/routes/notification-routes.ts +122 -133
- package/src/runtime/routes/platform-routes.ts +2 -2
- package/src/runtime/routes/plugins-routes.ts +366 -11
- package/src/runtime/routes/schedule-routes.ts +0 -22
- package/src/runtime/routes/secret-routes.ts +15 -0
- package/src/runtime/routes/surface-action-routes.ts +2 -1
- package/src/runtime/routes/tool-call-question-enrichment.test.ts +146 -0
- package/src/runtime/routes/tool-call-question-enrichment.ts +66 -0
- package/src/runtime/routes/workflow-routes.test.ts +229 -44
- package/src/runtime/routes/workflow-routes.ts +131 -29
- package/src/runtime/routes/workspace-greetings.ts +55 -0
- package/src/runtime/sync/resource-sync-events.ts +1 -11
- package/src/runtime/tool-grant-request-helper.ts +18 -16
- package/src/runtime/trust-context-resolver.ts +8 -5
- package/src/schedule/inference-profile.ts +2 -14
- package/src/schedule/schedule-store.ts +1 -1
- package/src/schedule/scheduler-types.ts +5 -1
- package/src/security/__tests__/provider-key-env-fallback.test.ts +6 -0
- package/src/security/secret-patterns.ts +3 -0
- package/src/subagent/manager.ts +17 -4
- package/src/subagent/types.ts +6 -0
- package/src/telemetry/trace-collection-policy.test.ts +28 -0
- package/src/telemetry/trace-collection-policy.ts +30 -0
- package/src/telemetry/types.ts +89 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +586 -36
- package/src/telemetry/usage-telemetry-reporter.ts +148 -41
- package/src/tools/AGENTS.md +3 -3
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +31 -0
- package/src/tools/browser/browser-execution.ts +30 -19
- package/src/tools/document/document-tool.ts +30 -6
- package/src/tools/executor.ts +5 -3
- package/src/tools/host-terminal/host-shell.ts +5 -4
- package/src/tools/memory/register.ts +2 -2
- package/src/tools/network/__tests__/web-fetch-firecrawl.test.ts +360 -0
- package/src/tools/network/__tests__/web-search.test.ts +143 -0
- package/src/tools/network/web-fetch.ts +372 -1
- package/src/tools/network/web-search-error.ts +1 -1
- package/src/tools/network/web-search.ts +213 -10
- package/src/tools/permission-checker.ts +4 -3
- package/src/tools/registry.ts +20 -0
- package/src/tools/schedule/create.ts +7 -12
- package/src/tools/schedule/update.ts +4 -11
- package/src/tools/shared/filesystem/path-policy.ts +39 -13
- package/src/tools/side-effects.ts +2 -17
- package/src/tools/skills/execute.ts +99 -2
- package/src/tools/skills/load.ts +43 -2
- package/src/tools/subagent/spawn.ts +64 -15
- package/src/tools/terminal/shell.ts +10 -4
- package/src/tools/tool-approval-handler.ts +18 -13
- package/src/tools/tool-manifest.ts +0 -2
- package/src/tools/types.ts +10 -0
- package/src/tools/ui-surface/definitions.ts +64 -3
- package/src/tools/verification-control-plane-policy.ts +3 -1
- package/src/tools/workflows/run-workflow.test.ts +8 -18
- package/src/tools/workflows/run-workflow.ts +1 -0
- package/src/util/disk-usage.ts +78 -23
- package/src/util/logs-db-path.ts +22 -0
- package/src/util/platform.ts +10 -3
- package/src/watcher/telemetry.ts +2 -2
- package/src/workflows/capabilities.ts +2 -3
- package/src/workflows/engine.test.ts +175 -1
- package/src/workflows/engine.ts +82 -0
- package/src/workflows/journal-store.test.ts +70 -0
- package/src/workflows/journal-store.ts +18 -3
- package/src/workflows/run-manager.test.ts +171 -28
- package/src/workflows/run-manager.ts +66 -24
- package/src/workspace/migrations/105-enable-memory-v3-live-for-new-workspaces.ts +63 -0
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +47 -0
- package/src/workspace/migrations/107-drop-send-diagnostics.ts +47 -0
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +129 -0
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +0 -98
- package/src/__tests__/credential-security-e2e.test.ts +0 -362
- package/src/__tests__/credential-vault-unit.test.ts +0 -1528
- package/src/__tests__/credential-vault.test.ts +0 -1706
- package/src/__tests__/identity-intro-cache.test.ts +0 -315
- package/src/__tests__/secret-onetime-send.test.ts +0 -182
- package/src/cli/commands/__tests__/task.test.ts +0 -914
- package/src/cli/commands/task.ts +0 -771
- package/src/config/bundled-skills/personal-page/SKILL.md +0 -57
- package/src/config/bundled-skills/personal-page/TOOLS.json +0 -27
- package/src/config/bundled-skills/personal-page/tools/app-refresh.ts +0 -17
- package/src/config/preloaded-apps/personal-page/src/components/About.tsx +0 -22
- package/src/config/preloaded-apps/personal-page/src/components/App.tsx +0 -16
- package/src/config/preloaded-apps/personal-page/src/components/Features.tsx +0 -77
- package/src/config/preloaded-apps/personal-page/src/components/Hero.tsx +0 -57
- package/src/config/preloaded-apps/personal-page/src/components/Pending.tsx +0 -28
- package/src/config/preloaded-apps/personal-page/src/components/animations.tsx +0 -234
- package/src/config/preloaded-apps/personal-page/src/components/icons.tsx +0 -48
- package/src/config/preloaded-apps/personal-page/src/components/media.ts +0 -16
- package/src/config/preloaded-apps/personal-page/src/index.html +0 -20
- package/src/config/preloaded-apps/personal-page/src/main.tsx +0 -7
- package/src/config/preloaded-apps/personal-page/src/profile-data.ts +0 -82
- package/src/config/preloaded-apps/personal-page/src/styles.css +0 -759
- package/src/memory/__tests__/preloaded-apps.test.ts +0 -85
- package/src/memory/preloaded-apps.ts +0 -116
- package/src/notifications/tool-approval-copy.ts +0 -142
- package/src/runtime/routes/approval-prompt-ts-tracker.ts +0 -78
- package/src/runtime/routes/identity-intro-cache.ts +0 -172
- package/src/tools/credentials/vault.ts +0 -712
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect the surfaces an installed plugin contributes to the running assistant,
|
|
3
|
+
* read directly from its on-disk tree.
|
|
4
|
+
*
|
|
5
|
+
* The host discovers a plugin's contributions from fixed directory conventions:
|
|
6
|
+
*
|
|
7
|
+
* - `hooks/<name>.{ts,js}` → a lifecycle hook keyed by the file basename
|
|
8
|
+
* (see the external plugin loader's `loadHooks`).
|
|
9
|
+
* - `tools/<name>.{ts,js}` → a tool, also keyed by the file basename
|
|
10
|
+
* (see the external plugin loader's tool walk).
|
|
11
|
+
* - `skills/<id>/SKILL.md` → a skill owned by the plugin (see the skills
|
|
12
|
+
* catalog's `discoverPluginResidentSkills`).
|
|
13
|
+
*
|
|
14
|
+
* This module re-derives those same sets so `plugins inspect` can report exactly
|
|
15
|
+
* what a plugin contributes. Detection is intentionally a self-contained walk of
|
|
16
|
+
* the install tree — `cli/lib` does not reach into the daemon-internal loader or
|
|
17
|
+
* skills catalog — but it mirrors their conventions so inspect agrees with what
|
|
18
|
+
* the runtime actually loads.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
22
|
+
import { join } from "node:path";
|
|
23
|
+
|
|
24
|
+
/** The surfaces an installed plugin contributes, each sorted and de-duplicated. */
|
|
25
|
+
export interface PluginSurfaces {
|
|
26
|
+
/** Skill ids shipped at `skills/<id>/SKILL.md`. */
|
|
27
|
+
readonly skills: readonly string[];
|
|
28
|
+
/** Lifecycle hook names from `hooks/<name>.{ts,js}` (e.g. `pre-model-call`). */
|
|
29
|
+
readonly hooks: readonly string[];
|
|
30
|
+
/**
|
|
31
|
+
* Registered tool names from `tools/<name>.{ts,js}`. The loader derives a
|
|
32
|
+
* tool's name from its filename via {@link deriveToolName} (e.g.
|
|
33
|
+
* `create-issue.ts` registers as `create_issue`), so the derived form is
|
|
34
|
+
* reported rather than the raw basename. A tool module that overrides its own
|
|
35
|
+
* name via an exported `name` is not reflected here: that would require
|
|
36
|
+
* importing and executing untrusted plugin code, which inspection avoids.
|
|
37
|
+
*/
|
|
38
|
+
readonly tools: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Derive a tool's registered name from its file basename, mirroring the
|
|
43
|
+
* external plugin loader's `deriveToolName`: non-alphanumeric runs collapse to
|
|
44
|
+
* `_`, leading/trailing `_` are trimmed, and an empty result falls back to
|
|
45
|
+
* `tool`. Keeps the inspected tool name aligned with the callable tool name.
|
|
46
|
+
*/
|
|
47
|
+
function deriveToolName(basename: string): string {
|
|
48
|
+
return (
|
|
49
|
+
basename.replace(/[^a-zA-Z0-9]+/g, "_").replace(/^_+|_+$/g, "") || "tool"
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* List the basenames of every `.ts`/`.js` module directly under `dir`,
|
|
55
|
+
* preferring `.js` over `.ts` for the same basename (compiled-binary semantics)
|
|
56
|
+
* and skipping `.d.ts` declaration files. Returns names sorted for a
|
|
57
|
+
* deterministic listing. A missing or non-directory path yields `[]`.
|
|
58
|
+
*
|
|
59
|
+
* Mirrors the external plugin loader's `listSurfaceDir`, the gate it uses to
|
|
60
|
+
* turn a `hooks/`/`tools/` directory into loadable surfaces.
|
|
61
|
+
*/
|
|
62
|
+
function listModuleBasenames(dir: string): string[] {
|
|
63
|
+
if (!existsSync(dir) || !statSync(dir).isDirectory()) return [];
|
|
64
|
+
const bases = new Set<string>();
|
|
65
|
+
for (const entry of readdirSync(dir)) {
|
|
66
|
+
if (entry.endsWith(".d.ts")) continue;
|
|
67
|
+
if (!entry.endsWith(".ts") && !entry.endsWith(".js")) continue;
|
|
68
|
+
bases.add(entry.slice(0, -3));
|
|
69
|
+
}
|
|
70
|
+
return [...bases].sort();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* List the skill ids a plugin ships: each subdirectory of `skills/` that
|
|
75
|
+
* contains a `SKILL.md`. Mirrors the skills catalog's plugin-resident skill
|
|
76
|
+
* discovery so inspect reports the same set the runtime would surface.
|
|
77
|
+
*/
|
|
78
|
+
function listSkillIds(skillsDir: string): string[] {
|
|
79
|
+
if (!existsSync(skillsDir) || !statSync(skillsDir).isDirectory()) return [];
|
|
80
|
+
const ids: string[] = [];
|
|
81
|
+
for (const entry of readdirSync(skillsDir, { withFileTypes: true })) {
|
|
82
|
+
if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;
|
|
83
|
+
if (existsSync(join(skillsDir, entry.name, "SKILL.md"))) {
|
|
84
|
+
ids.push(entry.name);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return ids.sort();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Detect the {@link PluginSurfaces} an installed plugin contributes by walking
|
|
92
|
+
* its install tree at `pluginDir`. Surface types with no contributions come
|
|
93
|
+
* back as empty arrays; callers omit empty types from the rendered output.
|
|
94
|
+
*/
|
|
95
|
+
export function detectPluginSurfaces(pluginDir: string): PluginSurfaces {
|
|
96
|
+
const toolNames = listModuleBasenames(join(pluginDir, "tools")).map(
|
|
97
|
+
deriveToolName,
|
|
98
|
+
);
|
|
99
|
+
return {
|
|
100
|
+
skills: listSkillIds(join(pluginDir, "skills")),
|
|
101
|
+
hooks: listModuleBasenames(join(pluginDir, "hooks")),
|
|
102
|
+
tools: [...new Set(toolNames)].sort(),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
@@ -10,14 +10,17 @@
|
|
|
10
10
|
* This is deliberately a distinct operation from install: `install` is
|
|
11
11
|
* first-time materialization (and errors on an existing install unless
|
|
12
12
|
* `--force` is passed), whereas `upgrade` moves an existing install forward.
|
|
13
|
-
* Mechanically the move is a forced re-install at the current pin, which the
|
|
14
|
-
* underlying {@link ./install-from-github.installPlugin} performs atomically —
|
|
15
|
-
* the previously installed copy is preserved until the fetch succeeds.
|
|
16
13
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
14
|
+
* How local edits are reconciled with the pin is controlled by the
|
|
15
|
+
* {@link PluginUpgradeStrategy}. `overwrite` (the default) moves via a forced
|
|
16
|
+
* re-install at the current pin — the underlying
|
|
17
|
+
* {@link ./install-from-github.installPlugin} performs that atomically, and the
|
|
18
|
+
* previously installed copy (including any local edits) is replaced wholesale.
|
|
19
|
+
* `ours`/`theirs`/`assistant` instead three-way merge the on-disk tree and the
|
|
20
|
+
* pin against the re-materialized install commit so non-conflicting local edits
|
|
21
|
+
* survive; conflicting hunks resolve toward the local edit (`ours`) or the pin
|
|
22
|
+
* (`theirs`), while `assistant` writes git conflict markers into the file and
|
|
23
|
+
* reports the conflicted paths for the assistant to resolve.
|
|
21
24
|
*
|
|
22
25
|
* Designed for direct programmatic use with injected dependencies, mirroring
|
|
23
26
|
* the sibling plugin libraries. The CLI command `assistant plugins upgrade
|
|
@@ -25,24 +28,66 @@
|
|
|
25
28
|
* result.
|
|
26
29
|
*/
|
|
27
30
|
|
|
28
|
-
import {
|
|
31
|
+
import { existsSync, mkdirSync, mkdtempSync, rmSync } from "node:fs";
|
|
32
|
+
import { tmpdir } from "node:os";
|
|
33
|
+
import { dirname, join } from "node:path";
|
|
29
34
|
|
|
30
35
|
import { getWorkspacePluginsDir } from "../../util/platform.js";
|
|
31
36
|
import {
|
|
32
37
|
inspectPlugin,
|
|
33
38
|
type PluginInspection,
|
|
34
39
|
PluginInspectNotFoundError,
|
|
40
|
+
type PluginLocalInfo,
|
|
41
|
+
type PluginRemoteInfo,
|
|
35
42
|
} from "./inspect-plugin.js";
|
|
36
43
|
import {
|
|
44
|
+
DEFAULT_PLUGIN_REF,
|
|
37
45
|
type FetchLike,
|
|
46
|
+
finalizeStagedInstall,
|
|
38
47
|
type GitRunner,
|
|
48
|
+
INSTALL_META_FILENAME,
|
|
39
49
|
installPlugin,
|
|
50
|
+
materializePluginTree,
|
|
51
|
+
type PluginFetchSource,
|
|
52
|
+
PluginNotFoundError,
|
|
40
53
|
PluginSourceUnavailableError,
|
|
41
54
|
type PostinstallRunner,
|
|
55
|
+
readInstallMeta,
|
|
42
56
|
sanitizePluginName,
|
|
43
57
|
} from "./install-from-github.js";
|
|
58
|
+
import { type ConflictLabels, mergePluginTree } from "./merge-plugin-tree.js";
|
|
59
|
+
import { computeFingerprint, fingerprintsEqual } from "./plugin-fingerprint.js";
|
|
44
60
|
import { PluginNotInstalledError } from "./uninstall-plugin.js";
|
|
45
61
|
|
|
62
|
+
/**
|
|
63
|
+
* How local edits to an installed plugin are reconciled with the marketplace
|
|
64
|
+
* pin during an upgrade.
|
|
65
|
+
*
|
|
66
|
+
* - `overwrite` (default) — discard all local edits and re-install the pin
|
|
67
|
+
* wholesale. Matches the historical upgrade behavior.
|
|
68
|
+
* - `ours` — three-way merge; conflicting hunks resolve toward the local edit.
|
|
69
|
+
* - `theirs` — three-way merge; conflicting hunks resolve toward the pin.
|
|
70
|
+
* - `assistant` — three-way merge that writes git conflict markers into
|
|
71
|
+
* conflicting files and reports them for the assistant to resolve.
|
|
72
|
+
*/
|
|
73
|
+
export type PluginUpgradeStrategy =
|
|
74
|
+
| "ours"
|
|
75
|
+
| "theirs"
|
|
76
|
+
| "overwrite"
|
|
77
|
+
| "assistant";
|
|
78
|
+
|
|
79
|
+
/** The set of accepted `--strategy` values, for validation and help text. */
|
|
80
|
+
export const PLUGIN_UPGRADE_STRATEGIES: readonly PluginUpgradeStrategy[] = [
|
|
81
|
+
"ours",
|
|
82
|
+
"theirs",
|
|
83
|
+
"overwrite",
|
|
84
|
+
"assistant",
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
/** The strategy applied when a caller omits `--strategy`. */
|
|
88
|
+
export const DEFAULT_PLUGIN_UPGRADE_STRATEGY: PluginUpgradeStrategy =
|
|
89
|
+
"overwrite";
|
|
90
|
+
|
|
46
91
|
/**
|
|
47
92
|
* Outcome of an upgrade attempt.
|
|
48
93
|
*
|
|
@@ -61,6 +106,11 @@ export interface UpgradePluginOptions {
|
|
|
61
106
|
readonly name: string;
|
|
62
107
|
/** Report what would change without modifying the install. */
|
|
63
108
|
readonly dryRun?: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* How to reconcile local edits with the pin. Defaults to
|
|
111
|
+
* {@link DEFAULT_PLUGIN_UPGRADE_STRATEGY}.
|
|
112
|
+
*/
|
|
113
|
+
readonly strategy?: PluginUpgradeStrategy;
|
|
64
114
|
}
|
|
65
115
|
|
|
66
116
|
/** Dependencies injected by the caller. */
|
|
@@ -99,6 +149,21 @@ export interface PluginUpgradeResult {
|
|
|
99
149
|
readonly fileCount: number | null;
|
|
100
150
|
/** Whether this was a dry run (no changes made). */
|
|
101
151
|
readonly dryRun: boolean;
|
|
152
|
+
/** Conflict-resolution strategy the upgrade applied. */
|
|
153
|
+
readonly strategy: PluginUpgradeStrategy;
|
|
154
|
+
/**
|
|
155
|
+
* Paths (relative to {@link PluginUpgradeResult.target}) left for the
|
|
156
|
+
* assistant to resolve under the `assistant` strategy: text files carry git
|
|
157
|
+
* conflict markers, modify/delete divergences keep the surviving content.
|
|
158
|
+
* Always empty for other strategies.
|
|
159
|
+
*/
|
|
160
|
+
readonly conflicts: readonly string[];
|
|
161
|
+
/**
|
|
162
|
+
* Paths of binary files that conflicted under the `assistant` strategy; the
|
|
163
|
+
* local copy was kept since markers cannot be written into binary content.
|
|
164
|
+
* Always empty for other strategies.
|
|
165
|
+
*/
|
|
166
|
+
readonly binaryConflicts: readonly string[];
|
|
102
167
|
/**
|
|
103
168
|
* Whether the installed copy lacked resolvable provenance before the
|
|
104
169
|
* upgrade. Such installs are re-pinned to the current SHA, which also
|
|
@@ -118,6 +183,22 @@ export class PluginNotUpgradableError extends Error {
|
|
|
118
183
|
}
|
|
119
184
|
}
|
|
120
185
|
|
|
186
|
+
/**
|
|
187
|
+
* A merge strategy (`ours`/`theirs`) was requested but the install-time
|
|
188
|
+
* baseline needed for a three-way merge cannot be reconstructed.
|
|
189
|
+
*/
|
|
190
|
+
export class PluginMergeBaselineError extends Error {
|
|
191
|
+
constructor(
|
|
192
|
+
readonly pluginName: string,
|
|
193
|
+
reason: string,
|
|
194
|
+
) {
|
|
195
|
+
super(
|
|
196
|
+
`Plugin "${pluginName}" cannot be merge-upgraded: ${reason}. Use '--strategy overwrite' to take the pin wholesale, or reinstall with 'plugins install ${pluginName} --force'.`,
|
|
197
|
+
);
|
|
198
|
+
this.name = "PluginMergeBaselineError";
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
121
202
|
function pluginTarget(name: string, deps: UpgradePluginDeps): string {
|
|
122
203
|
const dir = deps.workspacePluginsDir ?? getWorkspacePluginsDir();
|
|
123
204
|
return join(dir, name);
|
|
@@ -126,10 +207,19 @@ function pluginTarget(name: string, deps: UpgradePluginDeps): string {
|
|
|
126
207
|
/**
|
|
127
208
|
* Move an installed plugin to the marketplace's current pin.
|
|
128
209
|
*
|
|
210
|
+
* The `strategy` controls how local edits are reconciled with the pin:
|
|
211
|
+
* `overwrite` (default) re-installs the pin wholesale; `ours`/`theirs`/
|
|
212
|
+
* `assistant` do a three-way merge that carries non-conflicting local edits
|
|
213
|
+
* forward, resolving conflicting hunks toward the local edit (`ours`) or the
|
|
214
|
+
* pin (`theirs`), or leaving git conflict markers in the file for the assistant
|
|
215
|
+
* to resolve (`assistant`).
|
|
216
|
+
*
|
|
129
217
|
* Throws {@link PluginNotInstalledError} when no copy is installed,
|
|
130
218
|
* {@link PluginNotUpgradableError} when the install has no marketplace entry to
|
|
131
|
-
* advance to, {@link
|
|
132
|
-
*
|
|
219
|
+
* advance to, {@link PluginMergeBaselineError} when a merge strategy is
|
|
220
|
+
* requested but the install-time baseline cannot be reconstructed,
|
|
221
|
+
* {@link PluginSourceUnavailableError} when the marketplace catalog is
|
|
222
|
+
* temporarily unreachable (a retryable outage, distinct from the permanent
|
|
133
223
|
* no-entry case), and propagates {@link installPlugin}'s errors (e.g. source
|
|
134
224
|
* unavailable, postinstall failure) when the re-install itself fails.
|
|
135
225
|
*/
|
|
@@ -139,6 +229,7 @@ export async function upgradePlugin(
|
|
|
139
229
|
): Promise<PluginUpgradeResult> {
|
|
140
230
|
const name = sanitizePluginName(opts.name);
|
|
141
231
|
const dryRun = opts.dryRun ?? false;
|
|
232
|
+
const strategy = opts.strategy ?? DEFAULT_PLUGIN_UPGRADE_STRATEGY;
|
|
142
233
|
|
|
143
234
|
let inspection: PluginInspection;
|
|
144
235
|
try {
|
|
@@ -199,6 +290,9 @@ export async function upgradePlugin(
|
|
|
199
290
|
target: local.target,
|
|
200
291
|
fileCount: null,
|
|
201
292
|
dryRun,
|
|
293
|
+
strategy,
|
|
294
|
+
conflicts: [],
|
|
295
|
+
binaryConflicts: [],
|
|
202
296
|
provenanceWasUnknown: false,
|
|
203
297
|
};
|
|
204
298
|
}
|
|
@@ -214,10 +308,37 @@ export async function upgradePlugin(
|
|
|
214
308
|
target: local.target,
|
|
215
309
|
fileCount: null,
|
|
216
310
|
dryRun: true,
|
|
311
|
+
strategy,
|
|
312
|
+
conflicts: [],
|
|
313
|
+
binaryConflicts: [],
|
|
217
314
|
provenanceWasUnknown,
|
|
218
315
|
};
|
|
219
316
|
}
|
|
220
317
|
|
|
318
|
+
// `ours`/`theirs`/`assistant` carry local edits forward via a three-way
|
|
319
|
+
// merge; the default `overwrite` discards them and re-installs the pin
|
|
320
|
+
// wholesale.
|
|
321
|
+
if (
|
|
322
|
+
strategy === "ours" ||
|
|
323
|
+
strategy === "theirs" ||
|
|
324
|
+
strategy === "assistant"
|
|
325
|
+
) {
|
|
326
|
+
return mergeUpgrade(
|
|
327
|
+
{
|
|
328
|
+
name,
|
|
329
|
+
strategy,
|
|
330
|
+
local,
|
|
331
|
+
remote,
|
|
332
|
+
fromCommit,
|
|
333
|
+
fromTimestamp,
|
|
334
|
+
toCommit,
|
|
335
|
+
toTimestamp,
|
|
336
|
+
provenanceWasUnknown,
|
|
337
|
+
},
|
|
338
|
+
deps,
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
|
|
221
342
|
const result = await installPlugin(
|
|
222
343
|
{ name, force: true },
|
|
223
344
|
{
|
|
@@ -238,6 +359,173 @@ export async function upgradePlugin(
|
|
|
238
359
|
target: result.target,
|
|
239
360
|
fileCount: result.fileCount,
|
|
240
361
|
dryRun: false,
|
|
362
|
+
strategy,
|
|
363
|
+
conflicts: [],
|
|
364
|
+
binaryConflicts: [],
|
|
241
365
|
provenanceWasUnknown,
|
|
242
366
|
};
|
|
243
367
|
}
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Carry local edits forward by three-way merging the on-disk install (`ours`)
|
|
371
|
+
* and the marketplace pin (`theirs`) against the re-materialized install commit
|
|
372
|
+
* (`base`), then atomically swapping the merged tree into place pinned at the
|
|
373
|
+
* new commit. Conflicting hunks resolve toward `ours` or `theirs` per the
|
|
374
|
+
* strategy, or are left as git conflict markers under `assistant`;
|
|
375
|
+
* non-conflicting edits from both sides survive.
|
|
376
|
+
*/
|
|
377
|
+
async function mergeUpgrade(
|
|
378
|
+
ctx: {
|
|
379
|
+
readonly name: string;
|
|
380
|
+
readonly strategy: "ours" | "theirs" | "assistant";
|
|
381
|
+
readonly local: PluginLocalInfo;
|
|
382
|
+
readonly remote: PluginRemoteInfo;
|
|
383
|
+
readonly fromCommit: string | null;
|
|
384
|
+
readonly fromTimestamp: string | null;
|
|
385
|
+
readonly toCommit: string;
|
|
386
|
+
readonly toTimestamp: string | null;
|
|
387
|
+
readonly provenanceWasUnknown: boolean;
|
|
388
|
+
},
|
|
389
|
+
deps: UpgradePluginDeps,
|
|
390
|
+
): Promise<PluginUpgradeResult> {
|
|
391
|
+
const { name, strategy, local, remote } = ctx;
|
|
392
|
+
|
|
393
|
+
// Marker labels name each side by its commit so the assistant can tell the
|
|
394
|
+
// local edit from the incoming pin when resolving.
|
|
395
|
+
const shortSha = (sha: string | null): string =>
|
|
396
|
+
sha ? sha.slice(0, 7) : "unknown";
|
|
397
|
+
const conflictLabels: ConflictLabels = {
|
|
398
|
+
ours: `local edits (was ${shortSha(ctx.fromCommit)})`,
|
|
399
|
+
base: `install baseline ${shortSha(ctx.fromCommit)}`,
|
|
400
|
+
theirs: `upgrade pin ${shortSha(ctx.toCommit)}`,
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
const meta = readInstallMeta(local.target);
|
|
404
|
+
if (!meta || !meta.commit || !meta.fingerprint) {
|
|
405
|
+
throw new PluginMergeBaselineError(
|
|
406
|
+
name,
|
|
407
|
+
"no install commit or fingerprint was recorded (an older or manually-copied install)",
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
const recorded = meta.fingerprint;
|
|
411
|
+
|
|
412
|
+
const baseSource: PluginFetchSource = {
|
|
413
|
+
owner: meta.source.owner,
|
|
414
|
+
repo: meta.source.repo,
|
|
415
|
+
rootPath: meta.source.path ?? "",
|
|
416
|
+
ref: meta.commit,
|
|
417
|
+
};
|
|
418
|
+
const [remoteOwner, remoteRepo] = remote.repo.split("/");
|
|
419
|
+
const theirsSource: PluginFetchSource = {
|
|
420
|
+
owner: remoteOwner ?? "",
|
|
421
|
+
repo: remoteRepo ?? "",
|
|
422
|
+
rootPath: remote.path,
|
|
423
|
+
ref: remote.commit,
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
const pluginsDir = deps.workspacePluginsDir ?? getWorkspacePluginsDir();
|
|
427
|
+
const baseDir = mkdtempSync(join(tmpdir(), `plugin-upgrade-base-${name}-`));
|
|
428
|
+
const theirsDir = mkdtempSync(
|
|
429
|
+
join(tmpdir(), `plugin-upgrade-theirs-${name}-`),
|
|
430
|
+
);
|
|
431
|
+
// Stage outside the served `plugins/` directory and on its filesystem so the
|
|
432
|
+
// final swap is an atomic rename, mirroring `installPlugin`.
|
|
433
|
+
const stagingRoot = join(dirname(pluginsDir), ".plugins-staging");
|
|
434
|
+
mkdirSync(stagingRoot, { recursive: true });
|
|
435
|
+
const stagingDir = join(stagingRoot, `${name}.upgrading.${process.pid}`);
|
|
436
|
+
if (existsSync(stagingDir)) {
|
|
437
|
+
rmSync(stagingDir, { recursive: true, force: true });
|
|
438
|
+
}
|
|
439
|
+
mkdirSync(stagingDir, { recursive: true });
|
|
440
|
+
|
|
441
|
+
try {
|
|
442
|
+
const base = await materializePluginTree(
|
|
443
|
+
{
|
|
444
|
+
source: baseSource,
|
|
445
|
+
name,
|
|
446
|
+
stubRef: DEFAULT_PLUGIN_REF,
|
|
447
|
+
destDir: baseDir,
|
|
448
|
+
},
|
|
449
|
+
deps,
|
|
450
|
+
);
|
|
451
|
+
if (base.fileCount === 0) {
|
|
452
|
+
throw new PluginNotFoundError(
|
|
453
|
+
name,
|
|
454
|
+
baseSource.ref,
|
|
455
|
+
`${baseSource.owner}/${baseSource.repo}`,
|
|
456
|
+
);
|
|
457
|
+
}
|
|
458
|
+
// The merge base must faithfully reproduce what install materialized;
|
|
459
|
+
// otherwise a curated adapter overlay that moved since install would read
|
|
460
|
+
// as base→ours/theirs edits and corrupt the merge. Verify against the
|
|
461
|
+
// recorded fingerprint, exactly as `plugins diff` does.
|
|
462
|
+
const baseFingerprint = computeFingerprint(baseDir, [
|
|
463
|
+
INSTALL_META_FILENAME,
|
|
464
|
+
]);
|
|
465
|
+
if (!fingerprintsEqual(baseFingerprint, recorded)) {
|
|
466
|
+
throw new PluginMergeBaselineError(
|
|
467
|
+
name,
|
|
468
|
+
"the install-time baseline could not be faithfully reconstructed (a curated adapter overlay it was built from has changed since install)",
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const theirs = await materializePluginTree(
|
|
473
|
+
{
|
|
474
|
+
source: theirsSource,
|
|
475
|
+
name,
|
|
476
|
+
stubRef: remote.marketplaceRef,
|
|
477
|
+
destDir: theirsDir,
|
|
478
|
+
},
|
|
479
|
+
deps,
|
|
480
|
+
);
|
|
481
|
+
if (theirs.fileCount === 0) {
|
|
482
|
+
throw new PluginNotFoundError(
|
|
483
|
+
name,
|
|
484
|
+
theirsSource.ref,
|
|
485
|
+
`${theirsSource.owner}/${theirsSource.repo}`,
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
const merge = await mergePluginTree({
|
|
490
|
+
baseDir,
|
|
491
|
+
oursDir: local.target,
|
|
492
|
+
theirsDir,
|
|
493
|
+
destDir: stagingDir,
|
|
494
|
+
strategy,
|
|
495
|
+
conflictLabels,
|
|
496
|
+
});
|
|
497
|
+
|
|
498
|
+
const toCommit = theirs.commit ?? remote.commit;
|
|
499
|
+
const toTimestamp = theirs.committedAt ?? remote.committedAt;
|
|
500
|
+
finalizeStagedInstall(stagingDir, {
|
|
501
|
+
name,
|
|
502
|
+
source: theirsSource,
|
|
503
|
+
ref: theirsSource.ref,
|
|
504
|
+
commit: toCommit,
|
|
505
|
+
committedAt: toTimestamp,
|
|
506
|
+
pluginsDir,
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
return {
|
|
510
|
+
name,
|
|
511
|
+
outcome: "upgraded",
|
|
512
|
+
fromCommit: ctx.fromCommit,
|
|
513
|
+
fromTimestamp: ctx.fromTimestamp,
|
|
514
|
+
toCommit,
|
|
515
|
+
toTimestamp,
|
|
516
|
+
target: join(pluginsDir, name),
|
|
517
|
+
fileCount: merge.fileCount,
|
|
518
|
+
dryRun: false,
|
|
519
|
+
strategy,
|
|
520
|
+
conflicts: merge.conflicts,
|
|
521
|
+
binaryConflicts: merge.binaryConflicts,
|
|
522
|
+
provenanceWasUnknown: ctx.provenanceWasUnknown,
|
|
523
|
+
};
|
|
524
|
+
} catch (err) {
|
|
525
|
+
rmSync(stagingDir, { recursive: true, force: true });
|
|
526
|
+
throw err;
|
|
527
|
+
} finally {
|
|
528
|
+
rmSync(baseDir, { recursive: true, force: true });
|
|
529
|
+
rmSync(theirsDir, { recursive: true, force: true });
|
|
530
|
+
}
|
|
531
|
+
}
|
package/src/cli/program.ts
CHANGED
|
@@ -34,8 +34,7 @@ import { registerImageGenerationCommand } from "./commands/image-generation.js";
|
|
|
34
34
|
import { registerInferenceCommand } from "./commands/inference.js";
|
|
35
35
|
import { registerKeysCommand } from "./commands/keys.js";
|
|
36
36
|
import { registerMcpCommand } from "./commands/mcp.js";
|
|
37
|
-
import {
|
|
38
|
-
import { registerMemoryV3Command } from "./commands/memory-v3.js";
|
|
37
|
+
import { registerMemoryCommand } from "./commands/memory/index.js";
|
|
39
38
|
import { registerNotificationsCommand } from "./commands/notifications.js";
|
|
40
39
|
import { registerOAuthCommand } from "./commands/oauth/index.js";
|
|
41
40
|
import { registerPendingCommand } from "./commands/pending.js";
|
|
@@ -47,7 +46,6 @@ import { registerSequenceCommand } from "./commands/sequence.js";
|
|
|
47
46
|
import { registerSkillsCommand } from "./commands/skills.js";
|
|
48
47
|
import { registerStatusCommand } from "./commands/status.js";
|
|
49
48
|
import { registerSttCommand } from "./commands/stt.js";
|
|
50
|
-
import { registerTaskCommand } from "./commands/task.js";
|
|
51
49
|
import { registerTelemetryCommand } from "./commands/telemetry.js";
|
|
52
50
|
import { registerToolsCommand } from "./commands/tools.js";
|
|
53
51
|
import { registerTrustCommand } from "./commands/trust.js";
|
|
@@ -131,8 +129,7 @@ Examples:
|
|
|
131
129
|
registerInferenceCommand(program);
|
|
132
130
|
registerKeysCommand(program);
|
|
133
131
|
registerMcpCommand(program);
|
|
134
|
-
|
|
135
|
-
registerMemoryV3Command(program);
|
|
132
|
+
registerMemoryCommand(program);
|
|
136
133
|
registerNotificationsCommand(program);
|
|
137
134
|
registerOAuthCommand(program);
|
|
138
135
|
registerPendingCommand(program);
|
|
@@ -146,7 +143,6 @@ Examples:
|
|
|
146
143
|
registerStatusCommand(program);
|
|
147
144
|
registerSkillsCommand(program);
|
|
148
145
|
registerSttCommand(program);
|
|
149
|
-
registerTaskCommand(program);
|
|
150
146
|
registerTelemetryCommand(program);
|
|
151
147
|
registerToolsCommand(program);
|
|
152
148
|
registerTrustCommand(program);
|