@zakstam/codex-local-component 0.10.3 → 0.11.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 (89) hide show
  1. package/README.md +18 -0
  2. package/dist/client/index.d.ts +2 -2
  3. package/dist/client/index.d.ts.map +1 -1
  4. package/dist/client/index.js +2 -2
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/client/threads.d.ts +42 -0
  7. package/dist/client/threads.d.ts.map +1 -1
  8. package/dist/client/threads.js +21 -0
  9. package/dist/client/threads.js.map +1 -1
  10. package/dist/client/turns.d.ts +12 -0
  11. package/dist/client/turns.d.ts.map +1 -1
  12. package/dist/client/turns.js +6 -0
  13. package/dist/client/turns.js.map +1 -1
  14. package/dist/component/deletionInternal.d.ts +6 -0
  15. package/dist/component/deletionInternal.d.ts.map +1 -0
  16. package/dist/component/deletionInternal.js +615 -0
  17. package/dist/component/deletionInternal.js.map +1 -0
  18. package/dist/component/dispatch.d.ts.map +1 -1
  19. package/dist/component/dispatch.js +49 -32
  20. package/dist/component/dispatch.js.map +1 -1
  21. package/dist/component/index.d.ts +1 -0
  22. package/dist/component/index.d.ts.map +1 -1
  23. package/dist/component/index.js +1 -0
  24. package/dist/component/index.js.map +1 -1
  25. package/dist/component/ingest/applyApprovals.d.ts.map +1 -1
  26. package/dist/component/ingest/applyApprovals.js +4 -0
  27. package/dist/component/ingest/applyApprovals.js.map +1 -1
  28. package/dist/component/ingest/applyMessages.d.ts.map +1 -1
  29. package/dist/component/ingest/applyMessages.js +8 -0
  30. package/dist/component/ingest/applyMessages.js.map +1 -1
  31. package/dist/component/ingest/applyStreams.d.ts.map +1 -1
  32. package/dist/component/ingest/applyStreams.js +11 -0
  33. package/dist/component/ingest/applyStreams.js.map +1 -1
  34. package/dist/component/ingest/applyTurns.d.ts.map +1 -1
  35. package/dist/component/ingest/applyTurns.js +1 -0
  36. package/dist/component/ingest/applyTurns.js.map +1 -1
  37. package/dist/component/ingest/checkpoints.d.ts.map +1 -1
  38. package/dist/component/ingest/checkpoints.js +18 -2
  39. package/dist/component/ingest/checkpoints.js.map +1 -1
  40. package/dist/component/ingest/index.d.ts.map +1 -1
  41. package/dist/component/ingest/index.js +3 -0
  42. package/dist/component/ingest/index.js.map +1 -1
  43. package/dist/component/ingest/sessionGuard.d.ts.map +1 -1
  44. package/dist/component/ingest/sessionGuard.js +8 -7
  45. package/dist/component/ingest/sessionGuard.js.map +1 -1
  46. package/dist/component/ingest/stateCache.d.ts.map +1 -1
  47. package/dist/component/ingest/stateCache.js +1 -0
  48. package/dist/component/ingest/stateCache.js.map +1 -1
  49. package/dist/component/ingest/types.d.ts +2 -0
  50. package/dist/component/ingest/types.d.ts.map +1 -1
  51. package/dist/component/schema.d.ts +141 -16
  52. package/dist/component/schema.d.ts.map +1 -1
  53. package/dist/component/schema.js +85 -12
  54. package/dist/component/schema.js.map +1 -1
  55. package/dist/component/serverRequests.d.ts +1 -1
  56. package/dist/component/serverRequests.d.ts.map +1 -1
  57. package/dist/component/serverRequests.js +7 -2
  58. package/dist/component/serverRequests.js.map +1 -1
  59. package/dist/component/streamStats.d.ts.map +1 -1
  60. package/dist/component/streamStats.js +28 -0
  61. package/dist/component/streamStats.js.map +1 -1
  62. package/dist/component/streams.d.ts.map +1 -1
  63. package/dist/component/streams.js +7 -4
  64. package/dist/component/streams.js.map +1 -1
  65. package/dist/component/threads.d.ts +87 -0
  66. package/dist/component/threads.d.ts.map +1 -1
  67. package/dist/component/threads.js +328 -6
  68. package/dist/component/threads.js.map +1 -1
  69. package/dist/component/tokenUsage.d.ts +3 -3
  70. package/dist/component/tokenUsage.d.ts.map +1 -1
  71. package/dist/component/tokenUsage.js +16 -2
  72. package/dist/component/tokenUsage.js.map +1 -1
  73. package/dist/component/turns.d.ts +24 -0
  74. package/dist/component/turns.d.ts.map +1 -1
  75. package/dist/component/turns.js +101 -2
  76. package/dist/component/turns.js.map +1 -1
  77. package/dist/component/utils.d.ts +10 -0
  78. package/dist/component/utils.d.ts.map +1 -1
  79. package/dist/component/utils.js +20 -0
  80. package/dist/component/utils.js.map +1 -1
  81. package/dist/host/runtime.d.ts.map +1 -1
  82. package/dist/host/runtime.js +126 -5
  83. package/dist/host/runtime.js.map +1 -1
  84. package/dist/host/surfaceGenerator.js +1 -1
  85. package/dist/host/surfaceGenerator.js.map +1 -1
  86. package/docs/CLIENT_AND_REACT_HOOKS.md +9 -0
  87. package/docs/DISPATCH_MANAGED_REFERENCE_HOST.md +1 -0
  88. package/docs/OPERATIONS_AND_ERRORS.md +38 -1
  89. package/package.json +1 -1
@@ -0,0 +1,615 @@
1
+ import { makeFunctionReference } from "convex/server";
2
+ import { v } from "convex/values";
3
+ import { internalMutation } from "./_generated/server.js";
4
+ import { now } from "./utils.js";
5
+ const DELETE_BATCH_DEFAULT = 500;
6
+ const DELETE_BATCH_MAX = 2000;
7
+ function clampBatchSize(batchSize) {
8
+ return Math.max(1, Math.min(batchSize ?? DELETE_BATCH_DEFAULT, DELETE_BATCH_MAX));
9
+ }
10
+ function parseDeletedCounts(deletedCountsJson) {
11
+ try {
12
+ const parsed = JSON.parse(deletedCountsJson);
13
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
14
+ return {};
15
+ }
16
+ const result = {};
17
+ for (const [key, value] of Object.entries(parsed)) {
18
+ if (typeof value === "number" && Number.isFinite(value)) {
19
+ result[key] = value;
20
+ }
21
+ }
22
+ return result;
23
+ }
24
+ catch (error) {
25
+ void error;
26
+ return {};
27
+ }
28
+ }
29
+ function mergeDeletedCounts(current, delta) {
30
+ const merged = { ...current };
31
+ for (const [tableName, count] of Object.entries(delta)) {
32
+ merged[tableName] = (merged[tableName] ?? 0) + count;
33
+ }
34
+ return merged;
35
+ }
36
+ async function loadDeletionJob(args) {
37
+ return args.ctx.db
38
+ .query("codex_deletion_jobs")
39
+ .withIndex("userScope_deletionJobId", (q) => q.eq("userScope", args.userScope).eq("deletionJobId", args.deletionJobId))
40
+ .first();
41
+ }
42
+ async function scheduleNextChunk(args) {
43
+ await args.ctx.scheduler.runAfter(0, makeFunctionReference("deletionInternal:runDeletionJobChunk"), {
44
+ userScope: args.userScope,
45
+ deletionJobId: args.deletionJobId,
46
+ batchSize: args.batchSize,
47
+ });
48
+ }
49
+ async function deleteDocs(ctx, docs) {
50
+ if (docs.length === 0) {
51
+ return 0;
52
+ }
53
+ await Promise.all(docs.map((doc) => ctx.db.delete(doc._id)));
54
+ return docs.length;
55
+ }
56
+ async function deleteThreadStreamDeltasBatch(args) {
57
+ const streamRows = await args.ctx.db
58
+ .query("codex_streams")
59
+ .withIndex("userScope_threadId_turnId", (q) => q.eq("userScope", args.userScope).eq("threadId", args.threadId))
60
+ .take(1000);
61
+ const streamStatRows = await args.ctx.db
62
+ .query("codex_stream_stats")
63
+ .withIndex("userScope_threadId", (q) => q.eq("userScope", args.userScope).eq("threadId", args.threadId))
64
+ .take(1000);
65
+ const streamIds = new Set([
66
+ ...streamRows.map((row) => String(row.streamId)),
67
+ ...streamStatRows.map((row) => String(row.streamId)),
68
+ ]);
69
+ let remaining = args.limit;
70
+ let deleted = 0;
71
+ for (const streamId of streamIds) {
72
+ if (remaining <= 0) {
73
+ break;
74
+ }
75
+ const batch = await args.ctx.db
76
+ .query("codex_stream_deltas_ttl")
77
+ .withIndex("userScope_streamId_cursorStart", (q) => q.eq("userScope", args.userScope).eq("streamId", streamId))
78
+ .take(remaining);
79
+ const removed = await deleteDocs(args.ctx, batch);
80
+ deleted += removed;
81
+ remaining -= removed;
82
+ }
83
+ return deleted;
84
+ }
85
+ async function deleteTurnStreamDeltasBatch(args) {
86
+ const streamRows = await args.ctx.db
87
+ .query("codex_streams")
88
+ .withIndex("userScope_threadId_turnId", (q) => q.eq("userScope", args.userScope).eq("threadId", args.threadId).eq("turnId", args.turnId))
89
+ .take(500);
90
+ const streamStatRows = await args.ctx.db
91
+ .query("codex_stream_stats")
92
+ .withIndex("userScope_threadId", (q) => q.eq("userScope", args.userScope).eq("threadId", args.threadId))
93
+ .filter((q) => q.eq(q.field("turnId"), args.turnId))
94
+ .take(500);
95
+ const streamIds = new Set([
96
+ ...streamRows.map((row) => String(row.streamId)),
97
+ ...streamStatRows.map((row) => String(row.streamId)),
98
+ ]);
99
+ let remaining = args.limit;
100
+ let deleted = 0;
101
+ for (const streamId of streamIds) {
102
+ if (remaining <= 0) {
103
+ break;
104
+ }
105
+ const batch = await args.ctx.db
106
+ .query("codex_stream_deltas_ttl")
107
+ .withIndex("userScope_streamId_cursorStart", (q) => q.eq("userScope", args.userScope).eq("streamId", streamId))
108
+ .take(remaining);
109
+ const removed = await deleteDocs(args.ctx, batch);
110
+ deleted += removed;
111
+ remaining -= removed;
112
+ }
113
+ return deleted;
114
+ }
115
+ async function runThreadBatch(args) {
116
+ const threadId = args.job.threadId;
117
+ if (!threadId) {
118
+ return { deletedByTable: {} };
119
+ }
120
+ const deletedByTable = {};
121
+ let phase;
122
+ let remaining = args.batchSize;
123
+ const runStep = async (tableName, run) => {
124
+ if (remaining <= 0) {
125
+ return;
126
+ }
127
+ const deleted = await run(remaining);
128
+ if (deleted > 0) {
129
+ deletedByTable[tableName] = (deletedByTable[tableName] ?? 0) + deleted;
130
+ remaining -= deleted;
131
+ phase = tableName;
132
+ }
133
+ };
134
+ await runStep("codex_stream_deltas_ttl", async (limit) => deleteThreadStreamDeltasBatch({
135
+ ctx: args.ctx,
136
+ userScope: args.job.userScope,
137
+ threadId,
138
+ limit,
139
+ }));
140
+ await runStep("codex_turn_dispatches", async (limit) => {
141
+ const docs = await args.ctx.db
142
+ .query("codex_turn_dispatches")
143
+ .withIndex("userScope_threadId_dispatchId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
144
+ .take(limit);
145
+ return deleteDocs(args.ctx, docs);
146
+ });
147
+ await runStep("codex_server_requests", async (limit) => {
148
+ const docs = await args.ctx.db
149
+ .query("codex_server_requests")
150
+ .withIndex("userScope_threadId_requestIdType_requestIdText", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
151
+ .take(limit);
152
+ return deleteDocs(args.ctx, docs);
153
+ });
154
+ await runStep("codex_approvals", async (limit) => {
155
+ const docs = await args.ctx.db
156
+ .query("codex_approvals")
157
+ .withIndex("userScope_userId_threadId_status_createdAt_itemId", (q) => q
158
+ .eq("userScope", args.job.userScope)
159
+ .eq("userId", args.job.userId)
160
+ .eq("threadId", threadId))
161
+ .take(limit);
162
+ return deleteDocs(args.ctx, docs);
163
+ });
164
+ await runStep("codex_items", async (limit) => {
165
+ const docs = await args.ctx.db
166
+ .query("codex_items")
167
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
168
+ .take(limit);
169
+ return deleteDocs(args.ctx, docs);
170
+ });
171
+ await runStep("codex_messages", async (limit) => {
172
+ const docs = await args.ctx.db
173
+ .query("codex_messages")
174
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
175
+ .take(limit);
176
+ return deleteDocs(args.ctx, docs);
177
+ });
178
+ await runStep("codex_reasoning_segments", async (limit) => {
179
+ const docs = await args.ctx.db
180
+ .query("codex_reasoning_segments")
181
+ .withIndex("userScope_threadId_createdAt_segmentId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
182
+ .take(limit);
183
+ return deleteDocs(args.ctx, docs);
184
+ });
185
+ await runStep("codex_token_usage", async (limit) => {
186
+ const docs = await args.ctx.db
187
+ .query("codex_token_usage")
188
+ .withIndex("userScope_threadId_updatedAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
189
+ .take(limit);
190
+ return deleteDocs(args.ctx, docs);
191
+ });
192
+ await runStep("codex_event_summaries", async (limit) => {
193
+ const docs = await args.ctx.db
194
+ .query("codex_event_summaries")
195
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
196
+ .take(limit);
197
+ return deleteDocs(args.ctx, docs);
198
+ });
199
+ await runStep("codex_lifecycle_events", async (limit) => {
200
+ const docs = await args.ctx.db
201
+ .query("codex_lifecycle_events")
202
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
203
+ .take(limit);
204
+ return deleteDocs(args.ctx, docs);
205
+ });
206
+ await runStep("codex_stream_checkpoints", async (limit) => {
207
+ const docs = await args.ctx.db
208
+ .query("codex_stream_checkpoints")
209
+ .withIndex("userScope_threadId_streamId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
210
+ .take(limit);
211
+ return deleteDocs(args.ctx, docs);
212
+ });
213
+ await runStep("codex_sessions", async (limit) => {
214
+ const docs = await args.ctx.db
215
+ .query("codex_sessions")
216
+ .withIndex("userScope_threadId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
217
+ .take(limit);
218
+ return deleteDocs(args.ctx, docs);
219
+ });
220
+ await runStep("codex_turns", async (limit) => {
221
+ const docs = await args.ctx.db
222
+ .query("codex_turns")
223
+ .withIndex("userScope_threadId_startedAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
224
+ .take(limit);
225
+ return deleteDocs(args.ctx, docs);
226
+ });
227
+ await runStep("codex_stream_stats", async (limit) => {
228
+ const docs = await args.ctx.db
229
+ .query("codex_stream_stats")
230
+ .withIndex("userScope_threadId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
231
+ .take(limit);
232
+ return deleteDocs(args.ctx, docs);
233
+ });
234
+ await runStep("codex_streams", async (limit) => {
235
+ const docs = await args.ctx.db
236
+ .query("codex_streams")
237
+ .withIndex("userScope_threadId_state", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
238
+ .take(limit);
239
+ return deleteDocs(args.ctx, docs);
240
+ });
241
+ await runStep("codex_thread_bindings", async (limit) => {
242
+ const docs = await args.ctx.db
243
+ .query("codex_thread_bindings")
244
+ .withIndex("userScope_userId_threadId", (q) => q.eq("userScope", args.job.userScope).eq("userId", args.job.userId).eq("threadId", threadId))
245
+ .take(limit);
246
+ return deleteDocs(args.ctx, docs);
247
+ });
248
+ await runStep("codex_threads", async (limit) => {
249
+ const docs = await args.ctx.db
250
+ .query("codex_threads")
251
+ .withIndex("userScope_threadId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
252
+ .take(limit);
253
+ return deleteDocs(args.ctx, docs);
254
+ });
255
+ return { deletedByTable, ...(phase !== undefined ? { phase } : {}) };
256
+ }
257
+ async function runTurnBatch(args) {
258
+ const threadId = args.job.threadId;
259
+ const turnId = args.job.turnId;
260
+ if (!threadId || !turnId) {
261
+ return { deletedByTable: {} };
262
+ }
263
+ const deletedByTable = {};
264
+ let phase;
265
+ let remaining = args.batchSize;
266
+ const runStep = async (tableName, run) => {
267
+ if (remaining <= 0) {
268
+ return;
269
+ }
270
+ const deleted = await run(remaining);
271
+ if (deleted > 0) {
272
+ deletedByTable[tableName] = (deletedByTable[tableName] ?? 0) + deleted;
273
+ remaining -= deleted;
274
+ phase = tableName;
275
+ }
276
+ };
277
+ await runStep("codex_stream_deltas_ttl", async (limit) => deleteTurnStreamDeltasBatch({
278
+ ctx: args.ctx,
279
+ userScope: args.job.userScope,
280
+ threadId,
281
+ turnId,
282
+ limit,
283
+ }));
284
+ await runStep("codex_turn_dispatches", async (limit) => {
285
+ const docs = await args.ctx.db
286
+ .query("codex_turn_dispatches")
287
+ .withIndex("userScope_threadId_turnId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
288
+ .take(limit);
289
+ return deleteDocs(args.ctx, docs);
290
+ });
291
+ await runStep("codex_server_requests", async (limit) => {
292
+ const docs = await args.ctx.db
293
+ .query("codex_server_requests")
294
+ .withIndex("userScope_threadId_requestIdType_requestIdText", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
295
+ .filter((q) => q.eq(q.field("turnId"), turnId))
296
+ .take(limit);
297
+ return deleteDocs(args.ctx, docs);
298
+ });
299
+ await runStep("codex_approvals", async (limit) => {
300
+ const docs = await args.ctx.db
301
+ .query("codex_approvals")
302
+ .withIndex("userScope_threadId_turnId_itemId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
303
+ .take(limit);
304
+ return deleteDocs(args.ctx, docs);
305
+ });
306
+ await runStep("codex_items", async (limit) => {
307
+ const docs = await args.ctx.db
308
+ .query("codex_items")
309
+ .withIndex("userScope_threadId_turnId_itemId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
310
+ .take(limit);
311
+ return deleteDocs(args.ctx, docs);
312
+ });
313
+ await runStep("codex_messages", async (limit) => {
314
+ const docs = await args.ctx.db
315
+ .query("codex_messages")
316
+ .withIndex("userScope_threadId_turnId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
317
+ .take(limit);
318
+ return deleteDocs(args.ctx, docs);
319
+ });
320
+ await runStep("codex_reasoning_segments", async (limit) => {
321
+ const docs = await args.ctx.db
322
+ .query("codex_reasoning_segments")
323
+ .withIndex("userScope_threadId_turnId_itemId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
324
+ .take(limit);
325
+ return deleteDocs(args.ctx, docs);
326
+ });
327
+ await runStep("codex_token_usage", async (limit) => {
328
+ const docs = await args.ctx.db
329
+ .query("codex_token_usage")
330
+ .withIndex("userScope_threadId_turnId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
331
+ .take(limit);
332
+ return deleteDocs(args.ctx, docs);
333
+ });
334
+ await runStep("codex_event_summaries", async (limit) => {
335
+ const docs = await args.ctx.db
336
+ .query("codex_event_summaries")
337
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
338
+ .filter((q) => q.eq(q.field("turnId"), turnId))
339
+ .take(limit);
340
+ return deleteDocs(args.ctx, docs);
341
+ });
342
+ await runStep("codex_lifecycle_events", async (limit) => {
343
+ const docs = await args.ctx.db
344
+ .query("codex_lifecycle_events")
345
+ .withIndex("userScope_threadId_turnId_createdAt", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
346
+ .take(limit);
347
+ return deleteDocs(args.ctx, docs);
348
+ });
349
+ await runStep("codex_turns", async (limit) => {
350
+ const docs = await args.ctx.db
351
+ .query("codex_turns")
352
+ .withIndex("userScope_threadId_turnId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
353
+ .take(limit);
354
+ return deleteDocs(args.ctx, docs);
355
+ });
356
+ await runStep("codex_stream_stats", async (limit) => {
357
+ const docs = await args.ctx.db
358
+ .query("codex_stream_stats")
359
+ .withIndex("userScope_threadId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId))
360
+ .filter((q) => q.eq(q.field("turnId"), turnId))
361
+ .take(limit);
362
+ return deleteDocs(args.ctx, docs);
363
+ });
364
+ await runStep("codex_streams", async (limit) => {
365
+ const docs = await args.ctx.db
366
+ .query("codex_streams")
367
+ .withIndex("userScope_threadId_turnId", (q) => q.eq("userScope", args.job.userScope).eq("threadId", threadId).eq("turnId", turnId))
368
+ .take(limit);
369
+ return deleteDocs(args.ctx, docs);
370
+ });
371
+ return { deletedByTable, ...(phase !== undefined ? { phase } : {}) };
372
+ }
373
+ async function runActorBatch(args) {
374
+ const deletedByTable = {};
375
+ let phase;
376
+ let remaining = args.batchSize;
377
+ const runStep = async (tableName, run) => {
378
+ if (remaining <= 0) {
379
+ return;
380
+ }
381
+ const deleted = await run(remaining);
382
+ if (deleted > 0) {
383
+ deletedByTable[tableName] = (deletedByTable[tableName] ?? 0) + deleted;
384
+ remaining -= deleted;
385
+ phase = tableName;
386
+ }
387
+ };
388
+ await runStep("codex_stream_deltas_ttl", async (limit) => {
389
+ const docs = await args.ctx.db
390
+ .query("codex_stream_deltas_ttl")
391
+ .withIndex("userScope", (q) => q.eq("userScope", args.job.userScope))
392
+ .take(limit);
393
+ return deleteDocs(args.ctx, docs);
394
+ });
395
+ await runStep("codex_turn_dispatches", async (limit) => {
396
+ const docs = await args.ctx.db
397
+ .query("codex_turn_dispatches")
398
+ .withIndex("userScope_threadId_dispatchId", (q) => q.eq("userScope", args.job.userScope))
399
+ .take(limit);
400
+ return deleteDocs(args.ctx, docs);
401
+ });
402
+ await runStep("codex_server_requests", async (limit) => {
403
+ const docs = await args.ctx.db
404
+ .query("codex_server_requests")
405
+ .withIndex("userScope_threadId_requestIdType_requestIdText", (q) => q.eq("userScope", args.job.userScope))
406
+ .take(limit);
407
+ return deleteDocs(args.ctx, docs);
408
+ });
409
+ await runStep("codex_approvals", async (limit) => {
410
+ const docs = await args.ctx.db
411
+ .query("codex_approvals")
412
+ .withIndex("userScope_threadId_status", (q) => q.eq("userScope", args.job.userScope))
413
+ .take(limit);
414
+ return deleteDocs(args.ctx, docs);
415
+ });
416
+ await runStep("codex_items", async (limit) => {
417
+ const docs = await args.ctx.db
418
+ .query("codex_items")
419
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope))
420
+ .take(limit);
421
+ return deleteDocs(args.ctx, docs);
422
+ });
423
+ await runStep("codex_messages", async (limit) => {
424
+ const docs = await args.ctx.db
425
+ .query("codex_messages")
426
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope))
427
+ .take(limit);
428
+ return deleteDocs(args.ctx, docs);
429
+ });
430
+ await runStep("codex_reasoning_segments", async (limit) => {
431
+ const docs = await args.ctx.db
432
+ .query("codex_reasoning_segments")
433
+ .withIndex("userScope_threadId_createdAt_segmentId", (q) => q.eq("userScope", args.job.userScope))
434
+ .take(limit);
435
+ return deleteDocs(args.ctx, docs);
436
+ });
437
+ await runStep("codex_token_usage", async (limit) => {
438
+ const docs = await args.ctx.db
439
+ .query("codex_token_usage")
440
+ .withIndex("userScope_threadId_updatedAt", (q) => q.eq("userScope", args.job.userScope))
441
+ .take(limit);
442
+ return deleteDocs(args.ctx, docs);
443
+ });
444
+ await runStep("codex_event_summaries", async (limit) => {
445
+ const docs = await args.ctx.db
446
+ .query("codex_event_summaries")
447
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope))
448
+ .take(limit);
449
+ return deleteDocs(args.ctx, docs);
450
+ });
451
+ await runStep("codex_lifecycle_events", async (limit) => {
452
+ const docs = await args.ctx.db
453
+ .query("codex_lifecycle_events")
454
+ .withIndex("userScope_threadId_createdAt", (q) => q.eq("userScope", args.job.userScope))
455
+ .take(limit);
456
+ return deleteDocs(args.ctx, docs);
457
+ });
458
+ await runStep("codex_stream_checkpoints", async (limit) => {
459
+ const docs = await args.ctx.db
460
+ .query("codex_stream_checkpoints")
461
+ .withIndex("userScope_threadId_streamId", (q) => q.eq("userScope", args.job.userScope))
462
+ .take(limit);
463
+ return deleteDocs(args.ctx, docs);
464
+ });
465
+ await runStep("codex_sessions", async (limit) => {
466
+ const docs = await args.ctx.db
467
+ .query("codex_sessions")
468
+ .withIndex("userScope_lastHeartbeatAt", (q) => q.eq("userScope", args.job.userScope))
469
+ .take(limit);
470
+ return deleteDocs(args.ctx, docs);
471
+ });
472
+ await runStep("codex_turns", async (limit) => {
473
+ const docs = await args.ctx.db
474
+ .query("codex_turns")
475
+ .withIndex("userScope_threadId_startedAt", (q) => q.eq("userScope", args.job.userScope))
476
+ .take(limit);
477
+ return deleteDocs(args.ctx, docs);
478
+ });
479
+ await runStep("codex_stream_stats", async (limit) => {
480
+ const docs = await args.ctx.db
481
+ .query("codex_stream_stats")
482
+ .withIndex("userScope_streamId", (q) => q.eq("userScope", args.job.userScope))
483
+ .take(limit);
484
+ return deleteDocs(args.ctx, docs);
485
+ });
486
+ await runStep("codex_streams", async (limit) => {
487
+ const docs = await args.ctx.db
488
+ .query("codex_streams")
489
+ .withIndex("userScope_streamId", (q) => q.eq("userScope", args.job.userScope))
490
+ .take(limit);
491
+ return deleteDocs(args.ctx, docs);
492
+ });
493
+ await runStep("codex_thread_bindings", async (limit) => {
494
+ const docs = await args.ctx.db
495
+ .query("codex_thread_bindings")
496
+ .withIndex("userScope_userId_externalThreadId", (q) => q.eq("userScope", args.job.userScope))
497
+ .take(limit);
498
+ return deleteDocs(args.ctx, docs);
499
+ });
500
+ await runStep("codex_threads", async (limit) => {
501
+ const docs = await args.ctx.db
502
+ .query("codex_threads")
503
+ .withIndex("userScope_updatedAt", (q) => q.eq("userScope", args.job.userScope))
504
+ .take(limit);
505
+ return deleteDocs(args.ctx, docs);
506
+ });
507
+ return { deletedByTable, ...(phase !== undefined ? { phase } : {}) };
508
+ }
509
+ async function runBatchForTarget(args) {
510
+ switch (args.job.targetKind) {
511
+ case "thread":
512
+ return runThreadBatch(args);
513
+ case "turn":
514
+ return runTurnBatch(args);
515
+ case "actor":
516
+ return runActorBatch(args);
517
+ default:
518
+ return { deletedByTable: {} };
519
+ }
520
+ }
521
+ export const runDeletionJobChunk = internalMutation({
522
+ args: {
523
+ userScope: v.string(),
524
+ deletionJobId: v.string(),
525
+ batchSize: v.optional(v.number()),
526
+ },
527
+ returns: v.null(),
528
+ handler: async (ctx, args) => {
529
+ let job = await loadDeletionJob({
530
+ ctx,
531
+ userScope: args.userScope,
532
+ deletionJobId: args.deletionJobId,
533
+ });
534
+ if (!job) {
535
+ return null;
536
+ }
537
+ if (job.status === "completed" || job.status === "failed" || job.status === "cancelled") {
538
+ return null;
539
+ }
540
+ const ts = now();
541
+ if (job.status === "scheduled") {
542
+ if (job.scheduledFor !== undefined && Number(job.scheduledFor) > ts) {
543
+ return null;
544
+ }
545
+ await ctx.db.patch(job._id, {
546
+ status: "queued",
547
+ scheduledFnId: undefined,
548
+ scheduledFor: undefined,
549
+ updatedAt: ts,
550
+ });
551
+ const reloaded = await loadDeletionJob({
552
+ ctx,
553
+ userScope: args.userScope,
554
+ deletionJobId: args.deletionJobId,
555
+ });
556
+ if (!reloaded) {
557
+ return null;
558
+ }
559
+ job = reloaded;
560
+ }
561
+ if (job.status === "queued") {
562
+ await ctx.db.patch(job._id, {
563
+ status: "running",
564
+ startedAt: ts,
565
+ updatedAt: ts,
566
+ });
567
+ }
568
+ const batchSize = clampBatchSize(args.batchSize);
569
+ try {
570
+ const batchResult = await runBatchForTarget({
571
+ ctx,
572
+ job,
573
+ batchSize,
574
+ });
575
+ const deltaCounts = batchResult.deletedByTable;
576
+ const totalDeleted = Object.values(deltaCounts).reduce((sum, count) => sum + count, 0);
577
+ const nextCounts = mergeDeletedCounts(parseDeletedCounts(job.deletedCountsJson), deltaCounts);
578
+ if (totalDeleted === 0) {
579
+ await ctx.db.patch(job._id, {
580
+ status: "completed",
581
+ ...(batchResult.phase !== undefined ? { phase: batchResult.phase } : {}),
582
+ deletedCountsJson: JSON.stringify(nextCounts),
583
+ updatedAt: ts,
584
+ completedAt: ts,
585
+ });
586
+ return null;
587
+ }
588
+ await ctx.db.patch(job._id, {
589
+ status: "running",
590
+ ...(batchResult.phase !== undefined ? { phase: batchResult.phase } : {}),
591
+ deletedCountsJson: JSON.stringify(nextCounts),
592
+ updatedAt: ts,
593
+ });
594
+ await scheduleNextChunk({
595
+ ctx,
596
+ userScope: args.userScope,
597
+ deletionJobId: args.deletionJobId,
598
+ batchSize,
599
+ });
600
+ return null;
601
+ }
602
+ catch (error) {
603
+ const message = error instanceof Error ? error.message : "unknown deletion job failure";
604
+ await ctx.db.patch(job._id, {
605
+ status: "failed",
606
+ errorCode: "E_DELETE_JOB_FAILED",
607
+ errorMessage: message.slice(0, 500),
608
+ updatedAt: now(),
609
+ completedAt: now(),
610
+ });
611
+ return null;
612
+ }
613
+ },
614
+ });
615
+ //# sourceMappingURL=deletionInternal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletionInternal.js","sourceRoot":"","sources":["../../src/component/deletionInternal.ts"],"names":[],"mappings":"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"}