@vellumai/assistant 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +38 -56
- package/Dockerfile +2 -0
- package/README.md +3 -4
- package/__tests__/permissions/gateway-threshold-reader.test.ts +88 -142
- package/bun.lock +29 -26
- package/docs/architecture/security.md +38 -16
- package/docs/plugins.md +7 -9
- package/knip.json +2 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +39 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
- package/node_modules/@vellumai/service-contracts/package.json +2 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
- package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +9 -5
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
- package/node_modules/@vellumai/slack-text/bun.lock +24 -0
- package/node_modules/@vellumai/slack-text/package.json +18 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
- package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
- package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
- package/node_modules/@vellumai/twilio-client/package.json +18 -0
- package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
- package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
- package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
- package/openapi.yaml +869 -129
- package/package.json +8 -3
- package/scripts/generate-openapi.ts +16 -111
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
- package/src/__tests__/anthropic-provider.test.ts +56 -13
- package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
- package/src/__tests__/app-bundler.test.ts +170 -1
- package/src/__tests__/app-control-flow.test.ts +374 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
- package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
- package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
- package/src/__tests__/app-conversation-ids.test.ts +151 -0
- package/src/__tests__/app-executors.test.ts +30 -43
- package/src/__tests__/approval-cascade.test.ts +0 -15
- package/src/__tests__/approval-routes-http.test.ts +29 -23
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
- package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
- package/src/__tests__/assistant-event-hub.test.ts +235 -79
- package/src/__tests__/assistant-event.test.ts +10 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +44 -17
- package/src/__tests__/assistant-feature-flags-integration.test.ts +11 -36
- package/src/__tests__/background-shell-host-bash.test.ts +46 -56
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
- package/src/__tests__/btw-routes.test.ts +13 -4
- package/src/__tests__/call-controller.test.ts +50 -2
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/channel-approval-routes.test.ts +10 -296
- package/src/__tests__/channel-approvals.test.ts +25 -17
- package/src/__tests__/channel-guardian.test.ts +100 -146
- package/src/__tests__/channel-readiness-service.test.ts +59 -1
- package/src/__tests__/checker.test.ts +23 -38
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/config-loader-backfill.test.ts +90 -155
- package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
- package/src/__tests__/config-schema-cmd.test.ts +0 -1
- package/src/__tests__/config-schema.test.ts +6 -48
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +14 -2
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contacts-write.test.ts +2 -64
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-memory-source.test.ts +120 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +49 -0
- package/src/__tests__/context-search-workspace-source.test.ts +9 -22
- package/src/__tests__/context-window-manager.test.ts +46 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
- package/src/__tests__/conversation-agent-loop.test.ts +980 -13
- package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
- package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +40 -4
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-process-callsite.test.ts +79 -2
- package/src/__tests__/conversation-queue.test.ts +3 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +7 -161
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -104
- package/src/__tests__/conversation-routes-slash-commands.test.ts +76 -66
- package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
- package/src/__tests__/conversation-slash-commands.test.ts +24 -8
- package/src/__tests__/conversation-slash-queue.test.ts +2 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-starter-routes.test.ts +79 -2
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +317 -0
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
- package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
- package/src/__tests__/conversation-usage.test.ts +253 -3
- package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
- package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
- package/src/__tests__/credential-health-service.test.ts +68 -0
- package/src/__tests__/credential-security-e2e.test.ts +4 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/credentials-cli.test.ts +5 -12
- package/src/__tests__/cu-unified-flow.test.ts +206 -27
- package/src/__tests__/daemon-assistant-events.test.ts +34 -21
- package/src/__tests__/daemon-credential-client.test.ts +102 -17
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/events-client-registration.test.ts +193 -49
- package/src/__tests__/filing-service.test.ts +58 -7
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-grant-minting.test.ts +7 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +30 -11
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -84
- package/src/__tests__/headless-browser-mode.test.ts +4 -9
- package/src/__tests__/headless-browser-navigate.test.ts +21 -20
- package/src/__tests__/heartbeat-service.test.ts +1007 -8
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/host-app-control-proxy.test.ts +602 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +270 -147
- package/src/__tests__/host-bash-routes.test.ts +294 -0
- package/src/__tests__/host-browser-proxy.test.ts +126 -198
- package/src/__tests__/host-browser-routes.test.ts +50 -54
- package/src/__tests__/host-cu-proxy.test.ts +78 -144
- package/src/__tests__/host-cu-routes-targeted.test.ts +300 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +339 -0
- package/src/__tests__/host-file-proxy.test.ts +62 -122
- package/src/__tests__/host-file-read-tool.test.ts +59 -21
- package/src/__tests__/host-file-routes-targeted.test.ts +262 -0
- package/src/__tests__/host-file-write-tool.test.ts +42 -1
- package/src/__tests__/host-proxy-base.test.ts +312 -0
- package/src/__tests__/host-shell-tool.test.ts +53 -70
- package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +583 -0
- package/src/__tests__/host-transfer-proxy.test.ts +145 -56
- package/src/__tests__/host-transfer-routes-targeted.test.ts +447 -0
- package/src/__tests__/http-user-message-parity.test.ts +1 -6
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/injector-chain.test.ts +10 -5
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -67
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -13
- package/src/__tests__/install-skill-routing.test.ts +1 -13
- package/src/__tests__/integration-status.test.ts +85 -5
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
- package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
- package/src/__tests__/llm-catalog-parity.test.ts +90 -0
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-resolver.test.ts +80 -12
- package/src/__tests__/llm-usage-store.test.ts +269 -4
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/managed-profile-guard.test.ts +225 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -11
- package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
- package/src/__tests__/migration-export-http.test.ts +33 -26
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
- package/src/__tests__/migration-import-commit-http.test.ts +172 -21
- package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
- package/src/__tests__/migration-import-from-url.test.ts +20 -6
- package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
- package/src/__tests__/migration-parity-persistence.test.ts +62 -25
- package/src/__tests__/migration-transport.test.ts +115 -23
- package/src/__tests__/migration-validate-http.test.ts +105 -80
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/non-member-access-request.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth-store.test.ts +19 -0
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +26 -21
- package/src/__tests__/prechat-onboarding-contract.test.ts +34 -8
- package/src/__tests__/pricing.test.ts +68 -4
- package/src/__tests__/process-message-background-slack.test.ts +333 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/reaction-persistence.test.ts +9 -6
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/recording-handler.test.ts +64 -81
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/relay-server.test.ts +18 -13
- package/src/__tests__/require-fresh-approval.test.ts +13 -23
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +13 -18
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
- package/src/__tests__/search-skills-unified.test.ts +9 -15
- package/src/__tests__/secret-ingress-cli.test.ts +2 -5
- package/src/__tests__/secret-ingress-http.test.ts +1 -4
- package/src/__tests__/secret-onetime-send.test.ts +4 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
- package/src/__tests__/secret-response-routing.test.ts +29 -15
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +12 -24
- package/src/__tests__/settings-routes.test.ts +1 -1
- package/src/__tests__/shell-credential-ref.test.ts +0 -8
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -57
- package/src/__tests__/skill-feature-flags.test.ts +43 -41
- package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
- package/src/__tests__/skill-load-inline-command.test.ts +0 -51
- package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -12
- package/src/__tests__/skill-tool-factory.test.ts +97 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/slack-inbound-verification.test.ts +1 -62
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +80 -83
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +115 -14
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +0 -89
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/thread-backfill.test.ts +945 -31
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -7
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -17
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -8
- package/src/__tests__/tool-executor.test.ts +12 -20
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-trace-listener.test.ts +0 -17
- package/src/__tests__/transfer-progress-screen.test.ts +63 -26
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
- package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/twilio-config.test.ts +3 -16
- package/src/__tests__/twilio-routes.test.ts +3 -5
- package/src/__tests__/twilio-validation.test.ts +93 -0
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cli.test.ts +143 -0
- package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
- package/src/__tests__/usage-routes.test.ts +150 -0
- package/src/__tests__/validation-results-screen.test.ts +39 -16
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +47 -138
- package/src/__tests__/verification-control-plane-policy.test.ts +6 -11
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/voice-session-bridge.test.ts +5 -5
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- package/src/__tests__/workspace-migration-062-drop-memory-v2-edges-json.test.ts +103 -0
- package/src/__tests__/workspace-migration-063-release-notes-dynamic-model-context.test.ts +77 -0
- package/src/__tests__/workspace-migration-064-unwind-main-agent-opus-seed.test.ts +225 -0
- package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +1 -5
- package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/acp/index.ts +0 -15
- package/src/acp/session-manager.ts +37 -34
- package/src/agent/loop.ts +16 -1
- package/src/approvals/AGENTS.md +4 -0
- package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
- package/src/approvals/guardian-request-resolvers.ts +10 -2
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +94 -177
- package/src/backup/paths.ts +2 -15
- package/src/backup/restore.ts +107 -231
- package/src/browser-session/events.ts +0 -9
- package/src/bundler/app-bundler.ts +51 -3
- package/src/calls/call-store.ts +1 -34
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/relay-server.ts +4 -68
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +31 -141
- package/src/calls/twilio-routes.ts +12 -13
- package/src/calls/voice-session-bridge.ts +7 -38
- package/src/channels/types.ts +8 -42
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/cache.test.ts +152 -5
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +18 -28
- package/src/cli/commands/__tests__/trust.test.ts +21 -387
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -1
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +153 -82
- package/src/cli/commands/clients.ts +64 -7
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +304 -76
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +15 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +13 -7
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +320 -53
- package/src/cli/commands/oauth/shared.ts +2 -29
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/status.test.ts +13 -15
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +0 -18
- package/src/cli/commands/skills.ts +77 -35
- package/src/cli/commands/trust.ts +70 -430
- package/src/cli/commands/usage.ts +25 -16
- package/src/cli/lib/daemon-credential-client.ts +115 -19
- package/src/cli/program.ts +4 -0
- package/src/cli.ts +0 -21
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/assistant-feature-flags.ts +67 -10
- package/src/config/bundled-skills/acp/SKILL.md +6 -0
- package/src/config/bundled-skills/acp/TOOLS.json +1 -22
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
- package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
- package/src/config/bundled-skills/app-control/SKILL.md +75 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
- package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
- package/src/config/bundled-skills/document/TOOLS.json +0 -8
- package/src/config/bundled-skills/followups/TOOLS.json +0 -12
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -44
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +19 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
- package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
- package/src/config/bundled-skills/settings/SKILL.md +4 -0
- package/src/config/bundled-skills/settings/TOOLS.json +0 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/subagent/SKILL.md +6 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
- package/src/config/bundled-tool-registry.ts +21 -0
- package/src/config/env-registry.ts +12 -4
- package/src/config/env.ts +22 -26
- package/src/config/feature-flag-registry.json +40 -152
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +58 -22
- package/src/config/loader.ts +76 -102
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schema.ts +2 -158
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +8 -4
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -14
- package/src/config/schemas/heartbeat.ts +63 -0
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/ingress.ts +11 -7
- package/src/config/schemas/llm.ts +34 -11
- package/src/config/schemas/memory-lifecycle.ts +77 -24
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-v2.ts +57 -4
- package/src/config/schemas/platform.ts +6 -0
- package/src/config/schemas/security.ts +1 -42
- package/src/config/schemas/services.ts +7 -21
- package/src/config/schemas/skills.ts +5 -11
- package/src/config/schemas/tts.ts +1 -1
- package/src/config/seed-inference-profiles.ts +117 -0
- package/src/config/skills.ts +0 -90
- package/src/config/types.ts +3 -6
- package/src/contacts/contact-store.ts +0 -47
- package/src/contacts/contacts-write.ts +1 -132
- package/src/context/window-manager.ts +43 -5
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +46 -51
- package/src/credential-health/credential-health-service.ts +21 -16
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +126 -5
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +4 -3
- package/src/daemon/connection-policy.ts +1 -26
- package/src/daemon/conversation-agent-loop-handlers.ts +74 -7
- package/src/daemon/conversation-agent-loop.ts +309 -64
- package/src/daemon/conversation-history.ts +8 -8
- package/src/daemon/conversation-launch.ts +20 -135
- package/src/daemon/conversation-lifecycle.ts +8 -1
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-process.ts +97 -172
- package/src/daemon/conversation-runtime-assembly.ts +219 -76
- package/src/daemon/conversation-slash.ts +47 -5
- package/src/daemon/conversation-store.ts +7 -31
- package/src/daemon/conversation-surfaces.ts +144 -29
- package/src/daemon/conversation-tool-setup.ts +18 -87
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +134 -231
- package/src/daemon/daemon-control.ts +3 -71
- package/src/daemon/daemon-skill-host.ts +8 -11
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +12 -12
- package/src/daemon/handlers/config-ingress.ts +4 -165
- package/src/daemon/handlers/config-model.ts +1 -1
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +11 -190
- package/src/daemon/handlers/recording.ts +26 -158
- package/src/daemon/handlers/shared.ts +27 -72
- package/src/daemon/handlers/skills.ts +42 -93
- package/src/daemon/host-app-control-proxy.ts +293 -0
- package/src/daemon/host-bash-proxy.ts +124 -92
- package/src/daemon/host-browser-proxy.ts +111 -88
- package/src/daemon/host-cu-proxy.ts +100 -104
- package/src/daemon/host-file-proxy.ts +136 -91
- package/src/daemon/host-proxy-base.ts +294 -0
- package/src/daemon/host-proxy-preactivation.ts +82 -0
- package/src/daemon/host-transfer-proxy.ts +303 -147
- package/src/daemon/lifecycle.ts +164 -132
- package/src/daemon/message-protocol.ts +3 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +18 -8
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +5 -0
- package/src/daemon/message-types/host-cu.ts +3 -0
- package/src/daemon/message-types/host-file.ts +5 -0
- package/src/daemon/message-types/host-transfer.ts +4 -0
- package/src/daemon/message-types/messages.ts +10 -9
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/message-types/workspace.ts +1 -1
- package/src/daemon/process-message.ts +119 -239
- package/src/daemon/server.ts +13 -462
- package/src/daemon/shutdown-handlers.ts +2 -5
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +126 -108
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +4 -9
- package/src/events/domain-events.ts +0 -8
- package/src/events/tool-audit-listener.ts +5 -2
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +0 -17
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +13 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +21 -9
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +216 -0
- package/src/heartbeat/heartbeat-run-store.ts +236 -0
- package/src/heartbeat/heartbeat-service.ts +303 -54
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +41 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/feed-writer.ts +1 -2
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +33 -95
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
- package/src/ipc/assistant-server.ts +17 -11
- package/src/ipc/cli-client.ts +32 -1
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
- package/src/ipc/routes/route-adapter.ts +1 -1
- package/src/ipc/routes/trust-rules.test.ts +0 -95
- package/src/ipc/skill-ipc-types.ts +41 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
- package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
- package/src/ipc/skill-routes/events.ts +12 -23
- package/src/ipc/skill-routes/identity.ts +4 -17
- package/src/ipc/skill-routes/index.ts +1 -1
- package/src/ipc/skill-server.ts +6 -39
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/live-voice/protocol.ts +4 -13
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- package/src/mcp/manager.ts +0 -5
- package/src/mcp/mcp-auth-orchestrator.ts +213 -0
- package/src/mcp/mcp-auth-state.ts +133 -0
- package/src/mcp/mcp-oauth-provider.ts +19 -0
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
- package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -0
- package/src/memory/app-git-service.ts +0 -32
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +6 -0
- package/src/memory/auto-analysis-constants.ts +17 -0
- package/src/memory/auto-analysis-guard.ts +5 -15
- package/src/memory/canonical-guardian-store.ts +7 -7
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
- package/src/memory/context-search/agent-protocol.ts +6 -6
- package/src/memory/context-search/agent-runner.ts +32 -7
- package/src/memory/context-search/sources/memory-v2.ts +590 -0
- package/src/memory/context-search/sources/memory.ts +5 -0
- package/src/memory/context-search/sources/pkb.ts +10 -1
- package/src/memory/context-search/sources/workspace.ts +3 -2
- package/src/memory/conversation-crud.ts +30 -5
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +18 -0
- package/src/memory/embedding-backend.ts +12 -42
- package/src/memory/embedding-gemini.ts +0 -2
- package/src/memory/embedding-local.ts +6 -6
- package/src/memory/embedding-ollama.ts +6 -6
- package/src/memory/embedding-openai.ts +6 -6
- package/src/memory/embedding-types.ts +21 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +49 -8
- package/src/memory/graph/conversation-graph-memory.ts +35 -36
- package/src/memory/graph/graph-search.ts +8 -0
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/graph/retriever.ts +28 -0
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/guardian-action-store.ts +0 -83
- package/src/memory/guardian-approvals.ts +0 -48
- package/src/memory/indexer.ts +1 -15
- package/src/memory/job-handlers/conversation-starters.ts +36 -53
- package/src/memory/job-utils.ts +0 -6
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
- package/src/memory/jobs/embed-concept-page.ts +28 -2
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
- package/src/memory/jobs-store.ts +66 -23
- package/src/memory/jobs-worker.ts +114 -79
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +129 -43
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/233-document-conversations.ts +54 -0
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
- package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
- package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
- package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
- package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
- package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
- package/src/memory/migrations/index.ts +19 -0
- package/src/memory/migrations/registry.ts +32 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +50 -20
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/conversations.ts +7 -0
- package/src/memory/schema/infrastructure.ts +40 -0
- package/src/memory/search/semantic.ts +12 -16
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/tool-usage-store.ts +2 -0
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation.test.ts +361 -180
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
- package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +424 -33
- package/src/memory/v2/__tests__/migration.test.ts +64 -36
- package/src/memory/v2/__tests__/page-store.test.ts +191 -8
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/sim.test.ts +166 -6
- package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +152 -0
- package/src/memory/v2/activation.ts +215 -163
- package/src/memory/v2/backfill-jobs.ts +15 -100
- package/src/memory/v2/consolidation-job.ts +17 -17
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +241 -84
- package/src/memory/v2/migration.ts +57 -64
- package/src/memory/v2/now-text.ts +2 -3
- package/src/memory/v2/page-store.ts +168 -31
- package/src/memory/v2/prompts/consolidation.ts +385 -88
- package/src/memory/v2/prompts/sweep.ts +3 -3
- package/src/memory/v2/qdrant.ts +99 -1
- package/src/memory/v2/sim.ts +126 -16
- package/src/memory/v2/skill-qdrant.ts +12 -3
- package/src/memory/v2/skill-store.ts +71 -8
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +63 -0
- package/src/memory/v2/types.ts +10 -20
- package/src/memory/validation.ts +0 -11
- package/src/messaging/draft-store.ts +0 -6
- package/src/messaging/provider-types.ts +8 -0
- package/src/messaging/provider.ts +7 -0
- package/src/messaging/providers/gmail/client.ts +1 -121
- package/src/messaging/providers/gmail/types.ts +0 -49
- package/src/messaging/providers/outlook/client.ts +0 -73
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +226 -0
- package/src/messaging/providers/slack/adapter.ts +123 -52
- package/src/messaging/providers/slack/backfill.test.ts +95 -6
- package/src/messaging/providers/slack/backfill.ts +89 -11
- package/src/messaging/providers/slack/client.ts +10 -124
- package/src/messaging/providers/slack/message-metadata.ts +12 -2
- package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
- package/src/messaging/providers/slack/render-transcript.ts +126 -25
- package/src/messaging/providers/slack/types.ts +1 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/oauth/connect-orchestrator.ts +4 -0
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +8 -16
- package/src/oauth/credential-token-resolver.ts +95 -0
- package/src/oauth/manual-token-connection.ts +26 -34
- package/src/oauth/oauth-store.ts +6 -4
- package/src/outbound-proxy/certs.ts +0 -7
- package/src/outbound-proxy/index.ts +1 -59
- package/src/outbound-proxy/logging.ts +1 -1
- package/src/outbound-proxy/policy.ts +6 -5
- package/src/outbound-proxy/router.ts +2 -1
- package/src/permissions/approval-policy.test.ts +6 -275
- package/src/permissions/approval-policy.ts +0 -51
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.test.ts +0 -1
- package/src/permissions/checker.ts +7 -18
- package/src/permissions/gateway-threshold-reader.ts +6 -1
- package/src/permissions/prompter.ts +43 -3
- package/src/permissions/secret-prompter.ts +25 -48
- package/src/permissions/types.ts +33 -0
- package/src/permissions/workspace-policy.ts +0 -5
- package/src/platform/sync-identity.ts +0 -8
- package/src/plugins/defaults/injectors.ts +69 -2
- package/src/plugins/defaults/overflow-reduce.ts +3 -2
- package/src/plugins/types.ts +8 -0
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/system-prompt.ts +37 -88
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/retry-callsite.test.ts +138 -1
- package/src/providers/anthropic/client.ts +72 -33
- package/src/providers/call-site-routing.ts +42 -3
- package/src/providers/gemini/client.ts +18 -2
- package/src/providers/managed-proxy/context.ts +0 -5
- package/src/providers/model-catalog.ts +105 -19
- package/src/providers/openai/chat-completions-provider.ts +6 -0
- package/src/providers/openai/responses-provider.ts +7 -1
- package/src/providers/provider-send-message.ts +45 -2
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +14 -9
- package/src/providers/retry.ts +96 -8
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/providers/types.ts +13 -0
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +10 -6
- package/src/runtime/__tests__/agent-wake.test.ts +89 -0
- package/src/runtime/agent-wake.ts +39 -2
- package/src/runtime/assistant-event-hub.ts +570 -52
- package/src/runtime/assistant-event.ts +2 -6
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/context.ts +0 -9
- package/src/runtime/auth/middleware.ts +1 -97
- package/src/runtime/auth/route-policy.ts +30 -9
- package/src/runtime/auth/token-service.ts +0 -11
- package/src/runtime/btw-sidechain.ts +2 -3
- package/src/runtime/channel-approvals.ts +6 -2
- package/src/runtime/channel-invite-transport.ts +2 -48
- package/src/runtime/channel-invite-transports/email.ts +1 -1
- package/src/runtime/channel-invite-transports/slack.ts +1 -1
- package/src/runtime/channel-invite-transports/telegram.ts +1 -1
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
- package/src/runtime/channel-invite-types.ts +54 -0
- package/src/runtime/channel-readiness-service.ts +32 -13
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/http-errors.ts +0 -34
- package/src/runtime/http-router.ts +6 -3
- package/src/runtime/http-server.ts +16 -402
- package/src/runtime/http-types.ts +5 -5
- package/src/runtime/interactive-ui.ts +0 -1
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
- package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +71 -27
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +41 -2
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +296 -80
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +421 -0
- package/src/runtime/migrations/migration-transport.ts +49 -16
- package/src/runtime/migrations/migration-wizard.ts +2 -2
- package/src/runtime/migrations/origin-mode.ts +40 -0
- package/src/runtime/migrations/vbundle-builder.ts +457 -136
- package/src/runtime/migrations/vbundle-import-analyzer.ts +13 -11
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +251 -74
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +329 -38
- package/src/runtime/migrations/vbundle-streaming-validator.ts +203 -28
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +328 -41
- package/src/runtime/pending-interactions.ts +48 -13
- package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
- package/src/runtime/routes/__tests__/backup-routes.test.ts +49 -168
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +333 -0
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
- package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/acp-routes.test.ts +0 -3
- package/src/runtime/routes/acp-routes.ts +3 -7
- package/src/runtime/routes/app-management-routes.ts +18 -9
- package/src/runtime/routes/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-routes.ts +55 -14
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/avatar-routes.ts +3 -5
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/browser-routes.ts +1 -15
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +3 -7
- package/src/runtime/routes/channel-route-shared.ts +2 -28
- package/src/runtime/routes/client-routes.ts +46 -12
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/conversation-list-routes.ts +12 -29
- package/src/runtime/routes/conversation-management-routes.ts +14 -51
- package/src/runtime/routes/conversation-query-routes.ts +156 -9
- package/src/runtime/routes/conversation-routes.ts +72 -539
- package/src/runtime/routes/conversation-starter-routes.ts +19 -40
- package/src/runtime/routes/document-pdf-renderer.ts +165 -0
- package/src/runtime/routes/documents-routes.ts +83 -18
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +68 -94
- package/src/runtime/routes/filing-routes.ts +18 -1
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- package/src/runtime/routes/guardian-action-routes.ts +4 -9
- package/src/runtime/routes/guardian-approval-interception.ts +2 -8
- package/src/runtime/routes/heartbeat-routes.ts +103 -38
- package/src/runtime/routes/host-app-control-routes.ts +134 -0
- package/src/runtime/routes/host-bash-routes.ts +37 -6
- package/src/runtime/routes/host-browser-routes.ts +96 -25
- package/src/runtime/routes/host-cu-routes.ts +48 -13
- package/src/runtime/routes/host-file-routes.ts +35 -11
- package/src/runtime/routes/host-transfer-routes.ts +73 -37
- package/src/runtime/routes/http-adapter.ts +1 -0
- package/src/runtime/routes/identity-intro-cache.ts +30 -0
- package/src/runtime/routes/identity-routes.ts +93 -49
- package/src/runtime/routes/inbound-message-handler.ts +581 -146
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -95
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
- package/src/runtime/routes/index.ts +12 -0
- package/src/runtime/routes/integrations/slack/channel.ts +0 -24
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +451 -16
- package/src/runtime/routes/migration-routes.ts +284 -31
- package/src/runtime/routes/playground/guard.ts +1 -1
- package/src/runtime/routes/playground/index.ts +0 -2
- package/src/runtime/routes/recording-routes.ts +4 -24
- package/src/runtime/routes/rename-conversation-routes.ts +2 -6
- package/src/runtime/routes/schedule-routes.ts +10 -6
- package/src/runtime/routes/secret-routes.ts +87 -18
- package/src/runtime/routes/settings-routes.ts +29 -28
- package/src/runtime/routes/skills-routes.ts +12 -31
- package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
- package/src/runtime/routes/task-routes.ts +6 -6
- package/src/runtime/routes/trust-rules-routes.ts +3 -94
- package/src/runtime/routes/types.ts +4 -4
- package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
- package/src/runtime/routes/usage-routes.ts +87 -10
- package/src/runtime/routes/user-routes.ts +17 -31
- package/src/runtime/routes/work-items-routes.ts +1 -4
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
- package/src/runtime/services/analyze-conversation.ts +7 -17
- package/src/runtime/services/conversation-serializer.ts +2 -4
- package/src/runtime/verification-outbound-actions.ts +1 -1
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/runtime/verification-templates.ts +4 -7
- package/src/schedule/integration-status.ts +66 -2
- package/src/schedule/recurrence-engine.ts +4 -1
- package/src/schedule/retry-backoff.ts +18 -0
- package/src/schedule/retry-policy.ts +82 -0
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -18
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +63 -38
- package/src/security/oauth-callback-registry.ts +8 -0
- package/src/security/secret-scanner.ts +14 -547
- package/src/security/secure-keys.ts +31 -11
- package/src/security/token-manager.ts +7 -3
- package/src/sequence/analytics.ts +5 -5
- package/src/sequence/engine.ts +1 -1
- package/src/signals/cancel.ts +16 -25
- package/src/signals/conversation-undo.ts +2 -27
- package/src/signals/emit-event.ts +1 -2
- package/src/signals/user-message.ts +108 -22
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/catalog-install.ts +1 -0
- package/src/skills/clawhub.ts +2 -2
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/skills/remote-skill-policy.ts +5 -5
- package/src/skills/skill-file-provider.ts +1 -1
- package/src/skills/skill-file-types.ts +13 -0
- package/src/skills/skillssh-audit-types.ts +28 -0
- package/src/skills/skillssh-registry.ts +8 -21
- package/src/subagent/manager.ts +67 -84
- package/src/tasks/task-store.ts +1 -28
- package/src/telemetry/types.ts +8 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +59 -15
- package/src/telemetry/usage-telemetry-reporter.ts +4 -5
- package/src/tools/acp/spawn.test.ts +1 -2
- package/src/tools/acp/steer.test.ts +1 -2
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/browser/__tests__/browser-status.test.ts +55 -135
- package/src/tools/browser/browser-execution.ts +31 -147
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +145 -70
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +62 -91
- package/src/tools/browser/cdp-client/index.ts +1 -27
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +46 -31
- package/src/tools/host-filesystem/edit.ts +29 -2
- package/src/tools/host-filesystem/read.ts +29 -2
- package/src/tools/host-filesystem/transfer.test.ts +45 -42
- package/src/tools/host-filesystem/transfer.ts +35 -4
- package/src/tools/host-filesystem/write.ts +29 -2
- package/src/tools/host-terminal/host-shell.ts +62 -3
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +66 -1
- package/src/tools/schedule/create.ts +6 -0
- package/src/tools/schedule/list.ts +2 -0
- package/src/tools/schedule/update.ts +10 -0
- package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
- package/src/tools/shared/filesystem/path-policy.ts +25 -1
- package/src/tools/skills/load.ts +0 -32
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/terminal/shell.ts +2 -78
- package/src/tools/tool-approval-handler.ts +1 -5
- package/src/tools/types.ts +16 -39
- package/src/tts/__tests__/provider-catalog.test.ts +2 -2
- package/src/tts/provider-catalog.ts +1 -1
- package/src/usage/actors.ts +2 -1
- package/src/usage/attribution.ts +185 -0
- package/src/usage/pricing.ts +166 -0
- package/src/usage/types.ts +14 -0
- package/src/util/json.ts +13 -0
- package/src/util/logger.ts +3 -3
- package/src/util/pricing.ts +50 -3
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/migrations/003-seed-device-id.ts +1 -1
- package/src/workspace/migrations/006-services-config.ts +8 -5
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +6 -4
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +54 -0
- package/src/workspace/migrations/062-drop-memory-v2-edges-json.ts +27 -0
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +70 -0
- package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +64 -0
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/migrations/utils.ts +21 -0
- package/src/workspace/provider-commit-message-generator.ts +3 -3
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -904
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -296
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -431
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
- package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
- package/src/__tests__/secret-detection-handler.test.ts +0 -67
- package/src/__tests__/secret-scanner-executor.test.ts +0 -450
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/__tests__/twilio-rest.test.ts +0 -34
- package/src/backup/__tests__/backup-key.test.ts +0 -152
- package/src/backup/__tests__/backup-worker.test.ts +0 -754
- package/src/backup/__tests__/offsite-writer.test.ts +0 -641
- package/src/backup/__tests__/stream-crypt.test.ts +0 -228
- package/src/backup/backup-key.ts +0 -137
- package/src/backup/backup-worker.ts +0 -438
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
- package/src/memory/v2/__tests__/edges.test.ts +0 -435
- package/src/memory/v2/edges.ts +0 -217
- package/src/outbound-proxy/config.ts +0 -94
- package/src/outbound-proxy/health.ts +0 -62
- package/src/outbound-proxy/types.ts +0 -150
- package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -271
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -254
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
- package/src/signals/mcp-reload.ts +0 -18
- package/src/tools/secret-detection-handler.ts +0 -269
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
|
@@ -4,21 +4,19 @@
|
|
|
4
4
|
* Operator-facing subcommands for the v2 memory subsystem (concept-page
|
|
5
5
|
* activation model). All commands are thin wrappers over two IPC routes:
|
|
6
6
|
*
|
|
7
|
-
* - `memory_v2/backfill` — enqueues one of
|
|
8
|
-
* memory job queue (`migrate`, `
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* - `memory_v2/backfill` — enqueues one of three mutating jobs against the
|
|
8
|
+
* memory job queue (`migrate`, `reembed`, `activation-recompute`).
|
|
9
|
+
* Returns a `jobId` so the operator can poll status from the regular
|
|
10
|
+
* memory subsystem.
|
|
11
11
|
* - `memory_v2/validate` — read-only structural validation of the v2
|
|
12
|
-
* workspace state
|
|
13
|
-
*
|
|
12
|
+
* workspace state. Returns an aggregate report of orphan outgoing-edge
|
|
13
|
+
* targets, oversized pages, and parse failures.
|
|
14
14
|
*
|
|
15
15
|
* Subcommands:
|
|
16
16
|
*
|
|
17
17
|
* - `migrate [--force]` — one-shot v1->v2 synthesis. Refuses to run a
|
|
18
18
|
* second time unless `--force` is passed (the migration handler writes a
|
|
19
19
|
* sentinel after a successful first run).
|
|
20
|
-
* - `rebuild-edges` — recompute every concept page's `edges:` frontmatter
|
|
21
|
-
* from the canonical `memory/edges.json` index.
|
|
22
20
|
* - `reembed` — fan out an `embed_concept_page` job per page slug to
|
|
23
21
|
* refresh dense + sparse vectors in Qdrant.
|
|
24
22
|
* - `activation` — refresh persisted activation state for every
|
|
@@ -38,6 +36,10 @@ import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
|
38
36
|
import type {
|
|
39
37
|
MemoryV2BackfillOp,
|
|
40
38
|
MemoryV2BackfillResult,
|
|
39
|
+
MemoryV2ExplainSimilarityResult,
|
|
40
|
+
MemoryV2ExplainSimilarityStats,
|
|
41
|
+
MemoryV2FitAnisotropyResult,
|
|
42
|
+
MemoryV2RebuildCorpusStatsResult,
|
|
41
43
|
MemoryV2ReembedSkillsResult,
|
|
42
44
|
MemoryV2ValidateResult,
|
|
43
45
|
} from "../../runtime/routes/memory-v2-routes.js";
|
|
@@ -75,6 +77,74 @@ async function runBackfillOp(
|
|
|
75
77
|
log.info(`Queued ${op} job: ${result.result!.jobId}`);
|
|
76
78
|
}
|
|
77
79
|
|
|
80
|
+
/** Format a number for table output. */
|
|
81
|
+
function fmt(n: number | null, decimals: number): string {
|
|
82
|
+
if (n === null) return "—";
|
|
83
|
+
return n.toFixed(decimals);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Render the per-channel breakdown table + stats for the explain command. */
|
|
87
|
+
function printExplainResult(result: MemoryV2ExplainSimilarityResult): void {
|
|
88
|
+
log.info(
|
|
89
|
+
`dense_weight=${result.config.dense_weight} sparse_weight=${result.config.sparse_weight}`,
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
for (const channel of result.channels) {
|
|
93
|
+
log.info("");
|
|
94
|
+
log.info(`── channel: ${channel.channel} ──`);
|
|
95
|
+
log.info(`text: ${channel.textPreview}`);
|
|
96
|
+
log.info(
|
|
97
|
+
`maxSparse (used for normalization): ${channel.maxSparse.toFixed(4)}`,
|
|
98
|
+
);
|
|
99
|
+
log.info(
|
|
100
|
+
`effective: dw=${channel.effectiveDenseWeight.toFixed(3)} sw=${channel.effectiveSparseWeight.toFixed(3)} (sparseSpread=${channel.sparseSpread.toFixed(3)})`,
|
|
101
|
+
);
|
|
102
|
+
log.info("");
|
|
103
|
+
log.info(
|
|
104
|
+
"slug".padEnd(48) +
|
|
105
|
+
"dense".padStart(10) +
|
|
106
|
+
"sparseRaw".padStart(12) +
|
|
107
|
+
"sparseNorm".padStart(12) +
|
|
108
|
+
"fused".padStart(10),
|
|
109
|
+
);
|
|
110
|
+
log.info("─".repeat(92));
|
|
111
|
+
for (const row of channel.rows) {
|
|
112
|
+
const slugCol =
|
|
113
|
+
row.slug.length > 47 ? `${row.slug.slice(0, 46)}…` : row.slug;
|
|
114
|
+
log.info(
|
|
115
|
+
slugCol.padEnd(48) +
|
|
116
|
+
fmt(row.denseScore, 4).padStart(10) +
|
|
117
|
+
fmt(row.sparseRaw, 4).padStart(12) +
|
|
118
|
+
fmt(row.sparseNorm, 4).padStart(12) +
|
|
119
|
+
fmt(row.fused, 4).padStart(10),
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
log.info("");
|
|
123
|
+
log.info("Stats (per channel):");
|
|
124
|
+
log.info(` ${formatStatLine("dense ", channel.stats.dense)}`);
|
|
125
|
+
log.info(` ${formatStatLine("sparseRaw ", channel.stats.sparseRaw)}`);
|
|
126
|
+
log.info(` ${formatStatLine("sparseNorm ", channel.stats.sparseNorm)}`);
|
|
127
|
+
log.info(` ${formatStatLine("fused ", channel.stats.fused)}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function formatStatLine(
|
|
132
|
+
label: string,
|
|
133
|
+
stats: MemoryV2ExplainSimilarityStats,
|
|
134
|
+
): string {
|
|
135
|
+
if (stats.count === 0) {
|
|
136
|
+
return `${label} n=0`;
|
|
137
|
+
}
|
|
138
|
+
const range = stats.max - stats.min;
|
|
139
|
+
return (
|
|
140
|
+
`${label} n=${String(stats.count).padStart(3)}` +
|
|
141
|
+
` range=[${stats.min.toFixed(4)}, ${stats.max.toFixed(4)}]` +
|
|
142
|
+
` (Δ=${range.toFixed(4)})` +
|
|
143
|
+
` mean=${stats.mean.toFixed(4)}` +
|
|
144
|
+
` std=${stats.stddev.toFixed(4)}`
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
78
148
|
// ---------------------------------------------------------------------------
|
|
79
149
|
// Registration
|
|
80
150
|
// ---------------------------------------------------------------------------
|
|
@@ -101,17 +171,16 @@ export function registerMemoryV2Command(program: Command): void {
|
|
|
101
171
|
"after",
|
|
102
172
|
`
|
|
103
173
|
The v2 subsystem replaces the v1 graph + PKB with prose concept pages,
|
|
104
|
-
|
|
105
|
-
v2 stays gated behind the memory-v2-enabled feature flag —
|
|
106
|
-
remain useful operator tools regardless of whether
|
|
174
|
+
directed edges stored in each page's frontmatter, and activation-based
|
|
175
|
+
retrieval. v2 stays gated behind the memory-v2-enabled feature flag —
|
|
176
|
+
these subcommands remain useful operator tools regardless of whether
|
|
177
|
+
the flag is on.
|
|
107
178
|
|
|
108
179
|
Subcommands fall into three groups:
|
|
109
180
|
|
|
110
181
|
Mutating (return a jobId enqueued on the memory job queue):
|
|
111
182
|
migrate One-shot v1->v2 synthesis. Refuses to overwrite an
|
|
112
183
|
existing v2 state without --force.
|
|
113
|
-
rebuild-edges Regenerate every concept page's edges: frontmatter from
|
|
114
|
-
memory/edges.json.
|
|
115
184
|
reembed Refresh dense + sparse vectors for every concept page.
|
|
116
185
|
activation Refresh persisted activation state for every conversation.
|
|
117
186
|
|
|
@@ -119,17 +188,21 @@ Subcommands fall into three groups:
|
|
|
119
188
|
reembed-skills Re-seed v2 skill entries from the current skill catalog.
|
|
120
189
|
|
|
121
190
|
Read-only:
|
|
122
|
-
validate Print a diagnostic report of orphan
|
|
123
|
-
pages, and parse failures.
|
|
191
|
+
validate Print a diagnostic report of orphan outgoing-edge
|
|
192
|
+
targets, oversized pages, and parse failures.
|
|
193
|
+
|
|
194
|
+
Calibration:
|
|
195
|
+
fit-anisotropy Fit Mu & Viswanath's all-but-the-top correction so
|
|
196
|
+
embedding cosines stop clustering in a narrow band.
|
|
124
197
|
|
|
125
198
|
Examples:
|
|
126
199
|
$ assistant memory v2 validate
|
|
127
200
|
$ assistant memory v2 migrate
|
|
128
201
|
$ assistant memory v2 migrate --force
|
|
129
|
-
$ assistant memory v2 rebuild-edges
|
|
130
202
|
$ assistant memory v2 reembed
|
|
131
203
|
$ assistant memory v2 reembed-skills
|
|
132
|
-
$ assistant memory v2 activation
|
|
204
|
+
$ assistant memory v2 activation
|
|
205
|
+
$ assistant memory v2 fit-anisotropy`,
|
|
133
206
|
);
|
|
134
207
|
|
|
135
208
|
// ── migrate ───────────────────────────────────────────────────────────
|
|
@@ -143,10 +216,10 @@ Examples:
|
|
|
143
216
|
.addHelpText(
|
|
144
217
|
"after",
|
|
145
218
|
`
|
|
146
|
-
Synthesises v2 concept pages from the v1 graph + PKB
|
|
147
|
-
|
|
148
|
-
memory/.v2-state/.migration-complete-v1-to-v2 after a
|
|
149
|
-
refuses to run again unless --force is passed.
|
|
219
|
+
Synthesises v2 concept pages from the v1 graph + PKB, writing each page's
|
|
220
|
+
outgoing directed edges directly into its frontmatter. The migration handler
|
|
221
|
+
stores a sentinel at memory/.v2-state/.migration-complete-v1-to-v2 after a
|
|
222
|
+
successful run and refuses to run again unless --force is passed.
|
|
150
223
|
|
|
151
224
|
The job runs on the background memory worker — this command returns once
|
|
152
225
|
the job is enqueued. Track progress via 'assistant memory status' or the
|
|
@@ -160,30 +233,6 @@ Examples:
|
|
|
160
233
|
await runBackfillOp("migrate", { force: opts.force });
|
|
161
234
|
});
|
|
162
235
|
|
|
163
|
-
// ── rebuild-edges ─────────────────────────────────────────────────────
|
|
164
|
-
|
|
165
|
-
v2.command("rebuild-edges")
|
|
166
|
-
.description(
|
|
167
|
-
"Regenerate every concept page's edges: frontmatter from memory/edges.json",
|
|
168
|
-
)
|
|
169
|
-
.addHelpText(
|
|
170
|
-
"after",
|
|
171
|
-
`
|
|
172
|
-
Walks every concept page and rewrites the edges: frontmatter list to match
|
|
173
|
-
the canonical memory/edges.json index. Useful after a manual edit to
|
|
174
|
-
edges.json or to recover from a partially-written page that drifted from
|
|
175
|
-
the index.
|
|
176
|
-
|
|
177
|
-
The job runs on the background memory worker — this command returns once
|
|
178
|
-
the job is enqueued.
|
|
179
|
-
|
|
180
|
-
Examples:
|
|
181
|
-
$ assistant memory v2 rebuild-edges`,
|
|
182
|
-
)
|
|
183
|
-
.action(async () => {
|
|
184
|
-
await runBackfillOp("rebuild-edges");
|
|
185
|
-
});
|
|
186
|
-
|
|
187
236
|
// ── reembed ───────────────────────────────────────────────────────────
|
|
188
237
|
|
|
189
238
|
v2.command("reembed")
|
|
@@ -269,6 +318,224 @@ Examples:
|
|
|
269
318
|
await runBackfillOp("activation-recompute");
|
|
270
319
|
});
|
|
271
320
|
|
|
321
|
+
// ── explain ───────────────────────────────────────────────────────────
|
|
322
|
+
|
|
323
|
+
v2.command("explain")
|
|
324
|
+
.description(
|
|
325
|
+
"Diagnose dense vs sparse score distributions for a query (read-only)",
|
|
326
|
+
)
|
|
327
|
+
.requiredOption(
|
|
328
|
+
"--text <text>",
|
|
329
|
+
"Query text to embed and score against the concept-page collection (the user channel).",
|
|
330
|
+
)
|
|
331
|
+
.option(
|
|
332
|
+
"--assistant-text <text>",
|
|
333
|
+
"Optional second query text — scored independently as the assistant channel.",
|
|
334
|
+
)
|
|
335
|
+
.option(
|
|
336
|
+
"--now-text <text>",
|
|
337
|
+
"Optional third query text — scored independently as the now channel.",
|
|
338
|
+
)
|
|
339
|
+
.option(
|
|
340
|
+
"--top <n>",
|
|
341
|
+
"Number of top hits to fetch per channel (default 25)",
|
|
342
|
+
"25",
|
|
343
|
+
)
|
|
344
|
+
.addHelpText(
|
|
345
|
+
"after",
|
|
346
|
+
`
|
|
347
|
+
Embeds the supplied text(s), runs the hybrid dense + sparse query against
|
|
348
|
+
the v2 concept-page Qdrant collection, and prints per-slug raw dense, raw
|
|
349
|
+
sparse, normalized sparse, and fused scores plus per-channel summary
|
|
350
|
+
statistics (range, mean, stddev). Use this to identify whether dense
|
|
351
|
+
embedding compression (anisotropy) or per-batch sparse normalization is
|
|
352
|
+
the dominant cause of score compression at the head of the activation
|
|
353
|
+
distribution.
|
|
354
|
+
|
|
355
|
+
Read-only: does not mutate Qdrant, the workspace, or the activation log.
|
|
356
|
+
|
|
357
|
+
Interpretation:
|
|
358
|
+
Dense range < 0.1 AND sparseNorm range > 0.5 → embedding anisotropy
|
|
359
|
+
Dense range > 0.2 AND sparseNorm range < 0.1 → sparse max-normalization
|
|
360
|
+
Both compressed → both contribute
|
|
361
|
+
Both wide → channel mixing is the cause
|
|
362
|
+
|
|
363
|
+
Examples:
|
|
364
|
+
$ assistant memory v2 explain --text "what's bothering me"
|
|
365
|
+
$ assistant memory v2 explain --text "..." --top 50
|
|
366
|
+
$ assistant memory v2 explain --text "..." --assistant-text "..." --now-text "..."`,
|
|
367
|
+
)
|
|
368
|
+
.action(
|
|
369
|
+
async (opts: {
|
|
370
|
+
text: string;
|
|
371
|
+
assistantText?: string;
|
|
372
|
+
nowText?: string;
|
|
373
|
+
top: string;
|
|
374
|
+
}) => {
|
|
375
|
+
const top = Number.parseInt(opts.top, 10);
|
|
376
|
+
if (!Number.isFinite(top) || top < 1) {
|
|
377
|
+
log.error("--top must be a positive integer");
|
|
378
|
+
process.exitCode = 1;
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
const result = await cliIpcCall<MemoryV2ExplainSimilarityResult>(
|
|
383
|
+
"memory_v2_explain_similarity",
|
|
384
|
+
{
|
|
385
|
+
body: {
|
|
386
|
+
userText: opts.text,
|
|
387
|
+
assistantText: opts.assistantText,
|
|
388
|
+
nowText: opts.nowText,
|
|
389
|
+
top,
|
|
390
|
+
},
|
|
391
|
+
},
|
|
392
|
+
);
|
|
393
|
+
|
|
394
|
+
if (!result.ok) {
|
|
395
|
+
log.error(result.error ?? "Failed to run similarity diagnostic");
|
|
396
|
+
process.exitCode = 1;
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
printExplainResult(result.result!);
|
|
401
|
+
},
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
// ── rebuild-corpus-stats ──────────────────────────────────────────────
|
|
405
|
+
|
|
406
|
+
v2.command("rebuild-corpus-stats")
|
|
407
|
+
.description(
|
|
408
|
+
"Rebuild the BM25 corpus stats (DF table + avg doc length) used by the sparse channel",
|
|
409
|
+
)
|
|
410
|
+
.addHelpText(
|
|
411
|
+
"after",
|
|
412
|
+
`
|
|
413
|
+
Walks every concept page on disk and recomputes the document-frequency
|
|
414
|
+
table and average document length used to weight BM25 sparse vectors.
|
|
415
|
+
Atomic swap — the previous stats stay live until the new ones are ready.
|
|
416
|
+
|
|
417
|
+
Run after bulk content imports, after manually editing many pages, or to
|
|
418
|
+
recover from a startup rebuild that errored.
|
|
419
|
+
|
|
420
|
+
Note: this only refreshes the in-memory stats used to *construct* new
|
|
421
|
+
document-side sparse vectors. Existing sparse vectors stored in Qdrant
|
|
422
|
+
are not refreshed by this command — pair with 'assistant memory v2
|
|
423
|
+
reembed' if document-side weights need updating.
|
|
424
|
+
|
|
425
|
+
Examples:
|
|
426
|
+
$ assistant memory v2 rebuild-corpus-stats`,
|
|
427
|
+
)
|
|
428
|
+
.action(async () => {
|
|
429
|
+
const result = await cliIpcCall<MemoryV2RebuildCorpusStatsResult>(
|
|
430
|
+
"memory_v2_rebuild_corpus_stats",
|
|
431
|
+
{ body: {} },
|
|
432
|
+
);
|
|
433
|
+
|
|
434
|
+
if (!result.ok) {
|
|
435
|
+
log.error(result.error ?? "Failed to rebuild corpus stats");
|
|
436
|
+
process.exitCode = 1;
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
const r = result.result!;
|
|
441
|
+
log.info(`Rebuilt BM25 corpus stats: ${r.totalDocs} docs.`);
|
|
442
|
+
log.info(` avg doc length: ${r.avgDl.toFixed(2)} tokens`);
|
|
443
|
+
log.info(` vocabulary buckets: ${r.vocabularyBuckets.toLocaleString()}`);
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
// ── fit-anisotropy ────────────────────────────────────────────────────
|
|
447
|
+
|
|
448
|
+
v2.command("fit-anisotropy")
|
|
449
|
+
.description(
|
|
450
|
+
"Fit the embedding anisotropy correction (Mu & Viswanath 'all-but-the-top')",
|
|
451
|
+
)
|
|
452
|
+
.option(
|
|
453
|
+
"--k <n>",
|
|
454
|
+
"Number of leading principal components to project out (default 1; raise to 2-3 only if PC2/PC3 also explain >5% variance)",
|
|
455
|
+
"1",
|
|
456
|
+
)
|
|
457
|
+
.option(
|
|
458
|
+
"--sample <n>",
|
|
459
|
+
"Maximum stored dense vectors to pull for the fit (default 5000)",
|
|
460
|
+
"5000",
|
|
461
|
+
)
|
|
462
|
+
.addHelpText(
|
|
463
|
+
"after",
|
|
464
|
+
`
|
|
465
|
+
Modern transformer embeddings (Gemini in particular) are anisotropic — every
|
|
466
|
+
vector lives in a narrow cone of the embedding space, which compresses cosine
|
|
467
|
+
similarities into a tight band (typically 0.4-0.7) and lets a few dominant
|
|
468
|
+
directions drown out semantic signal.
|
|
469
|
+
|
|
470
|
+
This command samples stored dense vectors from the concept-page Qdrant
|
|
471
|
+
collection, fits a corpus mean + top-k principal components, and persists the
|
|
472
|
+
calibration. Subsequent embeds and queries apply the correction automatically:
|
|
473
|
+
|
|
474
|
+
vec' = vec - mean
|
|
475
|
+
for each pc_i: vec' = vec' - (vec' · pc_i) pc_i
|
|
476
|
+
vec' = vec' / ||vec'||
|
|
477
|
+
|
|
478
|
+
After fitting, run 'assistant memory v2 reembed' to re-process every stored
|
|
479
|
+
concept page through the new calibration. Until then, queries are corrected
|
|
480
|
+
but stored vectors are not — the score range stays the same and retrieval may
|
|
481
|
+
degrade. The calibration is keyed by (provider, model, dim), so changing
|
|
482
|
+
embedding model invalidates it.
|
|
483
|
+
|
|
484
|
+
Recommended k:
|
|
485
|
+
k=1 safest default. Removes the dominant common direction.
|
|
486
|
+
k=2-3 only when explained-variance ratios show PC2/PC3 each above ~5%.
|
|
487
|
+
k>3 not justified without a labeled retrieval eval set.
|
|
488
|
+
|
|
489
|
+
Examples:
|
|
490
|
+
$ assistant memory v2 fit-anisotropy
|
|
491
|
+
$ assistant memory v2 fit-anisotropy --k 2
|
|
492
|
+
$ assistant memory v2 fit-anisotropy --sample 10000`,
|
|
493
|
+
)
|
|
494
|
+
.action(async (opts: { k: string; sample: string }) => {
|
|
495
|
+
const k = Number.parseInt(opts.k, 10);
|
|
496
|
+
const sample = Number.parseInt(opts.sample, 10);
|
|
497
|
+
if (!Number.isFinite(k) || k < 1) {
|
|
498
|
+
log.error("--k must be a positive integer");
|
|
499
|
+
process.exitCode = 1;
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
if (!Number.isFinite(sample) || sample < 1) {
|
|
503
|
+
log.error("--sample must be a positive integer");
|
|
504
|
+
process.exitCode = 1;
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const result = await cliIpcCall<MemoryV2FitAnisotropyResult>(
|
|
509
|
+
"memory_v2_fit_anisotropy",
|
|
510
|
+
{ body: { k, sample } },
|
|
511
|
+
);
|
|
512
|
+
|
|
513
|
+
if (!result.ok) {
|
|
514
|
+
log.error(result.error ?? "Failed to fit anisotropy calibration");
|
|
515
|
+
process.exitCode = 1;
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
const r = result.result!;
|
|
520
|
+
log.info(
|
|
521
|
+
`Fit anisotropy calibration: ${r.provider}/${r.model} (dim=${r.dim})`,
|
|
522
|
+
);
|
|
523
|
+
log.info(` samples: ${r.sampleCount}`);
|
|
524
|
+
log.info(` total variance: ${r.totalVariance.toFixed(6)}`);
|
|
525
|
+
log.info(" explained variance per component:");
|
|
526
|
+
for (let i = 0; i < r.componentVariance.length; i++) {
|
|
527
|
+
const ratio = (r.explainedVarianceRatio[i] * 100).toFixed(2);
|
|
528
|
+
log.info(
|
|
529
|
+
` PC${i + 1}: ${r.componentVariance[i].toFixed(6)} (${ratio}%)`,
|
|
530
|
+
);
|
|
531
|
+
}
|
|
532
|
+
log.info(` written to: ${r.path}`);
|
|
533
|
+
log.info("");
|
|
534
|
+
log.info(
|
|
535
|
+
"Next step: run 'assistant memory v2 reembed' so every stored concept page is re-written under the new calibration. Until then, query-side correction operates on stored vectors that were embedded without it.",
|
|
536
|
+
);
|
|
537
|
+
});
|
|
538
|
+
|
|
272
539
|
// ── validate ──────────────────────────────────────────────────────────
|
|
273
540
|
|
|
274
541
|
v2.command("validate")
|
|
@@ -276,13 +543,13 @@ Examples:
|
|
|
276
543
|
.addHelpText(
|
|
277
544
|
"after",
|
|
278
545
|
`
|
|
279
|
-
Walks every concept page and
|
|
280
|
-
|
|
546
|
+
Walks every concept page and aggregates outgoing edges from each page's
|
|
547
|
+
frontmatter, returning a diagnostic report of:
|
|
281
548
|
|
|
282
549
|
pageCount Number of concept pages successfully parsed.
|
|
283
|
-
edgeCount
|
|
284
|
-
missingEdgeEndpoints
|
|
285
|
-
concept page
|
|
550
|
+
edgeCount Total number of directed outgoing edges across pages.
|
|
551
|
+
missingEdgeEndpoints Outgoing edges whose target slug has no
|
|
552
|
+
corresponding concept page (orphan targets).
|
|
286
553
|
oversizedPages Pages whose body exceeds memory.v2.max_page_chars
|
|
287
554
|
(a soft cap; consolidation will eventually split).
|
|
288
555
|
parseFailures Pages whose YAML frontmatter or schema validation
|
|
@@ -312,13 +579,13 @@ Examples:
|
|
|
312
579
|
log.info(`Edges: ${report.edgeCount}`);
|
|
313
580
|
|
|
314
581
|
if (report.missingEdgeEndpoints.length === 0) {
|
|
315
|
-
log.info("Missing edge
|
|
582
|
+
log.info("Missing outgoing edge targets: none");
|
|
316
583
|
} else {
|
|
317
584
|
log.info(
|
|
318
|
-
`Missing edge
|
|
585
|
+
`Missing outgoing edge targets: ${report.missingEdgeEndpoints.length}`,
|
|
319
586
|
);
|
|
320
587
|
for (const { from, to } of report.missingEdgeEndpoints) {
|
|
321
|
-
log.info(` ${from}
|
|
588
|
+
log.info(` ${from} -> ${to}`);
|
|
322
589
|
}
|
|
323
590
|
}
|
|
324
591
|
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
getConfig,
|
|
6
|
-
getNestedValue,
|
|
7
|
-
loadRawConfig,
|
|
8
|
-
} from "../../../config/loader.js";
|
|
3
|
+
import { getConfig } from "../../../config/loader.js";
|
|
9
4
|
import {
|
|
10
5
|
getServiceMode,
|
|
11
6
|
type Services,
|
|
@@ -45,13 +40,6 @@ export function getManagedServiceConfigKey(provider: string): string | null {
|
|
|
45
40
|
|
|
46
41
|
/**
|
|
47
42
|
* Determine whether a provider is running in platform-managed mode.
|
|
48
|
-
*
|
|
49
|
-
* When `IS_PLATFORM=true` and the provider supports managed mode, this
|
|
50
|
-
* defaults to `true` unless the user has explicitly set the service mode
|
|
51
|
-
* to `"your-own"` in the raw config file. This lets platform instances
|
|
52
|
-
* use platform-managed OAuth credentials out of the box without requiring
|
|
53
|
-
* a manual `assistant oauth mode <provider> --set managed` step.
|
|
54
|
-
*
|
|
55
43
|
* Returns false if config is unavailable (e.g. in test environments).
|
|
56
44
|
*/
|
|
57
45
|
export function isManagedMode(provider: string): boolean {
|
|
@@ -59,22 +47,7 @@ export function isManagedMode(provider: string): boolean {
|
|
|
59
47
|
if (!managedKey) return false;
|
|
60
48
|
try {
|
|
61
49
|
const services: Services = getConfig().services;
|
|
62
|
-
|
|
63
|
-
if (mode === "managed") return true;
|
|
64
|
-
|
|
65
|
-
// On platform instances, default to managed mode for providers that
|
|
66
|
-
// support it — unless the user explicitly opted into "your-own".
|
|
67
|
-
if (getIsPlatform()) {
|
|
68
|
-
const rawMode = getNestedValue(
|
|
69
|
-
loadRawConfig(),
|
|
70
|
-
`services.${managedKey}.mode`,
|
|
71
|
-
);
|
|
72
|
-
// If the raw config doesn't have an explicit mode entry, the "your-own"
|
|
73
|
-
// value came from the schema default — override it to managed on platform.
|
|
74
|
-
if (rawMode === undefined) return true;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return false;
|
|
50
|
+
return getServiceMode(services, managedKey as keyof Services) === "managed";
|
|
78
51
|
} catch {
|
|
79
52
|
return false;
|
|
80
53
|
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
|
|
3
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
4
|
+
import { log } from "../logger.js";
|
|
5
|
+
|
|
6
|
+
interface PendingInteractionEntry {
|
|
7
|
+
requestId: string;
|
|
8
|
+
conversationId: string;
|
|
9
|
+
kind: string;
|
|
10
|
+
toolName?: string;
|
|
11
|
+
riskLevel?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface PendingInteractionsResponse {
|
|
15
|
+
interactions: PendingInteractionEntry[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function registerPendingCommand(program: Command): void {
|
|
19
|
+
const pending = program
|
|
20
|
+
.command("pending")
|
|
21
|
+
.description(
|
|
22
|
+
"Inspect pending interactions (confirmations, secrets, host proxy requests)",
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
pending
|
|
26
|
+
.command("list")
|
|
27
|
+
.alias("ls")
|
|
28
|
+
.description("List all pending interactions across all conversations")
|
|
29
|
+
.option(
|
|
30
|
+
"--kind <kind>",
|
|
31
|
+
"Filter by kind (confirmation, secret, host_bash, etc.)",
|
|
32
|
+
)
|
|
33
|
+
.option("--conversation <id>", "Filter by conversation ID")
|
|
34
|
+
.option("--json", "Output as JSON")
|
|
35
|
+
.action(
|
|
36
|
+
async (opts: {
|
|
37
|
+
kind?: string;
|
|
38
|
+
conversation?: string;
|
|
39
|
+
json?: boolean;
|
|
40
|
+
}) => {
|
|
41
|
+
try {
|
|
42
|
+
const response =
|
|
43
|
+
await cliIpcCall<PendingInteractionsResponse>(
|
|
44
|
+
"pending_interactions",
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
if (!response.ok || !response.result) {
|
|
48
|
+
log.error(
|
|
49
|
+
`Failed to list pending interactions: ${response.error ?? "unknown error"}`,
|
|
50
|
+
);
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
let interactions = response.result.interactions;
|
|
56
|
+
|
|
57
|
+
if (opts.kind) {
|
|
58
|
+
interactions = interactions.filter(
|
|
59
|
+
(i: PendingInteractionEntry) => i.kind === opts.kind,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
if (opts.conversation) {
|
|
63
|
+
interactions = interactions.filter(
|
|
64
|
+
(i: PendingInteractionEntry) =>
|
|
65
|
+
i.conversationId === opts.conversation,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (opts.json) {
|
|
70
|
+
console.log(JSON.stringify(interactions, null, 2));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (interactions.length === 0) {
|
|
75
|
+
console.log("No pending interactions.");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const kindWidth = Math.max(
|
|
80
|
+
4,
|
|
81
|
+
...interactions.map((i: PendingInteractionEntry) => i.kind.length),
|
|
82
|
+
);
|
|
83
|
+
const header = `${"KIND".padEnd(kindWidth)} ${"REQUEST ID".padEnd(36)} ${"CONVERSATION".padEnd(36)} DETAILS`;
|
|
84
|
+
console.log(header);
|
|
85
|
+
|
|
86
|
+
for (const i of interactions) {
|
|
87
|
+
const details = i.toolName
|
|
88
|
+
? `${i.toolName} (${i.riskLevel ?? "?"})`
|
|
89
|
+
: "";
|
|
90
|
+
console.log(
|
|
91
|
+
`${i.kind.padEnd(kindWidth)} ${i.requestId.padEnd(36)} ${i.conversationId.padEnd(36)} ${details}`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
console.log(`\n${interactions.length} pending interaction(s)`);
|
|
96
|
+
} catch (err) {
|
|
97
|
+
log.error({ err }, "Failed to list pending interactions");
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
);
|
|
102
|
+
}
|
|
@@ -88,13 +88,11 @@ mock.module("../../../../config/loader.js", () => ({
|
|
|
88
88
|
}),
|
|
89
89
|
loadConfig: () => ({}),
|
|
90
90
|
invalidateConfigCache: () => {},
|
|
91
|
-
saveConfig: () => {},
|
|
92
91
|
loadRawConfig: () => ({}),
|
|
93
92
|
saveRawConfig: () => {},
|
|
94
93
|
getNestedValue: () => undefined,
|
|
95
94
|
setNestedValue: () => {},
|
|
96
95
|
applyNestedDefaults: (config: unknown) => config,
|
|
97
|
-
deepMergeMissing: () => false,
|
|
98
96
|
deepMergeOverwrite: () => {},
|
|
99
97
|
mergeDefaultWorkspaceConfig: () => {},
|
|
100
98
|
}));
|
|
@@ -109,13 +109,11 @@ mock.module("../../../../config/loader.js", () => ({
|
|
|
109
109
|
}),
|
|
110
110
|
loadConfig: () => ({}),
|
|
111
111
|
invalidateConfigCache: () => {},
|
|
112
|
-
saveConfig: () => {},
|
|
113
112
|
loadRawConfig: () => ({}),
|
|
114
113
|
saveRawConfig: () => {},
|
|
115
114
|
getNestedValue: () => undefined,
|
|
116
115
|
setNestedValue: () => {},
|
|
117
116
|
applyNestedDefaults: (config: unknown) => config,
|
|
118
|
-
deepMergeMissing: () => false,
|
|
119
117
|
deepMergeOverwrite: () => {},
|
|
120
118
|
mergeDefaultWorkspaceConfig: () => {},
|
|
121
119
|
}));
|