@vellumai/assistant 0.10.0 → 0.10.1-staging.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +36 -37
- package/bun.lock +3 -0
- package/docs/workflows.md +12 -7
- package/eslint-rules/cli-no-daemon-internals.js +6 -0
- package/node_modules/@slack/types/LICENSE +23 -0
- package/node_modules/@slack/types/README.md +32 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.d.ts +953 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.js +4 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.js.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.d.ts +474 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.js +3 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.js.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.d.ts +237 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.js +4 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.js.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.d.ts +88 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.js +3 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.js.map +1 -0
- package/node_modules/@slack/types/dist/calls.d.ts +26 -0
- package/node_modules/@slack/types/dist/calls.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/calls.js +6 -0
- package/node_modules/@slack/types/dist/calls.js.map +1 -0
- package/node_modules/@slack/types/dist/chunk.d.ts +52 -0
- package/node_modules/@slack/types/dist/chunk.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/chunk.js +3 -0
- package/node_modules/@slack/types/dist/chunk.js.map +1 -0
- package/node_modules/@slack/types/dist/common/bot-profile.d.ts +12 -0
- package/node_modules/@slack/types/dist/common/bot-profile.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/common/bot-profile.js +3 -0
- package/node_modules/@slack/types/dist/common/bot-profile.js.map +1 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.d.ts +6 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.js +3 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.js.map +1 -0
- package/node_modules/@slack/types/dist/dialog.d.ts +36 -0
- package/node_modules/@slack/types/dist/dialog.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/dialog.js +3 -0
- package/node_modules/@slack/types/dist/dialog.js.map +1 -0
- package/node_modules/@slack/types/dist/events/app.d.ts +204 -0
- package/node_modules/@slack/types/dist/events/app.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/app.js +3 -0
- package/node_modules/@slack/types/dist/events/app.js.map +1 -0
- package/node_modules/@slack/types/dist/events/assistant.d.ts +29 -0
- package/node_modules/@slack/types/dist/events/assistant.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/assistant.js +3 -0
- package/node_modules/@slack/types/dist/events/assistant.js.map +1 -0
- package/node_modules/@slack/types/dist/events/call.d.ts +8 -0
- package/node_modules/@slack/types/dist/events/call.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/call.js +3 -0
- package/node_modules/@slack/types/dist/events/call.js.map +1 -0
- package/node_modules/@slack/types/dist/events/channel.d.ts +85 -0
- package/node_modules/@slack/types/dist/events/channel.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/channel.js +3 -0
- package/node_modules/@slack/types/dist/events/channel.js.map +1 -0
- package/node_modules/@slack/types/dist/events/dnd.d.ts +24 -0
- package/node_modules/@slack/types/dist/events/dnd.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/dnd.js +3 -0
- package/node_modules/@slack/types/dist/events/dnd.js.map +1 -0
- package/node_modules/@slack/types/dist/events/email.d.ts +6 -0
- package/node_modules/@slack/types/dist/events/email.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/email.js +3 -0
- package/node_modules/@slack/types/dist/events/email.js.map +1 -0
- package/node_modules/@slack/types/dist/events/emoji.d.ts +11 -0
- package/node_modules/@slack/types/dist/events/emoji.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/emoji.js +3 -0
- package/node_modules/@slack/types/dist/events/emoji.js.map +1 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.d.ts +21 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.js +3 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.js.map +1 -0
- package/node_modules/@slack/types/dist/events/file.d.ts +60 -0
- package/node_modules/@slack/types/dist/events/file.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/file.js +4 -0
- package/node_modules/@slack/types/dist/events/file.js.map +1 -0
- package/node_modules/@slack/types/dist/events/function.d.ts +33 -0
- package/node_modules/@slack/types/dist/events/function.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/function.js +3 -0
- package/node_modules/@slack/types/dist/events/function.js.map +1 -0
- package/node_modules/@slack/types/dist/events/grid-migration.d.ts +9 -0
- package/node_modules/@slack/types/dist/events/grid-migration.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/grid-migration.js +3 -0
- package/node_modules/@slack/types/dist/events/grid-migration.js.map +1 -0
- package/node_modules/@slack/types/dist/events/group.d.ts +55 -0
- package/node_modules/@slack/types/dist/events/group.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/group.js +3 -0
- package/node_modules/@slack/types/dist/events/group.js.map +1 -0
- package/node_modules/@slack/types/dist/events/im.d.ts +26 -0
- package/node_modules/@slack/types/dist/events/im.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/im.js +3 -0
- package/node_modules/@slack/types/dist/events/im.js.map +1 -0
- package/node_modules/@slack/types/dist/events/index.d.ts +60 -0
- package/node_modules/@slack/types/dist/events/index.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/index.js +43 -0
- package/node_modules/@slack/types/dist/events/index.js.map +1 -0
- package/node_modules/@slack/types/dist/events/invite.d.ts +20 -0
- package/node_modules/@slack/types/dist/events/invite.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/invite.js +3 -0
- package/node_modules/@slack/types/dist/events/invite.js.map +1 -0
- package/node_modules/@slack/types/dist/events/link-shared.d.ts +16 -0
- package/node_modules/@slack/types/dist/events/link-shared.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/link-shared.js +3 -0
- package/node_modules/@slack/types/dist/events/link-shared.js.map +1 -0
- package/node_modules/@slack/types/dist/events/member.d.ts +19 -0
- package/node_modules/@slack/types/dist/events/member.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/member.js +3 -0
- package/node_modules/@slack/types/dist/events/member.js.map +1 -0
- package/node_modules/@slack/types/dist/events/message-metadata.d.ts +38 -0
- package/node_modules/@slack/types/dist/events/message-metadata.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/message-metadata.js +3 -0
- package/node_modules/@slack/types/dist/events/message-metadata.js.map +1 -0
- package/node_modules/@slack/types/dist/events/message.d.ts +306 -0
- package/node_modules/@slack/types/dist/events/message.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/message.js +3 -0
- package/node_modules/@slack/types/dist/events/message.js.map +1 -0
- package/node_modules/@slack/types/dist/events/pin.d.ts +60 -0
- package/node_modules/@slack/types/dist/events/pin.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/pin.js +3 -0
- package/node_modules/@slack/types/dist/events/pin.js.map +1 -0
- package/node_modules/@slack/types/dist/events/reaction.d.ts +23 -0
- package/node_modules/@slack/types/dist/events/reaction.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/reaction.js +3 -0
- package/node_modules/@slack/types/dist/events/reaction.js.map +1 -0
- package/node_modules/@slack/types/dist/events/shared-channel.d.ts +134 -0
- package/node_modules/@slack/types/dist/events/shared-channel.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/shared-channel.js +3 -0
- package/node_modules/@slack/types/dist/events/shared-channel.js.map +1 -0
- package/node_modules/@slack/types/dist/events/star.d.ts +13 -0
- package/node_modules/@slack/types/dist/events/star.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/star.js +3 -0
- package/node_modules/@slack/types/dist/events/star.js.map +1 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.d.ts +82 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.js +3 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.js.map +1 -0
- package/node_modules/@slack/types/dist/events/subteam.d.ts +66 -0
- package/node_modules/@slack/types/dist/events/subteam.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/subteam.js +3 -0
- package/node_modules/@slack/types/dist/events/subteam.js.map +1 -0
- package/node_modules/@slack/types/dist/events/team.d.ts +99 -0
- package/node_modules/@slack/types/dist/events/team.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/team.js +3 -0
- package/node_modules/@slack/types/dist/events/team.js.map +1 -0
- package/node_modules/@slack/types/dist/events/token.d.ts +8 -0
- package/node_modules/@slack/types/dist/events/token.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/token.js +3 -0
- package/node_modules/@slack/types/dist/events/token.js.map +1 -0
- package/node_modules/@slack/types/dist/events/user.d.ts +313 -0
- package/node_modules/@slack/types/dist/events/user.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/user.js +3 -0
- package/node_modules/@slack/types/dist/events/user.js.map +1 -0
- package/node_modules/@slack/types/dist/index.d.ts +12 -0
- package/node_modules/@slack/types/dist/index.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/index.js +28 -0
- package/node_modules/@slack/types/dist/index.js.map +1 -0
- package/node_modules/@slack/types/dist/message-attachments.d.ts +171 -0
- package/node_modules/@slack/types/dist/message-attachments.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/message-attachments.js +3 -0
- package/node_modules/@slack/types/dist/message-attachments.js.map +1 -0
- package/node_modules/@slack/types/dist/message-metadata.d.ts +281 -0
- package/node_modules/@slack/types/dist/message-metadata.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/message-metadata.js +27 -0
- package/node_modules/@slack/types/dist/message-metadata.js.map +1 -0
- package/node_modules/@slack/types/dist/views.d.ts +71 -0
- package/node_modules/@slack/types/dist/views.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/views.js +3 -0
- package/node_modules/@slack/types/dist/views.js.map +1 -0
- package/node_modules/@slack/types/package.json +47 -0
- package/node_modules/@vellumai/gateway-client/bun.lock +3 -0
- package/node_modules/@vellumai/gateway-client/package.json +1 -0
- package/node_modules/@vellumai/gateway-client/src/__tests__/contact-read-contracts.test.ts +69 -0
- package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +65 -0
- package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +162 -0
- package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +8 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +14 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +4 -2
- package/node_modules/@vellumai/gateway-client/src/outbound-contract.ts +3 -2
- package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +78 -0
- package/openapi.yaml +345 -18
- package/package.json +2 -1
- package/scripts/memory-inspect.ts +24 -14
- package/src/__tests__/access-request-seed-content-blocks.test.ts +83 -103
- package/src/__tests__/activation-early-marking.test.ts +1 -1
- package/src/__tests__/actor-token-service.test.ts +3 -3
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +1 -40
- package/src/__tests__/agent-loop-compaction-events.test.ts +0 -1
- package/src/__tests__/agent-loop-compaction-strip.test.ts +0 -1
- package/src/__tests__/agent-loop-exit-reason.test.ts +0 -1
- package/src/__tests__/agent-loop-pushes-post-hook-prompt.test.ts +306 -0
- package/src/__tests__/agent-loop-regrowth-guard.test.ts +0 -1
- package/src/__tests__/agent-loop.test.ts +3 -0
- package/src/__tests__/agent-wake-override-profile.test.ts +2 -0
- package/src/__tests__/anthropic-provider.test.ts +143 -9
- package/src/__tests__/app-builder-skill-instructions.test.ts +47 -5
- package/src/__tests__/app-conversation-ids-backfill.test.ts +1 -1
- package/src/__tests__/app-source-watcher.test.ts +30 -10
- package/src/__tests__/approval-cascade.test.ts +6 -0
- package/src/__tests__/approval-interception-trust-gates.test.ts +151 -0
- package/src/__tests__/approval-primitive.test.ts +1 -1
- package/src/__tests__/approval-routes-http.test.ts +1 -1
- package/src/__tests__/assistant-attachments.test.ts +155 -0
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +2 -4
- package/src/__tests__/assistant-events-sse-hardening.test.ts +1 -1
- package/src/__tests__/assistant-events-sse-shed.test.ts +1 -1
- package/src/__tests__/attachment-upload-trusted-source.test.ts +13 -8
- package/src/__tests__/attachments-store.test.ts +1 -1
- package/src/__tests__/audit-log-rotation.test.ts +50 -54
- package/src/__tests__/auth-fallback-events-store.test.ts +1 -1
- package/src/__tests__/auto-analysis-end-to-end.test.ts +9 -14
- package/src/__tests__/background-shell-bash.test.ts +4 -1
- package/src/__tests__/background-shell-host-bash.test.ts +17 -3
- package/src/__tests__/background-workers-disk-pressure.test.ts +1 -0
- package/src/__tests__/call-controller.test.ts +1 -1
- package/src/__tests__/call-conversation-messages.test.ts +1 -1
- package/src/__tests__/call-domain.test.ts +1 -1
- package/src/__tests__/call-pointer-messages.test.ts +3 -4
- package/src/__tests__/call-recovery.test.ts +1 -1
- package/src/__tests__/call-routes-http.test.ts +1 -1
- package/src/__tests__/call-store.test.ts +1 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/canonical-guardian-store.test.ts +24 -1
- package/src/__tests__/channel-approval-routes.test.ts +73 -1119
- package/src/__tests__/channel-delivery-store.test.ts +1 -1
- package/src/__tests__/channel-guardian.test.ts +265 -641
- package/src/__tests__/channel-inbound-disk-pressure.test.ts +1 -2
- package/src/__tests__/channel-retry-sweep.test.ts +1 -1
- package/src/__tests__/compaction-events.test.ts +6 -0
- package/src/__tests__/compaction-trail-store.test.ts +6 -5
- package/src/__tests__/compaction.benchmark.test.ts +0 -1
- package/src/__tests__/compactor-image-manifest-trust.test.ts +1 -1
- package/src/__tests__/config-loader-backfill.test.ts +183 -51
- package/src/__tests__/config-schema.test.ts +34 -0
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +1 -2
- package/src/__tests__/contact-store-user-file.test.ts +2 -2
- package/src/__tests__/contacts-relay-reads.test.ts +409 -0
- package/src/__tests__/contacts-tools.test.ts +4 -4
- package/src/__tests__/contacts-write.test.ts +1 -2
- package/src/__tests__/context-search-conversations-source.test.ts +1 -1
- package/src/__tests__/context-window-manager-compact-retry.test.ts +6 -2
- package/src/__tests__/context-window-manager-overflow-rung.test.ts +6 -2
- package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop.test.ts +3 -0
- package/src/__tests__/conversation-attachments.test.ts +2 -5
- package/src/__tests__/conversation-attention-store.test.ts +1 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +1 -2
- package/src/__tests__/conversation-clear-safety.test.ts +1 -1
- package/src/__tests__/conversation-confirmation-signals.test.ts +6 -0
- package/src/__tests__/conversation-crud-inference-profile.test.ts +1 -1
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +12 -19
- package/src/__tests__/conversation-disk-view-integration.test.ts +1 -1
- package/src/__tests__/conversation-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-fork-crud.test.ts +10 -8
- package/src/__tests__/conversation-fork-retrospective.test.ts +250 -0
- package/src/__tests__/conversation-fork-route.test.ts +1 -1
- package/src/__tests__/conversation-inference-profile-list.test.ts +1 -1
- package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
- package/src/__tests__/conversation-init.benchmark.test.ts +1 -1
- package/src/__tests__/conversation-key-store-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-lifecycle.test.ts +117 -0
- package/src/__tests__/conversation-list-source.test.ts +3 -3
- package/src/__tests__/conversation-process-callsite.test.ts +6 -14
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-queue.test.ts +6 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +115 -12
- package/src/__tests__/conversation-slash-queue.test.ts +6 -0
- package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
- package/src/__tests__/conversation-speed-override.test.ts +6 -0
- package/src/__tests__/conversation-starter-routes.test.ts +5 -5
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
- package/src/__tests__/conversation-sync-tags.test.ts +1 -1
- package/src/__tests__/conversation-usage.test.ts +1 -1
- package/src/__tests__/conversation-wipe.test.ts +9 -8
- package/src/__tests__/conversation-workspace-cache-state.test.ts +6 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
- package/src/__tests__/conversations-import-system-filter.test.ts +1 -1
- package/src/__tests__/copy-composer-tc-templates.test.ts +17 -0
- package/src/__tests__/credential-security-invariants.test.ts +0 -1
- package/src/__tests__/db-acp-history.test.ts +2 -2
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +5 -7
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +6 -7
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +5 -10
- package/src/__tests__/db-migration-rollback.test.ts +129 -39
- package/src/__tests__/db-proxy-transaction.test.ts +1 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +0 -11
- package/src/__tests__/db-test-helpers.ts +36 -19
- package/src/__tests__/delete-propagation.test.ts +1 -1
- package/src/__tests__/deterministic-verification-control-plane.test.ts +26 -8
- package/src/__tests__/disk-pressure-tools.test.ts +41 -1
- package/src/__tests__/dm-backfill.test.ts +1 -1
- package/src/__tests__/drop-capability-card-state-migration.test.ts +0 -8
- package/src/__tests__/edit-propagation.test.ts +1 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +83 -0
- package/src/__tests__/empty-response-hook.test.ts +42 -0
- package/src/__tests__/events-client-registration.test.ts +1 -1
- package/src/__tests__/followup-tools.test.ts +1 -1
- package/src/__tests__/gemini-count-tokens.test.ts +70 -0
- package/src/__tests__/guardian-action-sweep.test.ts +9 -2
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-card-withdrawal.test.ts +1 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-outbound-http.test.ts +7 -12
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +1 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +2 -4
- package/src/__tests__/guardian-routing-state.test.ts +1 -2
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/headless-browser-mode.test.ts +2 -2
- package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
- package/src/__tests__/heartbeat-service.test.ts +6 -0
- package/src/__tests__/helpers/channel-test-adapter.ts +98 -0
- package/src/__tests__/http-conversation-lineage.test.ts +1 -1
- package/src/__tests__/image-recovery-hook.test.ts +1 -1
- package/src/__tests__/inbound-invite-redemption.test.ts +1 -2
- package/src/__tests__/inbound-trust-verdict.test.ts +254 -0
- package/src/__tests__/inference-profile-reaper.test.ts +1 -1
- package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
- package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-disk-pressure.test.ts +11 -6
- package/src/__tests__/internal-telemetry-routes.test.ts +1 -1
- package/src/__tests__/invite-redemption-service.test.ts +244 -43
- package/src/__tests__/invite-routes-http.test.ts +35 -186
- package/src/__tests__/invite-service-ipc.test.ts +287 -0
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +5 -5
- package/src/__tests__/jobs-store-upsert-debounced.test.ts +9 -12
- package/src/__tests__/list-messages-attachments.test.ts +42 -1
- package/src/__tests__/list-messages-client-message-id.test.ts +1 -1
- package/src/__tests__/list-messages-hidden-metadata.test.ts +1 -1
- package/src/__tests__/list-messages-page-latest.test.ts +1 -1
- package/src/__tests__/list-messages-tool-merge.test.ts +1 -1
- package/src/__tests__/llm-context-route-provider.test.ts +69 -4
- package/src/__tests__/llm-request-log-agent-loop-exit-reason.test.ts +9 -5
- package/src/__tests__/llm-request-log-call-site.test.ts +6 -6
- package/src/__tests__/llm-request-log-turn-query.test.ts +27 -13
- package/src/__tests__/llm-usage-store.test.ts +40 -1
- package/src/__tests__/log-export-routes.test.ts +1 -1
- package/src/__tests__/log-export-workspace.test.ts +3 -3
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +5 -5
- package/src/__tests__/memory-recall-log-store.test.ts +1 -1
- package/src/__tests__/memory-upsert-concurrency.test.ts +3 -4
- package/src/__tests__/messages-after-tiebreaker.test.ts +1 -1
- package/src/__tests__/migration-import-from-url.test.ts +2 -2
- package/src/__tests__/mtime-cache.test.ts +375 -0
- package/src/__tests__/non-member-access-request.test.ts +1 -2
- package/src/__tests__/notification-candidate-guardian-context.test.ts +203 -0
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/notification-schedule-notify-dedup.test.ts +1 -1
- package/src/__tests__/oauth-provider-profiles.test.ts +1 -1
- package/src/__tests__/oauth-provider-visibility.test.ts +1 -1
- package/src/__tests__/oauth-store.test.ts +1 -1
- package/src/__tests__/persist-unsendable-image-downscale.test.ts +1 -1
- package/src/__tests__/persist-unsendable-image.test.ts +1 -1
- package/src/__tests__/persona-resolver.test.ts +39 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +1 -1
- package/src/__tests__/playbook-execution.test.ts +1 -1
- package/src/__tests__/playbook-tools.test.ts +1 -1
- package/src/__tests__/plugin-api-model-profiles.test.ts +74 -21
- package/src/__tests__/plugin-bootstrap.test.ts +78 -0
- package/src/__tests__/provider-platform-proxy-integration.test.ts +25 -5
- package/src/__tests__/provider-usage-tracking.test.ts +1 -1
- package/src/__tests__/prune-old-conversations-job.test.ts +1 -1
- package/src/__tests__/reaction-persistence.test.ts +1 -1
- package/src/__tests__/relay-server.test.ts +357 -56
- package/src/__tests__/runtime-attachment-metadata.test.ts +10 -1
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +7 -9
- package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-reconnect.test.ts +1 -1
- package/src/__tests__/runtime-events-sse.test.ts +1 -1
- package/src/__tests__/schedule-retry.test.ts +1 -1
- package/src/__tests__/schedule-routes-workflow-validation.test.ts +1 -1
- package/src/__tests__/schedule-routes.test.ts +1 -1
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/schedule-tools.test.ts +1 -1
- package/src/__tests__/scheduler-disk-pressure.test.ts +1 -1
- package/src/__tests__/scheduler-recurrence.test.ts +1 -1
- package/src/__tests__/scheduler-reuse-conversation.test.ts +1 -1
- package/src/__tests__/scheduler-wake.test.ts +2 -1
- package/src/__tests__/scoped-approval-grants.test.ts +1 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +5 -5
- package/src/__tests__/scrub-corrupted-image-attachments.test.ts +0 -8
- package/src/__tests__/secret-routes-platform-proxy.test.ts +1 -0
- package/src/__tests__/send-endpoint-busy.test.ts +1 -1
- package/src/__tests__/sequence-store.test.ts +1 -1
- package/src/__tests__/server-history-render.test.ts +40 -1
- package/src/__tests__/settings-routes.test.ts +11 -10
- package/src/__tests__/skill-load-tool.test.ts +72 -0
- package/src/__tests__/slack-inbound-verification.test.ts +1 -3
- package/src/__tests__/slack-messaging-token-resolution.test.ts +13 -2
- package/src/__tests__/slack-reaction-canonical-approval.test.ts +1 -1
- package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -73
- package/src/__tests__/subagent-tools.test.ts +1 -31
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/system-storage-cleanup-skill.test.ts +56 -0
- package/src/__tests__/task-compiler.test.ts +1 -1
- package/src/__tests__/task-management-tools.test.ts +1 -1
- package/src/__tests__/task-memory-cleanup.test.ts +9 -6
- package/src/__tests__/task-scheduler.test.ts +1 -1
- package/src/__tests__/thread-backfill.test.ts +1 -1
- package/src/__tests__/tool-approval-handler.test.ts +1 -1
- package/src/__tests__/tool-approval-seed-content-blocks.test.ts +2 -0
- package/src/__tests__/tool-executor.test.ts +32 -1
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -2
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +73 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +34 -34
- package/src/__tests__/trusted-contact-multichannel.test.ts +1 -2
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/turn-boundary-resolution.test.ts +3 -3
- package/src/__tests__/turn-events-store.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +2 -3
- package/src/__tests__/usage-cache-backfill-migration.test.ts +20 -10
- package/src/__tests__/usage-routes.test.ts +1 -1
- package/src/__tests__/user-plugin-loader.test.ts +34 -29
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -2
- package/src/__tests__/voice-invite-redemption.test.ts +134 -36
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +1 -1
- package/src/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/__tests__/workspace-git-service.test.ts +114 -1
- package/src/__tests__/workspace-heartbeat-service.test.ts +45 -0
- package/src/__tests__/workspace-migration-009-backfill-conversation-disk-view.test.ts +1 -1
- package/src/__tests__/workspace-migration-013-repair-conversation-disk-view.test.ts +1 -1
- package/src/__tests__/workspace-migration-028-recover-conversations-from-disk-view.test.ts +88 -18
- package/src/__tests__/workspace-migration-108-drop-balanced-economy-profile.test.ts +6 -6
- package/src/__tests__/workspace-migration-109-swap-quality-profile-to-glm-5p2.test.ts +281 -0
- package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +167 -0
- package/src/__tests__/workspace-migrations-runner.test.ts +55 -0
- package/src/a2a/__tests__/e2e-a2a-channel.test.ts +1 -1
- package/src/a2a/__tests__/task-store.test.ts +1 -1
- package/src/acp/__tests__/session-manager-persistence.test.ts +1 -1
- package/src/acp/__tests__/session-manager-resume.test.ts +22 -11
- package/src/acp/__tests__/session-manager-startup.test.ts +1 -1
- package/src/acp/__tests__/session-manager.test.ts +72 -1
- package/src/acp/index.ts +10 -0
- package/src/acp/session-manager.ts +35 -0
- package/src/agent/loop.ts +45 -27
- package/src/api/index.ts +0 -6
- package/src/approvals/AGENTS.md +1 -2
- package/src/approvals/guardian-decision-primitive.ts +13 -210
- package/src/approvals/guardian-request-resolvers.ts +104 -58
- package/src/background-wake/wake-intent-hooks.test.ts +1 -1
- package/src/calls/__tests__/inbound-trust-reader.test.ts +110 -0
- package/src/calls/__tests__/relay-setup-router.test.ts +88 -62
- package/src/calls/inbound-trust-reader.ts +40 -0
- package/src/calls/relay-server.ts +65 -23
- package/src/calls/relay-setup-router.ts +20 -6
- package/src/calls/relay-verification.ts +7 -7
- package/src/cli/commands/contacts.ts +6 -24
- package/src/cli/commands/db/__tests__/repair.test.ts +15 -6
- package/src/cli/commands/db/__tests__/status.test.ts +7 -3
- package/src/cli/commands/db/status.ts +212 -33
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +6 -1
- package/src/cli/commands/memory/index.ts +2 -0
- package/src/cli/commands/memory/memory-retrospective.ts +129 -0
- package/src/cli/commands/memory/memory-v3.ts +176 -4
- package/src/cli/commands/plugins.ts +268 -11
- package/src/cli/lib/__tests__/install-from-github.test.ts +40 -0
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +162 -0
- package/src/cli/lib/__tests__/toggle-plugin.test.ts +158 -0
- package/src/cli/lib/install-from-github.ts +47 -6
- package/src/cli/lib/plugin-marketplace.ts +11 -0
- package/src/cli/lib/plugin-pin-history.ts +257 -0
- package/src/cli/lib/toggle-plugin.ts +146 -0
- package/src/config/__tests__/sync-gated-profiles.test.ts +2 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +15 -33
- package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +3 -8
- package/src/config/bundled-skills/app-builder/references/INTERACTION_HOOKS.md +64 -37
- package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +1 -1
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +14 -72
- package/src/config/bundled-skills/app-builder/references/examples/README.md +1 -2
- package/src/config/bundled-skills/contacts/SKILL.md +7 -12
- package/src/config/bundled-skills/messaging/tools/shared.ts +4 -1
- package/src/config/bundled-skills/system-storage-cleanup/SKILL.md +74 -0
- package/src/config/bundled-skills/workflows/SKILL.md +4 -3
- package/src/config/call-site-defaults.ts +11 -2
- package/src/config/feature-flag-registry.json +0 -8
- package/src/config/profile-dispatchability.ts +11 -0
- package/src/config/schemas/call-site-catalog.ts +7 -0
- package/src/config/schemas/llm.ts +2 -0
- package/src/config/schemas/memory-lifecycle.ts +5 -3
- package/src/config/schemas/timeouts.ts +24 -0
- package/src/config/seed-inference-profiles.ts +133 -45
- package/src/config/sync-gated-profiles.ts +13 -1
- package/src/contacts/contact-store.ts +21 -0
- package/src/contacts/member-status.ts +9 -0
- package/src/credential-health/credential-health-service.ts +1 -5
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +44 -0
- package/src/daemon/app-source-watcher.ts +31 -18
- package/src/daemon/assistant-attachments.ts +94 -4
- package/src/daemon/conversation-agent-loop-handlers.ts +3 -0
- package/src/daemon/conversation-agent-loop.ts +9 -36
- package/src/daemon/conversation-runtime-assembly.ts +91 -66
- package/src/daemon/conversation-tool-setup.ts +20 -63
- package/src/daemon/conversation.ts +144 -52
- package/src/daemon/event-loop-watchdog.test.ts +85 -0
- package/src/daemon/event-loop-watchdog.ts +133 -0
- package/src/daemon/external-plugins-bootstrap.ts +26 -80
- package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a-invite.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a.test.ts +1 -1
- package/src/daemon/handlers/config-channels.ts +32 -18
- package/src/daemon/handlers/conversations.ts +7 -0
- package/src/daemon/handlers/shared.ts +7 -0
- package/src/daemon/lifecycle.ts +16 -3
- package/src/daemon/message-types/inbox.ts +0 -6
- package/src/daemon/message-types/messages.ts +0 -4
- package/src/daemon/message-types/surfaces.ts +18 -8
- package/src/daemon/server.ts +0 -4
- package/src/daemon/tool-setup-types.ts +0 -7
- package/src/daemon/trust-context.ts +6 -0
- package/src/daemon/wake-conversation-ops.ts +70 -0
- package/src/daemon/workspace-tools-watcher.ts +7 -3
- package/src/documents/document-comments-store.test.ts +1 -1
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +1 -1
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +6 -0
- package/src/heartbeat/heartbeat-service.ts +3 -4
- package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
- package/src/ipc/__tests__/browser-ipc.test.ts +73 -2
- package/src/ipc/__tests__/watcher-ipc.test.ts +59 -39
- package/src/ipc/assistant-server.ts +8 -0
- package/src/ipc/gateway-client.ts +2 -1
- package/src/ipc/routes/__tests__/invite-ipc-routes.test.ts +58 -0
- package/src/ipc/routes/invite-ipc-routes.ts +66 -0
- package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
- package/src/memory/__tests__/activation-session-store.test.ts +1 -1
- package/src/memory/__tests__/auto-analysis-guard.test.ts +1 -1
- package/src/memory/__tests__/conversation-group-migration.test.ts +1 -1
- package/src/memory/__tests__/conversation-queries.test.ts +1 -1
- package/src/memory/__tests__/db-async-query.test.ts +1 -1
- package/src/memory/__tests__/db-logs-attach.test.ts +110 -0
- package/src/memory/__tests__/db-maintenance.test.ts +28 -36
- package/src/memory/__tests__/db-memory-attach.test.ts +113 -0
- package/src/memory/__tests__/find-analysis-conversation.test.ts +1 -1
- package/src/memory/__tests__/find-most-recent-retrospective-for.test.ts +1 -1
- package/src/memory/__tests__/fork-message-copy.test.ts +232 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +3 -0
- package/src/memory/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +5 -5
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +8 -6
- package/src/memory/__tests__/memory-retrospective-job.test.ts +30 -37
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +69 -66
- package/src/memory/__tests__/memory-retrospective-state.test.ts +1 -1
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +1 -1
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +1 -1
- package/src/memory/__tests__/onboarding-events-store.test.ts +1 -1
- package/src/memory/__tests__/table-relocation.test.ts +129 -0
- package/src/memory/conversation-crud.ts +461 -152
- package/src/memory/db-async-query.ts +89 -5
- package/src/memory/db-connection.ts +101 -18
- package/src/memory/db-init.ts +409 -234
- package/src/memory/db-maintenance.ts +43 -38
- package/src/memory/db-singleton.ts +45 -19
- package/src/memory/fork-message-copy.ts +170 -0
- package/src/memory/graph/__tests__/handle-remember-v2.test.ts +92 -0
- package/src/memory/graph/bootstrap.test.ts +6 -3
- package/src/memory/graph/retriever.test.ts +12 -12
- package/src/memory/graph/store.test.ts +15 -25
- package/src/memory/graph/store.ts +23 -14
- package/src/memory/graph/tool-handlers.ts +34 -5
- package/src/memory/graph/tools.ts +5 -2
- package/src/memory/indexer.ts +21 -9
- package/src/memory/job-handlers/cleanup.ts +10 -3
- package/src/memory/job-handlers/embedding.test.ts +4 -4
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +4 -4
- package/src/memory/jobs/embed-pkb-file.test.ts +7 -7
- package/src/memory/jobs-store.ts +36 -24
- package/src/memory/llm-request-log-store.ts +51 -19
- package/src/memory/llm-usage-store.ts +31 -1
- package/src/memory/memory-retrospective-job.ts +27 -19
- package/src/memory/memory-retrospective-startup-cleanup.ts +10 -2
- package/src/memory/migrations/{100-core-tables.ts → 000-core-tables.ts} +6 -10
- package/src/memory/migrations/104-core-indexes.ts +1 -1
- package/src/memory/migrations/126-backfill-guardian-principal-id.ts +189 -196
- package/src/memory/migrations/127-guardian-principal-id-not-null.ts +98 -105
- package/src/memory/migrations/134-contacts-notes-column.ts +66 -69
- package/src/memory/migrations/135-backfill-contact-interaction-stats.ts +19 -22
- package/src/memory/migrations/136-drop-assistant-id-columns.ts +227 -230
- package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +204 -209
- package/src/memory/migrations/141-rename-verification-table.ts +45 -48
- package/src/memory/migrations/142-rename-verification-session-id-column.ts +16 -23
- package/src/memory/migrations/143-rename-guardian-verification-values.ts +23 -30
- package/src/memory/migrations/144-rename-voice-to-phone.ts +133 -136
- package/src/memory/migrations/145-drop-accounts-table.ts +4 -7
- package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +79 -82
- package/src/memory/migrations/148-drop-reminders-table.ts +3 -6
- package/src/memory/migrations/150-oauth-apps-client-secret-path.ts +71 -78
- package/src/memory/migrations/157-invite-contact-id.ts +73 -76
- package/src/memory/migrations/162-guardian-timestamps-epoch-ms.ts +44 -58
- package/src/memory/migrations/169-rename-gmail-provider-key-to-google.ts +36 -43
- package/src/memory/migrations/174-rename-thread-starters-table.ts +30 -37
- package/src/memory/migrations/176-drop-capability-card-state.ts +17 -22
- package/src/memory/migrations/177-create-trace-events-table.ts +23 -28
- package/src/memory/migrations/180-backfill-inline-attachments-to-disk.ts +36 -43
- package/src/memory/migrations/181-rename-thread-starters-checkpoints.ts +14 -21
- package/src/memory/migrations/191-backfill-audio-attachment-mime-types.ts +17 -24
- package/src/memory/migrations/192-contacts-user-file-column.ts +6 -9
- package/src/memory/migrations/193-add-source-type-columns.ts +33 -36
- package/src/memory/migrations/194-memory-recall-logs.ts +34 -39
- package/src/memory/migrations/196-strip-integration-prefix-from-provider-keys.ts +59 -66
- package/src/memory/migrations/199-guardian-request-enrichment-columns.ts +41 -48
- package/src/memory/migrations/204-rename-memory-graph-type-values.ts +11 -18
- package/src/memory/migrations/206-scrub-corrupted-image-attachments.ts +76 -83
- package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +50 -57
- package/src/memory/migrations/211-memory-recall-logs-query-context.ts +6 -11
- package/src/memory/migrations/212-llm-request-logs-created-at-index.ts +4 -9
- package/src/memory/migrations/217-conversation-host-access.ts +13 -18
- package/src/memory/migrations/220-normalize-user-file-by-principal.ts +86 -93
- package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +41 -48
- package/src/memory/migrations/230-acp-session-history.ts +23 -28
- package/src/memory/migrations/231-repair-memory-graph-event-dates.ts +58 -62
- package/src/memory/migrations/232-activation-state.ts +11 -16
- package/src/memory/migrations/233-document-conversations.ts +20 -25
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +26 -31
- package/src/memory/migrations/235-slack-compaction-watermark.ts +5 -10
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +6 -11
- package/src/memory/migrations/237-heartbeat-runs.ts +22 -27
- package/src/memory/migrations/239-trace-events-created-at-index.ts +4 -9
- package/src/memory/migrations/242-message-bookmarks.ts +17 -22
- package/src/memory/migrations/245-memory-retrospective-state.ts +8 -13
- package/src/memory/migrations/249-normalize-slack-external-content.ts +37 -41
- package/src/memory/migrations/251-a2a-tasks.ts +27 -32
- package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +12 -17
- package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +10 -15
- package/src/memory/migrations/256-memory-v2-injection-events.ts +70 -74
- package/src/memory/migrations/259-conversation-cleaned-at.ts +4 -9
- package/src/memory/migrations/260-rename-cleaned-at.ts +11 -16
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +3 -8
- package/src/memory/migrations/262-memory-v3-coactivation.ts +21 -26
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +14 -19
- package/src/memory/migrations/270-schedule-description.ts +7 -12
- package/src/memory/migrations/272-acp-session-history-cwd.ts +8 -13
- package/src/memory/migrations/281-memory-retrospective-remembered-log.ts +8 -13
- package/src/memory/migrations/297-move-llm-request-logs-to-logs-db.ts +111 -0
- package/src/memory/migrations/298-move-memory-jobs-to-memory-db.ts +128 -0
- package/src/memory/migrations/299-canonical-guardian-deliveries-conversation-index.ts +19 -0
- package/src/memory/migrations/__tests__/297-move-llm-request-logs.test.ts +180 -0
- package/src/memory/migrations/__tests__/run-migrations.test.ts +333 -7
- package/src/memory/migrations/helpers/relocation.ts +227 -0
- package/src/memory/migrations/registry.ts +63 -0
- package/src/memory/migrations/run-migrations.ts +187 -16
- package/src/memory/migrations/validate-migration-state.ts +50 -145
- package/src/memory/raw-query.ts +47 -2
- package/src/memory/skill-loaded-events-store.test.ts +1 -1
- package/src/memory/task-memory-cleanup.ts +62 -41
- package/src/memory/tool-executed-events-store.test.ts +1 -1
- package/src/memory/turn-trace-store.test.ts +1 -1
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +16 -15
- package/src/memory/v2/__tests__/harness-compare.test.ts +1 -1
- package/src/memory/v2/__tests__/harness-oracle.test.ts +1 -1
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +1 -1
- package/src/memory/v2/__tests__/sweep-job.test.ts +2 -2
- package/src/memory/v3-eval/__tests__/eval-packets.test.ts +38 -0
- package/src/memory/v3-eval/__tests__/eval-tally.test.ts +139 -0
- package/src/memory/v3-eval/eval-packets.ts +197 -12
- package/src/memory/v3-eval/eval-tally.ts +234 -0
- package/src/messaging/provider.ts +10 -0
- package/src/messaging/providers/gmail/adapter.ts +1 -0
- package/src/messaging/providers/gmail/client.ts +14 -0
- package/src/messaging/providers/index.ts +1 -1
- package/src/messaging/providers/slack/send.test.ts +87 -39
- package/src/messaging/providers/slack/send.ts +84 -105
- package/src/notifications/README.md +9 -5
- package/src/notifications/__tests__/deterministic-checks.test.ts +43 -1
- package/src/notifications/adapters/slack.ts +12 -10
- package/src/notifications/approval-card-builder.ts +81 -20
- package/src/notifications/approval-card-data.ts +8 -5
- package/src/notifications/canonical-delivery-recorder.ts +7 -5
- package/src/notifications/conversation-candidates.ts +24 -59
- package/src/notifications/copy-composer.ts +48 -68
- package/src/notifications/deterministic-checks.ts +19 -16
- package/src/notifications/emit-signal.ts +29 -1
- package/src/notifications/trusted-contact-payloads.ts +70 -0
- package/src/oauth/byo-connection.test.ts +9 -0
- package/src/oauth/connection-resolver.test.ts +146 -6
- package/src/oauth/connection-resolver.ts +132 -5
- package/src/oauth/oauth-store.ts +16 -3
- package/src/oauth/scope-utils.ts +21 -0
- package/src/plugin-api/index.ts +9 -4
- package/src/plugin-api/model-profiles.test.ts +123 -0
- package/src/plugin-api/model-profiles.ts +5 -1
- package/src/plugin-api/vision-support.test.ts +149 -0
- package/src/plugin-api/vision-support.ts +78 -0
- package/src/plugins/defaults/compaction/window-manager.ts +45 -64
- package/src/plugins/defaults/empty-response/hooks/post-model-call.ts +13 -4
- package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +302 -0
- package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +103 -0
- package/src/plugins/defaults/image-fallback/package.json +14 -0
- package/src/plugins/defaults/image-fallback/src/caption-cache.ts +49 -0
- package/src/plugins/defaults/image-fallback/src/image-persist.ts +59 -0
- package/src/plugins/defaults/image-fallback/src/vision-caption.ts +120 -0
- package/src/plugins/defaults/index.ts +23 -0
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +14 -1
- package/src/plugins/defaults/memory-retrieval/injectors.ts +4 -4
- package/src/plugins/external-plugin-loader.ts +47 -6
- package/src/plugins/mtime-cache.ts +772 -0
- package/src/plugins/pipeline.ts +7 -2
- package/src/plugins/registry.ts +16 -5
- package/src/plugins/user-loader.ts +22 -76
- package/src/prompts/persona-resolver.ts +29 -11
- package/src/prompts/system-prompt.ts +1 -1
- package/src/prompts/templates/system-sections.ts +4 -4
- package/src/providers/__tests__/count-tokens-forwarding.test.ts +98 -0
- package/src/providers/anthropic/client.ts +254 -185
- package/src/providers/call-site-routing.ts +10 -0
- package/src/providers/gemini/client.ts +43 -0
- package/src/providers/inference/adapter-factory.ts +6 -0
- package/src/providers/inference/connections.ts +6 -1
- package/src/providers/model-catalog.ts +37 -0
- package/src/providers/platform-proxy/constants.ts +5 -0
- package/src/providers/ratelimit.ts +9 -0
- package/src/providers/retry.ts +10 -0
- package/src/providers/together/client.ts +35 -0
- package/src/providers/types.ts +16 -0
- package/src/providers/usage-tracking.ts +7 -0
- package/src/runtime/AGENTS.md +9 -1
- package/src/runtime/__tests__/agent-wake.test.ts +259 -4
- package/src/runtime/__tests__/slack-block-formatting.test.ts +39 -10
- package/src/runtime/__tests__/trust-verdict-consumer.test.ts +417 -0
- package/src/runtime/actor-trust-resolver.ts +8 -16
- package/src/runtime/agent-wake.ts +183 -60
- package/src/runtime/channel-reply-delivery.ts +6 -3
- package/src/runtime/guardian-decision-types.ts +3 -22
- package/src/runtime/http-server.ts +1 -15
- package/src/runtime/invite-redemption-service.ts +155 -6
- package/src/runtime/invite-service.ts +113 -62
- package/src/runtime/migrations/__tests__/vbundle-builder-fd-leak.test.ts +3 -0
- package/src/runtime/routes/__tests__/acp-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +277 -0
- package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +140 -0
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +26 -7
- package/src/runtime/routes/__tests__/consolidation-routes.test.ts +14 -10
- package/src/runtime/routes/__tests__/contact-routes-update-channel-relay.test.ts +164 -0
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +8 -8
- package/src/runtime/routes/__tests__/conversation-surface-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +1 -3
- package/src/runtime/routes/__tests__/invite-relay-routes.test.ts +240 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +4 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +143 -0
- package/src/runtime/routes/__tests__/retrospective-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +1 -1
- package/src/runtime/routes/acp-routes-list.test.ts +4 -0
- package/src/runtime/routes/acp-routes.test.ts +5 -6
- package/src/runtime/routes/attachment-routes.ts +21 -17
- package/src/runtime/routes/browser-routes.ts +19 -1
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +5 -9
- package/src/runtime/routes/channel-verification-routes.ts +12 -1
- package/src/runtime/routes/contact-routes.ts +275 -164
- package/src/runtime/routes/conversation-query-routes.ts +15 -5
- package/src/runtime/routes/conversation-routes.ts +24 -3
- package/src/runtime/routes/conversation-starter-routes.ts +7 -8
- package/src/runtime/routes/guardian-approval-interception.ts +13 -274
- package/src/runtime/routes/inbound-message-handler.ts +20 -15
- package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +285 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +45 -34
- package/src/runtime/routes/inbound-stages/admission-policy.ts +20 -5
- package/src/runtime/routes/log-export-routes.ts +2 -2
- package/src/runtime/routes/memory-eval-routes.ts +92 -0
- package/src/runtime/routes/memory-item-routes.test.ts +12 -11
- package/src/runtime/routes/migration-routes.ts +51 -40
- package/src/runtime/routes/plugins-routes.ts +164 -8
- package/src/runtime/routes/schedule-routes.ts +1 -0
- package/src/runtime/routes/usage-routes.ts +3 -0
- package/src/runtime/routes/work-items-routes.test.ts +1 -1
- package/src/runtime/slack-block-formatting.ts +46 -48
- package/src/runtime/trust-verdict-consumer.ts +172 -0
- package/src/schedule/scheduler.ts +6 -9
- package/src/telemetry/usage-telemetry-reporter.test.ts +1 -1
- package/src/tools/ask-question/ask-question-tool.test.ts +60 -52
- package/src/tools/ask-question/ask-question-tool.ts +14 -73
- package/src/tools/browser/__tests__/browser-status.test.ts +20 -0
- package/src/tools/browser/browser-execution.ts +16 -4
- package/src/tools/document/document-comment-tool.test.ts +1 -1
- package/src/tools/executor.ts +15 -3
- package/src/tools/host-terminal/host-shell.ts +28 -9
- package/src/tools/memory/register.test.ts +32 -0
- package/src/tools/skills/load.ts +43 -2
- package/src/tools/subagent/spawn.ts +4 -10
- package/src/tools/terminal/shell.ts +16 -5
- package/src/tools/types.ts +1 -0
- package/src/util/fs-watcher-error.ts +36 -0
- package/src/util/logs-db-path.ts +22 -0
- package/src/util/memory-db-path.ts +23 -0
- package/src/watcher/providers/gmail.ts +7 -2
- package/src/workflows/engine-integration.test.ts +1 -1
- package/src/workflows/engine.test.ts +1 -1
- package/src/workflows/engine.ts +22 -0
- package/src/workflows/fanout-load.test.ts +1 -1
- package/src/workflows/journal-store.test.ts +1 -1
- package/src/workflows/leaf-runner.test.ts +40 -1
- package/src/workflows/leaf-runner.ts +26 -1
- package/src/workspace/git-service.ts +144 -29
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +121 -0
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +82 -0
- package/src/workspace/migrations/registry.ts +4 -0
- package/src/workspace/migrations/runner.ts +32 -2
- package/src/__tests__/access-request-decision.test.ts +0 -375
- package/src/__tests__/guardian-grant-minting.test.ts +0 -607
- package/src/__tests__/plugin-source-watcher.test.ts +0 -302
- package/src/api/events/turn-profile-auto-routed.ts +0 -28
- package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +0 -107
- package/src/daemon/plugin-source-watcher.ts +0 -278
- package/src/daemon/switch-inference-profile-tool.ts +0 -62
- package/src/memory/guardian-approvals.ts +0 -361
- package/src/memory/migrations/010-ext-conv-bindings-channel-chat-unique.ts +0 -66
- package/src/memory/migrations/038-actor-token-records.ts +0 -45
- package/src/memory/migrations/039-actor-refresh-token-records.ts +0 -57
- package/src/memory/migrations/103-complex-migrations.ts +0 -23
- package/src/memory/migrations/113-late-migrations.ts +0 -30
- package/src/memory/migrations/index.ts +0 -301
- package/src/runtime/routes/access-request-decision.ts +0 -297
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +0 -963
- package/src/runtime/routes/channel-guardian-routes.ts +0 -19
- package/src/runtime/routes/guardian-expiry-sweep.ts +0 -132
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
|
|
3
|
+
import { getLogger } from "../../../util/logger.js";
|
|
4
|
+
import { getDbPath } from "../../../util/platform.js";
|
|
5
|
+
import {
|
|
6
|
+
parseChangesFromStdout,
|
|
7
|
+
runAsyncSqlite,
|
|
8
|
+
} from "../../db-async-query.js";
|
|
9
|
+
|
|
10
|
+
const log = getLogger("memory-db");
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Incremental relocation of a heavy table out of the main DB and into its
|
|
14
|
+
* own file (`assistant-logs.db` / `assistant-memory.db`).
|
|
15
|
+
*
|
|
16
|
+
* A one-shot `INSERT … SELECT` + `DROP TABLE` of a multi-GB table on the daemon
|
|
17
|
+
* connection would pin the write lock and block the event loop for minutes.
|
|
18
|
+
* Instead a relocation runs as an async migration step in two parts:
|
|
19
|
+
*
|
|
20
|
+
* 1. {@link stageTableForRelocation} renames the source table in `main` aside
|
|
21
|
+
* to `<table>__relocating` (instant, metadata-only), so live reads/writes
|
|
22
|
+
* route to the dedicated connection's copy immediately.
|
|
23
|
+
* 2. {@link drainStagedTable} copies the staged rows into the target file in
|
|
24
|
+
* bounded batches and truncates them from the staging table as it goes,
|
|
25
|
+
* then drops it. Each batch runs through `runAsyncSqlite`, which opens the
|
|
26
|
+
* target file directly (the sqlite3 subprocess ATTACHes it), so the work
|
|
27
|
+
* is independent of the daemon connection; the migration `await`s it to
|
|
28
|
+
* completion before checkpointing, so later startup work observes the
|
|
29
|
+
* finished move.
|
|
30
|
+
*
|
|
31
|
+
* The engine is generic: each migration owns its {@link RelocationSpec} (the
|
|
32
|
+
* instance-specific columns / filter / target file) and passes it in.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/** Suffix of the staging table the source is renamed to during relocation. */
|
|
36
|
+
export const RELOCATING_SUFFIX = "__relocating";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Describes how to drain one relocatable table. Defined by the owning migration
|
|
40
|
+
* — never centrally — so instance-specific SQL stays next to the migration that
|
|
41
|
+
* needs it.
|
|
42
|
+
*/
|
|
43
|
+
export interface RelocationSpec {
|
|
44
|
+
/** Live, unqualified table name (renamed aside, then drained into the target). */
|
|
45
|
+
table: string;
|
|
46
|
+
/** Absolute path of the attached DB file the table is moved into. */
|
|
47
|
+
targetDbPath: () => string;
|
|
48
|
+
/**
|
|
49
|
+
* Columns to copy, in a fixed order — listed explicitly (not `SELECT *`) so
|
|
50
|
+
* the copy is insensitive to the physical column order of the source table,
|
|
51
|
+
* which varies with the history of `ALTER TABLE … ADD COLUMN` migrations.
|
|
52
|
+
* Columns absent from the (legacy) source are copied as NULL.
|
|
53
|
+
*/
|
|
54
|
+
columns: string[];
|
|
55
|
+
/**
|
|
56
|
+
* Optional predicate (evaluated against the staging table) selecting rows
|
|
57
|
+
* worth preserving. Rows that do **not** match are deleted without being
|
|
58
|
+
* copied. Omit to copy every row.
|
|
59
|
+
*/
|
|
60
|
+
copyWhere?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Optional per-column SELECT expressions, keyed by column name, for columns
|
|
63
|
+
* that must be transformed during the copy rather than carried verbatim
|
|
64
|
+
* (e.g. resetting a status). The expression is evaluated against the staging
|
|
65
|
+
* row; unlisted columns copy as-is (or NULL when absent from the source).
|
|
66
|
+
*/
|
|
67
|
+
columnExpr?: Record<string, string>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function tableExistsInMain(raw: Database, name: string): boolean {
|
|
71
|
+
return (
|
|
72
|
+
raw
|
|
73
|
+
.query(
|
|
74
|
+
`SELECT name FROM main.sqlite_master WHERE type='table' AND name = ?`,
|
|
75
|
+
)
|
|
76
|
+
.get(name) != null
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function tableIsEmpty(raw: Database, name: string): boolean {
|
|
81
|
+
// EXISTS short-circuits at the first row, so this stays cheap even on a huge
|
|
82
|
+
// table — no full COUNT(*) scan.
|
|
83
|
+
return raw.query(`SELECT 1 FROM main."${name}" LIMIT 1`).get() == null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Move the source table in `main` aside so the unqualified name resolves to the
|
|
88
|
+
* attached copy, returning whether a staging table now exists (i.e. a drain is
|
|
89
|
+
* needed). Idempotent and safe to re-run after a crash:
|
|
90
|
+
*
|
|
91
|
+
* - `main.<table>` empty → drop it (a freshly recreated shadow, or
|
|
92
|
+
* an already-drained leftover).
|
|
93
|
+
* - `main.<table>` non-empty, no
|
|
94
|
+
* staging yet → rename it to `<table>__relocating`.
|
|
95
|
+
* - staging already exists → leave it; a prior boot started the move.
|
|
96
|
+
*
|
|
97
|
+
* `table` comes from a {@link RelocationSpec} (never user input); it is quoted
|
|
98
|
+
* defensively all the same.
|
|
99
|
+
*/
|
|
100
|
+
export function stageTableForRelocation(raw: Database, table: string): boolean {
|
|
101
|
+
const staging = `${table}${RELOCATING_SUFFIX}`;
|
|
102
|
+
const hasStaging = tableExistsInMain(raw, staging);
|
|
103
|
+
|
|
104
|
+
if (tableExistsInMain(raw, table)) {
|
|
105
|
+
if (tableIsEmpty(raw, table)) {
|
|
106
|
+
raw.exec(`DROP TABLE main."${table}"`);
|
|
107
|
+
} else if (!hasStaging) {
|
|
108
|
+
raw.exec(`ALTER TABLE main."${table}" RENAME TO "${staging}"`);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
// else: a non-empty live table alongside an existing staging table is not
|
|
112
|
+
// expected; leave both and let the in-flight drain finish first.
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return tableExistsInMain(raw, staging);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Rows copied/purged per drain batch. Each batch is a couple of bounded
|
|
120
|
+
* statements, so the write lock is held only briefly and the event loop is free
|
|
121
|
+
* between batches. Sized as a balance between throughput and lock-hold time.
|
|
122
|
+
*/
|
|
123
|
+
const DRAIN_BATCH = 10_000;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Drain a `<table>__relocating` staging table created by
|
|
127
|
+
* {@link stageTableForRelocation}: copy the rows worth keeping into the attached
|
|
128
|
+
* target in bounded batches, purge the rest without copying, then drop the
|
|
129
|
+
* staging table and truncate the main WAL. Resolves once the move is complete.
|
|
130
|
+
*
|
|
131
|
+
* Awaited inline by the relocation migration step, so it runs at most once per
|
|
132
|
+
* boot under the migration runner's checkpoint: an interrupted drain leaves the
|
|
133
|
+
* step uncheckpointed and the staging table in place, and the next boot
|
|
134
|
+
* re-stages (a no-op) and resumes from the remaining rows. Each batch is
|
|
135
|
+
* dispatched off the connection via `runAsyncSqlite` (sqlite3 subprocess when
|
|
136
|
+
* available; in-process fallback otherwise), keeping the event loop responsive
|
|
137
|
+
* between batches. A batch failure throws so the step is reported failed and
|
|
138
|
+
* retried on the next boot rather than checkpointed as done.
|
|
139
|
+
*/
|
|
140
|
+
export async function drainStagedTable(
|
|
141
|
+
raw: Database,
|
|
142
|
+
spec: RelocationSpec,
|
|
143
|
+
): Promise<void> {
|
|
144
|
+
const { table } = spec;
|
|
145
|
+
const staging = `${table}${RELOCATING_SUFFIX}`;
|
|
146
|
+
|
|
147
|
+
// Nothing to do once the staging table is gone (drain finished previously).
|
|
148
|
+
if (!tableExistsInMain(raw, staging)) return;
|
|
149
|
+
|
|
150
|
+
// Build a select list from the staging table's actual columns: apply any
|
|
151
|
+
// per-column transform, copy a present column verbatim, NULL-fill an absent
|
|
152
|
+
// (legacy) one so an older row still copies cleanly.
|
|
153
|
+
const present = new Set(
|
|
154
|
+
(
|
|
155
|
+
raw
|
|
156
|
+
.query(`SELECT name FROM pragma_table_info('${staging}', 'main')`)
|
|
157
|
+
.all() as Array<{ name: string }>
|
|
158
|
+
).map((r) => r.name),
|
|
159
|
+
);
|
|
160
|
+
const colList = spec.columns.map((c) => `"${c}"`).join(", ");
|
|
161
|
+
const selectList = spec.columns
|
|
162
|
+
.map((c) => spec.columnExpr?.[c] ?? (present.has(c) ? `"${c}"` : "NULL"))
|
|
163
|
+
.join(", ");
|
|
164
|
+
|
|
165
|
+
const dbPath = getDbPath();
|
|
166
|
+
const whereCopy = spec.copyWhere ? `WHERE ${spec.copyWhere}` : "";
|
|
167
|
+
|
|
168
|
+
for (;;) {
|
|
169
|
+
// (1) Purge a batch of non-keeper rows (no copy) when a copy filter narrows
|
|
170
|
+
// what is worth preserving — this is the bulk of a runaway queue.
|
|
171
|
+
let purged = 0;
|
|
172
|
+
if (spec.copyWhere) {
|
|
173
|
+
const res = await runAsyncSqlite(
|
|
174
|
+
`DELETE FROM "${staging}" WHERE rowid IN (` +
|
|
175
|
+
`SELECT rowid FROM "${staging}" WHERE NOT (${spec.copyWhere}) LIMIT ${DRAIN_BATCH});\n` +
|
|
176
|
+
`SELECT changes();`,
|
|
177
|
+
{ dbPath },
|
|
178
|
+
);
|
|
179
|
+
if (!res.ok) {
|
|
180
|
+
throw new Error(
|
|
181
|
+
`relocation purge batch failed for "${table}": ${res.error}`,
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
purged = parseChangesFromStdout(res.stdout);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// (2) Copy a batch of keepers, then truncate those same rows. Two
|
|
188
|
+
// autocommitted statements (no BEGIN): the copy commits before the
|
|
189
|
+
// delete, so a crash in between just re-copies (INSERT OR IGNORE no-op)
|
|
190
|
+
// and re-deletes next boot — safe across the non-atomic cross-DB commit.
|
|
191
|
+
const copyRes = await runAsyncSqlite(
|
|
192
|
+
`INSERT OR IGNORE INTO "${table}" (${colList}) ` +
|
|
193
|
+
`SELECT ${selectList} FROM "${staging}" ${whereCopy} ORDER BY rowid LIMIT ${DRAIN_BATCH};\n` +
|
|
194
|
+
`DELETE FROM "${staging}" WHERE rowid IN (` +
|
|
195
|
+
`SELECT rowid FROM "${staging}" ${whereCopy} ORDER BY rowid LIMIT ${DRAIN_BATCH});\n` +
|
|
196
|
+
`SELECT changes();`,
|
|
197
|
+
{
|
|
198
|
+
dbPath,
|
|
199
|
+
attach: [{ path: spec.targetDbPath(), alias: "_reloc_target" }],
|
|
200
|
+
},
|
|
201
|
+
);
|
|
202
|
+
if (!copyRes.ok) {
|
|
203
|
+
throw new Error(
|
|
204
|
+
`relocation copy batch failed for "${table}": ${copyRes.error}`,
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
const moved = parseChangesFromStdout(copyRes.stdout);
|
|
208
|
+
|
|
209
|
+
if (purged > 0 || moved > 0) {
|
|
210
|
+
log.info({ table, purged, moved }, "relocation: drain progressed");
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Drained — drop the (now empty) staging table and truncate the main WAL.
|
|
217
|
+
const finalizeRes = await runAsyncSqlite(
|
|
218
|
+
`DROP TABLE IF EXISTS "${staging}";\nPRAGMA wal_checkpoint(TRUNCATE);`,
|
|
219
|
+
{ dbPath },
|
|
220
|
+
);
|
|
221
|
+
if (!finalizeRes.ok) {
|
|
222
|
+
throw new Error(
|
|
223
|
+
`relocation finalize failed for "${table}": ${finalizeRes.error}`,
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
log.info({ table }, "relocation: complete — staging dropped");
|
|
227
|
+
}
|
|
@@ -62,6 +62,12 @@ import { downScheduleDescription } from "./270-schedule-description.js";
|
|
|
62
62
|
export interface MigrationRegistryEntry {
|
|
63
63
|
/** The checkpoint key written to memory_checkpoints on completion. */
|
|
64
64
|
key: string;
|
|
65
|
+
/**
|
|
66
|
+
* The name of the migration step function (as registered in db-init's step
|
|
67
|
+
* array). The step runner writes `step:${stepName}` checkpoints — this field
|
|
68
|
+
* maps registry entries to those step checkpoints for validation and rollback.
|
|
69
|
+
*/
|
|
70
|
+
stepName: string;
|
|
65
71
|
/** Monotonic version number used for ordering assertions. */
|
|
66
72
|
version: number;
|
|
67
73
|
/** Keys of other migrations that must complete before this one runs. */
|
|
@@ -86,6 +92,7 @@ export interface MigrationRegistryEntry {
|
|
|
86
92
|
export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
87
93
|
{
|
|
88
94
|
key: "migration_job_deferrals",
|
|
95
|
+
stepName: "migrateJobDeferrals",
|
|
89
96
|
version: 1,
|
|
90
97
|
description:
|
|
91
98
|
"Reconcile legacy deferral history from attempts column into deferrals column",
|
|
@@ -93,6 +100,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
93
100
|
},
|
|
94
101
|
{
|
|
95
102
|
key: "migration_memory_entity_relations_dedup_v1",
|
|
103
|
+
stepName: "migrateMemoryEntityRelationDedup",
|
|
96
104
|
version: 2,
|
|
97
105
|
description:
|
|
98
106
|
"Deduplicate entity relation edges before enforcing the (source, target, relation) unique index",
|
|
@@ -100,6 +108,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
100
108
|
},
|
|
101
109
|
{
|
|
102
110
|
key: "migration_memory_items_fingerprint_scope_unique_v1",
|
|
111
|
+
stepName: "migrateMemoryItemsFingerprintScopeUnique",
|
|
103
112
|
version: 3,
|
|
104
113
|
description:
|
|
105
114
|
"Replace column-level UNIQUE on fingerprint with compound (fingerprint, scope_id) unique index",
|
|
@@ -107,6 +116,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
107
116
|
},
|
|
108
117
|
{
|
|
109
118
|
key: "migration_memory_items_scope_salted_fingerprints_v1",
|
|
119
|
+
stepName: "migrateMemoryItemsScopeSaltedFingerprints",
|
|
110
120
|
version: 4,
|
|
111
121
|
dependsOn: ["migration_memory_items_fingerprint_scope_unique_v1"],
|
|
112
122
|
description:
|
|
@@ -115,6 +125,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
115
125
|
},
|
|
116
126
|
{
|
|
117
127
|
key: "migration_normalize_assistant_id_to_self_v1",
|
|
128
|
+
stepName: "migrateAssistantIdToSelf",
|
|
118
129
|
version: 5,
|
|
119
130
|
description:
|
|
120
131
|
'Normalize all assistant_id values in scoped tables to the implicit "self" single-tenant identity',
|
|
@@ -122,6 +133,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
122
133
|
},
|
|
123
134
|
{
|
|
124
135
|
key: "migration_remove_assistant_id_columns_v1",
|
|
136
|
+
stepName: "migrateRemoveAssistantIdColumns",
|
|
125
137
|
version: 6,
|
|
126
138
|
dependsOn: ["migration_normalize_assistant_id_to_self_v1"],
|
|
127
139
|
description:
|
|
@@ -130,6 +142,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
130
142
|
},
|
|
131
143
|
{
|
|
132
144
|
key: "migration_remove_assistant_id_lue_v1",
|
|
145
|
+
stepName: "migrateLlmUsageEventsDropAssistantId",
|
|
133
146
|
version: 7,
|
|
134
147
|
dependsOn: ["migration_normalize_assistant_id_to_self_v1"],
|
|
135
148
|
description:
|
|
@@ -138,6 +151,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
138
151
|
},
|
|
139
152
|
{
|
|
140
153
|
key: "backfill_inbox_thread_state_from_bindings",
|
|
154
|
+
stepName: "createAssistantInboxTables",
|
|
141
155
|
version: 8,
|
|
142
156
|
description:
|
|
143
157
|
"Seed assistant_inbox_thread_state from external_conversation_bindings",
|
|
@@ -145,6 +159,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
145
159
|
},
|
|
146
160
|
{
|
|
147
161
|
key: "drop_active_search_index_v1",
|
|
162
|
+
stepName: "createCoreIndexes",
|
|
148
163
|
version: 9,
|
|
149
164
|
description:
|
|
150
165
|
"Drop old idx_memory_items_active_search so it can be recreated with updated covering columns",
|
|
@@ -152,6 +167,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
152
167
|
},
|
|
153
168
|
{
|
|
154
169
|
key: "migration_notification_tables_schema_v1",
|
|
170
|
+
stepName: "createNotificationTables",
|
|
155
171
|
version: 10,
|
|
156
172
|
description:
|
|
157
173
|
"Drop legacy enum-based notification tables so they can be recreated with the new signal-contract schema",
|
|
@@ -159,6 +175,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
159
175
|
},
|
|
160
176
|
{
|
|
161
177
|
key: "migration_rename_macos_ios_channel_to_vellum_v1",
|
|
178
|
+
stepName: "migrateRenameChannelToVellum",
|
|
162
179
|
version: 11,
|
|
163
180
|
description:
|
|
164
181
|
"Rename macos and ios channel identifiers to vellum across all tables",
|
|
@@ -166,6 +183,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
166
183
|
},
|
|
167
184
|
{
|
|
168
185
|
key: "migration_embedding_vector_blob_v1",
|
|
186
|
+
stepName: "migrateEmbeddingVectorBlob",
|
|
169
187
|
version: 12,
|
|
170
188
|
description:
|
|
171
189
|
"Add vector_blob BLOB column to memory_embeddings and backfill from vector_json for compact binary storage",
|
|
@@ -173,6 +191,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
173
191
|
},
|
|
174
192
|
{
|
|
175
193
|
key: "migration_embeddings_nullable_vector_json_v1",
|
|
194
|
+
stepName: "migrateEmbeddingsNullableVectorJson",
|
|
176
195
|
version: 13,
|
|
177
196
|
dependsOn: ["migration_embedding_vector_blob_v1"],
|
|
178
197
|
description:
|
|
@@ -181,6 +200,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
181
200
|
},
|
|
182
201
|
{
|
|
183
202
|
key: "migration_normalize_phone_identities_v1",
|
|
203
|
+
stepName: "migrateNormalizePhoneIdentities",
|
|
184
204
|
version: 14,
|
|
185
205
|
description:
|
|
186
206
|
"Normalize phone-like identity fields to E.164 format across guardian bindings, verification challenges, canonical requests, ingress members, and rate limits",
|
|
@@ -188,6 +208,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
188
208
|
},
|
|
189
209
|
{
|
|
190
210
|
key: "migration_backfill_guardian_principal_id_v3",
|
|
211
|
+
stepName: "migrateBackfillGuardianPrincipalId",
|
|
191
212
|
version: 15,
|
|
192
213
|
description:
|
|
193
214
|
"Backfill guardianPrincipalId for existing channel_guardian_bindings and canonical_guardian_requests rows, expire unresolvable pending requests",
|
|
@@ -195,6 +216,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
195
216
|
},
|
|
196
217
|
{
|
|
197
218
|
key: "migration_guardian_principal_id_not_null_v1",
|
|
219
|
+
stepName: "migrateGuardianPrincipalIdNotNull",
|
|
198
220
|
version: 16,
|
|
199
221
|
dependsOn: ["migration_backfill_guardian_principal_id_v3"],
|
|
200
222
|
description:
|
|
@@ -203,6 +225,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
203
225
|
},
|
|
204
226
|
{
|
|
205
227
|
key: "migration_contacts_notes_column_v1",
|
|
228
|
+
stepName: "migrateContactsNotesColumn",
|
|
206
229
|
version: 17,
|
|
207
230
|
description:
|
|
208
231
|
"Consolidate relationship/importance/response_expectation/preferred_tone into a single notes TEXT column, then drop the legacy columns",
|
|
@@ -210,6 +233,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
210
233
|
},
|
|
211
234
|
{
|
|
212
235
|
key: "backfill_contact_interaction_stats",
|
|
236
|
+
stepName: "migrateBackfillContactInteractionStats",
|
|
213
237
|
version: 18,
|
|
214
238
|
description:
|
|
215
239
|
"Backfill contacts.last_interaction from the max lastSeenAt across each contact's channels",
|
|
@@ -217,6 +241,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
217
241
|
},
|
|
218
242
|
{
|
|
219
243
|
key: "migration_drop_assistant_id_columns_v1",
|
|
244
|
+
stepName: "migrateDropAssistantIdColumns",
|
|
220
245
|
version: 19,
|
|
221
246
|
dependsOn: ["migration_normalize_assistant_id_to_self_v1"],
|
|
222
247
|
description:
|
|
@@ -225,6 +250,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
225
250
|
},
|
|
226
251
|
{
|
|
227
252
|
key: "migration_backfill_usage_cache_accounting_v1",
|
|
253
|
+
stepName: "migrateBackfillUsageCacheAccounting",
|
|
228
254
|
version: 20,
|
|
229
255
|
description:
|
|
230
256
|
"Backfill historical Anthropic llm_usage_events rows from llm_request_logs with cache-aware pricing",
|
|
@@ -232,6 +258,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
232
258
|
},
|
|
233
259
|
{
|
|
234
260
|
key: "migration_rename_verification_table_v1",
|
|
261
|
+
stepName: "migrateRenameVerificationTable",
|
|
235
262
|
version: 21,
|
|
236
263
|
description:
|
|
237
264
|
"Rename channel_guardian_verification_challenges table to channel_verification_sessions and update indexes",
|
|
@@ -239,6 +266,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
239
266
|
},
|
|
240
267
|
{
|
|
241
268
|
key: "migration_rename_verification_session_id_column_v1",
|
|
269
|
+
stepName: "migrateRenameVerificationSessionIdColumn",
|
|
242
270
|
version: 22,
|
|
243
271
|
description:
|
|
244
272
|
"Rename guardian_verification_session_id column in call_sessions to verification_session_id",
|
|
@@ -246,6 +274,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
246
274
|
},
|
|
247
275
|
{
|
|
248
276
|
key: "migration_rename_guardian_verification_values_v1",
|
|
277
|
+
stepName: "migrateRenameGuardianVerificationValues",
|
|
249
278
|
version: 23,
|
|
250
279
|
description:
|
|
251
280
|
"Rename persisted guardian_verification call_mode and guardian_voice_verification_* event_type values to drop the guardian_ prefix",
|
|
@@ -253,6 +282,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
253
282
|
},
|
|
254
283
|
{
|
|
255
284
|
key: "migration_rename_voice_to_phone_v1",
|
|
285
|
+
stepName: "migrateRenameVoiceToPhone",
|
|
256
286
|
version: 24,
|
|
257
287
|
description:
|
|
258
288
|
'Rename stored "voice" channel values to "phone" across all tables with channel text columns',
|
|
@@ -260,6 +290,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
260
290
|
},
|
|
261
291
|
{
|
|
262
292
|
key: "migration_drop_accounts_table_v1",
|
|
293
|
+
stepName: "migrateDropAccountsTable",
|
|
263
294
|
version: 25,
|
|
264
295
|
description:
|
|
265
296
|
"Drop the unused legacy accounts table and its leftover indexes after account_manage removal",
|
|
@@ -267,6 +298,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
267
298
|
},
|
|
268
299
|
{
|
|
269
300
|
key: "migration_reminders_to_schedules_v1",
|
|
301
|
+
stepName: "migrateRemindersToSchedules",
|
|
270
302
|
version: 26,
|
|
271
303
|
description:
|
|
272
304
|
"Copy all existing reminders into cron_jobs as one-shot schedules with correct status and field mapping",
|
|
@@ -274,6 +306,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
274
306
|
},
|
|
275
307
|
{
|
|
276
308
|
key: "migration_drop_reminders_table_v1",
|
|
309
|
+
stepName: "migrateDropRemindersTable",
|
|
277
310
|
version: 27,
|
|
278
311
|
dependsOn: ["migration_reminders_to_schedules_v1"],
|
|
279
312
|
description:
|
|
@@ -282,6 +315,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
282
315
|
},
|
|
283
316
|
{
|
|
284
317
|
key: "migration_oauth_apps_client_secret_path_v1",
|
|
318
|
+
stepName: "migrateOAuthAppsClientSecretPath",
|
|
285
319
|
version: 28,
|
|
286
320
|
description:
|
|
287
321
|
"Add client_secret_credential_path column to oauth_apps and backfill existing rows with convention-based paths",
|
|
@@ -289,6 +323,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
289
323
|
},
|
|
290
324
|
{
|
|
291
325
|
key: "migration_guardian_timestamps_epoch_ms_v1",
|
|
326
|
+
stepName: "migrateGuardianTimestampsEpochMs",
|
|
292
327
|
version: 29,
|
|
293
328
|
description:
|
|
294
329
|
"Convert guardian table timestamps from ISO 8601 text to epoch ms integers for consistency with all other tables",
|
|
@@ -296,6 +331,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
296
331
|
},
|
|
297
332
|
{
|
|
298
333
|
key: "migration_guardian_timestamps_rebuild_v1",
|
|
334
|
+
stepName: "migrateGuardianTimestampsEpochMs",
|
|
299
335
|
version: 30,
|
|
300
336
|
dependsOn: ["migration_guardian_timestamps_epoch_ms_v1"],
|
|
301
337
|
description:
|
|
@@ -304,6 +340,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
304
340
|
},
|
|
305
341
|
{
|
|
306
342
|
key: "migration_rename_gmail_provider_key_to_google_v1",
|
|
343
|
+
stepName: "migrateRenameGmailProviderKeyToGoogle",
|
|
307
344
|
version: 31,
|
|
308
345
|
description:
|
|
309
346
|
"Rename integration:gmail provider key to integration:google across oauth_providers, oauth_apps, and oauth_connections",
|
|
@@ -311,6 +348,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
311
348
|
},
|
|
312
349
|
{
|
|
313
350
|
key: "migration_rename_thread_starters_table_v1",
|
|
351
|
+
stepName: "migrateRenameThreadStartersTable",
|
|
314
352
|
version: 32,
|
|
315
353
|
description:
|
|
316
354
|
"Rename thread_starters table to conversation_starters and recreate indexes with new names",
|
|
@@ -318,6 +356,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
318
356
|
},
|
|
319
357
|
{
|
|
320
358
|
key: "migration_drop_capability_card_state_v1",
|
|
359
|
+
stepName: "migrateDropCapabilityCardState",
|
|
321
360
|
version: 33,
|
|
322
361
|
dependsOn: ["migration_rename_thread_starters_table_v1"],
|
|
323
362
|
description:
|
|
@@ -326,6 +365,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
326
365
|
},
|
|
327
366
|
{
|
|
328
367
|
key: "migration_backfill_inline_attachments_v1",
|
|
368
|
+
stepName: "migrateBackfillInlineAttachmentsToDisk",
|
|
329
369
|
version: 34,
|
|
330
370
|
description:
|
|
331
371
|
"Backfill existing inline base64 attachments to on-disk storage and clear dataBase64",
|
|
@@ -333,6 +373,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
333
373
|
},
|
|
334
374
|
{
|
|
335
375
|
key: "migration_rename_thread_starters_checkpoints_v1",
|
|
376
|
+
stepName: "migrateRenameThreadStartersCheckpoints",
|
|
336
377
|
version: 35,
|
|
337
378
|
dependsOn: ["migration_rename_thread_starters_table_v1"],
|
|
338
379
|
description:
|
|
@@ -341,6 +382,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
341
382
|
},
|
|
342
383
|
{
|
|
343
384
|
key: "migration_backfill_audio_attachment_mime_types_v1",
|
|
385
|
+
stepName: "migrateBackfillAudioAttachmentMimeTypes",
|
|
344
386
|
version: 36,
|
|
345
387
|
description:
|
|
346
388
|
"Backfill correct MIME types for audio attachments stored as application/octet-stream due to missing extension map entries",
|
|
@@ -348,6 +390,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
348
390
|
},
|
|
349
391
|
{
|
|
350
392
|
key: "migration_add_source_type_columns_v1",
|
|
393
|
+
stepName: "migrateAddSourceTypeColumns",
|
|
351
394
|
version: 37,
|
|
352
395
|
description:
|
|
353
396
|
"Add source_type and source_message_role columns to memory_items with backfill from verification_state and source messages",
|
|
@@ -355,6 +398,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
355
398
|
},
|
|
356
399
|
{
|
|
357
400
|
key: "migration_strip_integration_prefix_from_provider_keys_v1",
|
|
401
|
+
stepName: "migrateStripIntegrationPrefixFromProviderKeys",
|
|
358
402
|
version: 38,
|
|
359
403
|
description:
|
|
360
404
|
"Strip integration: prefix from provider_key across oauth_providers, oauth_apps, and oauth_connections",
|
|
@@ -362,6 +406,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
362
406
|
},
|
|
363
407
|
{
|
|
364
408
|
key: "migration_rename_memory_graph_type_values_v1",
|
|
409
|
+
stepName: "migrateRenameMemoryGraphTypeValues",
|
|
365
410
|
version: 39,
|
|
366
411
|
description:
|
|
367
412
|
"Rename legacy memory graph node type values: style → behavioral, relationship → semantic",
|
|
@@ -369,6 +414,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
369
414
|
},
|
|
370
415
|
{
|
|
371
416
|
key: "migration_scrub_corrupted_image_attachments_v1",
|
|
417
|
+
stepName: "migrateScrubCorruptedImageAttachments",
|
|
372
418
|
version: 40,
|
|
373
419
|
description:
|
|
374
420
|
"Remove image attachments containing HTML error pages instead of image data",
|
|
@@ -376,6 +422,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
376
422
|
},
|
|
377
423
|
{
|
|
378
424
|
key: "migration_conversation_host_access_v1",
|
|
425
|
+
stepName: "migrateConversationHostAccess",
|
|
379
426
|
version: 41,
|
|
380
427
|
description:
|
|
381
428
|
"Add a host_access column to conversations so computer access is persisted per conversation with a safe default of disabled",
|
|
@@ -383,6 +430,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
383
430
|
},
|
|
384
431
|
{
|
|
385
432
|
key: "migration_normalize_user_file_by_principal_v1",
|
|
433
|
+
stepName: "migrateNormalizeUserFileByPrincipal",
|
|
386
434
|
version: 42,
|
|
387
435
|
description:
|
|
388
436
|
"Normalize contacts.user_file across rows sharing the same principal_id so every channel for one principal loads the same users/<slug>.md persona and journal directory",
|
|
@@ -390,12 +438,14 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
390
438
|
},
|
|
391
439
|
{
|
|
392
440
|
key: "migration_activation_state_v1",
|
|
441
|
+
stepName: "migrateActivationState",
|
|
393
442
|
version: 43,
|
|
394
443
|
description: "Create activation_state table for memory v2",
|
|
395
444
|
down: downActivationState,
|
|
396
445
|
},
|
|
397
446
|
{
|
|
398
447
|
key: "migration_memory_v2_activation_logs_v1",
|
|
448
|
+
stepName: "migrateMemoryV2ActivationLogs",
|
|
399
449
|
version: 44,
|
|
400
450
|
description:
|
|
401
451
|
"Create memory_v2_activation_logs table for per-turn v2 activation telemetry consumed by the LLM Context Inspector",
|
|
@@ -403,6 +453,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
403
453
|
},
|
|
404
454
|
{
|
|
405
455
|
key: "migration_slack_compaction_watermark_v1",
|
|
456
|
+
stepName: "migrateSlackCompactionWatermark",
|
|
406
457
|
version: 45,
|
|
407
458
|
description:
|
|
408
459
|
"Add Slack-specific compaction watermark columns to conversations",
|
|
@@ -410,6 +461,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
410
461
|
},
|
|
411
462
|
{
|
|
412
463
|
key: "migration_tool_invocations_matched_trust_rule_id_v1",
|
|
464
|
+
stepName: "migrateToolInvocationsMatchedRuleId",
|
|
413
465
|
version: 46,
|
|
414
466
|
description:
|
|
415
467
|
"Add matched_trust_rule_id column to tool_invocations for trust rule audit and rule editor UI",
|
|
@@ -417,6 +469,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
417
469
|
},
|
|
418
470
|
{
|
|
419
471
|
key: "migration_heartbeat_runs_v1",
|
|
472
|
+
stepName: "migrateHeartbeatRuns",
|
|
420
473
|
version: 47,
|
|
421
474
|
description:
|
|
422
475
|
"Create heartbeat_runs table for tracking heartbeat execution lifecycle with CAS state transitions",
|
|
@@ -424,6 +477,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
424
477
|
},
|
|
425
478
|
{
|
|
426
479
|
key: "migration_normalize_slack_external_content_v1",
|
|
480
|
+
stepName: "migrateNormalizeSlackExternalContent",
|
|
427
481
|
version: 48,
|
|
428
482
|
description:
|
|
429
483
|
"Normalize legacy persisted Slack external_content wrappers back to raw message content",
|
|
@@ -431,6 +485,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
431
485
|
},
|
|
432
486
|
{
|
|
433
487
|
key: "migration_a2a_tasks_v1",
|
|
488
|
+
stepName: "migrateA2ATasks",
|
|
434
489
|
version: 49,
|
|
435
490
|
description:
|
|
436
491
|
"Create a2a_tasks table for tracking A2A request/response lifecycle",
|
|
@@ -438,6 +493,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
438
493
|
},
|
|
439
494
|
{
|
|
440
495
|
key: "migration_external_conversation_binding_chat_name_v1",
|
|
496
|
+
stepName: "migrateExternalConversationBindingChatName",
|
|
441
497
|
version: 50,
|
|
442
498
|
description:
|
|
443
499
|
"Add external_chat_name to external conversation bindings for channel footer metadata",
|
|
@@ -445,6 +501,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
445
501
|
},
|
|
446
502
|
{
|
|
447
503
|
key: "migration_memory_v2_injection_events_v1",
|
|
504
|
+
stepName: "migrateMemoryV2InjectionEvents",
|
|
448
505
|
version: 51,
|
|
449
506
|
dependsOn: ["migration_memory_v2_activation_logs_v1"],
|
|
450
507
|
description:
|
|
@@ -453,6 +510,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
453
510
|
},
|
|
454
511
|
{
|
|
455
512
|
key: "migration_conversation_cleaned_at_v1",
|
|
513
|
+
stepName: "migrateConversationCleanedAt",
|
|
456
514
|
version: 52,
|
|
457
515
|
description:
|
|
458
516
|
"Add cleaned_at timestamp to conversations so /clean survives reload and forks inherit conditionally on fork point",
|
|
@@ -460,6 +518,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
460
518
|
},
|
|
461
519
|
{
|
|
462
520
|
key: "migration_rename_cleaned_at_v1",
|
|
521
|
+
stepName: "migrateRenameCleanedAt",
|
|
463
522
|
version: 53,
|
|
464
523
|
dependsOn: ["migration_conversation_cleaned_at_v1"],
|
|
465
524
|
description:
|
|
@@ -468,6 +527,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
468
527
|
},
|
|
469
528
|
{
|
|
470
529
|
key: "migration_llm_usage_add_raw_usage_v1",
|
|
530
|
+
stepName: "migrateLlmUsageAddRawUsage",
|
|
471
531
|
version: 54,
|
|
472
532
|
description:
|
|
473
533
|
"Add raw_usage TEXT column to llm_usage_events for storing the provider's untouched usage block as JSON (Anthropic TTL breakdown, OpenAI prompt/completion token details, etc.) so downstream consumers can extract provider-specific detail without per-field schema changes",
|
|
@@ -475,6 +535,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
475
535
|
},
|
|
476
536
|
{
|
|
477
537
|
key: "migration_memory_v3_coactivation_v1",
|
|
538
|
+
stepName: "migrateMemoryV3Coactivation",
|
|
478
539
|
version: 55,
|
|
479
540
|
description:
|
|
480
541
|
"Create memory_v3_coactivation table — append-only log of pass-1 → pass-N co-activation pairs (gradient signal) emitted by the v3 retrieval loop and reconciled later by edge-learning",
|
|
@@ -482,6 +543,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
482
543
|
},
|
|
483
544
|
{
|
|
484
545
|
key: "migration_memory_v3_auto_edges_v1",
|
|
546
|
+
stepName: "migrateMemoryV3AutoEdges",
|
|
485
547
|
version: 56,
|
|
486
548
|
description:
|
|
487
549
|
"Create memory_v3_auto_edges table — weighted, decaying learned association graph (distinct from curated edges:) accrued by the edge-learning job from used co-activations and consumed above-threshold by edge expansion",
|
|
@@ -489,6 +551,7 @@ export const MIGRATION_REGISTRY: MigrationRegistryEntry[] = [
|
|
|
489
551
|
},
|
|
490
552
|
{
|
|
491
553
|
key: "migration_schedule_description_backfill_v1",
|
|
554
|
+
stepName: "migrateScheduleDescription",
|
|
492
555
|
version: 57,
|
|
493
556
|
description:
|
|
494
557
|
"Backfill authored schedule descriptions for legacy non-defer schedules from their existing names",
|