@tickernelz/paperclip-pro-db 2026.1011.3 → 2026.1012.0

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.
Files changed (224) hide show
  1. package/dist/backup-lib.d.ts +2 -0
  2. package/dist/backup-lib.d.ts.map +1 -1
  3. package/dist/backup-lib.js +52 -15
  4. package/dist/backup-lib.js.map +1 -1
  5. package/dist/backup-lib.test.js +64 -2
  6. package/dist/backup-lib.test.js.map +1 -1
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +81 -42
  9. package/dist/client.js.map +1 -1
  10. package/dist/client.test.js +33 -0
  11. package/dist/client.test.js.map +1 -1
  12. package/dist/connections-v3-schema-core-migration.test.js +3 -0
  13. package/dist/connections-v3-schema-core-migration.test.js.map +1 -1
  14. package/dist/heartbeat-run-issue-privacy-migration.test.d.ts +2 -0
  15. package/dist/heartbeat-run-issue-privacy-migration.test.d.ts.map +1 -0
  16. package/dist/heartbeat-run-issue-privacy-migration.test.js +265 -0
  17. package/dist/heartbeat-run-issue-privacy-migration.test.js.map +1 -0
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/migrations/0315_chunky_chamber.sql +3 -0
  23. package/dist/migrations/0316_lumpy_maria_hill.sql +157 -0
  24. package/dist/migrations/0317_colossal_otto_octavius.sql +24 -0
  25. package/dist/migrations/0318_supreme_garia.sql +1 -0
  26. package/dist/migrations/0319_curvy_shadow_king.sql +27 -0
  27. package/dist/migrations/0320_chubby_vin_gonzales.sql +7 -0
  28. package/dist/migrations/0321_familiar_titania.sql +4 -0
  29. package/dist/migrations/0322_cool_naoko.sql +3 -0
  30. package/dist/migrations/0323_whole_steel_serpent.sql +20 -0
  31. package/dist/migrations/0324_loving_the_hood.sql +77 -0
  32. package/dist/migrations/0325_agent_commentary.sql +33 -0
  33. package/dist/migrations/0326_mcp_file_transfers.sql +48 -0
  34. package/dist/migrations/0327_easy_eternity.sql +232 -0
  35. package/dist/migrations/0328_private_task_access.sql +278 -0
  36. package/dist/migrations/0329_private_task_draft_assets.sql +28 -0
  37. package/dist/migrations/0330_rapid_emma_frost.sql +44 -0
  38. package/dist/migrations/0331_premium_slayback.sql +81 -0
  39. package/dist/migrations/0332_messy_famine.sql +189 -0
  40. package/dist/migrations/0333_strong_blacklash.sql +23 -0
  41. package/dist/migrations/0334_heavy_captain_midlands.sql +15 -0
  42. package/dist/migrations/0335_daily_onslaught.sql +16 -0
  43. package/dist/migrations/0336_acoustic_human_fly.sql +1 -0
  44. package/dist/migrations/0337_reflective_kree.sql +98 -0
  45. package/dist/migrations/0338_petite_shockwave.sql +4 -0
  46. package/dist/migrations/0339_long_franklin_storm.sql +153 -0
  47. package/dist/migrations/0340_aberrant_machine_man.sql +6 -0
  48. package/dist/migrations/0341_blushing_screwball.sql +17 -0
  49. package/dist/migrations/0342_sad_proteus.sql +23 -0
  50. package/dist/migrations/0343_chunky_mentallo.sql +52 -0
  51. package/dist/migrations/0344_free_wolf_cub.sql +18 -0
  52. package/dist/migrations/0345_spooky_white_tiger.sql +7 -0
  53. package/dist/migrations/0346_panoramic_spyke.sql +74 -0
  54. package/dist/migrations/0347_little_night_nurse.sql +1 -0
  55. package/dist/migrations/meta/_journal.json +232 -1
  56. package/dist/private-task-draft-assets-migration.test.d.ts +2 -0
  57. package/dist/private-task-draft-assets-migration.test.d.ts.map +1 -0
  58. package/dist/private-task-draft-assets-migration.test.js +35 -0
  59. package/dist/private-task-draft-assets-migration.test.js.map +1 -0
  60. package/dist/question-response-history-migration.test.d.ts +2 -0
  61. package/dist/question-response-history-migration.test.d.ts.map +1 -0
  62. package/dist/question-response-history-migration.test.js +53 -0
  63. package/dist/question-response-history-migration.test.js.map +1 -0
  64. package/dist/schema/accounting.d.ts +1282 -0
  65. package/dist/schema/accounting.d.ts.map +1 -0
  66. package/dist/schema/accounting.js +120 -0
  67. package/dist/schema/accounting.js.map +1 -0
  68. package/dist/schema/adapter_auth_sessions.d.ts +2 -2
  69. package/dist/schema/agent_commentary.d.ts +181 -0
  70. package/dist/schema/agent_commentary.d.ts.map +1 -0
  71. package/dist/schema/agent_commentary.js +24 -0
  72. package/dist/schema/agent_commentary.js.map +1 -0
  73. package/dist/schema/agent_identity_keys.d.ts +131 -0
  74. package/dist/schema/agent_identity_keys.d.ts.map +1 -0
  75. package/dist/schema/agent_identity_keys.js +20 -0
  76. package/dist/schema/agent_identity_keys.js.map +1 -0
  77. package/dist/schema/agent_runtime_state.d.ts +2 -2
  78. package/dist/schema/agent_runtime_state.js +2 -2
  79. package/dist/schema/agent_runtime_state.js.map +1 -1
  80. package/dist/schema/agent_wakeup_requests.d.ts.map +1 -1
  81. package/dist/schema/agent_wakeup_requests.js +6 -0
  82. package/dist/schema/agent_wakeup_requests.js.map +1 -1
  83. package/dist/schema/agents.d.ts +132 -2
  84. package/dist/schema/agents.d.ts.map +1 -1
  85. package/dist/schema/agents.js +10 -2
  86. package/dist/schema/agents.js.map +1 -1
  87. package/dist/schema/ai_connection_defaults.d.ts +2 -2
  88. package/dist/schema/ai_connection_defaults.js +1 -1
  89. package/dist/schema/ai_connection_defaults.js.map +1 -1
  90. package/dist/schema/ai_connection_routing.d.ts +8 -8
  91. package/dist/schema/ai_provider_defaults.d.ts +2 -2
  92. package/dist/schema/ai_provider_defaults.js +1 -1
  93. package/dist/schema/ai_provider_defaults.js.map +1 -1
  94. package/dist/schema/ai_subscriptions.d.ts +619 -0
  95. package/dist/schema/ai_subscriptions.d.ts.map +1 -0
  96. package/dist/schema/ai_subscriptions.js +61 -0
  97. package/dist/schema/ai_subscriptions.js.map +1 -0
  98. package/dist/schema/budget_incidents.d.ts +2 -2
  99. package/dist/schema/budget_incidents.js +3 -3
  100. package/dist/schema/budget_incidents.js.map +1 -1
  101. package/dist/schema/budget_policies.d.ts +68 -0
  102. package/dist/schema/budget_policies.d.ts.map +1 -1
  103. package/dist/schema/budget_policies.js +7 -1
  104. package/dist/schema/budget_policies.js.map +1 -1
  105. package/dist/schema/chat_channels.d.ts +21 -4
  106. package/dist/schema/chat_channels.d.ts.map +1 -1
  107. package/dist/schema/chat_channels.js +3 -2
  108. package/dist/schema/chat_channels.js.map +1 -1
  109. package/dist/schema/chat_github.d.ts +108 -0
  110. package/dist/schema/chat_github.d.ts.map +1 -1
  111. package/dist/schema/chat_github.js +7 -0
  112. package/dist/schema/chat_github.js.map +1 -1
  113. package/dist/schema/chat_slack_registrations.d.ts +287 -0
  114. package/dist/schema/chat_slack_registrations.d.ts.map +1 -0
  115. package/dist/schema/chat_slack_registrations.js +26 -0
  116. package/dist/schema/chat_slack_registrations.js.map +1 -0
  117. package/dist/schema/chat_voice_callbacks.d.ts +128 -0
  118. package/dist/schema/chat_voice_callbacks.d.ts.map +1 -0
  119. package/dist/schema/chat_voice_callbacks.js +18 -0
  120. package/dist/schema/chat_voice_callbacks.js.map +1 -0
  121. package/dist/schema/chat_voice_inbound.d.ts +461 -0
  122. package/dist/schema/chat_voice_inbound.d.ts.map +1 -0
  123. package/dist/schema/chat_voice_inbound.js +45 -0
  124. package/dist/schema/chat_voice_inbound.js.map +1 -0
  125. package/dist/schema/chat_voice_reports.d.ts +184 -0
  126. package/dist/schema/chat_voice_reports.d.ts.map +1 -0
  127. package/dist/schema/chat_voice_reports.js +24 -0
  128. package/dist/schema/chat_voice_reports.js.map +1 -0
  129. package/dist/schema/chat_voice_sessions.d.ts +730 -0
  130. package/dist/schema/chat_voice_sessions.d.ts.map +1 -0
  131. package/dist/schema/chat_voice_sessions.js +85 -0
  132. package/dist/schema/chat_voice_sessions.js.map +1 -0
  133. package/dist/schema/companies.d.ts +19 -2
  134. package/dist/schema/companies.d.ts.map +1 -1
  135. package/dist/schema/companies.js +3 -2
  136. package/dist/schema/companies.js.map +1 -1
  137. package/dist/schema/cost_events.d.ts +141 -3
  138. package/dist/schema/cost_events.d.ts.map +1 -1
  139. package/dist/schema/cost_events.js +20 -3
  140. package/dist/schema/cost_events.js.map +1 -1
  141. package/dist/schema/decision_models.d.ts +579 -0
  142. package/dist/schema/decision_models.d.ts.map +1 -0
  143. package/dist/schema/decision_models.js +50 -0
  144. package/dist/schema/decision_models.js.map +1 -0
  145. package/dist/schema/dot_runner.d.ts +980 -0
  146. package/dist/schema/dot_runner.d.ts.map +1 -0
  147. package/dist/schema/dot_runner.js +82 -0
  148. package/dist/schema/dot_runner.js.map +1 -0
  149. package/dist/schema/fast_responses.d.ts +662 -0
  150. package/dist/schema/fast_responses.d.ts.map +1 -0
  151. package/dist/schema/fast_responses.js +65 -0
  152. package/dist/schema/fast_responses.js.map +1 -0
  153. package/dist/schema/finance_events.d.ts +36 -2
  154. package/dist/schema/finance_events.d.ts.map +1 -1
  155. package/dist/schema/finance_events.js +5 -2
  156. package/dist/schema/finance_events.js.map +1 -1
  157. package/dist/schema/heartbeat_runs.d.ts +138 -0
  158. package/dist/schema/heartbeat_runs.d.ts.map +1 -1
  159. package/dist/schema/heartbeat_runs.js +17 -1
  160. package/dist/schema/heartbeat_runs.js.map +1 -1
  161. package/dist/schema/index.d.ts +17 -0
  162. package/dist/schema/index.d.ts.map +1 -1
  163. package/dist/schema/index.js +17 -0
  164. package/dist/schema/index.js.map +1 -1
  165. package/dist/schema/issue_access_grants.d.ts +161 -0
  166. package/dist/schema/issue_access_grants.d.ts.map +1 -0
  167. package/dist/schema/issue_access_grants.js +21 -0
  168. package/dist/schema/issue_access_grants.js.map +1 -0
  169. package/dist/schema/issue_comments.d.ts +36 -0
  170. package/dist/schema/issue_comments.d.ts.map +1 -1
  171. package/dist/schema/issue_comments.js +2 -0
  172. package/dist/schema/issue_comments.js.map +1 -1
  173. package/dist/schema/issues.d.ts +51 -0
  174. package/dist/schema/issues.d.ts.map +1 -1
  175. package/dist/schema/issues.js +6 -0
  176. package/dist/schema/issues.js.map +1 -1
  177. package/dist/schema/plugin_lifecycle_acknowledgments.d.ts +59 -0
  178. package/dist/schema/plugin_lifecycle_acknowledgments.d.ts.map +1 -0
  179. package/dist/schema/plugin_lifecycle_acknowledgments.js +12 -0
  180. package/dist/schema/plugin_lifecycle_acknowledgments.js.map +1 -0
  181. package/dist/schema/project_access_members.d.ts +111 -0
  182. package/dist/schema/project_access_members.d.ts.map +1 -0
  183. package/dist/schema/project_access_members.js +18 -0
  184. package/dist/schema/project_access_members.js.map +1 -0
  185. package/dist/schema/projects.d.ts +51 -0
  186. package/dist/schema/projects.d.ts.map +1 -1
  187. package/dist/schema/projects.js +9 -1
  188. package/dist/schema/projects.js.map +1 -1
  189. package/dist/schema/public_mcp.d.ts +2100 -0
  190. package/dist/schema/public_mcp.d.ts.map +1 -0
  191. package/dist/schema/public_mcp.js +191 -0
  192. package/dist/schema/public_mcp.js.map +1 -0
  193. package/dist/schema/resource_lifecycle_events.d.ts +2 -2
  194. package/dist/schema/resource_lifecycle_events.d.ts.map +1 -1
  195. package/dist/schema/resource_lifecycle_events.js +2 -1
  196. package/dist/schema/resource_lifecycle_events.js.map +1 -1
  197. package/dist/schema/status_cards.d.ts +2 -2
  198. package/dist/schema/status_cards.js +2 -2
  199. package/dist/schema/status_cards.js.map +1 -1
  200. package/dist/schema/tool_access.d.ts +18 -0
  201. package/dist/schema/tool_access.d.ts.map +1 -1
  202. package/dist/schema/tool_access.js +3 -3
  203. package/dist/schema/tool_access.js.map +1 -1
  204. package/dist/schema/user_company_preferences.d.ts +127 -0
  205. package/dist/schema/user_company_preferences.d.ts.map +1 -0
  206. package/dist/schema/user_company_preferences.js +16 -0
  207. package/dist/schema/user_company_preferences.js.map +1 -0
  208. package/dist/speko-voice-migration.test.d.ts +2 -0
  209. package/dist/speko-voice-migration.test.d.ts.map +1 -0
  210. package/dist/speko-voice-migration.test.js +88 -0
  211. package/dist/speko-voice-migration.test.js.map +1 -0
  212. package/dist/work-signals.d.ts +20 -0
  213. package/dist/work-signals.d.ts.map +1 -0
  214. package/dist/work-signals.js +123 -0
  215. package/dist/work-signals.js.map +1 -0
  216. package/dist/work-signals.test.d.ts +2 -0
  217. package/dist/work-signals.test.d.ts.map +1 -0
  218. package/dist/work-signals.test.js +177 -0
  219. package/dist/work-signals.test.js.map +1 -0
  220. package/package.json +4 -4
  221. package/dist/seed.d.ts +0 -2
  222. package/dist/seed.d.ts.map +0 -1
  223. package/dist/seed.js +0 -91
  224. package/dist/seed.js.map +0 -1
@@ -2192,6 +2192,237 @@
2192
2192
  "when": 1791689817756,
2193
2193
  "tag": "0314_chilly_triton",
2194
2194
  "breakpoints": true
2195
+ },
2196
+ {
2197
+ "idx": 315,
2198
+ "version": "7",
2199
+ "when": 1791689817757,
2200
+ "tag": "0315_chunky_chamber",
2201
+ "breakpoints": true
2202
+ },
2203
+ {
2204
+ "idx": 316,
2205
+ "version": "7",
2206
+ "when": 1791689817758,
2207
+ "tag": "0316_lumpy_maria_hill",
2208
+ "breakpoints": true
2209
+ },
2210
+ {
2211
+ "idx": 317,
2212
+ "version": "7",
2213
+ "when": 1791689817759,
2214
+ "tag": "0317_colossal_otto_octavius",
2215
+ "breakpoints": true
2216
+ },
2217
+ {
2218
+ "idx": 318,
2219
+ "version": "7",
2220
+ "when": 1791689817760,
2221
+ "tag": "0318_supreme_garia",
2222
+ "breakpoints": true
2223
+ },
2224
+ {
2225
+ "idx": 319,
2226
+ "version": "7",
2227
+ "when": 1791689817761,
2228
+ "tag": "0319_curvy_shadow_king",
2229
+ "breakpoints": true
2230
+ },
2231
+ {
2232
+ "idx": 320,
2233
+ "version": "7",
2234
+ "when": 1791689817762,
2235
+ "tag": "0320_chubby_vin_gonzales",
2236
+ "breakpoints": true
2237
+ },
2238
+ {
2239
+ "idx": 321,
2240
+ "version": "7",
2241
+ "when": 1791689817763,
2242
+ "tag": "0321_familiar_titania",
2243
+ "breakpoints": true
2244
+ },
2245
+ {
2246
+ "idx": 322,
2247
+ "version": "7",
2248
+ "when": 1791689817764,
2249
+ "tag": "0322_cool_naoko",
2250
+ "breakpoints": true
2251
+ },
2252
+ {
2253
+ "idx": 323,
2254
+ "version": "7",
2255
+ "when": 1791689817765,
2256
+ "tag": "0323_whole_steel_serpent",
2257
+ "breakpoints": true
2258
+ },
2259
+ {
2260
+ "idx": 324,
2261
+ "version": "7",
2262
+ "when": 1791689817766,
2263
+ "tag": "0324_loving_the_hood",
2264
+ "breakpoints": true
2265
+ },
2266
+ {
2267
+ "idx": 325,
2268
+ "version": "7",
2269
+ "when": 1791689817767,
2270
+ "tag": "0325_agent_commentary",
2271
+ "breakpoints": true
2272
+ },
2273
+ {
2274
+ "idx": 326,
2275
+ "version": "7",
2276
+ "when": 1791689817768,
2277
+ "tag": "0326_mcp_file_transfers",
2278
+ "breakpoints": true
2279
+ },
2280
+ {
2281
+ "idx": 327,
2282
+ "version": "7",
2283
+ "when": 1791689817769,
2284
+ "tag": "0327_easy_eternity",
2285
+ "breakpoints": true
2286
+ },
2287
+ {
2288
+ "idx": 328,
2289
+ "version": "7",
2290
+ "when": 1791689817770,
2291
+ "tag": "0328_private_task_access",
2292
+ "breakpoints": true
2293
+ },
2294
+ {
2295
+ "idx": 329,
2296
+ "version": "7",
2297
+ "when": 1791689817771,
2298
+ "tag": "0329_private_task_draft_assets",
2299
+ "breakpoints": true
2300
+ },
2301
+ {
2302
+ "idx": 330,
2303
+ "version": "7",
2304
+ "when": 1791689817772,
2305
+ "tag": "0330_rapid_emma_frost",
2306
+ "breakpoints": true
2307
+ },
2308
+ {
2309
+ "idx": 331,
2310
+ "version": "7",
2311
+ "when": 1791689817773,
2312
+ "tag": "0331_premium_slayback",
2313
+ "breakpoints": true
2314
+ },
2315
+ {
2316
+ "idx": 332,
2317
+ "version": "7",
2318
+ "when": 1791689817774,
2319
+ "tag": "0332_messy_famine",
2320
+ "breakpoints": true
2321
+ },
2322
+ {
2323
+ "idx": 333,
2324
+ "version": "7",
2325
+ "when": 1791689817775,
2326
+ "tag": "0333_strong_blacklash",
2327
+ "breakpoints": true
2328
+ },
2329
+ {
2330
+ "idx": 334,
2331
+ "version": "7",
2332
+ "when": 1791689817776,
2333
+ "tag": "0334_heavy_captain_midlands",
2334
+ "breakpoints": true
2335
+ },
2336
+ {
2337
+ "idx": 335,
2338
+ "version": "7",
2339
+ "when": 1791689817777,
2340
+ "tag": "0335_daily_onslaught",
2341
+ "breakpoints": true
2342
+ },
2343
+ {
2344
+ "idx": 336,
2345
+ "version": "7",
2346
+ "when": 1791689817778,
2347
+ "tag": "0336_acoustic_human_fly",
2348
+ "breakpoints": true
2349
+ },
2350
+ {
2351
+ "idx": 337,
2352
+ "version": "7",
2353
+ "when": 1791689817779,
2354
+ "tag": "0337_reflective_kree",
2355
+ "breakpoints": true
2356
+ },
2357
+ {
2358
+ "idx": 338,
2359
+ "version": "7",
2360
+ "when": 1791689817780,
2361
+ "tag": "0338_petite_shockwave",
2362
+ "breakpoints": true
2363
+ },
2364
+ {
2365
+ "idx": 339,
2366
+ "version": "7",
2367
+ "when": 1791689817781,
2368
+ "tag": "0339_long_franklin_storm",
2369
+ "breakpoints": true
2370
+ },
2371
+ {
2372
+ "idx": 340,
2373
+ "version": "7",
2374
+ "when": 1791689817782,
2375
+ "tag": "0340_aberrant_machine_man",
2376
+ "breakpoints": true
2377
+ },
2378
+ {
2379
+ "idx": 341,
2380
+ "version": "7",
2381
+ "when": 1791689817783,
2382
+ "tag": "0341_blushing_screwball",
2383
+ "breakpoints": true
2384
+ },
2385
+ {
2386
+ "idx": 342,
2387
+ "version": "7",
2388
+ "when": 1791689817784,
2389
+ "tag": "0342_sad_proteus",
2390
+ "breakpoints": true
2391
+ },
2392
+ {
2393
+ "idx": 343,
2394
+ "version": "7",
2395
+ "when": 1791689817785,
2396
+ "tag": "0343_chunky_mentallo",
2397
+ "breakpoints": true
2398
+ },
2399
+ {
2400
+ "idx": 344,
2401
+ "version": "7",
2402
+ "when": 1791689817786,
2403
+ "tag": "0344_free_wolf_cub",
2404
+ "breakpoints": true
2405
+ },
2406
+ {
2407
+ "idx": 345,
2408
+ "version": "7",
2409
+ "when": 1791689817787,
2410
+ "tag": "0345_spooky_white_tiger",
2411
+ "breakpoints": true
2412
+ },
2413
+ {
2414
+ "idx": 346,
2415
+ "version": "7",
2416
+ "when": 1791689817788,
2417
+ "tag": "0346_panoramic_spyke",
2418
+ "breakpoints": true
2419
+ },
2420
+ {
2421
+ "idx": 347,
2422
+ "version": "7",
2423
+ "when": 1791693159075,
2424
+ "tag": "0347_little_night_nurse",
2425
+ "breakpoints": true
2195
2426
  }
2196
2427
  ]
2197
- }
2428
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=private-task-draft-assets-migration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-task-draft-assets-migration.test.d.ts","sourceRoot":"","sources":["../src/private-task-draft-assets-migration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import postgres from "postgres";
4
+ import { expect, it } from "vitest";
5
+ import { applyPendingMigrations } from "./client.js";
6
+ import { getEmbeddedPostgresTestSupport, startEmbeddedPostgresTestDatabase } from "./test-embedded-postgres.js";
7
+ const embeddedPostgresSupport = await getEmbeddedPostgresTestSupport();
8
+ const itEmbeddedPostgres = embeddedPostgresSupport.supported ? it : it.skip;
9
+ itEmbeddedPostgres("backfills owned draft images without attaching another uploader's images", async () => {
10
+ const database = await startEmbeddedPostgresTestDatabase("paperclip-draft-privacy-");
11
+ const sql = postgres(database.connectionString, { max: 1, onnotice: () => { } });
12
+ try {
13
+ const migration = await fs.readFile(new URL("./migrations/0329_private_task_draft_assets.sql", import.meta.url), "utf8");
14
+ const hash = createHash("sha256").update(migration).digest("hex");
15
+ const company = randomUUID(), task = randomUUID(), owned = randomUUID(), foreign = randomUUID();
16
+ await sql `INSERT INTO companies (id, name, issue_prefix) VALUES (${company}, 'Draft privacy', 'DRAFT')`;
17
+ for (const [id, owner] of [[owned, 'owner'], [foreign, 'someone-else']]) {
18
+ await sql `INSERT INTO assets (id, company_id, provider, object_key, content_type, byte_size, sha256, created_by_user_id)
19
+ VALUES (${id}, ${company}, 'local_disk', ${`${company}/assets/issues/drafts/${id}`}, 'image/png', 1, 'test', ${owner})`;
20
+ }
21
+ await sql `INSERT INTO issues (id, company_id, title, description, visibility, created_by_user_id)
22
+ VALUES (${task}, ${company}, 'Private task', ${`![owned](/api/assets/${owned}/content) ![foreign](/api/assets/${foreign}/content)`}, 'private', 'owner')`;
23
+ for (let run = 0; run < 2; run += 1) {
24
+ await sql `DELETE FROM drizzle.__drizzle_migrations WHERE hash = ${hash}`;
25
+ await applyPendingMigrations(database.connectionString);
26
+ expect(await sql `SELECT issue_id, asset_id FROM issue_attachments WHERE company_id = ${company}`)
27
+ .toEqual([{ issue_id: task, asset_id: owned }]);
28
+ }
29
+ }
30
+ finally {
31
+ await sql.end();
32
+ await database.cleanup();
33
+ }
34
+ }, 60_000);
35
+ //# sourceMappingURL=private-task-draft-assets-migration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-task-draft-assets-migration.test.js","sourceRoot":"","sources":["../src/private-task-draft-assets-migration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,8BAA8B,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAEhH,MAAM,uBAAuB,GAAG,MAAM,8BAA8B,EAAE,CAAC;AACvE,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;AAE5E,kBAAkB,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;IACxG,MAAM,QAAQ,GAAG,MAAM,iCAAiC,CAAC,0BAA0B,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,iDAAiD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACzH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,UAAU,EAAE,EAAE,IAAI,GAAG,UAAU,EAAE,EAAE,KAAK,GAAG,UAAU,EAAE,EAAE,OAAO,GAAG,UAAU,EAAE,CAAC;QAChG,MAAM,GAAG,CAAA,0DAA0D,OAAO,6BAA6B,CAAC;QACxG,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,GAAG,CAAA;kBACG,EAAE,KAAK,OAAO,mBAAmB,GAAG,OAAO,yBAAyB,EAAE,EAAE,6BAA6B,KAAK,GAAG,CAAC;QAC5H,CAAC;QACD,MAAM,GAAG,CAAA;gBACG,IAAI,KAAK,OAAO,qBAAqB,wBAAwB,KAAK,oCAAoC,OAAO,WAAW,uBAAuB,CAAC;QAC5J,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,CAAA,yDAAyD,IAAI,EAAE,CAAC;YACzE,MAAM,sBAAsB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,GAAG,CAAA,uEAAuE,OAAO,EAAE,CAAC;iBAC9F,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC,EAAE,MAAM,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=question-response-history-migration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-response-history-migration.test.d.ts","sourceRoot":"","sources":["../src/question-response-history-migration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { readFile } from "node:fs/promises";
3
+ import postgres from "postgres";
4
+ import { describe, expect, it } from "vitest";
5
+ import { applyPendingMigrations } from "./client.js";
6
+ import { getEmbeddedPostgresTestSupport, startEmbeddedPostgresTestDatabase } from "./test-embedded-postgres.js";
7
+ const support = await getEmbeddedPostgresTestSupport();
8
+ const indexName = "agent_wakeup_requests_question_response_history_idx";
9
+ const migrationFile = "0347_little_night_nurse.sql";
10
+ (support.supported ? describe : describe.skip)("question-response history migration", () => {
11
+ it("repairs an interrupted concurrent index build and serializes replay without deleting wakes", async () => {
12
+ const database = await startEmbeddedPostgresTestDatabase("question-history-migration-");
13
+ const sql = postgres(database.connectionString, { max: 1, onnotice: () => { } });
14
+ try {
15
+ const companyId = randomUUID();
16
+ const agentId = randomUUID();
17
+ await sql `INSERT INTO companies (id, name, issue_prefix) VALUES (${companyId}, 'Migration fixture', 'QHM')`;
18
+ await sql `INSERT INTO agents (id, company_id, name, role, adapter_type)
19
+ VALUES (${agentId}, ${companyId}, 'Fixture', 'engineer', 'process')`;
20
+ await sql `INSERT INTO agent_wakeup_requests (company_id, agent_id, source, idempotency_key, status)
21
+ SELECT ${companyId}::uuid, ${agentId}::uuid, 'automation', 'question-response:' || n::text, 'failed'
22
+ FROM generate_series(1, 3) n`;
23
+ const content = await readFile(new URL(`./migrations/${migrationFile}`, import.meta.url), "utf8");
24
+ const hash = createHash("sha256").update(content).digest("hex");
25
+ await sql `DELETE FROM drizzle.__drizzle_migrations WHERE hash = ${hash}`;
26
+ await sql.unsafe(`DROP INDEX ${indexName}`);
27
+ // A failed concurrent UNIQUE build leaves the same invalid-index state
28
+ // as an interrupted nonunique build, without relying on timing a cancel.
29
+ await expect(sql.unsafe(`CREATE UNIQUE INDEX CONCURRENTLY ${indexName} ON agent_wakeup_requests (company_id)`))
30
+ .rejects.toThrow();
31
+ const [invalid] = await sql `SELECT i.indisvalid FROM pg_index i JOIN pg_class c ON c.oid = i.indexrelid
32
+ WHERE c.relname = ${indexName}`;
33
+ expect(invalid?.indisvalid).toBe(false);
34
+ await Promise.all([applyPendingMigrations(database.connectionString), applyPendingMigrations(database.connectionString)]);
35
+ const [rebuilt] = await sql `SELECT i.indisvalid, i.indisunique, pg_get_indexdef(i.indexrelid) AS definition
36
+ FROM pg_index i JOIN pg_class c ON c.oid = i.indexrelid WHERE c.relname = ${indexName}`;
37
+ expect(rebuilt?.indisvalid).toBe(true);
38
+ expect(rebuilt?.indisunique).toBe(false);
39
+ expect(rebuilt?.definition).toContain("company_id, idempotency_key");
40
+ expect(rebuilt?.definition).toContain("question-response:%");
41
+ const [wakes] = await sql `SELECT count(*)::int AS n FROM agent_wakeup_requests WHERE company_id = ${companyId}`;
42
+ expect(wakes?.n).toBe(3);
43
+ const [history] = await sql `SELECT count(*)::int AS n FROM drizzle.__drizzle_migrations WHERE hash = ${hash}`;
44
+ expect(history?.n).toBe(1);
45
+ await applyPendingMigrations(database.connectionString);
46
+ }
47
+ finally {
48
+ await sql.end();
49
+ await database.cleanup();
50
+ }
51
+ }, 60_000);
52
+ });
53
+ //# sourceMappingURL=question-response-history-migration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-response-history-migration.test.js","sourceRoot":"","sources":["../src/question-response-history-migration.test.ts"],"names":[],"mappings":"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"}