agent-tower 0.7.2-beta.7 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +4 -1
- package/dist/app.js.map +1 -1
- package/dist/app.test.js +80 -1
- package/dist/app.test.js.map +1 -1
- package/dist/cli.js +4 -10
- package/dist/cli.js.map +1 -1
- package/dist/core/container.d.ts +8 -0
- package/dist/core/container.d.ts.map +1 -1
- package/dist/core/container.js +42 -0
- package/dist/core/container.js.map +1 -1
- package/dist/core/event-bus.d.ts +2 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/executors/__tests__/image-utils.test.d.ts +2 -0
- package/dist/executors/__tests__/image-utils.test.d.ts.map +1 -0
- package/dist/executors/__tests__/image-utils.test.js +25 -0
- package/dist/executors/__tests__/image-utils.test.js.map +1 -0
- package/dist/executors/base.executor.d.ts +2 -0
- package/dist/executors/base.executor.d.ts.map +1 -1
- package/dist/executors/base.executor.js +6 -0
- package/dist/executors/base.executor.js.map +1 -1
- package/dist/executors/image-utils.d.ts.map +1 -1
- package/dist/executors/image-utils.js +10 -8
- package/dist/executors/image-utils.js.map +1 -1
- package/dist/git/git-cli.d.ts +2 -0
- package/dist/git/git-cli.d.ts.map +1 -1
- package/dist/git/git-cli.js +2 -0
- package/dist/git/git-cli.js.map +1 -1
- package/dist/git/worktree.manager.d.ts +2 -1
- package/dist/git/worktree.manager.d.ts.map +1 -1
- package/dist/git/worktree.manager.js +18 -12
- package/dist/git/worktree.manager.js.map +1 -1
- package/dist/index.js +16 -31
- package/dist/index.js.map +1 -1
- package/dist/mcp/http-client.d.ts +1 -0
- package/dist/mcp/http-client.d.ts.map +1 -1
- package/dist/mcp/http-client.js +3 -0
- package/dist/mcp/http-client.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +15 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/sessions.js +2 -2
- package/dist/mcp/tools/sessions.js.map +1 -1
- package/dist/mcp/tools/workspaces.d.ts.map +1 -1
- package/dist/mcp/tools/workspaces.js +2 -1
- package/dist/mcp/tools/workspaces.js.map +1 -1
- package/dist/middleware/access-auth.d.ts +1 -0
- package/dist/middleware/access-auth.d.ts.map +1 -1
- package/dist/middleware/access-auth.js +1 -1
- package/dist/middleware/access-auth.js.map +1 -1
- package/dist/output/__tests__/text-block-lifecycle.test.d.ts +2 -0
- package/dist/output/__tests__/text-block-lifecycle.test.d.ts.map +1 -0
- package/dist/output/__tests__/text-block-lifecycle.test.js +241 -0
- package/dist/output/__tests__/text-block-lifecycle.test.js.map +1 -0
- package/dist/output/claude-code-parser.d.ts +3 -0
- package/dist/output/claude-code-parser.d.ts.map +1 -1
- package/dist/output/claude-code-parser.js +58 -7
- package/dist/output/claude-code-parser.js.map +1 -1
- package/dist/output/codex-parser.d.ts.map +1 -1
- package/dist/output/codex-parser.js +4 -6
- package/dist/output/codex-parser.js.map +1 -1
- package/dist/output/cursor-agent-parser.d.ts.map +1 -1
- package/dist/output/cursor-agent-parser.js +4 -0
- package/dist/output/cursor-agent-parser.js.map +1 -1
- package/dist/output/gemini-parser.d.ts +18 -0
- package/dist/output/gemini-parser.d.ts.map +1 -0
- package/dist/output/gemini-parser.js +91 -0
- package/dist/output/gemini-parser.js.map +1 -0
- package/dist/output/msg-store.d.ts +6 -0
- package/dist/output/msg-store.d.ts.map +1 -1
- package/dist/output/msg-store.js +17 -0
- package/dist/output/msg-store.js.map +1 -1
- package/dist/output/text-block-tracker.d.ts +29 -0
- package/dist/output/text-block-tracker.d.ts.map +1 -0
- package/dist/output/text-block-tracker.js +149 -0
- package/dist/output/text-block-tracker.js.map +1 -0
- package/dist/output/types.d.ts +9 -0
- package/dist/output/types.d.ts.map +1 -1
- package/dist/output/types.js +0 -4
- package/dist/output/types.js.map +1 -1
- package/dist/routes/__tests__/sessions-runtime.test.js +3 -0
- package/dist/routes/__tests__/sessions-runtime.test.js.map +1 -1
- package/dist/routes/__tests__/team-run-translations.test.d.ts +2 -0
- package/dist/routes/__tests__/team-run-translations.test.d.ts.map +1 -0
- package/dist/routes/__tests__/team-run-translations.test.js +418 -0
- package/dist/routes/__tests__/team-run-translations.test.js.map +1 -0
- package/dist/routes/__tests__/translations.test.d.ts +2 -0
- package/dist/routes/__tests__/translations.test.d.ts.map +1 -0
- package/dist/routes/__tests__/translations.test.js +286 -0
- package/dist/routes/__tests__/translations.test.js.map +1 -0
- package/dist/routes/__tests__/workspaces.test.js +140 -0
- package/dist/routes/__tests__/workspaces.test.js.map +1 -1
- package/dist/routes/conversations.d.ts.map +1 -1
- package/dist/routes/conversations.js +19 -2
- package/dist/routes/conversations.js.map +1 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +32 -3
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/team-runs.d.ts.map +1 -1
- package/dist/routes/team-runs.js +84 -15
- package/dist/routes/team-runs.js.map +1 -1
- package/dist/routes/translations.d.ts +4 -0
- package/dist/routes/translations.d.ts.map +1 -0
- package/dist/routes/translations.js +148 -0
- package/dist/routes/translations.js.map +1 -0
- package/dist/routes/user-input-origin.d.ts +4 -0
- package/dist/routes/user-input-origin.d.ts.map +1 -0
- package/dist/routes/user-input-origin.js +7 -0
- package/dist/routes/user-input-origin.js.map +1 -0
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/routes/workspaces.js +32 -2
- package/dist/routes/workspaces.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js +2 -2
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver-submission.test.d.ts +2 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.js +88 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.js.map +1 -0
- package/dist/runtime/__tests__/acp-history-reconciler.test.js +244 -0
- package/dist/runtime/__tests__/acp-history-reconciler.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-projector.test.js +36 -0
- package/dist/runtime/__tests__/acp-projector.test.js.map +1 -1
- package/dist/runtime/__tests__/claude-cli-control.test.js +20 -0
- package/dist/runtime/__tests__/claude-cli-control.test.js.map +1 -1
- package/dist/runtime/__tests__/cli-driver-submission.test.d.ts +2 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.js +61 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.js.map +1 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js +25 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js.map +1 -1
- package/dist/runtime/acp/acp-driver.js +38 -1
- package/dist/runtime/acp/acp-driver.js.map +1 -1
- package/dist/runtime/acp/history-reconciler.d.ts.map +1 -1
- package/dist/runtime/acp/history-reconciler.js +95 -36
- package/dist/runtime/acp/history-reconciler.js.map +1 -1
- package/dist/runtime/acp/projector.d.ts +5 -2
- package/dist/runtime/acp/projector.d.ts.map +1 -1
- package/dist/runtime/acp/projector.js +50 -23
- package/dist/runtime/acp/projector.js.map +1 -1
- package/dist/runtime/claude-cli-control.d.ts +4 -1
- package/dist/runtime/claude-cli-control.d.ts.map +1 -1
- package/dist/runtime/claude-cli-control.js +3 -1
- package/dist/runtime/claude-cli-control.js.map +1 -1
- package/dist/runtime/cli-driver.js +21 -7
- package/dist/runtime/cli-driver.js.map +1 -1
- package/dist/runtime/cli-parser.d.ts.map +1 -1
- package/dist/runtime/cli-parser.js +3 -0
- package/dist/runtime/cli-parser.js.map +1 -1
- package/dist/runtime/codex-cli-control.d.ts +4 -1
- package/dist/runtime/codex-cli-control.d.ts.map +1 -1
- package/dist/runtime/codex-cli-control.js +9 -6
- package/dist/runtime/codex-cli-control.js.map +1 -1
- package/dist/runtime/codex-cli-projector.d.ts +1 -1
- package/dist/runtime/codex-cli-projector.d.ts.map +1 -1
- package/dist/runtime/codex-cli-projector.js +4 -2
- package/dist/runtime/codex-cli-projector.js.map +1 -1
- package/dist/runtime/contracts.d.ts +15 -2
- package/dist/runtime/contracts.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.js +34 -1
- package/dist/runtime/runtime-coordinator.js.map +1 -1
- package/dist/services/__tests__/conflict-admission.test.d.ts +2 -0
- package/dist/services/__tests__/conflict-admission.test.d.ts.map +1 -0
- package/dist/services/__tests__/conflict-admission.test.js +37 -0
- package/dist/services/__tests__/conflict-admission.test.js.map +1 -0
- package/dist/services/__tests__/conflict-recovery-key.test.d.ts +2 -0
- package/dist/services/__tests__/conflict-recovery-key.test.d.ts.map +1 -0
- package/dist/services/__tests__/conflict-recovery-key.test.js +143 -0
- package/dist/services/__tests__/conflict-recovery-key.test.js.map +1 -0
- package/dist/services/__tests__/message-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/message-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/message-delivery.integration.test.js +1137 -0
- package/dist/services/__tests__/message-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.d.ts +2 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.d.ts.map +1 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.js +200 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.js.map +1 -0
- package/dist/services/__tests__/session-manager.lifecycle.test.js +37 -0
- package/dist/services/__tests__/session-manager.lifecycle.test.js.map +1 -1
- package/dist/services/__tests__/session-manager.team-run.test.js +19 -2
- package/dist/services/__tests__/session-manager.team-run.test.js.map +1 -1
- package/dist/services/__tests__/team-initial-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.js +469 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/team-reconciler.service.test.js +102 -101
- package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
- package/dist/services/__tests__/team-room-delivery.test.d.ts +2 -0
- package/dist/services/__tests__/team-room-delivery.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-room-delivery.test.js +670 -0
- package/dist/services/__tests__/team-room-delivery.test.js.map +1 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.js +622 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/translation-client.test.d.ts +2 -0
- package/dist/services/__tests__/translation-client.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-client.test.js +240 -0
- package/dist/services/__tests__/translation-client.test.js.map +1 -0
- package/dist/services/__tests__/translation-protection.test.d.ts +2 -0
- package/dist/services/__tests__/translation-protection.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-protection.test.js +156 -0
- package/dist/services/__tests__/translation-protection.test.js.map +1 -0
- package/dist/services/__tests__/translation-queue.test.d.ts +2 -0
- package/dist/services/__tests__/translation-queue.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-queue.test.js +277 -0
- package/dist/services/__tests__/translation-queue.test.js.map +1 -0
- package/dist/services/__tests__/translation-room-admission.test.d.ts +2 -0
- package/dist/services/__tests__/translation-room-admission.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-room-admission.test.js +371 -0
- package/dist/services/__tests__/translation-room-admission.test.js.map +1 -0
- package/dist/services/__tests__/translation-session-blocks.test.d.ts +2 -0
- package/dist/services/__tests__/translation-session-blocks.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-session-blocks.test.js +367 -0
- package/dist/services/__tests__/translation-session-blocks.test.js.map +1 -0
- package/dist/services/__tests__/translation-settings.service.test.d.ts +2 -0
- package/dist/services/__tests__/translation-settings.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-settings.service.test.js +154 -0
- package/dist/services/__tests__/translation-settings.service.test.js.map +1 -0
- package/dist/services/__tests__/translation.service.test.d.ts +2 -0
- package/dist/services/__tests__/translation.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation.service.test.js +480 -0
- package/dist/services/__tests__/translation.service.test.js.map +1 -0
- package/dist/services/access-auth.service.d.ts +1 -0
- package/dist/services/access-auth.service.d.ts.map +1 -1
- package/dist/services/access-auth.service.js +8 -0
- package/dist/services/access-auth.service.js.map +1 -1
- package/dist/services/attachment-context.d.ts +7 -1
- package/dist/services/attachment-context.d.ts.map +1 -1
- package/dist/services/attachment-context.js +23 -2
- package/dist/services/attachment-context.js.map +1 -1
- package/dist/services/conflict-admission.d.ts +37 -0
- package/dist/services/conflict-admission.d.ts.map +1 -0
- package/dist/services/conflict-admission.js +97 -0
- package/dist/services/conflict-admission.js.map +1 -0
- package/dist/services/conflict-resolution-context.d.ts +33 -0
- package/dist/services/conflict-resolution-context.d.ts.map +1 -0
- package/dist/services/conflict-resolution-context.js +434 -0
- package/dist/services/conflict-resolution-context.js.map +1 -0
- package/dist/services/message-delivery.service.d.ts +195 -0
- package/dist/services/message-delivery.service.d.ts.map +1 -0
- package/dist/services/message-delivery.service.js +956 -0
- package/dist/services/message-delivery.service.js.map +1 -0
- package/dist/services/project.service.d.ts +1 -1
- package/dist/services/session-manager.d.ts +94 -74
- package/dist/services/session-manager.d.ts.map +1 -1
- package/dist/services/session-manager.js +91 -17
- package/dist/services/session-manager.js.map +1 -1
- package/dist/services/task.service.d.ts +26 -20
- package/dist/services/task.service.d.ts.map +1 -1
- package/dist/services/task.service.js +9 -26
- package/dist/services/task.service.js.map +1 -1
- package/dist/services/team-room-delivery.d.ts +541 -0
- package/dist/services/team-room-delivery.d.ts.map +1 -0
- package/dist/services/team-room-delivery.js +123 -0
- package/dist/services/team-room-delivery.js.map +1 -0
- package/dist/services/team-run.service.d.ts +83 -0
- package/dist/services/team-run.service.d.ts.map +1 -1
- package/dist/services/team-run.service.js +207 -18
- package/dist/services/team-run.service.js.map +1 -1
- package/dist/services/team-scheduler.service.d.ts +3 -0
- package/dist/services/team-scheduler.service.d.ts.map +1 -1
- package/dist/services/team-scheduler.service.js +65 -11
- package/dist/services/team-scheduler.service.js.map +1 -1
- package/dist/services/team-task-input.d.ts +37 -0
- package/dist/services/team-task-input.d.ts.map +1 -0
- package/dist/services/team-task-input.js +98 -0
- package/dist/services/team-task-input.js.map +1 -0
- package/dist/services/team-task-input.service.d.ts +72 -0
- package/dist/services/team-task-input.service.d.ts.map +1 -0
- package/dist/services/team-task-input.service.js +205 -0
- package/dist/services/team-task-input.service.js.map +1 -0
- package/dist/services/translation-client.d.ts +31 -0
- package/dist/services/translation-client.d.ts.map +1 -0
- package/dist/services/translation-client.js +169 -0
- package/dist/services/translation-client.js.map +1 -0
- package/dist/services/translation-errors.d.ts +14 -0
- package/dist/services/translation-errors.d.ts.map +1 -0
- package/dist/services/translation-errors.js +16 -0
- package/dist/services/translation-errors.js.map +1 -0
- package/dist/services/translation-protection.d.ts +27 -0
- package/dist/services/translation-protection.d.ts.map +1 -0
- package/dist/services/translation-protection.js +547 -0
- package/dist/services/translation-protection.js.map +1 -0
- package/dist/services/translation-queue.d.ts +49 -0
- package/dist/services/translation-queue.d.ts.map +1 -0
- package/dist/services/translation-queue.js +211 -0
- package/dist/services/translation-queue.js.map +1 -0
- package/dist/services/translation-settings.service.d.ts +152 -0
- package/dist/services/translation-settings.service.d.ts.map +1 -0
- package/dist/services/translation-settings.service.js +174 -0
- package/dist/services/translation-settings.service.js.map +1 -0
- package/dist/services/translation.service.d.ts +168 -0
- package/dist/services/translation.service.d.ts.map +1 -0
- package/dist/services/translation.service.js +861 -0
- package/dist/services/translation.service.js.map +1 -0
- package/dist/services/workspace.service.d.ts +84 -93
- package/dist/services/workspace.service.d.ts.map +1 -1
- package/dist/services/workspace.service.js +69 -5
- package/dist/services/workspace.service.js.map +1 -1
- package/dist/socket/__tests__/socket-gateway.test.js +131 -1
- package/dist/socket/__tests__/socket-gateway.test.js.map +1 -1
- package/dist/socket/socket-gateway.d.ts +6 -0
- package/dist/socket/socket-gateway.d.ts.map +1 -1
- package/dist/socket/socket-gateway.js +312 -6
- package/dist/socket/socket-gateway.js.map +1 -1
- package/dist/utils/database-runtime.test.js +82 -5
- package/dist/utils/database-runtime.test.js.map +1 -1
- package/dist/utils/database-schema.d.ts +9 -0
- package/dist/utils/database-schema.d.ts.map +1 -0
- package/dist/utils/database-schema.js +434 -0
- package/dist/utils/database-schema.js.map +1 -0
- package/dist/utils/database-schema.test.d.ts +2 -0
- package/dist/utils/database-schema.test.d.ts.map +1 -0
- package/dist/utils/database-schema.test.js +359 -0
- package/dist/utils/database-schema.test.js.map +1 -0
- package/dist/utils/database-team-foundation.test.d.ts +2 -0
- package/dist/utils/database-team-foundation.test.d.ts.map +1 -0
- package/dist/utils/database-team-foundation.test.js +467 -0
- package/dist/utils/database-team-foundation.test.js.map +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +29 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/owned-child-process.test.js +6 -3
- package/dist/utils/owned-child-process.test.js.map +1 -1
- package/dist/utils/text-preview.d.ts +4 -0
- package/dist/utils/text-preview.d.ts.map +1 -0
- package/dist/utils/text-preview.js +21 -0
- package/dist/utils/text-preview.js.map +1 -0
- package/dist/web/assets/AgentDemoPage-BfXkNCdN.js +1 -0
- package/dist/web/assets/{AgentEnvironmentSettingsPage-SnxiaHvN.js → AgentEnvironmentSettingsPage-GHjKIWpb.js} +1 -1
- package/dist/web/assets/AttachmentPreview-CLN1lnLe.js +2 -0
- package/dist/web/assets/BranchSelect-Cofp8vYf.js +1 -0
- package/dist/web/assets/BrandLogo-BUimEX-9.js +1 -0
- package/dist/web/assets/ConversationPage-R7vNaOQv.js +1 -0
- package/dist/web/assets/CreateTaskInput-CasITF8y.js +1 -0
- package/dist/web/assets/{DemoPage-BHbnnZFF.js → DemoPage-DK-ikg1_.js} +3 -3
- package/dist/web/assets/DesignSystemPage-BhjNs2vP.js +12 -0
- package/dist/web/assets/EditableTaskTitle-BJ9Rxggf.js +70 -0
- package/dist/web/assets/{ExecutionPermissionSelector-DcC4IBOF.js → ExecutionPermissionSelector-B8befbxJ.js} +1 -1
- package/dist/web/assets/GeneralSettingsPage-RMN2al8I.js +1 -0
- package/dist/web/assets/{LoadingPreviewPage-dE_jyl19.js → LoadingPreviewPage-BDlf89rJ.js} +1 -1
- package/dist/web/assets/{McpSettingsPage-CIuQ4bvy.js → McpSettingsPage-CPNxFF67.js} +1 -1
- package/dist/web/assets/{MemberAvatar-BG0VDZKf.js → MemberAvatar-YVr_erAr.js} +1 -1
- package/dist/web/assets/MobileTaskDetail-QNUHMq7u.js +3 -0
- package/dist/web/assets/NotificationSettingsPage-BEyuyu3Z.js +1 -0
- package/dist/web/assets/ProfileSettingsPage-CHe4LlRp.js +3 -0
- package/dist/web/assets/ProjectKanbanPage-Bt_01giW.js +12 -0
- package/dist/web/assets/ProjectSettingsPage-cus6Ns97.js +2 -0
- package/dist/web/assets/{ProviderSettingsPage-DLq-GBxp.js → ProviderSettingsPage-DqA_B1Ey.js} +2 -2
- package/dist/web/assets/{SettingsMasterDetail-UfyoKAum.js → SettingsMasterDetail-DjWR9Sqk.js} +1 -1
- package/dist/web/assets/TaskDetail-rEXNe2h3.js +1 -0
- package/dist/web/assets/TeamSettingsPage-DwWROtW6.js +1 -0
- package/dist/web/assets/TranslationSettingsPage-Cod9c4Ug.js +1 -0
- package/dist/web/assets/arc-DEy33vTc.js +1 -0
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-BCNj6ZWE.js → architectureDiagram-3BPJPVTR-Ky1D1LBk.js} +1 -1
- package/dist/web/assets/{at-sign-C4VhWike.js → at-sign-C48_y345.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-D1kmB9gz.js → blockDiagram-GPEHLZMM-BNgB7kNT.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DbWKTkSe.js → c4Diagram-AAUBKEIU-4GMrPMgQ.js} +1 -1
- package/dist/web/assets/channel-DTP-syjA.js +1 -0
- package/dist/web/assets/check-BmiJ7qMY.js +1 -0
- package/dist/web/assets/chevron-down-3y5Aiolp.js +1 -0
- package/dist/web/assets/{chevron-up-DOkDFvIc.js → chevron-up-DqaYcjpq.js} +1 -1
- package/dist/web/assets/{chunk-2J33WTMH-B3TA0-LD.js → chunk-2J33WTMH-C439hRe_.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CvPTiBSV.js → chunk-4BX2VUAB-D8GK3M3t.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-xGe9Fu9Z.js → chunk-55IACEB6-Dl4UhJ8X.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-H8pz3amK.js → chunk-727SXJPM-BSEeayBq.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-BmYYNxcL.js → chunk-AQP2D5EJ-B6chbZfT.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-BmOEsLTE.js → chunk-FMBD7UC4-DaLkiLdQ.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-C5MfA0xc.js → chunk-ND2GUHAM-DeQwZAAT.js} +1 -1
- package/dist/web/assets/{chunk-QZHKN3VN-BcrGYZ7V.js → chunk-QZHKN3VN-CLRr4YRM.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-CUKgurLa.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CUKgurLa.js +1 -0
- package/dist/web/assets/code-block-OCS4YCEC-CnoxUpOx.js +2 -0
- package/dist/web/assets/confirm-dialog-ltNBFYCs.js +1 -0
- package/dist/web/assets/content-DPQMfMae.js +2 -0
- package/dist/web/assets/{copy-CdzVE3kf.js → copy-HRMhTkIG.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-CLQ-m71G.js → cose-bilkent-S5V4N54A-C1UiYzfk.js} +1 -1
- package/dist/web/assets/cssMode-DkuSsGeg.js +1 -0
- package/dist/web/assets/{dagre-BM42HDAG-CmDqxOfn.js → dagre-BM42HDAG-CTJpBgye.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-D-fSbEll.js → diagram-2AECGRRQ-Dj1_TEYp.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-HPywThAf.js → diagram-5GNKFQAL-V-KUpwqh.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DAzLhllz.js → diagram-KO2AKTUF-CXG1ZIeX.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-DXYB9h8L.js → diagram-LMA3HP47-BZSJUwk9.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-vv4kz4Zo.js → diagram-OG6HWLK6-CCr4gq4u.js} +1 -1
- package/dist/web/assets/dialog-CuFEdqLg.js +5 -0
- package/dist/web/assets/{erDiagram-TEJ5UH35-Cu6aVKAa.js → erDiagram-TEJ5UH35-Djtyzh6z.js} +1 -1
- package/dist/web/assets/{flowDiagram-I6XJVG4X-BKDe8WSQ.js → flowDiagram-I6XJVG4X-BmSVSiXJ.js} +1 -1
- package/dist/web/assets/{freemarker2-DI2giuAo.js → freemarker2-DdptX5f1.js} +2 -2
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-DMVLzmAE.js → ganttDiagram-6RSMTGT7-r5vQX-b5.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-vogzYdKn.js → gitGraphDiagram-PVQCEYII-Zj9aloh9.js} +1 -1
- package/dist/web/assets/{globe-Rnn-nKw-.js → globe-B9I-jHBB.js} +1 -1
- package/dist/web/assets/handlebars-B34f-LAf.js +1 -0
- package/dist/web/assets/hooks-BLxb16IA.js +1 -0
- package/dist/web/assets/html-CnvOQ63o.js +1 -0
- package/dist/web/assets/htmlMode-RdxZ8Svp.js +1 -0
- package/dist/web/assets/{icon-button-CuSuXgr_.js → icon-button-CYiKa-7C.js} +1 -1
- package/dist/web/assets/index-0XPZayUU.css +1 -0
- package/dist/web/assets/index-B1oVmCie.js +1 -0
- package/dist/web/assets/index-BJObbxud.js +122 -0
- package/dist/web/assets/index-Bhvt-E6d.js +41 -0
- package/dist/web/assets/index-BtUQYU5l.js +1 -0
- package/dist/web/assets/index-CThFsQNP.js +1 -0
- package/dist/web/assets/index-DZLnTISJ.js +1 -0
- package/dist/web/assets/index-DcOU2m2F.js +1 -0
- package/dist/web/assets/{index-CMjLMilU.js → index-Dk3bRQAK.js} +1 -1
- package/dist/web/assets/{index-B88xAivn.js → index-DkRy6eNX.js} +5 -5
- package/dist/web/assets/{infoDiagram-5YYISTIA-CEfSHkNq.js → infoDiagram-5YYISTIA-BHtVaxZx.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BXKZuWtD.js → ishikawaDiagram-YF4QCWOH-BYmwjkbC.js} +5 -5
- package/dist/web/assets/javascript-BhombDEO.js +1 -0
- package/dist/web/assets/{journeyDiagram-JHISSGLW-wsOUYlu7.js → journeyDiagram-JHISSGLW-c8BBqqRS.js} +1 -1
- package/dist/web/assets/jsonMode-BJGOUeaV.js +7 -0
- package/dist/web/assets/{kanban-definition-UN3LZRKU-DNsuvOrU.js → kanban-definition-UN3LZRKU-D4Vr-oFT.js} +1 -1
- package/dist/web/assets/{kbd-B3m64lRd.js → kbd-C88ut3t9.js} +1 -1
- package/dist/web/assets/{key-round-DpYSyeDH.js → key-round-Cjbj2qNa.js} +1 -1
- package/dist/web/assets/{layers-CxqMQVmH.js → layers-eaHAVcc3.js} +1 -1
- package/dist/web/assets/{linear-BmmCZdOQ.js → linear-opi90s0L.js} +1 -1
- package/dist/web/assets/{link-DbSpzB1w.js → link-BSGb85gq.js} +1 -1
- package/dist/web/assets/liquid-Czy1WpPz.js +1 -0
- package/dist/web/assets/{lspLanguageFeatures-WhdC7zdf.js → lspLanguageFeatures-DWu2Ubf0.js} +1 -1
- package/dist/web/assets/mdx-DhXfoSnM.js +1 -0
- package/dist/web/assets/menu--sjyisSg.js +1 -0
- package/dist/web/assets/{mermaid-NOHMQCX5-DmKVQY9m.js → mermaid-NOHMQCX5-BSNbBj78.js} +71 -71
- package/dist/web/assets/{message-square-CfNb-MTd.js → message-square-BLEJN6p7.js} +1 -1
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-0RzXjZ9G.js → mindmap-definition-RKZ34NQL-BN3ZjBh-.js} +1 -1
- package/dist/web/assets/{modal-Kpqn-nDO.js → modal-CSGOqphK.js} +1 -1
- package/dist/web/assets/{monaco-I1fXAMIt.js → monaco-BkuNyOkP.js} +3 -3
- package/dist/web/assets/{paperclip-BBrzKZQC.js → paperclip-CTNoXpUW.js} +1 -1
- package/dist/web/assets/{pencil-pzVKblxj.js → pencil-Cp70ZwtG.js} +1 -1
- package/dist/web/assets/{people-C6b3eeLq.js → people-DT78SebR.js} +1 -1
- package/dist/web/assets/{pieDiagram-4H26LBE5-Bcvzb8TW.js → pieDiagram-4H26LBE5-CfmFHpPI.js} +2 -2
- package/dist/web/assets/popover-BiVxGGgp.js +1 -0
- package/dist/web/assets/python-DIcQDjcf.js +1 -0
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-DwNhxMxj.js → quadrantDiagram-W4KKPZXB-CeaumJAa.js} +1 -1
- package/dist/web/assets/razor-DYK6Rxer.js +1 -0
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-D2wSGYn2.js → requirementDiagram-4Y6WPE33-BWWCDXCE.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-l3LLF--T.js → sankeyDiagram-5OEKKPKP-DAJut743.js} +1 -1
- package/dist/web/assets/search-DniD_AGC.js +1 -0
- package/dist/web/assets/search-field-CQLDXLeA.js +1 -0
- package/dist/web/assets/select-B5RYunTs.js +1 -0
- package/dist/web/assets/{select-DGwKE4l0.js → select-BPdJrr5M.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BAGsbTS_.js → sequenceDiagram-3UESZ5HK-CynjRGW4.js} +1 -1
- package/dist/web/assets/{server-BIPZ9Ka-.js → server-xswxWpKD.js} +1 -1
- package/dist/web/assets/stateDiagram-AJRCARHV-amAtpx9w.js +1 -0
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-V-lSceg1.js +1 -0
- package/dist/web/assets/{textarea-Bnfq7adW.js → textarea-BVyPl9rM.js} +1 -1
- package/dist/web/assets/{timeline-definition-PNZ67QCA-Dt-DcRrG.js → timeline-definition-PNZ67QCA-DZ9W7WlP.js} +1 -1
- package/dist/web/assets/toggles-QcIz43DP.js +1 -0
- package/dist/web/assets/tooltip-CPqGK_WZ.js +1 -0
- package/dist/web/assets/{track-B_K578io.js → track-Ckye0-tt.js} +1 -1
- package/dist/web/assets/{trash-2-ALAYDudv.js → trash-2-CvUJsbtT.js} +1 -1
- package/dist/web/assets/tsMode-c5x0d47n.js +11 -0
- package/dist/web/assets/typescript-i7eYblLt.js +1 -0
- package/dist/web/assets/{upload-D7hKT2VA.js → upload-CsXAmAun.js} +1 -1
- package/dist/web/assets/{use-profiles-Ncqxdw7S.js → use-profiles-DuXaBRju.js} +1 -1
- package/dist/web/assets/{use-projects-Dwy9AfAG.js → use-projects-Ddz0knyr.js} +1 -1
- package/dist/web/assets/{use-providers-BRyZjuBG.js → use-providers-Td1-gyrN.js} +1 -1
- package/dist/web/assets/use-translation-settings-NYM0lmBx.js +1 -0
- package/dist/web/assets/use-workspaces-CdJZLmGh.js +1 -0
- package/dist/web/assets/useNormalizedLogs--RbVywYa.js +1 -0
- package/dist/web/assets/useTokenUsage-DDXf7E4p.js +1 -0
- package/dist/web/assets/{vennDiagram-CIIHVFJN-Cr55FtiY.js → vennDiagram-CIIHVFJN-CB2Ubvy9.js} +1 -1
- package/dist/web/assets/{wardley-L42UT6IY-CtwMk9MJ.js → wardley-L42UT6IY-BXOkk77I.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-BeyHmTu3.js → wardleyDiagram-YWT4CUSO-VA6ywdQQ.js} +1 -1
- package/dist/web/assets/xml-D2EGActB.js +1 -0
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-9g34Lq8E.js → xychartDiagram-2RQKCTM6-FNcvDj5G.js} +1 -1
- package/dist/web/assets/yaml-jeiIZSL4.js +1 -0
- package/dist/web/index.html +2 -2
- package/node_modules/@agent-tower/shared/dist/index.d.ts +1 -0
- package/node_modules/@agent-tower/shared/dist/index.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/index.js +1 -0
- package/node_modules/@agent-tower/shared/dist/index.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts +11 -0
- package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/log-adapter.js +2 -0
- package/node_modules/@agent-tower/shared/dist/log-adapter.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/socket/events.d.ts +5 -2
- package/node_modules/@agent-tower/shared/dist/socket/events.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/socket/events.js +2 -0
- package/node_modules/@agent-tower/shared/dist/socket/events.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/translation.d.ts +306 -0
- package/node_modules/@agent-tower/shared/dist/translation.d.ts.map +1 -0
- package/node_modules/@agent-tower/shared/dist/translation.js +8 -0
- package/node_modules/@agent-tower/shared/dist/translation.js.map +1 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts +23 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/prisma/migrations/20261016000000_add_translation_foundation/migration.sql +104 -0
- package/prisma/migrations/20261016010000_add_message_deliveries/migration.sql +158 -0
- package/prisma/migrations/20261019000000_add_room_translation_eligibility/migration.sql +3 -0
- package/prisma/migrations/20261019100000_add_team_delivery_foundation/migration.sql +217 -0
- package/prisma/schema.prisma +224 -0
- package/dist/web/assets/AgentDemoPage-CaR_Yk9_.js +0 -1
- package/dist/web/assets/BranchSelect-D-kqavDG.js +0 -1
- package/dist/web/assets/BrandLogo-CC1alVsd.js +0 -1
- package/dist/web/assets/ConversationPage-RWKLxe1j.js +0 -3
- package/dist/web/assets/CreateTaskInput-SHJ1YpRe.js +0 -1
- package/dist/web/assets/DesignSystemPage-ChCrzeKT.js +0 -12
- package/dist/web/assets/EditableTaskTitle-CGVeZUSt.js +0 -70
- package/dist/web/assets/GeneralSettingsPage-C_tkwpmF.js +0 -1
- package/dist/web/assets/MobileTaskDetail-DxE6ZDAS.js +0 -5
- package/dist/web/assets/NotificationSettingsPage-B-Ot2OMg.js +0 -1
- package/dist/web/assets/ProfileSettingsPage-Dn1lrjJr.js +0 -3
- package/dist/web/assets/ProjectKanbanPage-jcW8sA7x.js +0 -12
- package/dist/web/assets/ProjectSettingsPage-BFPty2eA.js +0 -2
- package/dist/web/assets/TaskDetail-a1jalILy.js +0 -3
- package/dist/web/assets/TeamSettingsPage-BxGc4W7K.js +0 -1
- package/dist/web/assets/arc-dhk0OSs5.js +0 -1
- package/dist/web/assets/channel-K0AG6Tl1.js +0 -1
- package/dist/web/assets/check-DYlb0A_N.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-BTJ44hwx.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BTJ44hwx.js +0 -1
- package/dist/web/assets/code-block-OCS4YCEC-DLPrDBDy.js +0 -2
- package/dist/web/assets/confirm-dialog-BRkrtULz.js +0 -1
- package/dist/web/assets/content-DPCGELMz.js +0 -2
- package/dist/web/assets/cssMode-ChMyv9Nj.js +0 -1
- package/dist/web/assets/dialog-B_vC5R4B.js +0 -5
- package/dist/web/assets/handlebars-B9tmKQPV.js +0 -1
- package/dist/web/assets/hooks-DK4m7-FN.js +0 -1
- package/dist/web/assets/html-B_E2U0g5.js +0 -1
- package/dist/web/assets/htmlMode-DRHM_Cwq.js +0 -1
- package/dist/web/assets/index-B6Lvy5Sr.js +0 -1
- package/dist/web/assets/index-BCV57B4O.js +0 -41
- package/dist/web/assets/index-CTG-4w90.js +0 -1
- package/dist/web/assets/index-Cz73HpYH.js +0 -122
- package/dist/web/assets/index-CzvAGoau.css +0 -1
- package/dist/web/assets/index-DENY_U7o.js +0 -1
- package/dist/web/assets/index-ZO2tqdha.js +0 -1
- package/dist/web/assets/javascript-ClWqjgn3.js +0 -1
- package/dist/web/assets/jsonMode-DVAoDfae.js +0 -7
- package/dist/web/assets/liquid-CZf3xdoq.js +0 -1
- package/dist/web/assets/mdx-xzVEPP01.js +0 -1
- package/dist/web/assets/menu-0A0v_lRV.js +0 -1
- package/dist/web/assets/popover-BYz89aiY.js +0 -1
- package/dist/web/assets/python-DL05HvW4.js +0 -1
- package/dist/web/assets/razor-BCZ3_uDf.js +0 -1
- package/dist/web/assets/search-field-B5czD2Pl.js +0 -1
- package/dist/web/assets/select-yem-xN9Z.js +0 -1
- package/dist/web/assets/stateDiagram-AJRCARHV-C0BHmXYX.js +0 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Be3UCkeQ.js +0 -1
- package/dist/web/assets/toggles-DxNDJZsN.js +0 -1
- package/dist/web/assets/tooltip-CHOgkFbE.js +0 -1
- package/dist/web/assets/tsMode-kXxq-Lw7.js +0 -11
- package/dist/web/assets/typescript-E3_QcT_u.js +0 -1
- package/dist/web/assets/use-attachments-CK7y5KsN.js +0 -2
- package/dist/web/assets/use-workspaces-BBbahdwU.js +0 -1
- package/dist/web/assets/useNormalizedLogs-CRHRedwp.js +0 -1
- package/dist/web/assets/useTokenUsage-YwiF0xnT.js +0 -1
- package/dist/web/assets/xml-DxKND8qX.js +0 -1
- package/dist/web/assets/yaml-BqpCqTY6.js +0 -1
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from 'vitest';
|
|
7
|
+
import pkg from '@prisma/client';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { prepareP3Database, synchronizeDatabaseSchema } from './database-schema.js';
|
|
10
|
+
// @ts-expect-error Shared install-level fixture is intentionally standalone JS.
|
|
11
|
+
import { seedLegacyDatabase, snapshotLegacyDatabase } from '../../../../scripts/p3-startup-fixture.mjs';
|
|
12
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
|
|
13
|
+
const scratch = mkdtempSync(path.join(tmpdir(), 'tower-p3-schema-'));
|
|
14
|
+
const template = path.join(scratch, 'legacy.db');
|
|
15
|
+
const { PrismaClient } = pkg;
|
|
16
|
+
let db;
|
|
17
|
+
let dbPath;
|
|
18
|
+
let baseline;
|
|
19
|
+
let caseNumber = 0;
|
|
20
|
+
const sync = () => synchronizeDatabaseSchema({ dataDir: path.dirname(dbPath), dbPath, schemaPath: path.join(root, 'prisma/schema.prisma'), entryDir: path.join(root, 'src') });
|
|
21
|
+
async function snapshot() { return snapshotLegacyDatabase(db, baseline); }
|
|
22
|
+
async function sql(text) { await db.$executeRawUnsafe(text); }
|
|
23
|
+
const additions = [
|
|
24
|
+
['Workspace', 'creationSubmissionId'], ['Session', 'creationSubmissionId'], ['Session', 'initialDeliveryId'],
|
|
25
|
+
];
|
|
26
|
+
const upperUuid = 'AAAAAAAA-AAAA-4AAA-8AAA-AAAAAAAAAAAA';
|
|
27
|
+
const lowerUuid = upperUuid.toLowerCase();
|
|
28
|
+
async function lookupId(table, name, value) {
|
|
29
|
+
if (table === 'Workspace')
|
|
30
|
+
return db.workspace.findUnique({ where: { creationSubmissionId: value }, select: { id: true } });
|
|
31
|
+
if (name === 'initialDeliveryId')
|
|
32
|
+
return db.session.findUnique({ where: { initialDeliveryId: value }, select: { id: true } });
|
|
33
|
+
return db.session.findUnique({ where: { creationSubmissionId: value }, select: { id: true } });
|
|
34
|
+
}
|
|
35
|
+
async function durableState() {
|
|
36
|
+
const schema = await db.$queryRawUnsafe("SELECT name,type,sql FROM sqlite_master ORDER BY type,name");
|
|
37
|
+
const tables = {};
|
|
38
|
+
for (const { name, type } of schema)
|
|
39
|
+
if (type === 'table') {
|
|
40
|
+
tables[name] = await db.$queryRawUnsafe(`SELECT * FROM "${name}" ORDER BY rowid`);
|
|
41
|
+
}
|
|
42
|
+
return { schema, tables, version: await db.$queryRawUnsafe('PRAGMA schema_version') };
|
|
43
|
+
}
|
|
44
|
+
describe('P3 startup schema barrier (isolated SQLite and real bundled Prisma)', () => {
|
|
45
|
+
beforeAll(async () => { baseline = await seedLegacyDatabase(root, template, scratch); }, 30_000);
|
|
46
|
+
beforeEach(() => {
|
|
47
|
+
dbPath = path.join(scratch, `case-${caseNumber++}.db`);
|
|
48
|
+
cpSync(template, dbPath);
|
|
49
|
+
db = new PrismaClient({ datasources: { db: { url: `file:${dbPath}` } } });
|
|
50
|
+
});
|
|
51
|
+
afterEach(async () => { await db.$disconnect(); });
|
|
52
|
+
afterAll(() => { rmSync(scratch, { recursive: true, force: true }); });
|
|
53
|
+
it('demonstrates the original non-interactive push failure, then preserves every legacy value and Attempt', async () => {
|
|
54
|
+
const { execFileSync } = await import('node:child_process');
|
|
55
|
+
let originalFailure;
|
|
56
|
+
try {
|
|
57
|
+
execFileSync(process.execPath, [path.join(root, 'node_modules/prisma/build/index.js'), 'db', 'push', '--skip-generate', `--schema=${path.join(root, 'prisma/schema.prisma')}`], {
|
|
58
|
+
env: { ...process.env, AGENT_TOWER_DATABASE_URL: `file:${dbPath}`, CACHE_DIR: path.join(scratch, 'cache') }, stdio: 'pipe', timeout: 30_000,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
originalFailure = error;
|
|
63
|
+
}
|
|
64
|
+
expect(String(originalFailure?.stderr)).toContain('--accept-data-loss');
|
|
65
|
+
expect(String(originalFailure?.stdout)).toContain('creationSubmissionId');
|
|
66
|
+
expect(await snapshot()).toEqual(baseline);
|
|
67
|
+
await sync();
|
|
68
|
+
expect(await snapshot()).toEqual(baseline);
|
|
69
|
+
await sync();
|
|
70
|
+
expect(await snapshot()).toEqual(baseline);
|
|
71
|
+
expect(await db.$queryRawUnsafe('PRAGMA foreign_key_check')).toEqual([]);
|
|
72
|
+
expect(await db.$queryRawUnsafe('PRAGMA integrity_check')).toEqual([{ integrity_check: 'ok' }]);
|
|
73
|
+
}, 30_000);
|
|
74
|
+
it('adds room eligibility through normal sync without rewriting legacy facts, retains zero across repeated sync', async () => {
|
|
75
|
+
await sync();
|
|
76
|
+
const column = (await db.$queryRawUnsafe('PRAGMA table_info(RoomMessage)')).find(row => row.name === 'translationEligibilityEpoch');
|
|
77
|
+
expect(column).toMatchObject({ type: 'INTEGER', notnull: 0n, dflt_value: null });
|
|
78
|
+
const indexes = await db.$queryRawUnsafe('PRAGMA index_list(RoomMessage)');
|
|
79
|
+
expect(indexes.find(row => row.name === 'RoomMessage_translationEligibilityEpoch_id_idx')?.unique).toBe(0n);
|
|
80
|
+
const team = await db.teamRun.create({ data: { taskId: 'task', mode: 'CONFIRM' } });
|
|
81
|
+
const message = await db.roomMessage.create({ data: { teamRunId: team.id, senderType: 'agent', kind: 'chat', content: ' exact\n\n', mentions: '[]', translationEligibilityEpoch: 0 } });
|
|
82
|
+
await sync();
|
|
83
|
+
expect(await db.roomMessage.findUnique({ where: { id: message.id } })).toEqual(message);
|
|
84
|
+
expect(await snapshot()).toEqual(baseline);
|
|
85
|
+
}, 20_000);
|
|
86
|
+
it.each(['TEXT', 'INTEGER NOT NULL DEFAULT 0', 'INTEGER DEFAULT NULL', 'INTEGER DEFAULT 0'])('rejects incompatible room eligibility before push: %s', async (definition) => {
|
|
87
|
+
await sql(`ALTER TABLE RoomMessage ADD COLUMN translationEligibilityEpoch ${definition}`);
|
|
88
|
+
const before = await durableState();
|
|
89
|
+
await expect(sync()).rejects.toThrow('schema prepare failed');
|
|
90
|
+
expect(await durableState()).toEqual(before);
|
|
91
|
+
});
|
|
92
|
+
it.each([
|
|
93
|
+
'CREATE UNIQUE INDEX RoomMessage_translationEligibilityEpoch_id_idx ON RoomMessage(translationEligibilityEpoch,id)',
|
|
94
|
+
'CREATE INDEX RoomMessage_translationEligibilityEpoch_id_idx ON RoomMessage(id,translationEligibilityEpoch)',
|
|
95
|
+
'CREATE INDEX RoomMessage_translationEligibilityEpoch_id_idx ON RoomMessage(translationEligibilityEpoch,id) WHERE translationEligibilityEpoch IS NOT NULL',
|
|
96
|
+
])('rejects an incompatible room index before any workers or push: %s', async (definition) => {
|
|
97
|
+
await sql('ALTER TABLE RoomMessage ADD COLUMN translationEligibilityEpoch INTEGER');
|
|
98
|
+
await sql(definition);
|
|
99
|
+
const before = await durableState();
|
|
100
|
+
await expect(sync()).rejects.toThrow('unexpected index definition');
|
|
101
|
+
expect(await durableState()).toEqual(before);
|
|
102
|
+
});
|
|
103
|
+
it('supports a new database and multiple NULLs', async () => {
|
|
104
|
+
await db.$disconnect();
|
|
105
|
+
rmSync(dbPath);
|
|
106
|
+
await sync();
|
|
107
|
+
expect(await db.$queryRawUnsafe('SELECT * FROM Session')).toEqual([]);
|
|
108
|
+
}, 20_000);
|
|
109
|
+
it('keeps committed preparation retryable after a failed push and checks structure even if push exits zero', async () => {
|
|
110
|
+
const fakeRoot = path.join(scratch, 'fake-bundle');
|
|
111
|
+
const fakePrisma = path.join(fakeRoot, 'node_modules/prisma/build');
|
|
112
|
+
mkdirSync(fakePrisma, { recursive: true });
|
|
113
|
+
const options = { dataDir: scratch, dbPath, schemaPath: path.join(root, 'prisma/schema.prisma'), entryDir: path.join(fakeRoot, 'dist') };
|
|
114
|
+
writeFileSync(path.join(fakePrisma, 'index.js'), 'process.exit(1)');
|
|
115
|
+
await expect(synchronizeDatabaseSchema(options)).rejects.toThrow('schema push failed');
|
|
116
|
+
expect(await snapshot()).toEqual(baseline);
|
|
117
|
+
writeFileSync(path.join(fakePrisma, 'index.js'), 'process.exit(0)');
|
|
118
|
+
await expect(synchronizeDatabaseSchema(options)).rejects.toThrow('schema verify failed');
|
|
119
|
+
expect(await snapshot()).toEqual(baseline);
|
|
120
|
+
await sync();
|
|
121
|
+
expect(await snapshot()).toEqual(baseline);
|
|
122
|
+
}, 20_000);
|
|
123
|
+
it('preserves active/retry states through schema sync before recovery has begun', async () => {
|
|
124
|
+
await sql("UPDATE TranslationSource SET jobState='RETRY_WAIT', nextRetryAt=1740000123460, errorCode='HTTP_503'");
|
|
125
|
+
await sql("UPDATE TranslationAttempt SET status='RUNNING', leaseOwner='old-owner', leaseExpiresAt=1740000123460");
|
|
126
|
+
const before = await snapshot();
|
|
127
|
+
await sync();
|
|
128
|
+
expect(await snapshot()).toEqual(before);
|
|
129
|
+
}, 20_000);
|
|
130
|
+
it('preserves upgraded delivery IDs and valid Source/Turn/Receipt/Action relationships', async () => {
|
|
131
|
+
await sync();
|
|
132
|
+
await db.messageDelivery.create({ data: {
|
|
133
|
+
id: 'delivery', clientSubmissionId: 'submission', requestFingerprint: 'fingerprint',
|
|
134
|
+
sessionId: 'session-CONVERSATION-0', channelKey: 'conversation:conversation-0', sequence: 1, origin: 'CONVERSATION',
|
|
135
|
+
originalText: ' exact\n\n', sourceHash: 'hash', enableEpoch: 1, requiresTranslation: false,
|
|
136
|
+
state: 'SENT', acceptedText: ' accepted\n', actualSentText: ' exact\n\n',
|
|
137
|
+
receipt: { create: { generation: 1, phase: 'SUBMITTED', evidence: 'written' } },
|
|
138
|
+
actions: { create: { actionId: 'action', fingerprint: 'action-fingerprint' } },
|
|
139
|
+
} });
|
|
140
|
+
await sql("UPDATE TranslationSource SET deliveryId='delivery' WHERE id='source-CONVERSATION-0'");
|
|
141
|
+
await sql("UPDATE ConversationTurn SET deliveryId='delivery', originalText=' prior ', deliveryRevision=2 WHERE id='turn-0'");
|
|
142
|
+
const before = await snapshot();
|
|
143
|
+
const turn = await db.conversationTurn.findUnique({ where: { id: 'turn-0' } });
|
|
144
|
+
const delivery = await db.messageDelivery.findUnique({ where: { id: 'delivery' }, include: { receipt: true, actions: true } });
|
|
145
|
+
await sync();
|
|
146
|
+
expect(await snapshot()).toEqual(before);
|
|
147
|
+
expect(await db.conversationTurn.findUnique({ where: { id: 'turn-0' } })).toEqual(turn);
|
|
148
|
+
expect(await db.messageDelivery.findUnique({ where: { id: 'delivery' }, include: { receipt: true, actions: true } })).toEqual(delivery);
|
|
149
|
+
}, 20_000);
|
|
150
|
+
for (const phase of ['one-column', 'prepared', 'pushed'])
|
|
151
|
+
it(`resumes after ${phase} interruption and preserves non-null IDs`, async () => {
|
|
152
|
+
if (phase === 'one-column')
|
|
153
|
+
await sql('ALTER TABLE Session ADD COLUMN creationSubmissionId TEXT');
|
|
154
|
+
else
|
|
155
|
+
await prepareP3Database(dbPath);
|
|
156
|
+
if (phase === 'pushed')
|
|
157
|
+
await sync();
|
|
158
|
+
await sql("UPDATE Session SET creationSubmissionId='existing-' || id");
|
|
159
|
+
await sync();
|
|
160
|
+
await sql("UPDATE Session SET initialDeliveryId='initial-' || id");
|
|
161
|
+
await sql("UPDATE Workspace SET creationSubmissionId='workspace-' || id");
|
|
162
|
+
const ids = await db.$queryRawUnsafe('SELECT creationSubmissionId, initialDeliveryId FROM Session ORDER BY id');
|
|
163
|
+
const workspaceIds = await db.$queryRawUnsafe('SELECT creationSubmissionId FROM Workspace ORDER BY id');
|
|
164
|
+
await sync();
|
|
165
|
+
expect(await db.$queryRawUnsafe('SELECT creationSubmissionId, initialDeliveryId FROM Session ORDER BY id')).toEqual(ids);
|
|
166
|
+
expect(await db.$queryRawUnsafe('SELECT creationSubmissionId FROM Workspace ORDER BY id')).toEqual(workspaceIds);
|
|
167
|
+
expect(await snapshot()).toEqual(baseline);
|
|
168
|
+
}, 30_000);
|
|
169
|
+
it('rolls back earlier DDL for duplicate non-null values without logging the value', async () => {
|
|
170
|
+
await sql('ALTER TABLE Session ADD COLUMN creationSubmissionId TEXT');
|
|
171
|
+
await sql("UPDATE Session SET creationSubmissionId='private-duplicate'");
|
|
172
|
+
await expect(sync()).rejects.toThrow('Session_creationSubmissionId_key contains duplicate non-null values');
|
|
173
|
+
expect((await db.$queryRawUnsafe('PRAGMA table_info(Workspace)')).map(row => row.name)).not.toContain('creationSubmissionId');
|
|
174
|
+
expect(await snapshot()).toEqual(baseline);
|
|
175
|
+
});
|
|
176
|
+
for (const definition of [
|
|
177
|
+
'CREATE INDEX Session_creationSubmissionId_key ON Session(creationSubmissionId)',
|
|
178
|
+
'CREATE UNIQUE INDEX Session_creationSubmissionId_key ON Session(creationSubmissionId) WHERE creationSubmissionId IS NOT NULL',
|
|
179
|
+
'CREATE UNIQUE INDEX Session_creationSubmissionId_key ON Session(creationSubmissionId COLLATE NOCASE)',
|
|
180
|
+
'CREATE UNIQUE INDEX Session_creationSubmissionId_key ON Workspace(id)',
|
|
181
|
+
])
|
|
182
|
+
it(`rejects heterogeneous indexes: ${definition}`, async () => {
|
|
183
|
+
await sql('ALTER TABLE Session ADD COLUMN creationSubmissionId TEXT');
|
|
184
|
+
await sql(definition);
|
|
185
|
+
await expect(sync()).rejects.toThrow('unexpected index definition');
|
|
186
|
+
expect(await snapshot()).toEqual(baseline);
|
|
187
|
+
});
|
|
188
|
+
it('rejects heterogeneous nullable ID columns', async () => {
|
|
189
|
+
await sql('ALTER TABLE Session ADD COLUMN initialDeliveryId INTEGER');
|
|
190
|
+
await expect(sync()).rejects.toThrow('Session.initialDeliveryId must be nullable TEXT');
|
|
191
|
+
expect(await snapshot()).toEqual(baseline);
|
|
192
|
+
});
|
|
193
|
+
it('rejects inherited nonstandard column collation when adding its unique index', async () => {
|
|
194
|
+
await sql('ALTER TABLE Session ADD COLUMN initialDeliveryId TEXT COLLATE NOCASE');
|
|
195
|
+
await expect(sync()).rejects.toThrow('Session.initialDeliveryId must use BINARY column collation');
|
|
196
|
+
expect(await snapshot()).toEqual(baseline);
|
|
197
|
+
});
|
|
198
|
+
for (const [table, name] of additions)
|
|
199
|
+
for (const collation of ['NOCASE', 'RTRIM'])
|
|
200
|
+
for (const indexed of [false, true]) {
|
|
201
|
+
it(`rejects ${table}.${name} COLLATE ${collation} with ${indexed ? 'an explicit BINARY index' : 'no index'} before push`, async () => {
|
|
202
|
+
await sql(`ALTER TABLE ${table} ADD COLUMN ${name} TEXT COLLATE ${collation}`);
|
|
203
|
+
if (indexed)
|
|
204
|
+
await sql(`CREATE UNIQUE INDEX ${table}_${name}_key ON ${table}(${name} COLLATE BINARY)`);
|
|
205
|
+
const ids = await db.$queryRawUnsafe(`SELECT id FROM ${table} ORDER BY id`);
|
|
206
|
+
await db.$executeRawUnsafe(`UPDATE ${table} SET ${name}=? WHERE id=?`, upperUuid, ids[0].id);
|
|
207
|
+
await db.$executeRawUnsafe(`UPDATE ${table} SET ${name}=? WHERE id=?`, lowerUuid, ids[1].id);
|
|
208
|
+
const before = await durableState();
|
|
209
|
+
await expect(sync()).rejects.toThrow(`schema prepare failed (attempt 1/3): P3 schema incompatible: ${table}.${name} must use BINARY column collation`);
|
|
210
|
+
expect(await durableState()).toEqual(before);
|
|
211
|
+
expect(await snapshot()).toEqual(baseline);
|
|
212
|
+
expect(await db.$queryRawUnsafe('PRAGMA foreign_key_check')).toEqual([]);
|
|
213
|
+
expect(await db.$queryRawUnsafe('PRAGMA integrity_check')).toEqual([{ integrity_check: 'ok' }]);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
for (const declaration of ['TEXT', 'TEXT COLLATE BINARY', 'TEXT COLLATE bInArY'])
|
|
217
|
+
for (const indexed of [false, true]) {
|
|
218
|
+
it(`accepts ${declaration} with ${indexed ? 'existing explicit BINARY indexes' : 'missing indexes'}, preserving case-sensitive UUID lookups and NULLs`, async () => {
|
|
219
|
+
expect(z.string().uuid().parse(upperUuid)).toBe(upperUuid);
|
|
220
|
+
expect(z.string().uuid().parse(lowerUuid)).toBe(lowerUuid);
|
|
221
|
+
for (const [table, name] of additions) {
|
|
222
|
+
await sql(`ALTER TABLE ${table} ADD COLUMN ${name} ${declaration}`);
|
|
223
|
+
if (indexed)
|
|
224
|
+
await sql(`CREATE UNIQUE INDEX ${table}_${name}_key ON ${table}(${name} COLLATE BINARY)`);
|
|
225
|
+
const ids = await db.$queryRawUnsafe(`SELECT id FROM ${table} ORDER BY id`);
|
|
226
|
+
await db.$executeRawUnsafe(`UPDATE ${table} SET ${name}=? WHERE id=?`, upperUuid, ids[0].id);
|
|
227
|
+
await db.$executeRawUnsafe(`UPDATE ${table} SET ${name}=? WHERE id=?`, lowerUuid, ids[1].id);
|
|
228
|
+
if (table === 'Workspace') {
|
|
229
|
+
// Two additional rows exercise multiple NULLs alongside the non-null IDs.
|
|
230
|
+
for (const id of ['null-0', 'null-1'])
|
|
231
|
+
await db.$executeRawUnsafe('INSERT INTO Workspace(id,taskId,branchName,worktreePath,workingDir,status,createdAt,updatedAt) SELECT ?,taskId,branchName,worktreePath,workingDir,status,createdAt,updatedAt FROM Workspace LIMIT 1', id);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const before = await snapshotLegacyDatabase(db);
|
|
235
|
+
await sync();
|
|
236
|
+
for (const [table, name] of additions) {
|
|
237
|
+
const ids = await db.$queryRawUnsafe(`SELECT id FROM ${table} WHERE ${name} IS NOT NULL ORDER BY id`);
|
|
238
|
+
expect(await lookupId(table, name, upperUuid)).toEqual({ id: ids[0].id });
|
|
239
|
+
expect(await lookupId(table, name, lowerUuid)).toEqual({ id: ids[1].id });
|
|
240
|
+
expect(await db.$queryRawUnsafe(`SELECT COUNT(*) AS n FROM ${table} WHERE ${name} IS NULL`)).toEqual([{ n: 2n }]);
|
|
241
|
+
}
|
|
242
|
+
expect(await snapshotLegacyDatabase(db, before)).toEqual(before);
|
|
243
|
+
// Verify the already-upgraded branch as well as the partial-upgrade branch.
|
|
244
|
+
await sync();
|
|
245
|
+
expect(await snapshotLegacyDatabase(db, before)).toEqual(before);
|
|
246
|
+
}, 30_000);
|
|
247
|
+
}
|
|
248
|
+
it('never invokes push or resumes application work after incompatible column rejection', async () => {
|
|
249
|
+
await sql('ALTER TABLE Session ADD COLUMN creationSubmissionId TEXT COLLATE NOCASE');
|
|
250
|
+
await sql('CREATE UNIQUE INDEX Session_creationSubmissionId_key ON Session(creationSubmissionId COLLATE BINARY)');
|
|
251
|
+
await sql('UPDATE AppSettings SET dataMigrationVersion=0');
|
|
252
|
+
await db.$executeRawUnsafe('UPDATE Task SET title=?', 'long title '.repeat(50));
|
|
253
|
+
await sql("UPDATE TranslationSource SET jobState='RUNNING'");
|
|
254
|
+
const before = await durableState();
|
|
255
|
+
const bundle = path.join(scratch, 'no-push-bundle');
|
|
256
|
+
const marker = path.join(bundle, 'push-ran');
|
|
257
|
+
mkdirSync(path.join(bundle, 'node_modules/prisma/build'), { recursive: true });
|
|
258
|
+
writeFileSync(path.join(bundle, 'node_modules/prisma/build/index.js'), `require('node:fs').writeFileSync(${JSON.stringify(marker)}, 'called')`);
|
|
259
|
+
let recovered = false;
|
|
260
|
+
await expect((async () => {
|
|
261
|
+
await synchronizeDatabaseSchema({ dataDir: scratch, dbPath, schemaPath: path.join(root, 'prisma/schema.prisma'), entryDir: path.join(bundle, 'dist') });
|
|
262
|
+
recovered = true;
|
|
263
|
+
})()).rejects.toThrow('schema prepare failed (attempt 1/3)');
|
|
264
|
+
expect(existsSync(marker)).toBe(false);
|
|
265
|
+
expect(recovered).toBe(false);
|
|
266
|
+
expect(await durableState()).toEqual(before);
|
|
267
|
+
});
|
|
268
|
+
for (const encoding of ['UTF-16le', 'UTF-16be'])
|
|
269
|
+
for (const collation of ['BINARY', 'NOCASE']) {
|
|
270
|
+
it(`checks empty ${encoding} columns using ${collation} semantics`, async () => {
|
|
271
|
+
await db.$disconnect();
|
|
272
|
+
rmSync(dbPath);
|
|
273
|
+
await sql(`PRAGMA encoding='${encoding}'`);
|
|
274
|
+
await sql(`CREATE TABLE Workspace(id TEXT PRIMARY KEY, creationSubmissionId TEXT COLLATE ${collation})`);
|
|
275
|
+
await sql(`CREATE TABLE Session(id TEXT PRIMARY KEY, creationSubmissionId TEXT COLLATE ${collation}, initialDeliveryId TEXT COLLATE ${collation})`);
|
|
276
|
+
const before = await durableState();
|
|
277
|
+
if (collation === 'BINARY') {
|
|
278
|
+
await prepareP3Database(dbPath);
|
|
279
|
+
expect(await db.$queryRawUnsafe('SELECT * FROM Workspace')).toEqual([]);
|
|
280
|
+
expect(await db.$queryRawUnsafe('SELECT * FROM Session')).toEqual([]);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
await expect(prepareP3Database(dbPath)).rejects.toThrow('Workspace.creationSubmissionId must use BINARY column collation');
|
|
284
|
+
expect(await durableState()).toEqual(before);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
it('rechecks column collation after push even when all unique indexes remain BINARY', async () => {
|
|
289
|
+
await sync();
|
|
290
|
+
const before = await snapshotLegacyDatabase(db);
|
|
291
|
+
const bundle = path.join(scratch, 'drifting-push-bundle');
|
|
292
|
+
const script = path.join(bundle, 'drift.py');
|
|
293
|
+
mkdirSync(path.join(bundle, 'node_modules/prisma/build'), { recursive: true });
|
|
294
|
+
// Simulate an external schema change in the push gap, preserving all rows,
|
|
295
|
+
// relationships and indexes. No production schema or migration is edited.
|
|
296
|
+
writeFileSync(script, `import sqlite3,sys
|
|
297
|
+
c=sqlite3.connect(sys.argv[1])
|
|
298
|
+
c.execute('PRAGMA foreign_keys=OFF')
|
|
299
|
+
c.execute('BEGIN')
|
|
300
|
+
definition=c.execute("SELECT sql FROM sqlite_master WHERE type='table' AND name='Session'").fetchone()[0]
|
|
301
|
+
indexes=c.execute("SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name='Session' AND sql IS NOT NULL").fetchall()
|
|
302
|
+
assert '"creationSubmissionId" TEXT' in definition
|
|
303
|
+
definition=definition.replace('CREATE TABLE "Session"', 'CREATE TABLE "p3_drift"', 1).replace('"creationSubmissionId" TEXT', '"creationSubmissionId" TEXT COLLATE NOCASE', 1)
|
|
304
|
+
c.execute(definition)
|
|
305
|
+
c.execute('INSERT INTO p3_drift SELECT * FROM Session')
|
|
306
|
+
c.execute('DROP TABLE Session')
|
|
307
|
+
c.execute('ALTER TABLE p3_drift RENAME TO Session')
|
|
308
|
+
for (sql,) in indexes: c.execute(sql.replace('("creationSubmissionId")', '("creationSubmissionId" COLLATE BINARY)'))
|
|
309
|
+
c.commit()
|
|
310
|
+
c.close()
|
|
311
|
+
`);
|
|
312
|
+
writeFileSync(path.join(bundle, 'node_modules/prisma/build/index.js'), `require('node:child_process').execFileSync('python3', ${JSON.stringify([script, dbPath])})`);
|
|
313
|
+
await expect(synchronizeDatabaseSchema({ dataDir: scratch, dbPath, schemaPath: path.join(root, 'prisma/schema.prisma'), entryDir: path.join(bundle, 'dist') }))
|
|
314
|
+
.rejects.toThrow('schema verify failed (attempt 1/3): P3 schema incompatible: Session.creationSubmissionId must use BINARY column collation');
|
|
315
|
+
expect(await snapshotLegacyDatabase(db, before)).toEqual(before);
|
|
316
|
+
expect(await db.$queryRawUnsafe('PRAGMA foreign_key_check')).toEqual([]);
|
|
317
|
+
expect(await db.$queryRawUnsafe('PRAGMA integrity_check')).toEqual([{ integrity_check: 'ok' }]);
|
|
318
|
+
}, 20_000);
|
|
319
|
+
for (const table of ['TranslationSource', 'ConversationTurn'])
|
|
320
|
+
it(`rejects ${table} delivery orphans before push`, async () => {
|
|
321
|
+
if (table === 'ConversationTurn')
|
|
322
|
+
await sql('ALTER TABLE ConversationTurn ADD COLUMN deliveryId TEXT');
|
|
323
|
+
await sql(`UPDATE ${table} SET deliveryId='orphan-secret'`);
|
|
324
|
+
const before = await snapshot();
|
|
325
|
+
await expect(sync()).rejects.toThrow(`${table}.deliveryId references missing MessageDelivery`);
|
|
326
|
+
expect(await snapshot()).toEqual(before);
|
|
327
|
+
});
|
|
328
|
+
it.each([1, 2, 3, 4])('serializes preparation and recovers bounded simultaneous Prisma pushes (%d)', async () => {
|
|
329
|
+
const results = await Promise.allSettled([sync(), sync()]);
|
|
330
|
+
for (const result of results)
|
|
331
|
+
if (result.status === 'rejected')
|
|
332
|
+
throw result.reason;
|
|
333
|
+
expect(await snapshot()).toEqual(baseline);
|
|
334
|
+
expect(await db.$queryRawUnsafe('PRAGMA foreign_key_check')).toEqual([]);
|
|
335
|
+
}, 30_000);
|
|
336
|
+
for (const releaseEarly of [true, false])
|
|
337
|
+
it(`handles BUSY with ${releaseEarly ? 'bounded retry after release' : 'bounded failure and later retry'}`, async () => {
|
|
338
|
+
const locker = spawn('python3', ['-c', 'import sqlite3,sys\nc=sqlite3.connect(sys.argv[1]); c.execute("BEGIN IMMEDIATE"); print("locked",flush=True); sys.stdin.readline(); c.rollback(); c.close()', dbPath], { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
339
|
+
await new Promise((resolve, reject) => { locker.stdout.once('data', () => resolve()); locker.once('error', reject); });
|
|
340
|
+
const closed = new Promise(resolve => locker.once('close', () => resolve()));
|
|
341
|
+
let timer;
|
|
342
|
+
try {
|
|
343
|
+
if (releaseEarly)
|
|
344
|
+
timer = setTimeout(() => locker.stdin.end('\n'), 400);
|
|
345
|
+
if (releaseEarly)
|
|
346
|
+
await sync();
|
|
347
|
+
else
|
|
348
|
+
await expect(sync()).rejects.toThrow(/attempt 3\/3/);
|
|
349
|
+
}
|
|
350
|
+
finally {
|
|
351
|
+
clearTimeout(timer);
|
|
352
|
+
locker.stdin.end('\n');
|
|
353
|
+
await closed;
|
|
354
|
+
}
|
|
355
|
+
await sync();
|
|
356
|
+
expect(await snapshot()).toEqual(baseline);
|
|
357
|
+
}, 30_000);
|
|
358
|
+
});
|
|
359
|
+
//# sourceMappingURL=database-schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-schema.test.js","sourceRoot":"","sources":["../../src/utils/database-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-team-foundation.test.d.ts","sourceRoot":"","sources":["../../src/utils/database-team-foundation.test.ts"],"names":[],"mappings":""}
|