@vellumai/assistant 0.10.0 → 0.10.1-dev.202606240317.ea25efe
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 +12 -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__/guardian-delivery-contract.test.ts +91 -0
- package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +96 -0
- package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +162 -0
- package/node_modules/@vellumai/gateway-client/src/guardian-delivery-contract.ts +48 -0
- package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +8 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +28 -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 +95 -0
- package/openapi.yaml +458 -18
- package/package.json +2 -1
- package/scripts/memory-inspect.ts +24 -14
- package/scripts/test.sh +36 -15
- 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 +39 -17
- 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 +210 -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 +20 -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__/card-surface-data.test.ts +60 -0
- 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 +291 -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 +188 -52
- package/src/__tests__/config-schema.test.ts +35 -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 +7 -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 +95 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +12 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +12 -0
- 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 +4 -4
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +352 -0
- package/src/__tests__/conversation-sync-tags.test.ts +1 -1
- package/src/__tests__/conversation-tool-setup-attribution.test.ts +47 -0
- 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 +28 -8
- package/src/__tests__/disk-pressure-guard.test.ts +41 -0
- 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__/dynamic-page-surface.test.ts +0 -94
- package/src/__tests__/edit-propagation.test.ts +1 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +93 -5
- package/src/__tests__/empty-response-hook.test.ts +42 -0
- package/src/__tests__/events-client-registration.test.ts +1 -1
- package/src/__tests__/events-dev-bypass-actor.test.ts +7 -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 +76 -11
- 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 +96 -2
- package/src/__tests__/guardian-outbound-http.test.ts +20 -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 +92 -0
- package/src/__tests__/host-app-control-routes.test.ts +24 -30
- package/src/__tests__/host-bash-routes.test.ts +31 -41
- package/src/__tests__/host-browser-routes.test.ts +26 -32
- package/src/__tests__/host-cu-routes-targeted.test.ts +25 -33
- package/src/__tests__/host-file-routes-targeted.test.ts +40 -52
- package/src/__tests__/host-transfer-routes-targeted.test.ts +31 -43
- package/src/__tests__/http-conversation-lineage.test.ts +1 -1
- package/src/__tests__/http-user-message-parity.test.ts +165 -8
- 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-normalization.test.ts +105 -0
- 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-resolver.test.ts +205 -5
- package/src/__tests__/llm-usage-store.test.ts +65 -1
- package/src/__tests__/log-export-routes.test.ts +1 -1
- package/src/__tests__/log-export-workspace.test.ts +3 -3
- package/src/__tests__/media-stream-server-integration.test.ts +127 -0
- 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 +190 -19
- package/src/__tests__/notification-broadcaster.test.ts +4 -0
- package/src/__tests__/notification-candidate-guardian-context.test.ts +203 -0
- package/src/__tests__/notification-decision-recipient-context.test.ts +33 -32
- package/src/__tests__/notification-deep-link.test.ts +4 -0
- package/src/__tests__/notification-guardian-path.test.ts +20 -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__/pending-interactions-resolved-event.test.ts +7 -4
- 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 +40 -1
- package/src/__tests__/prune-old-conversations-job.test.ts +1 -1
- package/src/__tests__/reaction-persistence.test.ts +1 -1
- package/src/__tests__/registry.test.ts +3 -0
- package/src/__tests__/relay-server.test.ts +1026 -73
- package/src/__tests__/runtime-attachment-metadata.test.ts +9 -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-ingress-http.test.ts +12 -0
- package/src/__tests__/secret-routes-platform-proxy.test.ts +1 -0
- package/src/__tests__/send-endpoint-busy.test.ts +31 -9
- 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__/skills.test.ts +44 -0
- package/src/__tests__/slack-inbound-verification.test.ts +48 -5
- 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__/sse-actor-principal-guardian-source.test.ts +102 -0
- package/src/__tests__/steer-on-enqueue-question.test.ts +181 -0
- package/src/__tests__/stt-hints.test.ts +44 -13
- package/src/__tests__/subagent-detail.test.ts +27 -0
- package/src/__tests__/subagent-disposal.test.ts +65 -0
- 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 +37 -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 +98 -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/__tests__/workspace-tool-loader.test.ts +3 -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-exclusive-tool.test.ts +150 -0
- package/src/agent/loop.ts +101 -27
- package/src/api/constants/sse-replay.ts +41 -0
- package/src/api/events/ui-surface-show.ts +8 -3
- package/src/api/index.ts +7 -6
- package/src/api/responses/conversation-message.ts +4 -0
- package/src/api/responses/llm-request-log-entry.ts +25 -0
- package/src/api/responses/subagent-detail.ts +17 -0
- package/src/api/surfaces.ts +33 -0
- 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 +349 -65
- package/src/calls/guardian-dispatch.ts +10 -8
- package/src/calls/inbound-trust-reader.ts +56 -0
- package/src/calls/media-stream-server.ts +21 -0
- package/src/calls/relay-server.ts +231 -72
- package/src/calls/relay-setup-router.ts +57 -13
- package/src/calls/relay-verification.ts +7 -7
- package/src/calls/stt-hints.ts +9 -12
- package/src/calls/twilio-routes.ts +13 -3
- package/src/cli/commands/__tests__/cache.test.ts +8 -1
- package/src/cli/commands/cache.ts +194 -181
- 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/mcp.ts +252 -218
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +6 -1
- package/src/cli/commands/memory/__tests__/worker.test.ts +302 -0
- package/src/cli/commands/memory/index.ts +4 -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/memory/worker.ts +175 -0
- package/src/cli/commands/plugins.ts +343 -14
- package/src/cli/lib/__tests__/install-from-github.test.ts +40 -0
- package/src/cli/lib/__tests__/list-installed-plugins.test.ts +160 -1
- 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/list-installed-plugins.ts +179 -1
- 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__/loader-callsite-strip-fallback.test.ts +143 -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/llm-resolver.ts +151 -14
- package/src/config/loader.ts +36 -5
- package/src/config/profile-dispatchability.ts +11 -0
- package/src/config/schemas/__tests__/memory-v3.test.ts +1 -0
- package/src/config/schemas/call-site-catalog.ts +7 -0
- package/src/config/schemas/llm.ts +2 -0
- package/src/config/schemas/memory-lifecycle.ts +17 -3
- package/src/config/schemas/memory-v3.ts +7 -0
- package/src/config/schemas/memory.ts +4 -0
- package/src/config/schemas/timeouts.ts +32 -0
- package/src/config/seed-inference-profiles.ts +147 -50
- package/src/config/skills.ts +27 -5
- package/src/config/sync-gated-profiles.ts +13 -1
- package/src/contacts/__tests__/guardian-delivery-reader.test.ts +312 -0
- package/src/contacts/contact-store.ts +21 -0
- package/src/contacts/contacts-write.ts +3 -0
- package/src/contacts/guardian-delivery-reader.ts +223 -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 +18 -36
- package/src/daemon/conversation-process.ts +35 -16
- package/src/daemon/conversation-runtime-assembly.ts +91 -66
- package/src/daemon/conversation-surfaces.ts +273 -18
- package/src/daemon/conversation-tool-setup.ts +24 -64
- package/src/daemon/conversation.ts +149 -53
- package/src/daemon/disk-pressure-guard.ts +12 -2
- 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 +41 -27
- package/src/daemon/handlers/conversations.ts +84 -0
- package/src/daemon/handlers/shared.ts +7 -0
- package/src/daemon/lifecycle.ts +44 -5
- package/src/daemon/memory-v2-startup.test.ts +72 -0
- package/src/daemon/memory-v2-startup.ts +87 -19
- 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 +12 -11
- package/src/daemon/server.ts +0 -4
- package/src/daemon/shutdown-handlers.ts +20 -0
- package/src/daemon/tool-setup-types.ts +7 -5
- 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__/clients-list-ipc.test.ts +1 -1
- package/src/ipc/__tests__/watcher-ipc.test.ts +59 -39
- package/src/ipc/assistant-server.ts +10 -2
- 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__/prompt-override.test.ts +192 -0
- 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/embedding-gemini.test.ts +3 -1
- package/src/memory/embedding-gemini.ts +18 -2
- 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 +79 -21
- 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/014-backfill-inbox-thread-state.ts +13 -3
- 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 +241 -219
- 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 +135 -68
- 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__/014-backfill-inbox-thread-state.test.ts +108 -0
- package/src/memory/migrations/__tests__/136-drop-assistant-id-columns.test.ts +82 -0
- package/src/memory/migrations/__tests__/209-strip-thinking-from-consolidated.test.ts +224 -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/schema-introspection.ts +14 -0
- package/src/memory/migrations/validate-migration-state.ts +50 -145
- package/src/memory/prompt-override.ts +129 -0
- 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__/cli-command-store.test.ts +25 -0
- 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__/skill-store.test.ts +80 -0
- package/src/memory/v2/__tests__/sweep-job.test.ts +2 -2
- package/src/memory/v2/cli-command-store.ts +75 -38
- package/src/memory/v2/prompts/consolidation.ts +13 -82
- package/src/memory/v2/prompts/router.ts +21 -93
- package/src/memory/v2/skill-store.ts +68 -31
- 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/memory/worker-control.ts +118 -0
- package/src/memory/worker-process.ts +72 -0
- package/src/messaging/provider.ts +10 -0
- package/src/messaging/providers/gmail/adapter.ts +1 -0
- package/src/messaging/providers/gmail/client.ts +13 -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__/broadcaster.test.ts +16 -8
- package/src/notifications/__tests__/connected-channels.test.ts +114 -0
- package/src/notifications/__tests__/decision-engine.test.ts +78 -9
- package/src/notifications/__tests__/destination-resolver.test.ts +256 -0
- 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/broadcaster.ts +8 -1
- 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/decision-engine.ts +15 -7
- package/src/notifications/destination-resolver.ts +68 -24
- package/src/notifications/deterministic-checks.ts +19 -16
- package/src/notifications/emit-signal.ts +68 -15
- 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 +174 -6
- package/src/oauth/connection-resolver.ts +132 -5
- package/src/oauth/oauth-store.ts +16 -3
- package/src/oauth/scope-utils.ts +39 -0
- package/src/permissions/question-prompter.test.ts +1 -1
- package/src/permissions/question-prompter.ts +7 -4
- 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 +173 -0
- package/src/plugin-api/vision-support.ts +113 -0
- package/src/plugins/defaults/advisor/__tests__/consult.test.ts +90 -0
- package/src/plugins/defaults/advisor/__tests__/context-pack-gating.test.ts +106 -0
- package/src/plugins/defaults/advisor/__tests__/context-pack.test.ts +60 -0
- package/src/plugins/defaults/advisor/consult.ts +65 -6
- package/src/plugins/defaults/advisor/context-pack.ts +288 -0
- package/src/plugins/defaults/advisor/steering.ts +14 -2
- package/src/plugins/defaults/advisor/tools/advisor.ts +32 -5
- 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 +441 -0
- package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +57 -0
- package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +61 -0
- package/src/plugins/defaults/image-fallback/package.json +14 -0
- package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +108 -0
- package/src/plugins/defaults/image-fallback/src/caption-cache.ts +49 -0
- package/src/plugins/defaults/image-fallback/src/image-persist.ts +56 -0
- package/src/plugins/defaults/image-fallback/src/vision-caption.ts +120 -0
- package/src/plugins/defaults/index.ts +27 -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/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +134 -5
- package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +11 -2
- package/src/plugins/defaults/memory-v3-shadow/pool-select.test.ts +146 -0
- package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +246 -19
- package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +8 -1
- 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 +290 -185
- package/src/providers/call-site-routing.ts +14 -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 +53 -0
- package/src/providers/openai/responses-provider.ts +5 -0
- package/src/providers/openrouter/client.ts +5 -0
- package/src/providers/platform-proxy/constants.ts +5 -0
- package/src/providers/provider-send-message.ts +4 -0
- package/src/providers/ratelimit.ts +13 -0
- package/src/providers/retry.ts +14 -0
- package/src/providers/together/client.ts +35 -0
- package/src/providers/types.ts +25 -0
- package/src/providers/usage-tracking.ts +11 -0
- package/src/runtime/AGENTS.md +9 -1
- package/src/runtime/__tests__/agent-wake.test.ts +259 -4
- package/src/runtime/__tests__/guardian-vellum-migration.test.ts +181 -0
- package/src/runtime/__tests__/is-guardian-bound-for-channel.test.ts +64 -0
- package/src/runtime/__tests__/local-principal-trust.test.ts +164 -0
- package/src/runtime/__tests__/slack-block-formatting.test.ts +39 -10
- package/src/runtime/__tests__/trust-verdict-consumer.test.ts +670 -0
- package/src/runtime/access-request-helper.ts +19 -39
- package/src/runtime/actor-trust-resolver.ts +8 -16
- package/src/runtime/agent-wake.ts +183 -60
- package/src/runtime/anchored-guardian.test.ts +156 -0
- package/src/runtime/anchored-guardian.ts +135 -0
- package/src/runtime/assistant-stream-state.ts +9 -2
- package/src/runtime/auth/__tests__/require-bound-guardian.test.ts +99 -0
- package/src/runtime/auth/require-bound-guardian.ts +21 -11
- package/src/runtime/channel-reply-delivery.ts +6 -3
- package/src/runtime/channel-verification-service.ts +24 -0
- package/src/runtime/guardian-decision-types.ts +3 -22
- package/src/runtime/guardian-vellum-migration.ts +66 -7
- 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/local-actor-identity.ts +76 -11
- package/src/runtime/local-principal-trust.ts +52 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-fd-leak.test.ts +3 -0
- package/src/runtime/pending-interactions.ts +11 -1
- 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/__tests__/surface-action-routes.test.ts +163 -0
- 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 +13 -2
- 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 +80 -66
- package/src/runtime/routes/conversation-starter-routes.ts +7 -8
- package/src/runtime/routes/events-routes.ts +2 -2
- package/src/runtime/routes/guardian-approval-interception.ts +13 -274
- package/src/runtime/routes/host-app-control-routes.ts +5 -4
- package/src/runtime/routes/host-bash-routes.ts +5 -4
- package/src/runtime/routes/host-browser-routes.ts +9 -11
- package/src/runtime/routes/host-cu-routes.ts +5 -4
- package/src/runtime/routes/host-file-routes.ts +5 -4
- package/src/runtime/routes/host-transfer-routes.ts +6 -6
- package/src/runtime/routes/http-adapter.ts +1 -1
- package/src/runtime/routes/inbound-message-handler.ts +21 -16
- package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +376 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +86 -64
- package/src/runtime/routes/inbound-stages/admission-policy.ts +20 -5
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +16 -4
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +21 -8
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +14 -3
- package/src/runtime/routes/llm-context-normalization.ts +71 -0
- package/src/runtime/routes/log-export-routes.ts +2 -2
- package/src/runtime/routes/mcp-auth-routes.ts +38 -15
- 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/subagents-routes.ts +5 -0
- package/src/runtime/routes/surface-action-routes.ts +39 -51
- 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 +210 -0
- package/src/schedule/scheduler.ts +6 -9
- package/src/signals/user-message.ts +16 -0
- package/src/subagent/manager.ts +9 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +1 -1
- package/src/tools/ask-question/ask-question-tool.test.ts +89 -52
- package/src/tools/ask-question/ask-question-tool.ts +27 -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/tool-defaults.ts +2 -0
- package/src/tools/types.ts +18 -2
- package/src/tools/ui-surface/definitions.ts +0 -43
- package/src/util/fs-watcher-error.ts +36 -0
- package/src/util/log-redact.ts +2 -4
- package/src/util/logs-db-path.ts +22 -0
- package/src/util/memory-db-path.ts +23 -0
- package/src/util/platform.ts +5 -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
|
@@ -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",
|
|
@@ -1,41 +1,212 @@
|
|
|
1
1
|
import { getLogger } from "../../util/logger.js";
|
|
2
|
-
import
|
|
2
|
+
import { getDbPath } from "../../util/platform.js";
|
|
3
|
+
import { type DrizzleDb, getSqliteFrom } from "../db-connection.js";
|
|
3
4
|
|
|
4
5
|
const log = getLogger("db-init");
|
|
5
6
|
|
|
6
|
-
/**
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* A single forward migration step, identified for checkpointing and logging by
|
|
9
|
+
* its `.name`. Anonymous steps (empty `.name`) cannot be tracked and always run.
|
|
10
|
+
*
|
|
11
|
+
* A step may be synchronous or return a promise. The runner awaits an async
|
|
12
|
+
* step to completion before checkpointing it and moving on, so ordering is
|
|
13
|
+
* preserved exactly as for sync steps: step N+1 never starts — and is never
|
|
14
|
+
* skipped via checkpoint — until step N has fully finished. This lets a step
|
|
15
|
+
* that drains a large backfill in `await`ed batches run without blocking the
|
|
16
|
+
* thread between batches while still guaranteeing later migrations observe its
|
|
17
|
+
* completed result.
|
|
18
|
+
*/
|
|
19
|
+
export type MigrationStep = (database: DrizzleDb) => void | Promise<void>;
|
|
8
20
|
|
|
9
21
|
export interface MigrationRunResult {
|
|
22
|
+
/** Steps that ran and completed successfully this boot. */
|
|
23
|
+
applied: string[];
|
|
10
24
|
/** Steps whose body threw. */
|
|
11
25
|
failed: string[];
|
|
26
|
+
/** Steps skipped because a prior run already applied them. */
|
|
27
|
+
skipped: string[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Prefix under which forward-step completions are recorded in the shared
|
|
32
|
+
* `memory_checkpoints` ledger. A distinct namespace keeps step bookkeeping from
|
|
33
|
+
* colliding with registry checkpoint keys (`migration_*`, `backfill_*`,
|
|
34
|
+
* `drop_*`) and is deliberately chosen so `validateMigrationState` does not
|
|
35
|
+
* mistake a step record for an unknown registry migration.
|
|
36
|
+
*/
|
|
37
|
+
export const STEP_CHECKPOINT_PREFIX = "step:";
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create the migration bookkeeping table if it is missing.
|
|
41
|
+
*
|
|
42
|
+
* The runner records its own checkpoints, so it must not depend on an earlier
|
|
43
|
+
* step having created the ledger. This is the single place `memory_checkpoints`
|
|
44
|
+
* is created; `IF NOT EXISTS` makes it a no-op on an already-migrated database.
|
|
45
|
+
*/
|
|
46
|
+
function ensureCheckpointsTable(raw: ReturnType<typeof getSqliteFrom>): void {
|
|
47
|
+
raw.run(/*sql*/ `
|
|
48
|
+
CREATE TABLE IF NOT EXISTS memory_checkpoints (
|
|
49
|
+
key TEXT PRIMARY KEY,
|
|
50
|
+
value TEXT NOT NULL,
|
|
51
|
+
updated_at INTEGER NOT NULL
|
|
52
|
+
)
|
|
53
|
+
`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Recover from crashed migrations before the migration runner executes its steps.
|
|
58
|
+
*
|
|
59
|
+
* Scans memory_checkpoints for entries with value 'started' or 'rolling_back' —
|
|
60
|
+
* these represent migrations that began but never completed (e.g., due to a
|
|
61
|
+
* process crash). Deletes the stalled checkpoint so the migration can re-run
|
|
62
|
+
* from scratch on this startup. Each migration's own idempotency guards (DDL
|
|
63
|
+
* IF NOT EXISTS, transactional rollback) ensure re-running is safe.
|
|
64
|
+
*
|
|
65
|
+
* Runs on every boot — it must observe the state left by *this* boot's prior
|
|
66
|
+
* crash — so it is invoked directly by {@link runMigrationSteps} before the
|
|
67
|
+
* checkpointed step loop rather than being a checkpointed step itself.
|
|
68
|
+
*/
|
|
69
|
+
export function recoverCrashedMigrations(database: DrizzleDb): string[] {
|
|
70
|
+
const raw = getSqliteFrom(database);
|
|
71
|
+
|
|
72
|
+
let rows: Array<{ key: string; value: string }>;
|
|
73
|
+
try {
|
|
74
|
+
rows = raw
|
|
75
|
+
.query(`SELECT key, value FROM memory_checkpoints`)
|
|
76
|
+
.all() as Array<{ key: string; value: string }>;
|
|
77
|
+
} catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const crashed = rows
|
|
82
|
+
.filter((r) => r.value === "started" || r.value === "rolling_back")
|
|
83
|
+
.map((r) => r.key);
|
|
84
|
+
if (crashed.length === 0) return [];
|
|
85
|
+
|
|
86
|
+
log.error(
|
|
87
|
+
{ crashed },
|
|
88
|
+
[
|
|
89
|
+
"╔══════════════════════════════════════════════════════════════╗",
|
|
90
|
+
"║ CRASHED MIGRATIONS DETECTED — AUTO-RECOVERING ║",
|
|
91
|
+
"╚══════════════════════════════════════════════════════════════╝",
|
|
92
|
+
"",
|
|
93
|
+
`The following migrations started but never completed: ${crashed.join(", ")}`,
|
|
94
|
+
"",
|
|
95
|
+
"Clearing stalled checkpoints so they can be retried on this startup.",
|
|
96
|
+
"If retries continue to fail, manually inspect the database:",
|
|
97
|
+
` sqlite3 ${getDbPath()} "SELECT * FROM memory_checkpoints"`,
|
|
98
|
+
].join("\n"),
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
for (const key of crashed) {
|
|
102
|
+
raw.query(`DELETE FROM memory_checkpoints WHERE key = ?`).run(key);
|
|
103
|
+
log.info(
|
|
104
|
+
{ key },
|
|
105
|
+
`Cleared stalled checkpoint "${key}" — migration will re-run`,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return crashed;
|
|
12
110
|
}
|
|
13
111
|
|
|
14
112
|
/**
|
|
15
|
-
* Run the ordered list of forward migration steps against the database
|
|
113
|
+
* Run the ordered list of forward migration steps against the database, each at
|
|
114
|
+
* most once across boots.
|
|
115
|
+
*
|
|
116
|
+
* A step's name is recorded in `memory_checkpoints` after its body completes —
|
|
117
|
+
* for an async step, after its returned promise resolves; on
|
|
118
|
+
* later boots an applied step is skipped instead of re-executed. This turns the
|
|
119
|
+
* unconditional ~200-step re-probe — which floors daemon startup at tens of
|
|
120
|
+
* seconds on a fully-migrated database — into a single bookkeeping read.
|
|
121
|
+
*
|
|
122
|
+
* Step bookkeeping lives in the `memory_checkpoints` ledger under the
|
|
123
|
+
* {@link STEP_CHECKPOINT_PREFIX} namespace, so applied-state for every
|
|
124
|
+
* migration lives in one place.
|
|
125
|
+
*
|
|
126
|
+
* Before the step loop runs, the ledger is created if missing and
|
|
127
|
+
* {@link recoverCrashedMigrations} clears any stalled checkpoints left by a
|
|
128
|
+
* prior crash, so a migration interrupted mid-flight re-runs this boot.
|
|
16
129
|
*
|
|
17
130
|
* Individual step failures are caught and logged so one broken migration does
|
|
18
|
-
* not prevent independent later ones from succeeding
|
|
131
|
+
* not prevent independent later ones from succeeding; a failed step is not
|
|
132
|
+
* checkpointed and is retried on the next boot.
|
|
19
133
|
*/
|
|
20
|
-
export function runMigrationSteps(
|
|
134
|
+
export async function runMigrationSteps(
|
|
21
135
|
database: DrizzleDb,
|
|
22
136
|
steps: MigrationStep[],
|
|
23
|
-
): MigrationRunResult {
|
|
137
|
+
): Promise<MigrationRunResult> {
|
|
138
|
+
const raw = getSqliteFrom(database);
|
|
139
|
+
|
|
140
|
+
ensureCheckpointsTable(raw);
|
|
141
|
+
recoverCrashedMigrations(database);
|
|
142
|
+
|
|
143
|
+
const applied = new Set(
|
|
144
|
+
(
|
|
145
|
+
raw
|
|
146
|
+
.query(
|
|
147
|
+
`SELECT key FROM memory_checkpoints WHERE key LIKE '${STEP_CHECKPOINT_PREFIX}%' AND value = '1'`,
|
|
148
|
+
)
|
|
149
|
+
.all() as Array<{ key: string }>
|
|
150
|
+
).map((row) => row.key.slice(STEP_CHECKPOINT_PREFIX.length)),
|
|
151
|
+
);
|
|
152
|
+
const markStarted = raw.query(
|
|
153
|
+
`INSERT OR REPLACE INTO memory_checkpoints (key, value, updated_at) VALUES (?, 'started', ?)`,
|
|
154
|
+
);
|
|
155
|
+
const markApplied = raw.query(
|
|
156
|
+
`INSERT OR REPLACE INTO memory_checkpoints (key, value, updated_at) VALUES (?, '1', ?)`,
|
|
157
|
+
);
|
|
158
|
+
|
|
24
159
|
const failed: string[] = [];
|
|
160
|
+
const skipped: string[] = [];
|
|
161
|
+
const ran: string[] = [];
|
|
25
162
|
|
|
26
163
|
for (const step of steps) {
|
|
164
|
+
const name = step.name;
|
|
165
|
+
const checkpointable = name !== "";
|
|
166
|
+
|
|
167
|
+
if (checkpointable && applied.has(name)) {
|
|
168
|
+
skipped.push(name);
|
|
169
|
+
log.debug({ migration: name }, `Skipping applied migration: ${name}`);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
|
|
27
173
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
174
|
+
if (checkpointable) {
|
|
175
|
+
markStarted.run(`${STEP_CHECKPOINT_PREFIX}${name}`, Date.now());
|
|
176
|
+
}
|
|
177
|
+
log.info({ migration: name }, `Starting migration: ${name}`);
|
|
178
|
+
const result = step(database);
|
|
179
|
+
if (result instanceof Promise) {
|
|
180
|
+
await result;
|
|
181
|
+
}
|
|
182
|
+
log.info({ migration: name }, `Migration succeeded: ${name}`);
|
|
183
|
+
if (checkpointable) {
|
|
184
|
+
markApplied.run(`${STEP_CHECKPOINT_PREFIX}${name}`, Date.now());
|
|
185
|
+
ran.push(name);
|
|
186
|
+
}
|
|
31
187
|
} catch (err) {
|
|
32
|
-
|
|
33
|
-
log
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
);
|
|
188
|
+
// Leave the 'started' marker in place (if one was written) —
|
|
189
|
+
// recoverCrashedMigrations will detect it on the next boot, log
|
|
190
|
+
// a warning, and clear it so the step re-runs.
|
|
191
|
+
failed.push(name);
|
|
192
|
+
log.error({ err, migration: name }, `Migration failed: ${name}`);
|
|
37
193
|
}
|
|
38
194
|
}
|
|
39
195
|
|
|
40
|
-
return { failed };
|
|
196
|
+
return { applied: ran, failed, skipped };
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Discard every forward-step checkpoint so the next {@link runMigrationSteps}
|
|
201
|
+
* call re-runs and re-records all steps.
|
|
202
|
+
*
|
|
203
|
+
* Migration rollback calls this. A rolled-back step's `step:` checkpoint
|
|
204
|
+
* must be discarded, otherwise the runner skips the step on the next
|
|
205
|
+
* upgrade and the rolled-back schema is never restored. Only the `step:`
|
|
206
|
+
* namespace is cleared, leaving other ledger entries untouched.
|
|
207
|
+
*/
|
|
208
|
+
export function clearMigrationStepCheckpoints(database: DrizzleDb): void {
|
|
209
|
+
getSqliteFrom(database).run(
|
|
210
|
+
`DELETE FROM memory_checkpoints WHERE key LIKE '${STEP_CHECKPOINT_PREFIX}%'`,
|
|
211
|
+
);
|
|
41
212
|
}
|