@vellumai/assistant 0.10.0 → 0.10.1-staging.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +36 -37
- package/bun.lock +3 -0
- package/docs/workflows.md +12 -7
- package/eslint-rules/cli-no-daemon-internals.js +6 -0
- package/node_modules/@slack/types/LICENSE +23 -0
- package/node_modules/@slack/types/README.md +32 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.d.ts +953 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.js +4 -0
- package/node_modules/@slack/types/dist/block-kit/block-elements.js.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.d.ts +474 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.js +3 -0
- package/node_modules/@slack/types/dist/block-kit/blocks.js.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.d.ts +237 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.js +4 -0
- package/node_modules/@slack/types/dist/block-kit/composition-objects.js.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.d.ts +88 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.js +3 -0
- package/node_modules/@slack/types/dist/block-kit/extensions.js.map +1 -0
- package/node_modules/@slack/types/dist/calls.d.ts +26 -0
- package/node_modules/@slack/types/dist/calls.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/calls.js +6 -0
- package/node_modules/@slack/types/dist/calls.js.map +1 -0
- package/node_modules/@slack/types/dist/chunk.d.ts +52 -0
- package/node_modules/@slack/types/dist/chunk.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/chunk.js +3 -0
- package/node_modules/@slack/types/dist/chunk.js.map +1 -0
- package/node_modules/@slack/types/dist/common/bot-profile.d.ts +12 -0
- package/node_modules/@slack/types/dist/common/bot-profile.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/common/bot-profile.js +3 -0
- package/node_modules/@slack/types/dist/common/bot-profile.js.map +1 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.d.ts +6 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.js +3 -0
- package/node_modules/@slack/types/dist/common/status-emoji-display-info.js.map +1 -0
- package/node_modules/@slack/types/dist/dialog.d.ts +36 -0
- package/node_modules/@slack/types/dist/dialog.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/dialog.js +3 -0
- package/node_modules/@slack/types/dist/dialog.js.map +1 -0
- package/node_modules/@slack/types/dist/events/app.d.ts +204 -0
- package/node_modules/@slack/types/dist/events/app.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/app.js +3 -0
- package/node_modules/@slack/types/dist/events/app.js.map +1 -0
- package/node_modules/@slack/types/dist/events/assistant.d.ts +29 -0
- package/node_modules/@slack/types/dist/events/assistant.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/assistant.js +3 -0
- package/node_modules/@slack/types/dist/events/assistant.js.map +1 -0
- package/node_modules/@slack/types/dist/events/call.d.ts +8 -0
- package/node_modules/@slack/types/dist/events/call.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/call.js +3 -0
- package/node_modules/@slack/types/dist/events/call.js.map +1 -0
- package/node_modules/@slack/types/dist/events/channel.d.ts +85 -0
- package/node_modules/@slack/types/dist/events/channel.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/channel.js +3 -0
- package/node_modules/@slack/types/dist/events/channel.js.map +1 -0
- package/node_modules/@slack/types/dist/events/dnd.d.ts +24 -0
- package/node_modules/@slack/types/dist/events/dnd.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/dnd.js +3 -0
- package/node_modules/@slack/types/dist/events/dnd.js.map +1 -0
- package/node_modules/@slack/types/dist/events/email.d.ts +6 -0
- package/node_modules/@slack/types/dist/events/email.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/email.js +3 -0
- package/node_modules/@slack/types/dist/events/email.js.map +1 -0
- package/node_modules/@slack/types/dist/events/emoji.d.ts +11 -0
- package/node_modules/@slack/types/dist/events/emoji.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/emoji.js +3 -0
- package/node_modules/@slack/types/dist/events/emoji.js.map +1 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.d.ts +21 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.js +3 -0
- package/node_modules/@slack/types/dist/events/entity-details-requested.js.map +1 -0
- package/node_modules/@slack/types/dist/events/file.d.ts +60 -0
- package/node_modules/@slack/types/dist/events/file.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/file.js +4 -0
- package/node_modules/@slack/types/dist/events/file.js.map +1 -0
- package/node_modules/@slack/types/dist/events/function.d.ts +33 -0
- package/node_modules/@slack/types/dist/events/function.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/function.js +3 -0
- package/node_modules/@slack/types/dist/events/function.js.map +1 -0
- package/node_modules/@slack/types/dist/events/grid-migration.d.ts +9 -0
- package/node_modules/@slack/types/dist/events/grid-migration.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/grid-migration.js +3 -0
- package/node_modules/@slack/types/dist/events/grid-migration.js.map +1 -0
- package/node_modules/@slack/types/dist/events/group.d.ts +55 -0
- package/node_modules/@slack/types/dist/events/group.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/group.js +3 -0
- package/node_modules/@slack/types/dist/events/group.js.map +1 -0
- package/node_modules/@slack/types/dist/events/im.d.ts +26 -0
- package/node_modules/@slack/types/dist/events/im.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/im.js +3 -0
- package/node_modules/@slack/types/dist/events/im.js.map +1 -0
- package/node_modules/@slack/types/dist/events/index.d.ts +60 -0
- package/node_modules/@slack/types/dist/events/index.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/index.js +43 -0
- package/node_modules/@slack/types/dist/events/index.js.map +1 -0
- package/node_modules/@slack/types/dist/events/invite.d.ts +20 -0
- package/node_modules/@slack/types/dist/events/invite.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/invite.js +3 -0
- package/node_modules/@slack/types/dist/events/invite.js.map +1 -0
- package/node_modules/@slack/types/dist/events/link-shared.d.ts +16 -0
- package/node_modules/@slack/types/dist/events/link-shared.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/link-shared.js +3 -0
- package/node_modules/@slack/types/dist/events/link-shared.js.map +1 -0
- package/node_modules/@slack/types/dist/events/member.d.ts +19 -0
- package/node_modules/@slack/types/dist/events/member.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/member.js +3 -0
- package/node_modules/@slack/types/dist/events/member.js.map +1 -0
- package/node_modules/@slack/types/dist/events/message-metadata.d.ts +38 -0
- package/node_modules/@slack/types/dist/events/message-metadata.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/message-metadata.js +3 -0
- package/node_modules/@slack/types/dist/events/message-metadata.js.map +1 -0
- package/node_modules/@slack/types/dist/events/message.d.ts +306 -0
- package/node_modules/@slack/types/dist/events/message.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/message.js +3 -0
- package/node_modules/@slack/types/dist/events/message.js.map +1 -0
- package/node_modules/@slack/types/dist/events/pin.d.ts +60 -0
- package/node_modules/@slack/types/dist/events/pin.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/pin.js +3 -0
- package/node_modules/@slack/types/dist/events/pin.js.map +1 -0
- package/node_modules/@slack/types/dist/events/reaction.d.ts +23 -0
- package/node_modules/@slack/types/dist/events/reaction.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/reaction.js +3 -0
- package/node_modules/@slack/types/dist/events/reaction.js.map +1 -0
- package/node_modules/@slack/types/dist/events/shared-channel.d.ts +134 -0
- package/node_modules/@slack/types/dist/events/shared-channel.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/shared-channel.js +3 -0
- package/node_modules/@slack/types/dist/events/shared-channel.js.map +1 -0
- package/node_modules/@slack/types/dist/events/star.d.ts +13 -0
- package/node_modules/@slack/types/dist/events/star.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/star.js +3 -0
- package/node_modules/@slack/types/dist/events/star.js.map +1 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.d.ts +82 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.js +3 -0
- package/node_modules/@slack/types/dist/events/steps-from-apps.js.map +1 -0
- package/node_modules/@slack/types/dist/events/subteam.d.ts +66 -0
- package/node_modules/@slack/types/dist/events/subteam.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/subteam.js +3 -0
- package/node_modules/@slack/types/dist/events/subteam.js.map +1 -0
- package/node_modules/@slack/types/dist/events/team.d.ts +99 -0
- package/node_modules/@slack/types/dist/events/team.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/team.js +3 -0
- package/node_modules/@slack/types/dist/events/team.js.map +1 -0
- package/node_modules/@slack/types/dist/events/token.d.ts +8 -0
- package/node_modules/@slack/types/dist/events/token.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/token.js +3 -0
- package/node_modules/@slack/types/dist/events/token.js.map +1 -0
- package/node_modules/@slack/types/dist/events/user.d.ts +313 -0
- package/node_modules/@slack/types/dist/events/user.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/events/user.js +3 -0
- package/node_modules/@slack/types/dist/events/user.js.map +1 -0
- package/node_modules/@slack/types/dist/index.d.ts +12 -0
- package/node_modules/@slack/types/dist/index.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/index.js +28 -0
- package/node_modules/@slack/types/dist/index.js.map +1 -0
- package/node_modules/@slack/types/dist/message-attachments.d.ts +171 -0
- package/node_modules/@slack/types/dist/message-attachments.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/message-attachments.js +3 -0
- package/node_modules/@slack/types/dist/message-attachments.js.map +1 -0
- package/node_modules/@slack/types/dist/message-metadata.d.ts +281 -0
- package/node_modules/@slack/types/dist/message-metadata.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/message-metadata.js +27 -0
- package/node_modules/@slack/types/dist/message-metadata.js.map +1 -0
- package/node_modules/@slack/types/dist/views.d.ts +71 -0
- package/node_modules/@slack/types/dist/views.d.ts.map +1 -0
- package/node_modules/@slack/types/dist/views.js +3 -0
- package/node_modules/@slack/types/dist/views.js.map +1 -0
- package/node_modules/@slack/types/package.json +47 -0
- package/node_modules/@vellumai/gateway-client/bun.lock +3 -0
- package/node_modules/@vellumai/gateway-client/package.json +1 -0
- package/node_modules/@vellumai/gateway-client/src/__tests__/contact-read-contracts.test.ts +69 -0
- package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +65 -0
- package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +162 -0
- package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +8 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +14 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +4 -2
- package/node_modules/@vellumai/gateway-client/src/outbound-contract.ts +3 -2
- package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +78 -0
- package/openapi.yaml +345 -18
- package/package.json +2 -1
- package/scripts/memory-inspect.ts +24 -14
- package/src/__tests__/access-request-seed-content-blocks.test.ts +83 -103
- package/src/__tests__/activation-early-marking.test.ts +1 -1
- package/src/__tests__/actor-token-service.test.ts +3 -3
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +1 -40
- package/src/__tests__/agent-loop-compaction-events.test.ts +0 -1
- package/src/__tests__/agent-loop-compaction-strip.test.ts +0 -1
- package/src/__tests__/agent-loop-exit-reason.test.ts +0 -1
- package/src/__tests__/agent-loop-pushes-post-hook-prompt.test.ts +306 -0
- package/src/__tests__/agent-loop-regrowth-guard.test.ts +0 -1
- package/src/__tests__/agent-loop.test.ts +3 -0
- package/src/__tests__/agent-wake-override-profile.test.ts +2 -0
- package/src/__tests__/anthropic-provider.test.ts +143 -9
- package/src/__tests__/app-builder-skill-instructions.test.ts +47 -5
- package/src/__tests__/app-conversation-ids-backfill.test.ts +1 -1
- package/src/__tests__/app-source-watcher.test.ts +30 -10
- package/src/__tests__/approval-cascade.test.ts +6 -0
- package/src/__tests__/approval-interception-trust-gates.test.ts +151 -0
- package/src/__tests__/approval-primitive.test.ts +1 -1
- package/src/__tests__/approval-routes-http.test.ts +1 -1
- package/src/__tests__/assistant-attachments.test.ts +155 -0
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +2 -4
- package/src/__tests__/assistant-events-sse-hardening.test.ts +1 -1
- package/src/__tests__/assistant-events-sse-shed.test.ts +1 -1
- package/src/__tests__/attachment-upload-trusted-source.test.ts +13 -8
- package/src/__tests__/attachments-store.test.ts +1 -1
- package/src/__tests__/audit-log-rotation.test.ts +50 -54
- package/src/__tests__/auth-fallback-events-store.test.ts +1 -1
- package/src/__tests__/auto-analysis-end-to-end.test.ts +9 -14
- package/src/__tests__/background-shell-bash.test.ts +4 -1
- package/src/__tests__/background-shell-host-bash.test.ts +17 -3
- package/src/__tests__/background-workers-disk-pressure.test.ts +1 -0
- package/src/__tests__/call-controller.test.ts +1 -1
- package/src/__tests__/call-conversation-messages.test.ts +1 -1
- package/src/__tests__/call-domain.test.ts +1 -1
- package/src/__tests__/call-pointer-messages.test.ts +3 -4
- package/src/__tests__/call-recovery.test.ts +1 -1
- package/src/__tests__/call-routes-http.test.ts +1 -1
- package/src/__tests__/call-store.test.ts +1 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/canonical-guardian-store.test.ts +24 -1
- package/src/__tests__/channel-approval-routes.test.ts +73 -1119
- package/src/__tests__/channel-delivery-store.test.ts +1 -1
- package/src/__tests__/channel-guardian.test.ts +265 -641
- package/src/__tests__/channel-inbound-disk-pressure.test.ts +1 -2
- package/src/__tests__/channel-retry-sweep.test.ts +1 -1
- package/src/__tests__/compaction-events.test.ts +6 -0
- package/src/__tests__/compaction-trail-store.test.ts +6 -5
- package/src/__tests__/compaction.benchmark.test.ts +0 -1
- package/src/__tests__/compactor-image-manifest-trust.test.ts +1 -1
- package/src/__tests__/config-loader-backfill.test.ts +183 -51
- package/src/__tests__/config-schema.test.ts +34 -0
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +1 -2
- package/src/__tests__/contact-store-user-file.test.ts +2 -2
- package/src/__tests__/contacts-relay-reads.test.ts +409 -0
- package/src/__tests__/contacts-tools.test.ts +4 -4
- package/src/__tests__/contacts-write.test.ts +1 -2
- package/src/__tests__/context-search-conversations-source.test.ts +1 -1
- package/src/__tests__/context-window-manager-compact-retry.test.ts +6 -2
- package/src/__tests__/context-window-manager-overflow-rung.test.ts +6 -2
- package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop.test.ts +3 -0
- package/src/__tests__/conversation-attachments.test.ts +2 -5
- package/src/__tests__/conversation-attention-store.test.ts +1 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +1 -2
- package/src/__tests__/conversation-clear-safety.test.ts +1 -1
- package/src/__tests__/conversation-confirmation-signals.test.ts +6 -0
- package/src/__tests__/conversation-crud-inference-profile.test.ts +1 -1
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +12 -19
- package/src/__tests__/conversation-disk-view-integration.test.ts +1 -1
- package/src/__tests__/conversation-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-fork-crud.test.ts +10 -8
- package/src/__tests__/conversation-fork-retrospective.test.ts +250 -0
- package/src/__tests__/conversation-fork-route.test.ts +1 -1
- package/src/__tests__/conversation-inference-profile-list.test.ts +1 -1
- package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
- package/src/__tests__/conversation-init.benchmark.test.ts +1 -1
- package/src/__tests__/conversation-key-store-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-lifecycle.test.ts +117 -0
- package/src/__tests__/conversation-list-source.test.ts +3 -3
- package/src/__tests__/conversation-process-callsite.test.ts +6 -14
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-queue.test.ts +6 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +115 -12
- package/src/__tests__/conversation-slash-queue.test.ts +6 -0
- package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
- package/src/__tests__/conversation-speed-override.test.ts +6 -0
- package/src/__tests__/conversation-starter-routes.test.ts +5 -5
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
- package/src/__tests__/conversation-sync-tags.test.ts +1 -1
- package/src/__tests__/conversation-usage.test.ts +1 -1
- package/src/__tests__/conversation-wipe.test.ts +9 -8
- package/src/__tests__/conversation-workspace-cache-state.test.ts +6 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
- package/src/__tests__/conversations-import-system-filter.test.ts +1 -1
- package/src/__tests__/copy-composer-tc-templates.test.ts +17 -0
- package/src/__tests__/credential-security-invariants.test.ts +0 -1
- package/src/__tests__/db-acp-history.test.ts +2 -2
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +5 -7
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +6 -7
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +5 -10
- package/src/__tests__/db-migration-rollback.test.ts +129 -39
- package/src/__tests__/db-proxy-transaction.test.ts +1 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +0 -11
- package/src/__tests__/db-test-helpers.ts +36 -19
- package/src/__tests__/delete-propagation.test.ts +1 -1
- package/src/__tests__/deterministic-verification-control-plane.test.ts +26 -8
- package/src/__tests__/disk-pressure-tools.test.ts +41 -1
- package/src/__tests__/dm-backfill.test.ts +1 -1
- package/src/__tests__/drop-capability-card-state-migration.test.ts +0 -8
- package/src/__tests__/edit-propagation.test.ts +1 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +83 -0
- package/src/__tests__/empty-response-hook.test.ts +42 -0
- package/src/__tests__/events-client-registration.test.ts +1 -1
- package/src/__tests__/followup-tools.test.ts +1 -1
- package/src/__tests__/gemini-count-tokens.test.ts +70 -0
- package/src/__tests__/guardian-action-sweep.test.ts +9 -2
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-card-withdrawal.test.ts +1 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-outbound-http.test.ts +7 -12
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +1 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +2 -4
- package/src/__tests__/guardian-routing-state.test.ts +1 -2
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/headless-browser-mode.test.ts +2 -2
- package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
- package/src/__tests__/heartbeat-service.test.ts +6 -0
- package/src/__tests__/helpers/channel-test-adapter.ts +98 -0
- package/src/__tests__/http-conversation-lineage.test.ts +1 -1
- package/src/__tests__/image-recovery-hook.test.ts +1 -1
- package/src/__tests__/inbound-invite-redemption.test.ts +1 -2
- package/src/__tests__/inbound-trust-verdict.test.ts +254 -0
- package/src/__tests__/inference-profile-reaper.test.ts +1 -1
- package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
- package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +1 -1
- package/src/__tests__/injector-disk-pressure.test.ts +11 -6
- package/src/__tests__/internal-telemetry-routes.test.ts +1 -1
- package/src/__tests__/invite-redemption-service.test.ts +244 -43
- package/src/__tests__/invite-routes-http.test.ts +35 -186
- package/src/__tests__/invite-service-ipc.test.ts +287 -0
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +5 -5
- package/src/__tests__/jobs-store-upsert-debounced.test.ts +9 -12
- package/src/__tests__/list-messages-attachments.test.ts +42 -1
- package/src/__tests__/list-messages-client-message-id.test.ts +1 -1
- package/src/__tests__/list-messages-hidden-metadata.test.ts +1 -1
- package/src/__tests__/list-messages-page-latest.test.ts +1 -1
- package/src/__tests__/list-messages-tool-merge.test.ts +1 -1
- package/src/__tests__/llm-context-route-provider.test.ts +69 -4
- package/src/__tests__/llm-request-log-agent-loop-exit-reason.test.ts +9 -5
- package/src/__tests__/llm-request-log-call-site.test.ts +6 -6
- package/src/__tests__/llm-request-log-turn-query.test.ts +27 -13
- package/src/__tests__/llm-usage-store.test.ts +40 -1
- package/src/__tests__/log-export-routes.test.ts +1 -1
- package/src/__tests__/log-export-workspace.test.ts +3 -3
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +5 -5
- package/src/__tests__/memory-recall-log-store.test.ts +1 -1
- package/src/__tests__/memory-upsert-concurrency.test.ts +3 -4
- package/src/__tests__/messages-after-tiebreaker.test.ts +1 -1
- package/src/__tests__/migration-import-from-url.test.ts +2 -2
- package/src/__tests__/mtime-cache.test.ts +375 -0
- package/src/__tests__/non-member-access-request.test.ts +1 -2
- package/src/__tests__/notification-candidate-guardian-context.test.ts +203 -0
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/notification-schedule-notify-dedup.test.ts +1 -1
- package/src/__tests__/oauth-provider-profiles.test.ts +1 -1
- package/src/__tests__/oauth-provider-visibility.test.ts +1 -1
- package/src/__tests__/oauth-store.test.ts +1 -1
- package/src/__tests__/persist-unsendable-image-downscale.test.ts +1 -1
- package/src/__tests__/persist-unsendable-image.test.ts +1 -1
- package/src/__tests__/persona-resolver.test.ts +39 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +1 -1
- package/src/__tests__/playbook-execution.test.ts +1 -1
- package/src/__tests__/playbook-tools.test.ts +1 -1
- package/src/__tests__/plugin-api-model-profiles.test.ts +74 -21
- package/src/__tests__/plugin-bootstrap.test.ts +78 -0
- package/src/__tests__/provider-platform-proxy-integration.test.ts +25 -5
- package/src/__tests__/provider-usage-tracking.test.ts +1 -1
- package/src/__tests__/prune-old-conversations-job.test.ts +1 -1
- package/src/__tests__/reaction-persistence.test.ts +1 -1
- package/src/__tests__/relay-server.test.ts +357 -56
- package/src/__tests__/runtime-attachment-metadata.test.ts +10 -1
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +7 -9
- package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-reconnect.test.ts +1 -1
- package/src/__tests__/runtime-events-sse.test.ts +1 -1
- package/src/__tests__/schedule-retry.test.ts +1 -1
- package/src/__tests__/schedule-routes-workflow-validation.test.ts +1 -1
- package/src/__tests__/schedule-routes.test.ts +1 -1
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/schedule-tools.test.ts +1 -1
- package/src/__tests__/scheduler-disk-pressure.test.ts +1 -1
- package/src/__tests__/scheduler-recurrence.test.ts +1 -1
- package/src/__tests__/scheduler-reuse-conversation.test.ts +1 -1
- package/src/__tests__/scheduler-wake.test.ts +2 -1
- package/src/__tests__/scoped-approval-grants.test.ts +1 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +5 -5
- package/src/__tests__/scrub-corrupted-image-attachments.test.ts +0 -8
- package/src/__tests__/secret-routes-platform-proxy.test.ts +1 -0
- package/src/__tests__/send-endpoint-busy.test.ts +1 -1
- package/src/__tests__/sequence-store.test.ts +1 -1
- package/src/__tests__/server-history-render.test.ts +40 -1
- package/src/__tests__/settings-routes.test.ts +11 -10
- package/src/__tests__/skill-load-tool.test.ts +72 -0
- package/src/__tests__/slack-inbound-verification.test.ts +1 -3
- package/src/__tests__/slack-messaging-token-resolution.test.ts +13 -2
- package/src/__tests__/slack-reaction-canonical-approval.test.ts +1 -1
- package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -73
- package/src/__tests__/subagent-tools.test.ts +1 -31
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/system-storage-cleanup-skill.test.ts +56 -0
- package/src/__tests__/task-compiler.test.ts +1 -1
- package/src/__tests__/task-management-tools.test.ts +1 -1
- package/src/__tests__/task-memory-cleanup.test.ts +9 -6
- package/src/__tests__/task-scheduler.test.ts +1 -1
- package/src/__tests__/thread-backfill.test.ts +1 -1
- package/src/__tests__/tool-approval-handler.test.ts +1 -1
- package/src/__tests__/tool-approval-seed-content-blocks.test.ts +2 -0
- package/src/__tests__/tool-executor.test.ts +32 -1
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -2
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +73 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +34 -34
- package/src/__tests__/trusted-contact-multichannel.test.ts +1 -2
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/turn-boundary-resolution.test.ts +3 -3
- package/src/__tests__/turn-events-store.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +2 -3
- package/src/__tests__/usage-cache-backfill-migration.test.ts +20 -10
- package/src/__tests__/usage-routes.test.ts +1 -1
- package/src/__tests__/user-plugin-loader.test.ts +34 -29
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -2
- package/src/__tests__/voice-invite-redemption.test.ts +134 -36
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +1 -1
- package/src/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/__tests__/workspace-git-service.test.ts +114 -1
- package/src/__tests__/workspace-heartbeat-service.test.ts +45 -0
- package/src/__tests__/workspace-migration-009-backfill-conversation-disk-view.test.ts +1 -1
- package/src/__tests__/workspace-migration-013-repair-conversation-disk-view.test.ts +1 -1
- package/src/__tests__/workspace-migration-028-recover-conversations-from-disk-view.test.ts +88 -18
- package/src/__tests__/workspace-migration-108-drop-balanced-economy-profile.test.ts +6 -6
- package/src/__tests__/workspace-migration-109-swap-quality-profile-to-glm-5p2.test.ts +281 -0
- package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +167 -0
- package/src/__tests__/workspace-migrations-runner.test.ts +55 -0
- package/src/a2a/__tests__/e2e-a2a-channel.test.ts +1 -1
- package/src/a2a/__tests__/task-store.test.ts +1 -1
- package/src/acp/__tests__/session-manager-persistence.test.ts +1 -1
- package/src/acp/__tests__/session-manager-resume.test.ts +22 -11
- package/src/acp/__tests__/session-manager-startup.test.ts +1 -1
- package/src/acp/__tests__/session-manager.test.ts +72 -1
- package/src/acp/index.ts +10 -0
- package/src/acp/session-manager.ts +35 -0
- package/src/agent/loop.ts +45 -27
- package/src/api/index.ts +0 -6
- package/src/approvals/AGENTS.md +1 -2
- package/src/approvals/guardian-decision-primitive.ts +13 -210
- package/src/approvals/guardian-request-resolvers.ts +104 -58
- package/src/background-wake/wake-intent-hooks.test.ts +1 -1
- package/src/calls/__tests__/inbound-trust-reader.test.ts +110 -0
- package/src/calls/__tests__/relay-setup-router.test.ts +88 -62
- package/src/calls/inbound-trust-reader.ts +40 -0
- package/src/calls/relay-server.ts +65 -23
- package/src/calls/relay-setup-router.ts +20 -6
- package/src/calls/relay-verification.ts +7 -7
- package/src/cli/commands/contacts.ts +6 -24
- package/src/cli/commands/db/__tests__/repair.test.ts +15 -6
- package/src/cli/commands/db/__tests__/status.test.ts +7 -3
- package/src/cli/commands/db/status.ts +212 -33
- package/src/cli/commands/memory/__tests__/memory-v3.test.ts +6 -1
- package/src/cli/commands/memory/index.ts +2 -0
- package/src/cli/commands/memory/memory-retrospective.ts +129 -0
- package/src/cli/commands/memory/memory-v3.ts +176 -4
- package/src/cli/commands/plugins.ts +268 -11
- package/src/cli/lib/__tests__/install-from-github.test.ts +40 -0
- package/src/cli/lib/__tests__/plugin-pin-history.test.ts +162 -0
- package/src/cli/lib/__tests__/toggle-plugin.test.ts +158 -0
- package/src/cli/lib/install-from-github.ts +47 -6
- package/src/cli/lib/plugin-marketplace.ts +11 -0
- package/src/cli/lib/plugin-pin-history.ts +257 -0
- package/src/cli/lib/toggle-plugin.ts +146 -0
- package/src/config/__tests__/sync-gated-profiles.test.ts +2 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +15 -33
- package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +3 -8
- package/src/config/bundled-skills/app-builder/references/INTERACTION_HOOKS.md +64 -37
- package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +1 -1
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +14 -72
- package/src/config/bundled-skills/app-builder/references/examples/README.md +1 -2
- package/src/config/bundled-skills/contacts/SKILL.md +7 -12
- package/src/config/bundled-skills/messaging/tools/shared.ts +4 -1
- package/src/config/bundled-skills/system-storage-cleanup/SKILL.md +74 -0
- package/src/config/bundled-skills/workflows/SKILL.md +4 -3
- package/src/config/call-site-defaults.ts +11 -2
- package/src/config/feature-flag-registry.json +0 -8
- package/src/config/profile-dispatchability.ts +11 -0
- package/src/config/schemas/call-site-catalog.ts +7 -0
- package/src/config/schemas/llm.ts +2 -0
- package/src/config/schemas/memory-lifecycle.ts +5 -3
- package/src/config/schemas/timeouts.ts +24 -0
- package/src/config/seed-inference-profiles.ts +133 -45
- package/src/config/sync-gated-profiles.ts +13 -1
- package/src/contacts/contact-store.ts +21 -0
- package/src/contacts/member-status.ts +9 -0
- package/src/credential-health/credential-health-service.ts +1 -5
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +44 -0
- package/src/daemon/app-source-watcher.ts +31 -18
- package/src/daemon/assistant-attachments.ts +94 -4
- package/src/daemon/conversation-agent-loop-handlers.ts +3 -0
- package/src/daemon/conversation-agent-loop.ts +9 -36
- package/src/daemon/conversation-runtime-assembly.ts +91 -66
- package/src/daemon/conversation-tool-setup.ts +20 -63
- package/src/daemon/conversation.ts +144 -52
- package/src/daemon/event-loop-watchdog.test.ts +85 -0
- package/src/daemon/event-loop-watchdog.ts +133 -0
- package/src/daemon/external-plugins-bootstrap.ts +26 -80
- package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a-invite.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +1 -1
- package/src/daemon/handlers/__tests__/config-a2a.test.ts +1 -1
- package/src/daemon/handlers/config-channels.ts +32 -18
- package/src/daemon/handlers/conversations.ts +7 -0
- package/src/daemon/handlers/shared.ts +7 -0
- package/src/daemon/lifecycle.ts +16 -3
- package/src/daemon/message-types/inbox.ts +0 -6
- package/src/daemon/message-types/messages.ts +0 -4
- package/src/daemon/message-types/surfaces.ts +18 -8
- package/src/daemon/server.ts +0 -4
- package/src/daemon/tool-setup-types.ts +0 -7
- package/src/daemon/trust-context.ts +6 -0
- package/src/daemon/wake-conversation-ops.ts +70 -0
- package/src/daemon/workspace-tools-watcher.ts +7 -3
- package/src/documents/document-comments-store.test.ts +1 -1
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +1 -1
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +6 -0
- package/src/heartbeat/heartbeat-service.ts +3 -4
- package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
- package/src/ipc/__tests__/browser-ipc.test.ts +73 -2
- package/src/ipc/__tests__/watcher-ipc.test.ts +59 -39
- package/src/ipc/assistant-server.ts +8 -0
- package/src/ipc/gateway-client.ts +2 -1
- package/src/ipc/routes/__tests__/invite-ipc-routes.test.ts +58 -0
- package/src/ipc/routes/invite-ipc-routes.ts +66 -0
- package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
- package/src/memory/__tests__/activation-session-store.test.ts +1 -1
- package/src/memory/__tests__/auto-analysis-guard.test.ts +1 -1
- package/src/memory/__tests__/conversation-group-migration.test.ts +1 -1
- package/src/memory/__tests__/conversation-queries.test.ts +1 -1
- package/src/memory/__tests__/db-async-query.test.ts +1 -1
- package/src/memory/__tests__/db-logs-attach.test.ts +110 -0
- package/src/memory/__tests__/db-maintenance.test.ts +28 -36
- package/src/memory/__tests__/db-memory-attach.test.ts +113 -0
- package/src/memory/__tests__/find-analysis-conversation.test.ts +1 -1
- package/src/memory/__tests__/find-most-recent-retrospective-for.test.ts +1 -1
- package/src/memory/__tests__/fork-message-copy.test.ts +232 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +3 -0
- package/src/memory/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +5 -5
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +8 -6
- package/src/memory/__tests__/memory-retrospective-job.test.ts +30 -37
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +69 -66
- package/src/memory/__tests__/memory-retrospective-state.test.ts +1 -1
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +1 -1
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +1 -1
- package/src/memory/__tests__/onboarding-events-store.test.ts +1 -1
- package/src/memory/__tests__/table-relocation.test.ts +129 -0
- package/src/memory/conversation-crud.ts +461 -152
- package/src/memory/db-async-query.ts +89 -5
- package/src/memory/db-connection.ts +101 -18
- package/src/memory/db-init.ts +409 -234
- package/src/memory/db-maintenance.ts +43 -38
- package/src/memory/db-singleton.ts +45 -19
- package/src/memory/fork-message-copy.ts +170 -0
- package/src/memory/graph/__tests__/handle-remember-v2.test.ts +92 -0
- package/src/memory/graph/bootstrap.test.ts +6 -3
- package/src/memory/graph/retriever.test.ts +12 -12
- package/src/memory/graph/store.test.ts +15 -25
- package/src/memory/graph/store.ts +23 -14
- package/src/memory/graph/tool-handlers.ts +34 -5
- package/src/memory/graph/tools.ts +5 -2
- package/src/memory/indexer.ts +21 -9
- package/src/memory/job-handlers/cleanup.ts +10 -3
- package/src/memory/job-handlers/embedding.test.ts +4 -4
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +4 -4
- package/src/memory/jobs/embed-pkb-file.test.ts +7 -7
- package/src/memory/jobs-store.ts +36 -24
- package/src/memory/llm-request-log-store.ts +51 -19
- package/src/memory/llm-usage-store.ts +31 -1
- package/src/memory/memory-retrospective-job.ts +27 -19
- package/src/memory/memory-retrospective-startup-cleanup.ts +10 -2
- package/src/memory/migrations/{100-core-tables.ts → 000-core-tables.ts} +6 -10
- package/src/memory/migrations/104-core-indexes.ts +1 -1
- package/src/memory/migrations/126-backfill-guardian-principal-id.ts +189 -196
- package/src/memory/migrations/127-guardian-principal-id-not-null.ts +98 -105
- package/src/memory/migrations/134-contacts-notes-column.ts +66 -69
- package/src/memory/migrations/135-backfill-contact-interaction-stats.ts +19 -22
- package/src/memory/migrations/136-drop-assistant-id-columns.ts +227 -230
- package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +204 -209
- package/src/memory/migrations/141-rename-verification-table.ts +45 -48
- package/src/memory/migrations/142-rename-verification-session-id-column.ts +16 -23
- package/src/memory/migrations/143-rename-guardian-verification-values.ts +23 -30
- package/src/memory/migrations/144-rename-voice-to-phone.ts +133 -136
- package/src/memory/migrations/145-drop-accounts-table.ts +4 -7
- package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +79 -82
- package/src/memory/migrations/148-drop-reminders-table.ts +3 -6
- package/src/memory/migrations/150-oauth-apps-client-secret-path.ts +71 -78
- package/src/memory/migrations/157-invite-contact-id.ts +73 -76
- package/src/memory/migrations/162-guardian-timestamps-epoch-ms.ts +44 -58
- package/src/memory/migrations/169-rename-gmail-provider-key-to-google.ts +36 -43
- package/src/memory/migrations/174-rename-thread-starters-table.ts +30 -37
- package/src/memory/migrations/176-drop-capability-card-state.ts +17 -22
- package/src/memory/migrations/177-create-trace-events-table.ts +23 -28
- package/src/memory/migrations/180-backfill-inline-attachments-to-disk.ts +36 -43
- package/src/memory/migrations/181-rename-thread-starters-checkpoints.ts +14 -21
- package/src/memory/migrations/191-backfill-audio-attachment-mime-types.ts +17 -24
- package/src/memory/migrations/192-contacts-user-file-column.ts +6 -9
- package/src/memory/migrations/193-add-source-type-columns.ts +33 -36
- package/src/memory/migrations/194-memory-recall-logs.ts +34 -39
- package/src/memory/migrations/196-strip-integration-prefix-from-provider-keys.ts +59 -66
- package/src/memory/migrations/199-guardian-request-enrichment-columns.ts +41 -48
- package/src/memory/migrations/204-rename-memory-graph-type-values.ts +11 -18
- package/src/memory/migrations/206-scrub-corrupted-image-attachments.ts +76 -83
- package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +50 -57
- package/src/memory/migrations/211-memory-recall-logs-query-context.ts +6 -11
- package/src/memory/migrations/212-llm-request-logs-created-at-index.ts +4 -9
- package/src/memory/migrations/217-conversation-host-access.ts +13 -18
- package/src/memory/migrations/220-normalize-user-file-by-principal.ts +86 -93
- package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +41 -48
- package/src/memory/migrations/230-acp-session-history.ts +23 -28
- package/src/memory/migrations/231-repair-memory-graph-event-dates.ts +58 -62
- package/src/memory/migrations/232-activation-state.ts +11 -16
- package/src/memory/migrations/233-document-conversations.ts +20 -25
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +26 -31
- package/src/memory/migrations/235-slack-compaction-watermark.ts +5 -10
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +6 -11
- package/src/memory/migrations/237-heartbeat-runs.ts +22 -27
- package/src/memory/migrations/239-trace-events-created-at-index.ts +4 -9
- package/src/memory/migrations/242-message-bookmarks.ts +17 -22
- package/src/memory/migrations/245-memory-retrospective-state.ts +8 -13
- package/src/memory/migrations/249-normalize-slack-external-content.ts +37 -41
- package/src/memory/migrations/251-a2a-tasks.ts +27 -32
- package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +12 -17
- package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +10 -15
- package/src/memory/migrations/256-memory-v2-injection-events.ts +70 -74
- package/src/memory/migrations/259-conversation-cleaned-at.ts +4 -9
- package/src/memory/migrations/260-rename-cleaned-at.ts +11 -16
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +3 -8
- package/src/memory/migrations/262-memory-v3-coactivation.ts +21 -26
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +14 -19
- package/src/memory/migrations/270-schedule-description.ts +7 -12
- package/src/memory/migrations/272-acp-session-history-cwd.ts +8 -13
- package/src/memory/migrations/281-memory-retrospective-remembered-log.ts +8 -13
- package/src/memory/migrations/297-move-llm-request-logs-to-logs-db.ts +111 -0
- package/src/memory/migrations/298-move-memory-jobs-to-memory-db.ts +128 -0
- package/src/memory/migrations/299-canonical-guardian-deliveries-conversation-index.ts +19 -0
- package/src/memory/migrations/__tests__/297-move-llm-request-logs.test.ts +180 -0
- package/src/memory/migrations/__tests__/run-migrations.test.ts +333 -7
- package/src/memory/migrations/helpers/relocation.ts +227 -0
- package/src/memory/migrations/registry.ts +63 -0
- package/src/memory/migrations/run-migrations.ts +187 -16
- package/src/memory/migrations/validate-migration-state.ts +50 -145
- package/src/memory/raw-query.ts +47 -2
- package/src/memory/skill-loaded-events-store.test.ts +1 -1
- package/src/memory/task-memory-cleanup.ts +62 -41
- package/src/memory/tool-executed-events-store.test.ts +1 -1
- package/src/memory/turn-trace-store.test.ts +1 -1
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +16 -15
- package/src/memory/v2/__tests__/harness-compare.test.ts +1 -1
- package/src/memory/v2/__tests__/harness-oracle.test.ts +1 -1
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +1 -1
- package/src/memory/v2/__tests__/sweep-job.test.ts +2 -2
- package/src/memory/v3-eval/__tests__/eval-packets.test.ts +38 -0
- package/src/memory/v3-eval/__tests__/eval-tally.test.ts +139 -0
- package/src/memory/v3-eval/eval-packets.ts +197 -12
- package/src/memory/v3-eval/eval-tally.ts +234 -0
- package/src/messaging/provider.ts +10 -0
- package/src/messaging/providers/gmail/adapter.ts +1 -0
- package/src/messaging/providers/gmail/client.ts +14 -0
- package/src/messaging/providers/index.ts +1 -1
- package/src/messaging/providers/slack/send.test.ts +87 -39
- package/src/messaging/providers/slack/send.ts +84 -105
- package/src/notifications/README.md +9 -5
- package/src/notifications/__tests__/deterministic-checks.test.ts +43 -1
- package/src/notifications/adapters/slack.ts +12 -10
- package/src/notifications/approval-card-builder.ts +81 -20
- package/src/notifications/approval-card-data.ts +8 -5
- package/src/notifications/canonical-delivery-recorder.ts +7 -5
- package/src/notifications/conversation-candidates.ts +24 -59
- package/src/notifications/copy-composer.ts +48 -68
- package/src/notifications/deterministic-checks.ts +19 -16
- package/src/notifications/emit-signal.ts +29 -1
- package/src/notifications/trusted-contact-payloads.ts +70 -0
- package/src/oauth/byo-connection.test.ts +9 -0
- package/src/oauth/connection-resolver.test.ts +146 -6
- package/src/oauth/connection-resolver.ts +132 -5
- package/src/oauth/oauth-store.ts +16 -3
- package/src/oauth/scope-utils.ts +21 -0
- package/src/plugin-api/index.ts +9 -4
- package/src/plugin-api/model-profiles.test.ts +123 -0
- package/src/plugin-api/model-profiles.ts +5 -1
- package/src/plugin-api/vision-support.test.ts +149 -0
- package/src/plugin-api/vision-support.ts +78 -0
- package/src/plugins/defaults/compaction/window-manager.ts +45 -64
- package/src/plugins/defaults/empty-response/hooks/post-model-call.ts +13 -4
- package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +302 -0
- package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +103 -0
- package/src/plugins/defaults/image-fallback/package.json +14 -0
- package/src/plugins/defaults/image-fallback/src/caption-cache.ts +49 -0
- package/src/plugins/defaults/image-fallback/src/image-persist.ts +59 -0
- package/src/plugins/defaults/image-fallback/src/vision-caption.ts +120 -0
- package/src/plugins/defaults/index.ts +23 -0
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +14 -1
- package/src/plugins/defaults/memory-retrieval/injectors.ts +4 -4
- package/src/plugins/external-plugin-loader.ts +47 -6
- package/src/plugins/mtime-cache.ts +772 -0
- package/src/plugins/pipeline.ts +7 -2
- package/src/plugins/registry.ts +16 -5
- package/src/plugins/user-loader.ts +22 -76
- package/src/prompts/persona-resolver.ts +29 -11
- package/src/prompts/system-prompt.ts +1 -1
- package/src/prompts/templates/system-sections.ts +4 -4
- package/src/providers/__tests__/count-tokens-forwarding.test.ts +98 -0
- package/src/providers/anthropic/client.ts +254 -185
- package/src/providers/call-site-routing.ts +10 -0
- package/src/providers/gemini/client.ts +43 -0
- package/src/providers/inference/adapter-factory.ts +6 -0
- package/src/providers/inference/connections.ts +6 -1
- package/src/providers/model-catalog.ts +37 -0
- package/src/providers/platform-proxy/constants.ts +5 -0
- package/src/providers/ratelimit.ts +9 -0
- package/src/providers/retry.ts +10 -0
- package/src/providers/together/client.ts +35 -0
- package/src/providers/types.ts +16 -0
- package/src/providers/usage-tracking.ts +7 -0
- package/src/runtime/AGENTS.md +9 -1
- package/src/runtime/__tests__/agent-wake.test.ts +259 -4
- package/src/runtime/__tests__/slack-block-formatting.test.ts +39 -10
- package/src/runtime/__tests__/trust-verdict-consumer.test.ts +417 -0
- package/src/runtime/actor-trust-resolver.ts +8 -16
- package/src/runtime/agent-wake.ts +183 -60
- package/src/runtime/channel-reply-delivery.ts +6 -3
- package/src/runtime/guardian-decision-types.ts +3 -22
- package/src/runtime/http-server.ts +1 -15
- package/src/runtime/invite-redemption-service.ts +155 -6
- package/src/runtime/invite-service.ts +113 -62
- package/src/runtime/migrations/__tests__/vbundle-builder-fd-leak.test.ts +3 -0
- package/src/runtime/routes/__tests__/acp-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +277 -0
- package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +140 -0
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +26 -7
- package/src/runtime/routes/__tests__/consolidation-routes.test.ts +14 -10
- package/src/runtime/routes/__tests__/contact-routes-update-channel-relay.test.ts +164 -0
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +8 -8
- package/src/runtime/routes/__tests__/conversation-surface-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +1 -3
- package/src/runtime/routes/__tests__/invite-relay-routes.test.ts +240 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +4 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +143 -0
- package/src/runtime/routes/__tests__/retrospective-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +1 -1
- package/src/runtime/routes/acp-routes-list.test.ts +4 -0
- package/src/runtime/routes/acp-routes.test.ts +5 -6
- package/src/runtime/routes/attachment-routes.ts +21 -17
- package/src/runtime/routes/browser-routes.ts +19 -1
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +5 -9
- package/src/runtime/routes/channel-verification-routes.ts +12 -1
- package/src/runtime/routes/contact-routes.ts +275 -164
- package/src/runtime/routes/conversation-query-routes.ts +15 -5
- package/src/runtime/routes/conversation-routes.ts +24 -3
- package/src/runtime/routes/conversation-starter-routes.ts +7 -8
- package/src/runtime/routes/guardian-approval-interception.ts +13 -274
- package/src/runtime/routes/inbound-message-handler.ts +20 -15
- package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +285 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +45 -34
- package/src/runtime/routes/inbound-stages/admission-policy.ts +20 -5
- package/src/runtime/routes/log-export-routes.ts +2 -2
- package/src/runtime/routes/memory-eval-routes.ts +92 -0
- package/src/runtime/routes/memory-item-routes.test.ts +12 -11
- package/src/runtime/routes/migration-routes.ts +51 -40
- package/src/runtime/routes/plugins-routes.ts +164 -8
- package/src/runtime/routes/schedule-routes.ts +1 -0
- package/src/runtime/routes/usage-routes.ts +3 -0
- package/src/runtime/routes/work-items-routes.test.ts +1 -1
- package/src/runtime/slack-block-formatting.ts +46 -48
- package/src/runtime/trust-verdict-consumer.ts +172 -0
- package/src/schedule/scheduler.ts +6 -9
- package/src/telemetry/usage-telemetry-reporter.test.ts +1 -1
- package/src/tools/ask-question/ask-question-tool.test.ts +60 -52
- package/src/tools/ask-question/ask-question-tool.ts +14 -73
- package/src/tools/browser/__tests__/browser-status.test.ts +20 -0
- package/src/tools/browser/browser-execution.ts +16 -4
- package/src/tools/document/document-comment-tool.test.ts +1 -1
- package/src/tools/executor.ts +15 -3
- package/src/tools/host-terminal/host-shell.ts +28 -9
- package/src/tools/memory/register.test.ts +32 -0
- package/src/tools/skills/load.ts +43 -2
- package/src/tools/subagent/spawn.ts +4 -10
- package/src/tools/terminal/shell.ts +16 -5
- package/src/tools/types.ts +1 -0
- package/src/util/fs-watcher-error.ts +36 -0
- package/src/util/logs-db-path.ts +22 -0
- package/src/util/memory-db-path.ts +23 -0
- package/src/watcher/providers/gmail.ts +7 -2
- package/src/workflows/engine-integration.test.ts +1 -1
- package/src/workflows/engine.test.ts +1 -1
- package/src/workflows/engine.ts +22 -0
- package/src/workflows/fanout-load.test.ts +1 -1
- package/src/workflows/journal-store.test.ts +1 -1
- package/src/workflows/leaf-runner.test.ts +40 -1
- package/src/workflows/leaf-runner.ts +26 -1
- package/src/workspace/git-service.ts +144 -29
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +121 -0
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +82 -0
- package/src/workspace/migrations/registry.ts +4 -0
- package/src/workspace/migrations/runner.ts +32 -2
- package/src/__tests__/access-request-decision.test.ts +0 -375
- package/src/__tests__/guardian-grant-minting.test.ts +0 -607
- package/src/__tests__/plugin-source-watcher.test.ts +0 -302
- package/src/api/events/turn-profile-auto-routed.ts +0 -28
- package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +0 -107
- package/src/daemon/plugin-source-watcher.ts +0 -278
- package/src/daemon/switch-inference-profile-tool.ts +0 -62
- package/src/memory/guardian-approvals.ts +0 -361
- package/src/memory/migrations/010-ext-conv-bindings-channel-chat-unique.ts +0 -66
- package/src/memory/migrations/038-actor-token-records.ts +0 -45
- package/src/memory/migrations/039-actor-refresh-token-records.ts +0 -57
- package/src/memory/migrations/103-complex-migrations.ts +0 -23
- package/src/memory/migrations/113-late-migrations.ts +0 -30
- package/src/memory/migrations/index.ts +0 -301
- package/src/runtime/routes/access-request-decision.ts +0 -297
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +0 -963
- package/src/runtime/routes/channel-guardian-routes.ts +0 -19
- package/src/runtime/routes/guardian-expiry-sweep.ts +0 -132
|
@@ -3,7 +3,6 @@ import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
|
3
3
|
|
|
4
4
|
import { drizzle } from "drizzle-orm/bun-sqlite";
|
|
5
5
|
|
|
6
|
-
import { removeTestDbFiles } from "./assert-not-live-db.js";
|
|
7
6
|
import { makeMockLogger } from "./helpers/mock-logger.js";
|
|
8
7
|
|
|
9
8
|
const originalBunTest = process.env.BUN_TEST;
|
|
@@ -15,11 +14,9 @@ mock.module("../util/logger.js", () => ({
|
|
|
15
14
|
import { _resetDisplayOrderMigrationForTests } from "../memory/conversation-display-order-migration.js";
|
|
16
15
|
import { _resetGroupMigrationForTests } from "../memory/conversation-group-migration.js";
|
|
17
16
|
import { getSqliteFrom } from "../memory/db-connection.js";
|
|
18
|
-
import { initializeDb } from "../memory/db-init.js";
|
|
19
17
|
import { migrateAddConversationInferenceProfile } from "../memory/migrations/227-add-conversation-inference-profile.js";
|
|
20
18
|
import { migrateRenameInferenceProfileSnakeCase } from "../memory/migrations/228-rename-inference-profile-snake-case.js";
|
|
21
19
|
import * as schema from "../memory/schema.js";
|
|
22
|
-
import { getDbPath } from "../util/platform.js";
|
|
23
20
|
import { resetDbForTesting } from "./db-test-helpers.js";
|
|
24
21
|
|
|
25
22
|
function createTestDb() {
|
|
@@ -73,7 +70,6 @@ function resetMigrationTestDb(): void {
|
|
|
73
70
|
// again. Otherwise downstream tests hit `no such column: group_id`.
|
|
74
71
|
_resetGroupMigrationForTests();
|
|
75
72
|
_resetDisplayOrderMigrationForTests();
|
|
76
|
-
removeTestDbFiles(getDbPath());
|
|
77
73
|
}
|
|
78
74
|
|
|
79
75
|
describe("conversation inference profile migration", () => {
|
|
@@ -88,9 +84,13 @@ describe("conversation inference profile migration", () => {
|
|
|
88
84
|
});
|
|
89
85
|
|
|
90
86
|
test("fresh DB initialization includes nullable inference_profile column", () => {
|
|
91
|
-
|
|
87
|
+
const db = createTestDb();
|
|
88
|
+
const raw = getSqliteFrom(db);
|
|
89
|
+
|
|
90
|
+
bootstrapPreInferenceProfileConversations(raw);
|
|
91
|
+
migrateAddConversationInferenceProfile(db);
|
|
92
|
+
migrateRenameInferenceProfileSnakeCase(db);
|
|
92
93
|
|
|
93
|
-
const raw = new Database(getDbPath());
|
|
94
94
|
const columns = getColumnNames(raw);
|
|
95
95
|
// Migration 228 renames the camelCase column added by 227 to snake_case to
|
|
96
96
|
// match the rest of the table.
|
|
@@ -106,7 +106,6 @@ describe("conversation inference profile migration", () => {
|
|
|
106
106
|
|
|
107
107
|
expect(inferenceProfileColumn).toBeDefined();
|
|
108
108
|
expect(inferenceProfileColumn?.notnull).toBe(0);
|
|
109
|
-
raw.close();
|
|
110
109
|
});
|
|
111
110
|
|
|
112
111
|
test("migration upgrades the previous schema without disturbing existing rows", () => {
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
|
|
12
12
|
import { drizzle } from "drizzle-orm/bun-sqlite";
|
|
13
13
|
|
|
14
|
-
import { removeTestDbFiles } from "./assert-not-live-db.js";
|
|
15
14
|
const originalBunTest = process.env.BUN_TEST;
|
|
16
15
|
|
|
17
16
|
mock.module("../util/logger.js", () => ({
|
|
@@ -22,10 +21,8 @@ mock.module("../util/logger.js", () => ({
|
|
|
22
21
|
}));
|
|
23
22
|
|
|
24
23
|
import { getSqliteFrom } from "../memory/db-connection.js";
|
|
25
|
-
import { initializeDb } from "../memory/db-init.js";
|
|
26
24
|
import { migrateLlmRequestLogProvider } from "../memory/migrations/184-llm-request-log-provider.js";
|
|
27
25
|
import * as schema from "../memory/schema.js";
|
|
28
|
-
import { getDbPath } from "../util/platform.js";
|
|
29
26
|
import { resetDbForTesting } from "./db-test-helpers.js";
|
|
30
27
|
|
|
31
28
|
function createTestDb() {
|
|
@@ -61,12 +58,10 @@ describe("llm_request_logs provider migration", () => {
|
|
|
61
58
|
beforeEach(() => {
|
|
62
59
|
process.env.BUN_TEST = "0";
|
|
63
60
|
resetDbForTesting();
|
|
64
|
-
removeTestDbFiles(getDbPath());
|
|
65
61
|
});
|
|
66
62
|
|
|
67
63
|
afterEach(() => {
|
|
68
64
|
resetDbForTesting();
|
|
69
|
-
removeTestDbFiles(getDbPath());
|
|
70
65
|
});
|
|
71
66
|
|
|
72
67
|
afterAll(() => {
|
|
@@ -76,21 +71,21 @@ describe("llm_request_logs provider migration", () => {
|
|
|
76
71
|
process.env.BUN_TEST = originalBunTest;
|
|
77
72
|
}
|
|
78
73
|
resetDbForTesting();
|
|
79
|
-
removeTestDbFiles(getDbPath());
|
|
80
74
|
});
|
|
81
75
|
|
|
82
76
|
test("fresh DB initialization includes llm_request_logs.provider", () => {
|
|
83
|
-
|
|
77
|
+
const db = createTestDb();
|
|
78
|
+
const raw = getSqliteFrom(db);
|
|
79
|
+
|
|
80
|
+
bootstrapPreProviderLlmRequestLogs(raw);
|
|
81
|
+
migrateLlmRequestLogProvider(db);
|
|
84
82
|
|
|
85
|
-
const raw = new Database(getDbPath());
|
|
86
83
|
const columns = getColumnInfo(raw);
|
|
87
84
|
|
|
88
85
|
expect(columns.some((column) => column.name === "provider")).toBe(true);
|
|
89
86
|
expect(columns.find((column) => column.name === "provider")?.notnull).toBe(
|
|
90
87
|
0,
|
|
91
88
|
);
|
|
92
|
-
|
|
93
|
-
raw.close();
|
|
94
89
|
});
|
|
95
90
|
|
|
96
91
|
test("migration upgrades the pre-provider schema without disturbing rows", () => {
|
|
@@ -16,11 +16,23 @@ import { afterEach, describe, expect, test } from "bun:test";
|
|
|
16
16
|
|
|
17
17
|
import { drizzle } from "drizzle-orm/bun-sqlite";
|
|
18
18
|
|
|
19
|
-
import { getSqliteFrom } from "../memory/db-connection.js";
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
import { type DrizzleDb, getSqliteFrom } from "../memory/db-connection.js";
|
|
20
|
+
import {
|
|
21
|
+
downJobDeferrals,
|
|
22
|
+
migrateJobDeferrals,
|
|
23
|
+
} from "../memory/migrations/001-job-deferrals.js";
|
|
24
|
+
import {
|
|
25
|
+
downMemoryEntityRelationDedup,
|
|
26
|
+
migrateMemoryEntityRelationDedup,
|
|
27
|
+
} from "../memory/migrations/004-entity-relation-dedup.js";
|
|
28
|
+
import {
|
|
29
|
+
downMemoryItemsFingerprintScopeUnique,
|
|
30
|
+
migrateMemoryItemsFingerprintScopeUnique,
|
|
31
|
+
} from "../memory/migrations/005-fingerprint-scope-unique.js";
|
|
32
|
+
import {
|
|
33
|
+
downMemoryItemsScopeSaltedFingerprints,
|
|
34
|
+
migrateMemoryItemsScopeSaltedFingerprints,
|
|
35
|
+
} from "../memory/migrations/006-scope-salted-fingerprints.js";
|
|
24
36
|
import { downAssistantIdToSelf } from "../memory/migrations/007-assistant-id-to-self.js";
|
|
25
37
|
import { downRemoveAssistantIdColumns } from "../memory/migrations/008-remove-assistant-id-columns.js";
|
|
26
38
|
import { downLlmUsageEventsDropAssistantId } from "../memory/migrations/009-llm-usage-events-drop-assistant-id.js";
|
|
@@ -55,18 +67,17 @@ import { migrateDropCapabilityCardStateDown } from "../memory/migrations/176-dro
|
|
|
55
67
|
import { migrateBackfillInlineAttachmentsToDiskDown } from "../memory/migrations/180-backfill-inline-attachments-to-disk.js";
|
|
56
68
|
import { migrateRenameThreadStartersCheckpointsDown } from "../memory/migrations/181-rename-thread-starters-checkpoints.js";
|
|
57
69
|
import { migrateBackfillAudioAttachmentMimeTypesDown } from "../memory/migrations/191-backfill-audio-attachment-mime-types.js";
|
|
70
|
+
import { migrateLlmUsageAttribution } from "../memory/migrations/235-llm-usage-attribution.js";
|
|
58
71
|
import {
|
|
59
|
-
migrateJobDeferrals,
|
|
60
|
-
migrateLlmUsageAttribution,
|
|
61
|
-
migrateMemoryEntityRelationDedup,
|
|
62
|
-
migrateMemoryItemsFingerprintScopeUnique,
|
|
63
|
-
migrateMemoryItemsScopeSaltedFingerprints,
|
|
64
72
|
MIGRATION_REGISTRY,
|
|
65
73
|
type MigrationRegistryEntry,
|
|
66
74
|
type MigrationValidationResult,
|
|
75
|
+
} from "../memory/migrations/registry.js";
|
|
76
|
+
import { runMigrationSteps } from "../memory/migrations/run-migrations.js";
|
|
77
|
+
import {
|
|
67
78
|
rollbackMemoryMigration,
|
|
68
79
|
validateMigrationState,
|
|
69
|
-
} from "../memory/migrations/
|
|
80
|
+
} from "../memory/migrations/validate-migration-state.js";
|
|
70
81
|
import * as schema from "../memory/schema.js";
|
|
71
82
|
|
|
72
83
|
// ---------------------------------------------------------------------------
|
|
@@ -525,11 +536,11 @@ describe("schema-drift recovery: migration handles unexpected schema state", ()
|
|
|
525
536
|
|
|
526
537
|
// Insert a "started" checkpoint — simulates mid-migration crash.
|
|
527
538
|
raw.exec(
|
|
528
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('
|
|
539
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:migrateJobDeferrals', 'started', ${now})`,
|
|
529
540
|
);
|
|
530
541
|
// A completed checkpoint should not be flagged.
|
|
531
542
|
raw.exec(
|
|
532
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('
|
|
543
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:migrateMemoryEntityRelationDedup', '1', ${now})`,
|
|
533
544
|
);
|
|
534
545
|
|
|
535
546
|
// validateMigrationState logs warnings for crashed migrations and returns
|
|
@@ -537,9 +548,9 @@ describe("schema-drift recovery: migration handles unexpected schema state", ()
|
|
|
537
548
|
// than re-deriving the crashed list from the raw DB — this verifies the
|
|
538
549
|
// function itself detects the crash, not just that the data is present.
|
|
539
550
|
const result: MigrationValidationResult = validateMigrationState(db);
|
|
540
|
-
expect(result.crashed).toContain("
|
|
551
|
+
expect(result.crashed).toContain("step:migrateJobDeferrals");
|
|
541
552
|
expect(result.crashed).not.toContain(
|
|
542
|
-
"
|
|
553
|
+
"step:migrateMemoryEntityRelationDedup",
|
|
543
554
|
);
|
|
544
555
|
});
|
|
545
556
|
|
|
@@ -554,11 +565,12 @@ describe("schema-drift recovery: migration handles unexpected schema state", ()
|
|
|
554
565
|
|
|
555
566
|
const now = Date.now();
|
|
556
567
|
|
|
557
|
-
// Write the child migration (salted fingerprints) but NOT
|
|
558
|
-
// (fingerprint_scope_unique). This violates the declared
|
|
568
|
+
// Write the child migration (salted fingerprints) step checkpoint but NOT
|
|
569
|
+
// its parent (fingerprint_scope_unique). This violates the declared
|
|
570
|
+
// dependsOn — the runner records `step:<stepName>` for completed steps.
|
|
559
571
|
raw.exec(`
|
|
560
572
|
INSERT INTO memory_checkpoints (key, value, updated_at)
|
|
561
|
-
VALUES ('
|
|
573
|
+
VALUES ('step:migrateMemoryItemsScopeSaltedFingerprints', '1', ${now})
|
|
562
574
|
`);
|
|
563
575
|
|
|
564
576
|
// validateMigrationState throws an IntegrityError on dependency violations
|
|
@@ -959,6 +971,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
959
971
|
const testEntries: MigrationRegistryEntry[] = [
|
|
960
972
|
{
|
|
961
973
|
key: "test_rollback_v1000",
|
|
974
|
+
stepName: "test_rollback_v1000",
|
|
962
975
|
version: 1000,
|
|
963
976
|
description: "test migration v1000",
|
|
964
977
|
down: () => {
|
|
@@ -967,6 +980,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
967
980
|
},
|
|
968
981
|
{
|
|
969
982
|
key: "test_rollback_v1001",
|
|
983
|
+
stepName: "test_rollback_v1001",
|
|
970
984
|
version: 1001,
|
|
971
985
|
description: "test migration v1001",
|
|
972
986
|
down: () => {
|
|
@@ -975,6 +989,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
975
989
|
},
|
|
976
990
|
{
|
|
977
991
|
key: "test_rollback_v1002",
|
|
992
|
+
stepName: "test_rollback_v1002",
|
|
978
993
|
version: 1002,
|
|
979
994
|
description: "test migration v1002",
|
|
980
995
|
down: () => {
|
|
@@ -985,10 +1000,10 @@ describe("rollbackMemoryMigration", () => {
|
|
|
985
1000
|
|
|
986
1001
|
MIGRATION_REGISTRY.push(...testEntries);
|
|
987
1002
|
|
|
988
|
-
// Simulate all three migrations as completed.
|
|
1003
|
+
// Simulate all three migrations as completed via their step checkpoints.
|
|
989
1004
|
for (const entry of testEntries) {
|
|
990
1005
|
raw.exec(
|
|
991
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('
|
|
1006
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:${entry.stepName}', '1', ${now})`,
|
|
992
1007
|
);
|
|
993
1008
|
}
|
|
994
1009
|
|
|
@@ -1004,14 +1019,14 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1004
1019
|
// Checkpoints for rolled-back migrations should be deleted.
|
|
1005
1020
|
const cp1001 = raw
|
|
1006
1021
|
.query(
|
|
1007
|
-
`SELECT 1 FROM memory_checkpoints WHERE key = 'test_rollback_v1001'`,
|
|
1022
|
+
`SELECT 1 FROM memory_checkpoints WHERE key = 'step:test_rollback_v1001'`,
|
|
1008
1023
|
)
|
|
1009
1024
|
.get();
|
|
1010
1025
|
expect(cp1001).toBeNull();
|
|
1011
1026
|
|
|
1012
1027
|
const cp1002 = raw
|
|
1013
1028
|
.query(
|
|
1014
|
-
`SELECT 1 FROM memory_checkpoints WHERE key = 'test_rollback_v1002'`,
|
|
1029
|
+
`SELECT 1 FROM memory_checkpoints WHERE key = 'step:test_rollback_v1002'`,
|
|
1015
1030
|
)
|
|
1016
1031
|
.get();
|
|
1017
1032
|
expect(cp1002).toBeNull();
|
|
@@ -1019,13 +1034,78 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1019
1034
|
// Checkpoint for the migration at target version should still exist.
|
|
1020
1035
|
const cp1000 = raw
|
|
1021
1036
|
.query(
|
|
1022
|
-
`SELECT value FROM memory_checkpoints WHERE key = 'test_rollback_v1000'`,
|
|
1037
|
+
`SELECT value FROM memory_checkpoints WHERE key = 'step:test_rollback_v1000'`,
|
|
1023
1038
|
)
|
|
1024
1039
|
.get() as { value: string } | null;
|
|
1025
1040
|
expect(cp1000).toBeTruthy();
|
|
1026
1041
|
expect(cp1000!.value).toBe("1");
|
|
1027
1042
|
});
|
|
1028
1043
|
|
|
1044
|
+
test("clears forward-step checkpoints so a re-upgrade re-applies a rolled-back registry-backed step", async () => {
|
|
1045
|
+
/**
|
|
1046
|
+
* A registry-backed migration that is also a named forward step is tracked
|
|
1047
|
+
* by the runner's `step:` checkpoint in memory_checkpoints. Rolling it back
|
|
1048
|
+
* must clear the step checkpoint too, otherwise the next upgrade skips the
|
|
1049
|
+
* step and never restores the rolled-back schema.
|
|
1050
|
+
*/
|
|
1051
|
+
saveRegistry();
|
|
1052
|
+
|
|
1053
|
+
const db = createTestDb();
|
|
1054
|
+
const raw = getRaw(db);
|
|
1055
|
+
bootstrapCheckpointsTable(raw);
|
|
1056
|
+
|
|
1057
|
+
const hasTable = () =>
|
|
1058
|
+
raw
|
|
1059
|
+
.query(
|
|
1060
|
+
`SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'test_step_rollback_data'`,
|
|
1061
|
+
)
|
|
1062
|
+
.get() !== null;
|
|
1063
|
+
|
|
1064
|
+
// GIVEN a registry-backed migration whose forward body is a named step that
|
|
1065
|
+
// creates a table. The step runner records `step:<functionName>` after a
|
|
1066
|
+
// successful run; the registry entry's stepName maps to that key so rollback
|
|
1067
|
+
// can find and clear it.
|
|
1068
|
+
function migrateTestStepRollback(database: DrizzleDb): void {
|
|
1069
|
+
getSqliteFrom(database).exec(
|
|
1070
|
+
`CREATE TABLE IF NOT EXISTS test_step_rollback_data (id TEXT PRIMARY KEY)`,
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
// AND the migration is registered with a down() that drops that table.
|
|
1075
|
+
MIGRATION_REGISTRY.push({
|
|
1076
|
+
key: "test_step_rollback_v4000",
|
|
1077
|
+
stepName: "migrateTestStepRollback",
|
|
1078
|
+
version: 4000,
|
|
1079
|
+
description: "test step rollback",
|
|
1080
|
+
down: (database) => {
|
|
1081
|
+
getSqliteFrom(database).exec(
|
|
1082
|
+
`DROP TABLE IF EXISTS test_step_rollback_data`,
|
|
1083
|
+
);
|
|
1084
|
+
},
|
|
1085
|
+
});
|
|
1086
|
+
|
|
1087
|
+
// AND the step has run once through the runner, recording the step checkpoint.
|
|
1088
|
+
await runMigrationSteps(db, [migrateTestStepRollback]);
|
|
1089
|
+
expect(hasTable()).toBe(true);
|
|
1090
|
+
expect(
|
|
1091
|
+
raw
|
|
1092
|
+
.query(
|
|
1093
|
+
`SELECT 1 FROM memory_checkpoints WHERE key = 'step:migrateTestStepRollback'`,
|
|
1094
|
+
)
|
|
1095
|
+
.get(),
|
|
1096
|
+
).toBeTruthy();
|
|
1097
|
+
|
|
1098
|
+
// AND the migration has since been rolled back below its version.
|
|
1099
|
+
rollbackMemoryMigration(db, 3999);
|
|
1100
|
+
expect(hasTable()).toBe(false);
|
|
1101
|
+
|
|
1102
|
+
// WHEN the runner executes the forward steps again on a later upgrade.
|
|
1103
|
+
await runMigrationSteps(db, [migrateTestStepRollback]);
|
|
1104
|
+
|
|
1105
|
+
// THEN the rolled-back step re-applies instead of being skipped.
|
|
1106
|
+
expect(hasTable()).toBe(true);
|
|
1107
|
+
});
|
|
1108
|
+
|
|
1029
1109
|
test("handles transaction failure in down() — rolls back and preserves checkpoint", () => {
|
|
1030
1110
|
saveRegistry();
|
|
1031
1111
|
|
|
@@ -1050,6 +1130,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1050
1130
|
// but a trigger will force the modification to fail.
|
|
1051
1131
|
MIGRATION_REGISTRY.push({
|
|
1052
1132
|
key: "test_fail_down_v3000",
|
|
1133
|
+
stepName: "test_fail_down_v3000",
|
|
1053
1134
|
version: 3000,
|
|
1054
1135
|
description: "test migration with failing down()",
|
|
1055
1136
|
down: (database) => {
|
|
@@ -1061,9 +1142,9 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1061
1142
|
},
|
|
1062
1143
|
});
|
|
1063
1144
|
|
|
1064
|
-
// Mark as completed.
|
|
1145
|
+
// Mark as completed (via step checkpoint).
|
|
1065
1146
|
raw.exec(
|
|
1066
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('test_fail_down_v3000', '1', ${now})`,
|
|
1147
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:test_fail_down_v3000', '1', ${now})`,
|
|
1067
1148
|
);
|
|
1068
1149
|
|
|
1069
1150
|
// Install a trigger to force the down() function to fail.
|
|
@@ -1091,7 +1172,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1091
1172
|
// written before down() was called and is preserved.
|
|
1092
1173
|
const cp = raw
|
|
1093
1174
|
.query(
|
|
1094
|
-
`SELECT value FROM memory_checkpoints WHERE key = 'test_fail_down_v3000'`,
|
|
1175
|
+
`SELECT value FROM memory_checkpoints WHERE key = 'step:test_fail_down_v3000'`,
|
|
1095
1176
|
)
|
|
1096
1177
|
.get() as { value: string } | null;
|
|
1097
1178
|
expect(cp).toBeTruthy();
|
|
@@ -1130,6 +1211,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1130
1211
|
// wrapped every down() call in BEGIN/COMMIT.
|
|
1131
1212
|
MIGRATION_REGISTRY.push({
|
|
1132
1213
|
key: "test_self_txn_down_v3500",
|
|
1214
|
+
stepName: "test_self_txn_down_v3500",
|
|
1133
1215
|
version: 3500,
|
|
1134
1216
|
description: "test migration with self-transactional down()",
|
|
1135
1217
|
down: (database) => {
|
|
@@ -1142,9 +1224,9 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1142
1224
|
},
|
|
1143
1225
|
});
|
|
1144
1226
|
|
|
1145
|
-
// Mark as completed.
|
|
1227
|
+
// Mark as completed (via step checkpoint).
|
|
1146
1228
|
raw.exec(
|
|
1147
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('test_self_txn_down_v3500', '1', ${now})`,
|
|
1229
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:test_self_txn_down_v3500', '1', ${now})`,
|
|
1148
1230
|
);
|
|
1149
1231
|
|
|
1150
1232
|
// This should succeed — no nested transaction error.
|
|
@@ -1162,7 +1244,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1162
1244
|
// Checkpoint should be deleted.
|
|
1163
1245
|
const cp = raw
|
|
1164
1246
|
.query(
|
|
1165
|
-
`SELECT 1 FROM memory_checkpoints WHERE key = 'test_self_txn_down_v3500'`,
|
|
1247
|
+
`SELECT 1 FROM memory_checkpoints WHERE key = 'step:test_self_txn_down_v3500'`,
|
|
1166
1248
|
)
|
|
1167
1249
|
.get();
|
|
1168
1250
|
expect(cp).toBeNull();
|
|
@@ -1183,6 +1265,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1183
1265
|
MIGRATION_REGISTRY.push(
|
|
1184
1266
|
{
|
|
1185
1267
|
key: "test_noop_v4000",
|
|
1268
|
+
stepName: "test_noop_v4000",
|
|
1186
1269
|
version: 4000,
|
|
1187
1270
|
description: "test noop v4000",
|
|
1188
1271
|
down: () => {
|
|
@@ -1191,6 +1274,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1191
1274
|
},
|
|
1192
1275
|
{
|
|
1193
1276
|
key: "test_noop_v4001",
|
|
1277
|
+
stepName: "test_noop_v4001",
|
|
1194
1278
|
version: 4001,
|
|
1195
1279
|
description: "test noop v4001",
|
|
1196
1280
|
down: () => {
|
|
@@ -1199,12 +1283,12 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1199
1283
|
},
|
|
1200
1284
|
);
|
|
1201
1285
|
|
|
1202
|
-
// Mark both as completed.
|
|
1286
|
+
// Mark both as completed (via step checkpoints).
|
|
1203
1287
|
raw.exec(
|
|
1204
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('test_noop_v4000', '1', ${now})`,
|
|
1288
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:test_noop_v4000', '1', ${now})`,
|
|
1205
1289
|
);
|
|
1206
1290
|
raw.exec(
|
|
1207
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('test_noop_v4001', '1', ${now})`,
|
|
1291
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:test_noop_v4001', '1', ${now})`,
|
|
1208
1292
|
);
|
|
1209
1293
|
|
|
1210
1294
|
// Roll back to version >= latest applied migration — should be a no-op.
|
|
@@ -1216,12 +1300,12 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1216
1300
|
// Both checkpoints should remain.
|
|
1217
1301
|
const cp4000 = raw
|
|
1218
1302
|
.query(
|
|
1219
|
-
`SELECT value FROM memory_checkpoints WHERE key = 'test_noop_v4000'`,
|
|
1303
|
+
`SELECT value FROM memory_checkpoints WHERE key = 'step:test_noop_v4000'`,
|
|
1220
1304
|
)
|
|
1221
1305
|
.get() as { value: string } | null;
|
|
1222
1306
|
const cp4001 = raw
|
|
1223
1307
|
.query(
|
|
1224
|
-
`SELECT value FROM memory_checkpoints WHERE key = 'test_noop_v4001'`,
|
|
1308
|
+
`SELECT value FROM memory_checkpoints WHERE key = 'step:test_noop_v4001'`,
|
|
1225
1309
|
)
|
|
1226
1310
|
.get() as { value: string } | null;
|
|
1227
1311
|
expect(cp4000!.value).toBe("1");
|
|
@@ -1251,6 +1335,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1251
1335
|
MIGRATION_REGISTRY.push(
|
|
1252
1336
|
{
|
|
1253
1337
|
key: "test_parent_v5000",
|
|
1338
|
+
stepName: "test_parent_v5000",
|
|
1254
1339
|
version: 5000,
|
|
1255
1340
|
description: "test parent migration",
|
|
1256
1341
|
down: () => {
|
|
@@ -1259,6 +1344,7 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1259
1344
|
},
|
|
1260
1345
|
{
|
|
1261
1346
|
key: "test_child_v5001",
|
|
1347
|
+
stepName: "test_child_v5001",
|
|
1262
1348
|
version: 5001,
|
|
1263
1349
|
dependsOn: ["test_parent_v5000"],
|
|
1264
1350
|
description: "test child migration depending on parent",
|
|
@@ -1268,12 +1354,12 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1268
1354
|
},
|
|
1269
1355
|
);
|
|
1270
1356
|
|
|
1271
|
-
// Both are completed.
|
|
1357
|
+
// Both are completed (via step checkpoints).
|
|
1272
1358
|
raw.exec(
|
|
1273
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('test_parent_v5000', '1', ${now})`,
|
|
1359
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:test_parent_v5000', '1', ${now})`,
|
|
1274
1360
|
);
|
|
1275
1361
|
raw.exec(
|
|
1276
|
-
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('test_child_v5001', '1', ${now})`,
|
|
1362
|
+
`INSERT INTO memory_checkpoints (key, value, updated_at) VALUES ('step:test_child_v5001', '1', ${now})`,
|
|
1277
1363
|
);
|
|
1278
1364
|
|
|
1279
1365
|
// Roll back to version 4999 — both should be rolled back, child first.
|
|
@@ -1286,10 +1372,14 @@ describe("rollbackMemoryMigration", () => {
|
|
|
1286
1372
|
|
|
1287
1373
|
// Both checkpoints should be deleted.
|
|
1288
1374
|
const cpParent = raw
|
|
1289
|
-
.query(
|
|
1375
|
+
.query(
|
|
1376
|
+
`SELECT 1 FROM memory_checkpoints WHERE key = 'step:test_parent_v5000'`,
|
|
1377
|
+
)
|
|
1290
1378
|
.get();
|
|
1291
1379
|
const cpChild = raw
|
|
1292
|
-
.query(
|
|
1380
|
+
.query(
|
|
1381
|
+
`SELECT 1 FROM memory_checkpoints WHERE key = 'step:test_child_v5001'`,
|
|
1382
|
+
)
|
|
1293
1383
|
.get();
|
|
1294
1384
|
expect(cpParent).toBeNull();
|
|
1295
1385
|
expect(cpChild).toBeNull();
|
|
@@ -15,7 +15,7 @@ import { getSqlite } from "../memory/db-connection.js";
|
|
|
15
15
|
import { initializeDb } from "../memory/db-init.js";
|
|
16
16
|
import { RouteError } from "../runtime/routes/errors.js";
|
|
17
17
|
|
|
18
|
-
initializeDb();
|
|
18
|
+
await initializeDb();
|
|
19
19
|
|
|
20
20
|
function resetTestTable(): void {
|
|
21
21
|
const sqlite = getSqlite();
|
|
@@ -306,16 +306,5 @@ describe("schedule_syntax column migration", () => {
|
|
|
306
306
|
{ id: "legacy-defer", description: "" },
|
|
307
307
|
{ id: "legacy-schedule", description: "Legacy report" },
|
|
308
308
|
]);
|
|
309
|
-
|
|
310
|
-
raw
|
|
311
|
-
.query("UPDATE cron_jobs SET description = ? WHERE id = ?")
|
|
312
|
-
.run("", "legacy-schedule");
|
|
313
|
-
|
|
314
|
-
migrateScheduleDescription(db);
|
|
315
|
-
|
|
316
|
-
const description = raw
|
|
317
|
-
.query("SELECT description FROM cron_jobs WHERE id = ?")
|
|
318
|
-
.get("legacy-schedule") as { description: string };
|
|
319
|
-
expect(description.description).toBe("");
|
|
320
309
|
});
|
|
321
310
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Test-only utilities for resetting the assistant DB
|
|
2
|
+
* Test-only utilities for resetting the assistant DB singletons.
|
|
3
3
|
*
|
|
4
4
|
* Replaces the removed `resetDb` export from `db-connection.ts`. Lives
|
|
5
5
|
* here (not in the source module) because production modules should not
|
|
@@ -7,52 +7,69 @@
|
|
|
7
7
|
*
|
|
8
8
|
* No source-module imports
|
|
9
9
|
* ------------------------
|
|
10
|
-
* This file has ZERO imports from `src/`. It accesses the DB
|
|
11
|
-
* state via the shared `globalThis.vellumAssistant.
|
|
10
|
+
* This file has ZERO imports from `src/`. It accesses the DB singletons'
|
|
11
|
+
* state via the shared `globalThis.vellumAssistant.dbSingletons` slots
|
|
12
12
|
* that `src/memory/db-singleton.ts` also reads/writes. The slot shape
|
|
13
13
|
* is duplicated here on purpose: keeping this file off the production
|
|
14
14
|
* import graph is what protects the test preload from a broken
|
|
15
15
|
* `node_modules` symlink (DB ghost #3). The two declarations MUST stay
|
|
16
16
|
* in sync — if you change one, change the other.
|
|
17
17
|
*
|
|
18
|
-
* Production code that needs to close + reopen the
|
|
18
|
+
* Production code that needs to close + reopen the DBs (post-migration,
|
|
19
19
|
* post-restore, post-vbundle-import, on shutdown) should use `resetDb()`
|
|
20
20
|
* from `src/memory/db-connection.ts` instead.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
// Mirrors `src/memory/db-singleton.ts`. Duplicated by design — see the
|
|
24
24
|
// "No source-module imports" section above.
|
|
25
|
+
type DbSlotKey = "main" | "logs" | "memory";
|
|
26
|
+
|
|
25
27
|
type DbSlot = {
|
|
26
28
|
db: unknown;
|
|
27
29
|
closer: (() => void) | null;
|
|
28
30
|
};
|
|
29
31
|
|
|
32
|
+
type DbSlots = Record<DbSlotKey, DbSlot>;
|
|
33
|
+
|
|
30
34
|
type VellumAssistantNamespace = {
|
|
31
|
-
|
|
35
|
+
dbSingletons?: DbSlots;
|
|
32
36
|
};
|
|
33
37
|
|
|
34
|
-
function
|
|
38
|
+
function emptySlot(): DbSlot {
|
|
39
|
+
return { db: null, closer: null };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function dbSlots(): DbSlots {
|
|
35
43
|
const g = globalThis as { vellumAssistant?: VellumAssistantNamespace };
|
|
36
44
|
const ns = (g.vellumAssistant ??= {});
|
|
37
|
-
return (ns.
|
|
45
|
+
return (ns.dbSingletons ??= {
|
|
46
|
+
main: emptySlot(),
|
|
47
|
+
logs: emptySlot(),
|
|
48
|
+
memory: emptySlot(),
|
|
49
|
+
});
|
|
38
50
|
}
|
|
39
51
|
|
|
40
52
|
/**
|
|
41
|
-
* Close
|
|
53
|
+
* Close every active DB connection (main, logs, memory) and drop the
|
|
54
|
+
* singletons.
|
|
42
55
|
*
|
|
43
|
-
* Used by tests that nuke or replace
|
|
44
|
-
* reset, subsequent `getDb()` calls return a
|
|
45
|
-
* Idempotent: safe to call when no connection
|
|
56
|
+
* Used by tests that nuke or replace a DB file mid-run — without this
|
|
57
|
+
* reset, subsequent `getDb()`/`getLogsDb()`/`getMemoryDb()` calls return a
|
|
58
|
+
* handle to the now-gone file. Idempotent: safe to call when no connection
|
|
59
|
+
* has been opened.
|
|
46
60
|
*/
|
|
47
61
|
export function resetDbForTesting(): void {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
62
|
+
const slots = dbSlots();
|
|
63
|
+
for (const key of ["main", "logs", "memory"] as const) {
|
|
64
|
+
const s = slots[key];
|
|
65
|
+
if (s.closer) {
|
|
66
|
+
try {
|
|
67
|
+
s.closer();
|
|
68
|
+
} catch {
|
|
69
|
+
/* best-effort close */
|
|
70
|
+
}
|
|
54
71
|
}
|
|
72
|
+
s.db = null;
|
|
73
|
+
s.closer = null;
|
|
55
74
|
}
|
|
56
|
-
s.db = null;
|
|
57
|
-
s.closer = null;
|
|
58
75
|
}
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
import { _setDeleteLookupConfigForTests } from "../runtime/routes/inbound-message-handler.js";
|
|
36
36
|
import { handleChannelInbound } from "./helpers/channel-test-adapter.js";
|
|
37
37
|
|
|
38
|
-
initializeDb();
|
|
38
|
+
await initializeDb();
|
|
39
39
|
|
|
40
40
|
const TEST_BEARER_TOKEN = "test-token";
|
|
41
41
|
// Slack `message_deleted` events stamp the deleted message's original author
|