@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
|
@@ -10,11 +10,15 @@
|
|
|
10
10
|
// + c_now · sim(NOW.md, n)
|
|
11
11
|
//
|
|
12
12
|
// A(n, t+1) = [ A_o(n)
|
|
13
|
-
// + k · Σ_{m∈
|
|
14
|
-
// + k² · Σ_{m∈
|
|
15
|
-
// / (1 + k · #
|
|
13
|
+
// + k · Σ_{m∈in1(n)} A_o(m)
|
|
14
|
+
// + k² · Σ_{m∈in2(n)} A_o(m) ]
|
|
15
|
+
// / (1 + k · #in1(n) + k² · #in2(n))
|
|
16
16
|
//
|
|
17
|
-
//
|
|
17
|
+
// Edges are directed: edge A→B means A's activation contributes to B's. The
|
|
18
|
+
// per-target BFS walks *incoming* adjacency, so `in1(n)` is the set of nodes
|
|
19
|
+
// with an edge A→n and `in2(n)` adds another hop in the same direction.
|
|
20
|
+
//
|
|
21
|
+
// Bounded in [0, 1]. Pure sources (no incoming edges within `hops`) reduce to
|
|
18
22
|
// A == A_o because both numerator and denominator collapse to `A_o(n)` and
|
|
19
23
|
// `1`, respectively.
|
|
20
24
|
//
|
|
@@ -28,33 +32,38 @@
|
|
|
28
32
|
// for the next turn and drop below `epsilon` if no longer relevant.
|
|
29
33
|
|
|
30
34
|
import type { AssistantConfig } from "../../config/types.js";
|
|
35
|
+
import { applyCorrectionIfCalibrated } from "../anisotropy.js";
|
|
31
36
|
import {
|
|
32
37
|
embedWithBackend,
|
|
33
38
|
generateSparseEmbedding,
|
|
34
39
|
} from "../embedding-backend.js";
|
|
35
40
|
import { clampUnitInterval } from "../validation.js";
|
|
41
|
+
import type { EdgeIndex } from "./edge-index.js";
|
|
36
42
|
import { hybridQueryConceptPages } from "./qdrant.js";
|
|
37
43
|
import { simBatch, simSkillBatch } from "./sim.js";
|
|
38
|
-
import {
|
|
39
|
-
import type {
|
|
40
|
-
ActivationState,
|
|
41
|
-
EdgesIndex,
|
|
42
|
-
EverInjectedEntry,
|
|
43
|
-
} from "./types.js";
|
|
44
|
+
import type { ActivationState, EverInjectedEntry } from "./types.js";
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* Sentinel passed to Qdrant when `config.memory.v2.ann_candidate_limit` is
|
|
48
|
+
* `null` (unlimited). Qdrant's query API requires an explicit numeric
|
|
49
|
+
* `limit`, so unlimited is represented as a number large enough that any
|
|
50
|
+
* realistic concept-page collection is returned in full.
|
|
51
|
+
*
|
|
52
|
+
* Why not `Number.MAX_SAFE_INTEGER`: Qdrant's sparse-vector `SearchContext`
|
|
53
|
+
* pre-allocates `limit * 16` bytes per query, so passing `MAX_SAFE_INTEGER`
|
|
54
|
+
* triggers a ~144 PB allocation and SIGABRTs the Qdrant process. 1_000_000
|
|
55
|
+
* is ~16 MB of pre-allocation in Qdrant — generous headroom over realistic
|
|
56
|
+
* concept-page counts (low thousands today) while staying well clear of
|
|
57
|
+
* the OOM cliff. Bump explicitly via `ann_candidate_limit` if you ever
|
|
58
|
+
* outgrow it.
|
|
50
59
|
*/
|
|
51
|
-
const
|
|
60
|
+
const UNLIMITED_ANN_CANDIDATE_LIMIT = 1_000_000;
|
|
52
61
|
|
|
53
62
|
// ---------------------------------------------------------------------------
|
|
54
63
|
// Candidate selection
|
|
55
64
|
// ---------------------------------------------------------------------------
|
|
56
65
|
|
|
57
|
-
|
|
66
|
+
interface SelectCandidatesParams {
|
|
58
67
|
/**
|
|
59
68
|
* Prior-turn activation snapshot. Slugs with activation strictly greater
|
|
60
69
|
* than `config.memory.v2.epsilon` are carried forward as candidates so the
|
|
@@ -70,27 +79,41 @@ export interface SelectCandidatesParams {
|
|
|
70
79
|
config: AssistantConfig;
|
|
71
80
|
}
|
|
72
81
|
|
|
82
|
+
interface SelectCandidatesResult {
|
|
83
|
+
/** Union of `fromPrior` and `fromAnn` — the per-turn candidate set. */
|
|
84
|
+
candidates: Set<string>;
|
|
85
|
+
/** Slugs carried forward from `priorState` because their activation > epsilon. */
|
|
86
|
+
fromPrior: Set<string>;
|
|
87
|
+
/** Slugs surfaced by the unrestricted ANN top-50 against the joined turn text. */
|
|
88
|
+
fromAnn: Set<string>;
|
|
89
|
+
}
|
|
90
|
+
|
|
73
91
|
/**
|
|
74
92
|
* Build the per-turn candidate set: the union of slugs in the prior state
|
|
75
93
|
* (above epsilon) and the top-50 ANN hits against the concatenated turn
|
|
76
94
|
* text. The ANN call runs un-restricted (no slug filter) so it can surface
|
|
77
95
|
* pages outside the active set.
|
|
78
96
|
*
|
|
97
|
+
* Returns the union plus the two source sets separately so downstream
|
|
98
|
+
* telemetry can attribute each candidate to `prior_state`, `ann_top50`, or
|
|
99
|
+
* both. A slug present in both sources appears in `fromPrior ∩ fromAnn`.
|
|
100
|
+
*
|
|
79
101
|
* Empty candidate sets are valid and propagate downstream — both
|
|
80
102
|
* `computeOwnActivation` and `spreadActivation` short-circuit on them.
|
|
81
103
|
*/
|
|
82
104
|
export async function selectCandidates(
|
|
83
105
|
params: SelectCandidatesParams,
|
|
84
|
-
): Promise<
|
|
106
|
+
): Promise<SelectCandidatesResult> {
|
|
85
107
|
const { priorState, userText, assistantText, nowText, config } = params;
|
|
86
108
|
|
|
87
|
-
const
|
|
109
|
+
const fromPrior = new Set<string>();
|
|
110
|
+
const fromAnn = new Set<string>();
|
|
88
111
|
|
|
89
112
|
// (1) Carry forward prior-state slugs above epsilon.
|
|
90
113
|
if (priorState) {
|
|
91
114
|
const epsilon = config.memory.v2.epsilon;
|
|
92
115
|
for (const [slug, activation] of Object.entries(priorState.state)) {
|
|
93
|
-
if (activation > epsilon)
|
|
116
|
+
if (activation > epsilon) fromPrior.add(slug);
|
|
94
117
|
}
|
|
95
118
|
}
|
|
96
119
|
|
|
@@ -103,24 +126,28 @@ export async function selectCandidates(
|
|
|
103
126
|
|
|
104
127
|
if (annQueryText.length > 0) {
|
|
105
128
|
const denseResult = await embedWithBackend(config, [annQueryText]);
|
|
106
|
-
const dense =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
sparse,
|
|
111
|
-
ANN_CANDIDATE_LIMIT,
|
|
129
|
+
const dense = await applyCorrectionIfCalibrated(
|
|
130
|
+
denseResult.vectors[0],
|
|
131
|
+
denseResult.provider,
|
|
132
|
+
denseResult.model,
|
|
112
133
|
);
|
|
113
|
-
|
|
134
|
+
const sparse = generateSparseEmbedding(annQueryText);
|
|
135
|
+
const limit =
|
|
136
|
+
config.memory.v2.ann_candidate_limit ?? UNLIMITED_ANN_CANDIDATE_LIMIT;
|
|
137
|
+
const hits = await hybridQueryConceptPages(dense, sparse, limit);
|
|
138
|
+
for (const hit of hits) fromAnn.add(hit.slug);
|
|
114
139
|
}
|
|
115
140
|
|
|
116
|
-
|
|
141
|
+
const candidates = new Set<string>([...fromPrior, ...fromAnn]);
|
|
142
|
+
|
|
143
|
+
return { candidates, fromPrior, fromAnn };
|
|
117
144
|
}
|
|
118
145
|
|
|
119
146
|
// ---------------------------------------------------------------------------
|
|
120
147
|
// Own activation
|
|
121
148
|
// ---------------------------------------------------------------------------
|
|
122
149
|
|
|
123
|
-
|
|
150
|
+
interface ComputeOwnActivationParams {
|
|
124
151
|
candidates: ReadonlySet<string>;
|
|
125
152
|
priorState: ActivationState | null;
|
|
126
153
|
userText: string;
|
|
@@ -129,24 +156,50 @@ export interface ComputeOwnActivationParams {
|
|
|
129
156
|
config: AssistantConfig;
|
|
130
157
|
}
|
|
131
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Per-slug breakdown of the own-activation inputs, captured before any
|
|
161
|
+
* coefficient weighting is applied. Surfaced for telemetry / inspector views
|
|
162
|
+
* so the UI can show how each term contributed to the final value.
|
|
163
|
+
*/
|
|
164
|
+
interface OwnActivationBreakdown {
|
|
165
|
+
/** `d * prev(slug)` — the decayed prior-turn activation contribution. */
|
|
166
|
+
priorContribution: number;
|
|
167
|
+
/** Raw `sim(user, slug)` similarity, before `c_user` weighting. */
|
|
168
|
+
simUser: number;
|
|
169
|
+
/** Raw `sim(assistant, slug)` similarity, before `c_assistant` weighting. */
|
|
170
|
+
simAssistant: number;
|
|
171
|
+
/** Raw `sim(now, slug)` similarity, before `c_now` weighting. */
|
|
172
|
+
simNow: number;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
interface ComputeOwnActivationResult {
|
|
176
|
+
/** Final clamped own-activation value per slug. */
|
|
177
|
+
activation: Map<string, number>;
|
|
178
|
+
/** Per-slug breakdown of the inputs that fed into `activation`. */
|
|
179
|
+
breakdown: Map<string, OwnActivationBreakdown>;
|
|
180
|
+
}
|
|
181
|
+
|
|
132
182
|
/**
|
|
133
183
|
* Apply the own-activation formula
|
|
134
184
|
* A_o(n) = d · prev(n) + c_user · sim_u + c_assistant · sim_a + c_now · sim_n
|
|
135
185
|
* over the candidate set. Returns a sparse map keyed by slug; slugs whose
|
|
136
186
|
* computed value rounds to 0 are still included so callers can see the
|
|
137
|
-
* candidate set explicitly.
|
|
187
|
+
* candidate set explicitly. Also returns a per-slug breakdown of the raw
|
|
188
|
+
* inputs (decayed prior + raw sims) so callers can render contribution
|
|
189
|
+
* diagnostics without re-running the math.
|
|
138
190
|
*
|
|
139
191
|
* The three `simBatch` calls run concurrently — they hit independent named
|
|
140
192
|
* vectors and embed independent query texts.
|
|
141
193
|
*/
|
|
142
194
|
export async function computeOwnActivation(
|
|
143
195
|
params: ComputeOwnActivationParams,
|
|
144
|
-
): Promise<
|
|
196
|
+
): Promise<ComputeOwnActivationResult> {
|
|
145
197
|
const { candidates, priorState, userText, assistantText, nowText, config } =
|
|
146
198
|
params;
|
|
147
199
|
|
|
148
|
-
const
|
|
149
|
-
|
|
200
|
+
const activation = new Map<string, number>();
|
|
201
|
+
const breakdown = new Map<string, OwnActivationBreakdown>();
|
|
202
|
+
if (candidates.size === 0) return { activation, breakdown };
|
|
150
203
|
|
|
151
204
|
const { d, c_user, c_assistant, c_now } = config.memory.v2;
|
|
152
205
|
const slugList = [...candidates];
|
|
@@ -159,86 +212,121 @@ export async function computeOwnActivation(
|
|
|
159
212
|
|
|
160
213
|
for (const slug of slugList) {
|
|
161
214
|
const prev = priorState?.state[slug] ?? 0;
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
215
|
+
const simU = simUser.get(slug) ?? 0;
|
|
216
|
+
const simA = simAssistant.get(slug) ?? 0;
|
|
217
|
+
const simN = simNow.get(slug) ?? 0;
|
|
218
|
+
const value = d * prev + c_user * simU + c_assistant * simA + c_now * simN;
|
|
219
|
+
activation.set(slug, clampUnitInterval(value));
|
|
220
|
+
breakdown.set(slug, {
|
|
221
|
+
priorContribution: d * prev,
|
|
222
|
+
simUser: simU,
|
|
223
|
+
simAssistant: simA,
|
|
224
|
+
simNow: simN,
|
|
225
|
+
});
|
|
168
226
|
}
|
|
169
227
|
|
|
170
|
-
return
|
|
228
|
+
return { activation, breakdown };
|
|
171
229
|
}
|
|
172
230
|
|
|
173
231
|
// ---------------------------------------------------------------------------
|
|
174
232
|
// Spreading activation
|
|
175
233
|
// ---------------------------------------------------------------------------
|
|
176
234
|
|
|
235
|
+
interface SpreadActivationResult {
|
|
236
|
+
/** Final activation value per slug after spreading. */
|
|
237
|
+
final: Map<string, number>;
|
|
238
|
+
/**
|
|
239
|
+
* Per-slug spread delta: `final[slug] - own[slug]`. Captures how much
|
|
240
|
+
* the spread step nudged each node above (or below) its own activation —
|
|
241
|
+
* useful for inspector views that want to show graph contributions
|
|
242
|
+
* separate from raw sim contributions. Always 0 when `hops == 0` or
|
|
243
|
+
* `k == 0` because both short-circuit to `final == own`.
|
|
244
|
+
*/
|
|
245
|
+
contribution: Map<string, number>;
|
|
246
|
+
}
|
|
247
|
+
|
|
177
248
|
/**
|
|
178
|
-
* Apply 2-hop spreading activation with neighborhood normalization
|
|
249
|
+
* Apply 2-hop spreading activation with neighborhood normalization. Edges are
|
|
250
|
+
* directed: an edge A→B means A's activation contributes to B's final value.
|
|
179
251
|
*
|
|
180
|
-
* A(n) = [ A_o(n) +
|
|
181
|
-
* /
|
|
252
|
+
* A(n) = [ A_o(n) + Σ_{r: |active_inR(n)| > 0} k^r · L2(active_inR(n)) ]
|
|
253
|
+
* / [ 1 + Σ_{r: |active_inR(n)| > 0} k^r ]
|
|
182
254
|
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
255
|
+
* `active_inR(n)` is the subset of structural predecessors at hop `r` that
|
|
256
|
+
* also appear in `ownActivation` (i.e. made the candidate set). `L2(.)` is
|
|
257
|
+
* the quadratic mean √(mean(A_o²)) — a mild bias toward strong outliers
|
|
258
|
+
* compared to the arithmetic mean, without letting a single high-cosine
|
|
259
|
+
* predecessor dominate the way `max` would.
|
|
186
260
|
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
261
|
+
* Hops with **no** active predecessors are dropped from BOTH numerator and
|
|
262
|
+
* denominator so a high-in-degree hub with mostly-inactive neighbors stays
|
|
263
|
+
* near `A_o` instead of being crushed by the structural count. A pure
|
|
264
|
+
* source (no incoming edges, or every edge points at a non-candidate)
|
|
265
|
+
* collapses to `A == A_o`.
|
|
191
266
|
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
267
|
+
* Bounded in [0, 1]: every `L2` term ≤ max active A_o ≤ 1, so the numerator
|
|
268
|
+
* is at most `1 + Σ k^r` — exactly the denominator — so the ratio is at most
|
|
269
|
+
* 1. `clampUnitInterval` guards against numerical drift and out-of-range
|
|
270
|
+
* inputs.
|
|
271
|
+
*
|
|
272
|
+
* Pure function — no I/O. Reads the precomputed `incoming` map from
|
|
273
|
+
* `edgeIndex` and runs a per-source BFS bounded by `hops`.
|
|
194
274
|
*/
|
|
195
275
|
export function spreadActivation(
|
|
196
276
|
ownActivation: ReadonlyMap<string, number>,
|
|
197
|
-
|
|
277
|
+
edgeIndex: EdgeIndex,
|
|
198
278
|
k: number,
|
|
199
279
|
hops: number,
|
|
200
|
-
):
|
|
201
|
-
const
|
|
202
|
-
|
|
280
|
+
): SpreadActivationResult {
|
|
281
|
+
const final = new Map<string, number>();
|
|
282
|
+
const contribution = new Map<string, number>();
|
|
283
|
+
if (ownActivation.size === 0) return { final, contribution };
|
|
203
284
|
|
|
204
285
|
// Short-circuit: with no spread the formula collapses to A == A_o.
|
|
205
286
|
if (hops <= 0 || k <= 0) {
|
|
206
287
|
for (const [slug, ownValue] of ownActivation) {
|
|
207
|
-
|
|
288
|
+
final.set(slug, clampUnitInterval(ownValue));
|
|
289
|
+
contribution.set(slug, 0);
|
|
208
290
|
}
|
|
209
|
-
return
|
|
291
|
+
return { final, contribution };
|
|
210
292
|
}
|
|
211
293
|
|
|
212
|
-
const adjacency = buildAdjacency(edgesIdx);
|
|
213
|
-
|
|
214
294
|
for (const [slug, ownValue] of ownActivation) {
|
|
215
|
-
// Single bounded BFS from `slug
|
|
216
|
-
// (1..hops). Source is excluded so it contributes
|
|
217
|
-
// `numerator = ownValue`.
|
|
218
|
-
const distance =
|
|
295
|
+
// Single bounded BFS from `slug` over incoming edges. `distance` maps
|
|
296
|
+
// predecessor → hop count (1..hops). Source is excluded so it contributes
|
|
297
|
+
// hop-0 only via `numerator = ownValue`.
|
|
298
|
+
const distance = bfsPredecessorDistances(edgeIndex.incoming, slug, hops);
|
|
299
|
+
|
|
300
|
+
// Bucket only predecessors that are in `ownActivation` (the candidate
|
|
301
|
+
// set). Structural predecessors that didn't make the cut contribute
|
|
302
|
+
// nothing — neither to the numerator nor the denominator — so hub
|
|
303
|
+
// in-degree alone never penalizes a node.
|
|
304
|
+
const ringActiveCounts: number[] = new Array(hops + 1).fill(0);
|
|
305
|
+
const ringSquareSums: number[] = new Array(hops + 1).fill(0);
|
|
306
|
+
for (const [predecessor, hop] of distance) {
|
|
307
|
+
const predValue = ownActivation.get(predecessor);
|
|
308
|
+
if (predValue === undefined) continue;
|
|
309
|
+
ringActiveCounts[hop] += 1;
|
|
310
|
+
ringSquareSums[hop] += predValue * predValue;
|
|
311
|
+
}
|
|
219
312
|
|
|
220
313
|
let numerator = ownValue;
|
|
221
314
|
let denominator = 1;
|
|
222
315
|
let kPow = 1;
|
|
223
|
-
// Accumulate per-hop contributions in a single pass. We need per-hop
|
|
224
|
-
// counts to weight by k^r, so bucket as we go.
|
|
225
|
-
const ringCounts: number[] = new Array(hops + 1).fill(0);
|
|
226
|
-
const ringSums: number[] = new Array(hops + 1).fill(0);
|
|
227
|
-
for (const [neighbor, hop] of distance) {
|
|
228
|
-
ringCounts[hop] += 1;
|
|
229
|
-
ringSums[hop] += ownActivation.get(neighbor) ?? 0;
|
|
230
|
-
}
|
|
231
316
|
for (let r = 1; r <= hops; r++) {
|
|
232
317
|
kPow *= k;
|
|
233
|
-
if (
|
|
234
|
-
|
|
235
|
-
|
|
318
|
+
if (ringActiveCounts[r] === 0) continue;
|
|
319
|
+
const rms = Math.sqrt(ringSquareSums[r] / ringActiveCounts[r]);
|
|
320
|
+
numerator += kPow * rms;
|
|
321
|
+
denominator += kPow;
|
|
236
322
|
}
|
|
237
323
|
|
|
238
|
-
|
|
324
|
+
const finalValue = clampUnitInterval(numerator / denominator);
|
|
325
|
+
final.set(slug, finalValue);
|
|
326
|
+
contribution.set(slug, finalValue - ownValue);
|
|
239
327
|
}
|
|
240
328
|
|
|
241
|
-
return
|
|
329
|
+
return { final, contribution };
|
|
242
330
|
}
|
|
243
331
|
|
|
244
332
|
// ---------------------------------------------------------------------------
|
|
@@ -246,50 +334,29 @@ export function spreadActivation(
|
|
|
246
334
|
// ---------------------------------------------------------------------------
|
|
247
335
|
|
|
248
336
|
/**
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
337
|
+
* Bounded BFS over the *incoming* adjacency map. Returns each reachable
|
|
338
|
+
* predecessor's hop-distance in [1, maxHops] from `target` — i.e. nodes from
|
|
339
|
+
* which a directed path of that length leads into `target`. The target itself
|
|
340
|
+
* is excluded.
|
|
252
341
|
*/
|
|
253
|
-
function
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
let set = adjacency.get(slug);
|
|
257
|
-
if (!set) {
|
|
258
|
-
set = new Set<string>();
|
|
259
|
-
adjacency.set(slug, set);
|
|
260
|
-
}
|
|
261
|
-
return set;
|
|
262
|
-
};
|
|
263
|
-
for (const [a, b] of idx.edges) {
|
|
264
|
-
if (a === b) continue;
|
|
265
|
-
ensure(a).add(b);
|
|
266
|
-
ensure(b).add(a);
|
|
267
|
-
}
|
|
268
|
-
return adjacency;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Bounded BFS that returns each reachable slug's hop-distance in [1, maxHops]
|
|
273
|
-
* from `source`. The source itself is excluded.
|
|
274
|
-
*/
|
|
275
|
-
function bfsDistances(
|
|
276
|
-
adjacency: ReadonlyMap<string, ReadonlySet<string>>,
|
|
277
|
-
source: string,
|
|
342
|
+
function bfsPredecessorDistances(
|
|
343
|
+
incoming: ReadonlyMap<string, ReadonlySet<string>>,
|
|
344
|
+
target: string,
|
|
278
345
|
maxHops: number,
|
|
279
346
|
): Map<string, number> {
|
|
280
347
|
const distance = new Map<string, number>();
|
|
281
|
-
let frontier: string[] = [
|
|
282
|
-
const visited = new Set<string>([
|
|
348
|
+
let frontier: string[] = [target];
|
|
349
|
+
const visited = new Set<string>([target]);
|
|
283
350
|
for (let hop = 1; hop <= maxHops && frontier.length > 0; hop++) {
|
|
284
351
|
const next: string[] = [];
|
|
285
352
|
for (const node of frontier) {
|
|
286
|
-
const
|
|
287
|
-
if (!
|
|
288
|
-
for (const
|
|
289
|
-
if (visited.has(
|
|
290
|
-
visited.add(
|
|
291
|
-
distance.set(
|
|
292
|
-
next.push(
|
|
353
|
+
const predecessors = incoming.get(node);
|
|
354
|
+
if (!predecessors) continue;
|
|
355
|
+
for (const predecessor of predecessors) {
|
|
356
|
+
if (visited.has(predecessor)) continue;
|
|
357
|
+
visited.add(predecessor);
|
|
358
|
+
distance.set(predecessor, hop);
|
|
359
|
+
next.push(predecessor);
|
|
293
360
|
}
|
|
294
361
|
}
|
|
295
362
|
frontier = next;
|
|
@@ -301,7 +368,7 @@ function bfsDistances(
|
|
|
301
368
|
// Injection selection
|
|
302
369
|
// ---------------------------------------------------------------------------
|
|
303
370
|
|
|
304
|
-
|
|
371
|
+
interface SelectInjectionsParams {
|
|
305
372
|
/** Final activation map after spread. */
|
|
306
373
|
A: ReadonlyMap<string, number>;
|
|
307
374
|
/** Slugs already attached to a prior user message (with their turn). */
|
|
@@ -310,7 +377,7 @@ export interface SelectInjectionsParams {
|
|
|
310
377
|
topK: number;
|
|
311
378
|
}
|
|
312
379
|
|
|
313
|
-
|
|
380
|
+
interface SelectInjectionsResult {
|
|
314
381
|
/** Top-K slugs by activation (descending), used for the cached top-now view. */
|
|
315
382
|
topNow: string[];
|
|
316
383
|
/**
|
|
@@ -362,52 +429,33 @@ export function selectInjections(
|
|
|
362
429
|
// c_assistant, c_now}` — the design doc (§9) deliberately shares them with
|
|
363
430
|
// concept-page activation rather than introducing parallel knobs.
|
|
364
431
|
|
|
365
|
-
|
|
432
|
+
interface ComputeSkillActivationParams {
|
|
433
|
+
candidates: ReadonlySet<string>;
|
|
366
434
|
userText: string;
|
|
367
435
|
assistantText: string;
|
|
368
436
|
nowText: string;
|
|
369
437
|
config: AssistantConfig;
|
|
370
|
-
/** Top-K size for the ANN query against `memory_v2_skills`. */
|
|
371
|
-
topK: number;
|
|
372
438
|
}
|
|
373
439
|
|
|
374
440
|
/**
|
|
375
|
-
*
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
* are stateless).
|
|
379
|
-
*
|
|
380
|
-
* Returns a `Set<string>` of skill ids that hit either channel. Empty when
|
|
381
|
-
* the joined text is empty or `topK <= 0`.
|
|
441
|
+
* Per-skill breakdown of the raw similarity inputs, captured before any
|
|
442
|
+
* coefficient weighting. Skills have no decay term, so the breakdown is just
|
|
443
|
+
* the three raw sims. Surfaced for telemetry / inspector views.
|
|
382
444
|
*/
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
const annQueryText = [userText, assistantText, nowText]
|
|
392
|
-
.filter((s) => s.length > 0)
|
|
393
|
-
.join("\n");
|
|
394
|
-
if (annQueryText.length === 0) return candidates;
|
|
395
|
-
|
|
396
|
-
const denseResult = await embedWithBackend(config, [annQueryText]);
|
|
397
|
-
const dense = denseResult.vectors[0];
|
|
398
|
-
const sparse = generateSparseEmbedding(annQueryText);
|
|
399
|
-
const hits = await hybridQuerySkills(dense, sparse, topK);
|
|
400
|
-
for (const hit of hits) candidates.add(hit.id);
|
|
401
|
-
|
|
402
|
-
return candidates;
|
|
445
|
+
interface SkillActivationBreakdown {
|
|
446
|
+
/** Raw `sim(user, skill)` similarity, before `c_user` weighting. */
|
|
447
|
+
simUser: number;
|
|
448
|
+
/** Raw `sim(assistant, skill)` similarity, before `c_assistant` weighting. */
|
|
449
|
+
simAssistant: number;
|
|
450
|
+
/** Raw `sim(now, skill)` similarity, before `c_now` weighting. */
|
|
451
|
+
simNow: number;
|
|
403
452
|
}
|
|
404
453
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
config: AssistantConfig;
|
|
454
|
+
interface ComputeSkillActivationResult {
|
|
455
|
+
/** Final clamped skill-activation value per id. */
|
|
456
|
+
activation: Map<string, number>;
|
|
457
|
+
/** Per-skill breakdown of the raw sim inputs that fed into `activation`. */
|
|
458
|
+
breakdown: Map<string, SkillActivationBreakdown>;
|
|
411
459
|
}
|
|
412
460
|
|
|
413
461
|
/**
|
|
@@ -416,18 +464,21 @@ export interface ComputeSkillActivationParams {
|
|
|
416
464
|
*
|
|
417
465
|
* Reuses the activation coefficients from `config.memory.v2`. The three
|
|
418
466
|
* `simSkillBatch` calls run concurrently — they hit independent named
|
|
419
|
-
* vectors and embed independent query texts.
|
|
467
|
+
* vectors and embed independent query texts. Returns a per-skill breakdown
|
|
468
|
+
* of the raw sims alongside the activation map so callers can render
|
|
469
|
+
* contribution diagnostics without re-running the math.
|
|
420
470
|
*
|
|
421
471
|
* Empty candidates short-circuits to an empty map without touching the
|
|
422
472
|
* embedding backend or Qdrant.
|
|
423
473
|
*/
|
|
424
474
|
export async function computeSkillActivation(
|
|
425
475
|
params: ComputeSkillActivationParams,
|
|
426
|
-
): Promise<
|
|
476
|
+
): Promise<ComputeSkillActivationResult> {
|
|
427
477
|
const { candidates, userText, assistantText, nowText, config } = params;
|
|
428
478
|
|
|
429
|
-
const
|
|
430
|
-
|
|
479
|
+
const activation = new Map<string, number>();
|
|
480
|
+
const breakdown = new Map<string, SkillActivationBreakdown>();
|
|
481
|
+
if (candidates.size === 0) return { activation, breakdown };
|
|
431
482
|
|
|
432
483
|
const { c_user, c_assistant, c_now } = config.memory.v2;
|
|
433
484
|
const idList = [...candidates];
|
|
@@ -439,24 +490,25 @@ export async function computeSkillActivation(
|
|
|
439
490
|
]);
|
|
440
491
|
|
|
441
492
|
for (const id of idList) {
|
|
442
|
-
const
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
493
|
+
const simU = simUser.get(id) ?? 0;
|
|
494
|
+
const simA = simAssistant.get(id) ?? 0;
|
|
495
|
+
const simN = simNow.get(id) ?? 0;
|
|
496
|
+
const value = c_user * simU + c_assistant * simA + c_now * simN;
|
|
497
|
+
activation.set(id, clampUnitInterval(value));
|
|
498
|
+
breakdown.set(id, { simUser: simU, simAssistant: simA, simNow: simN });
|
|
447
499
|
}
|
|
448
500
|
|
|
449
|
-
return
|
|
501
|
+
return { activation, breakdown };
|
|
450
502
|
}
|
|
451
503
|
|
|
452
|
-
|
|
504
|
+
interface SelectSkillInjectionsParams {
|
|
453
505
|
/** Final skill activation map. */
|
|
454
506
|
A: ReadonlyMap<string, number>;
|
|
455
507
|
/** Cap on the per-turn skill slate, e.g. `config.memory.v2.skills_top_k`. */
|
|
456
508
|
topK: number;
|
|
457
509
|
}
|
|
458
510
|
|
|
459
|
-
|
|
511
|
+
interface SelectSkillInjectionsResult {
|
|
460
512
|
/**
|
|
461
513
|
* Top-K skill ids by activation (descending), tie-broken lexicographically.
|
|
462
514
|
* Skills are re-presented every turn — no `toInject` delta — so the caller
|