videobook-engine 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +214 -0
  2. package/dist/artifacts.d.ts +20 -0
  3. package/dist/artifacts.d.ts.map +1 -0
  4. package/dist/artifacts.js +312 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/books.d.ts +7 -0
  7. package/dist/books.d.ts.map +1 -0
  8. package/dist/books.js +27 -0
  9. package/dist/books.js.map +1 -0
  10. package/dist/cas.d.ts +26 -0
  11. package/dist/cas.d.ts.map +1 -0
  12. package/dist/cas.js +139 -0
  13. package/dist/cas.js.map +1 -0
  14. package/dist/communications.d.ts +15 -0
  15. package/dist/communications.d.ts.map +1 -0
  16. package/dist/communications.js +139 -0
  17. package/dist/communications.js.map +1 -0
  18. package/dist/context.d.ts +42 -0
  19. package/dist/context.d.ts.map +1 -0
  20. package/dist/context.js +197 -0
  21. package/dist/context.js.map +1 -0
  22. package/dist/domain.d.ts +32 -0
  23. package/dist/domain.d.ts.map +1 -0
  24. package/dist/domain.js +399 -0
  25. package/dist/domain.js.map +1 -0
  26. package/dist/engine-types.d.ts +548 -0
  27. package/dist/engine-types.d.ts.map +1 -0
  28. package/dist/engine-types.js +10 -0
  29. package/dist/engine-types.js.map +1 -0
  30. package/dist/engine.d.ts +213 -0
  31. package/dist/engine.d.ts.map +1 -0
  32. package/dist/engine.js +130 -0
  33. package/dist/engine.js.map +1 -0
  34. package/dist/files.d.ts +28 -0
  35. package/dist/files.d.ts.map +1 -0
  36. package/dist/files.js +476 -0
  37. package/dist/files.js.map +1 -0
  38. package/dist/history-types.d.ts +74 -0
  39. package/dist/history-types.d.ts.map +1 -0
  40. package/dist/history-types.js +2 -0
  41. package/dist/history-types.js.map +1 -0
  42. package/dist/history.d.ts +20 -0
  43. package/dist/history.d.ts.map +1 -0
  44. package/dist/history.js +921 -0
  45. package/dist/history.js.map +1 -0
  46. package/dist/ids.d.ts +4 -0
  47. package/dist/ids.d.ts.map +1 -0
  48. package/dist/ids.js +14 -0
  49. package/dist/ids.js.map +1 -0
  50. package/dist/index.d.ts +16 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +12 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/job-queue.d.ts +51 -0
  55. package/dist/job-queue.d.ts.map +1 -0
  56. package/dist/job-queue.js +443 -0
  57. package/dist/job-queue.js.map +1 -0
  58. package/dist/media.d.ts +7 -0
  59. package/dist/media.d.ts.map +1 -0
  60. package/dist/media.js +60 -0
  61. package/dist/media.js.map +1 -0
  62. package/dist/metadata.d.ts +21 -0
  63. package/dist/metadata.d.ts.map +1 -0
  64. package/dist/metadata.js +222 -0
  65. package/dist/metadata.js.map +1 -0
  66. package/dist/notebook/types.d.ts +51 -0
  67. package/dist/notebook/types.d.ts.map +1 -0
  68. package/dist/notebook/types.js +2 -0
  69. package/dist/notebook/types.js.map +1 -0
  70. package/dist/resolver.d.ts +15 -0
  71. package/dist/resolver.d.ts.map +1 -0
  72. package/dist/resolver.js +81 -0
  73. package/dist/resolver.js.map +1 -0
  74. package/dist/runtime-services.d.ts +65 -0
  75. package/dist/runtime-services.d.ts.map +1 -0
  76. package/dist/runtime-services.js +584 -0
  77. package/dist/runtime-services.js.map +1 -0
  78. package/dist/schema.d.ts +7 -0
  79. package/dist/schema.d.ts.map +1 -0
  80. package/dist/schema.js +509 -0
  81. package/dist/schema.js.map +1 -0
  82. package/dist/similarity.d.ts +4 -0
  83. package/dist/similarity.d.ts.map +1 -0
  84. package/dist/similarity.js +1551 -0
  85. package/dist/similarity.js.map +1 -0
  86. package/dist/status.d.ts +9 -0
  87. package/dist/status.d.ts.map +1 -0
  88. package/dist/status.js +231 -0
  89. package/dist/status.js.map +1 -0
  90. package/dist/storage.d.ts +7 -0
  91. package/dist/storage.d.ts.map +1 -0
  92. package/dist/storage.js +129 -0
  93. package/dist/storage.js.map +1 -0
  94. package/dist/store.d.ts +55 -0
  95. package/dist/store.d.ts.map +1 -0
  96. package/dist/store.js +378 -0
  97. package/dist/store.js.map +1 -0
  98. package/dist/timeline.d.ts +9 -0
  99. package/dist/timeline.d.ts.map +1 -0
  100. package/dist/timeline.js +236 -0
  101. package/dist/timeline.js.map +1 -0
  102. package/docs/engine-layout.md +489 -0
  103. package/package.json +55 -0
@@ -0,0 +1,584 @@
1
+ import { v7 as uuidv7 } from "uuid";
2
+ import { ok } from "./engine-types.js";
3
+ import { resultOf, syncResultOf } from "./context.js";
4
+ import { SCHEMA_VERSION } from "./schema.js";
5
+ import { canonicalJson, parseJson } from "./store.js";
6
+ export function createRuntimeApi(context) {
7
+ const artifactWork = createArtifactWorkApi(context);
8
+ const pending = createPendingApi(context);
9
+ const failures = createFailuresApi(context);
10
+ const locks = createLocksApi(context);
11
+ const settings = createSettingsApi(context);
12
+ return {
13
+ artifactWork,
14
+ pending,
15
+ failures,
16
+ locks,
17
+ settings,
18
+ recoverArtifact: (artifact) => recoverArtifact(context, artifact),
19
+ recoverAll: () => recoverAll(context),
20
+ startReaper: (options) => startReaper(context, options),
21
+ checkSchema: () => ({
22
+ ok: true,
23
+ currentVersion: SCHEMA_VERSION,
24
+ supportedVersion: SCHEMA_VERSION,
25
+ }),
26
+ };
27
+ }
28
+ function createSettingsApi(context) {
29
+ return {
30
+ get: (key) => {
31
+ const row = context.store.db
32
+ .prepare("SELECT value_json FROM runtime_settings WHERE key=?")
33
+ .get(settingKey(key));
34
+ return row ? parseJson(row.value_json, null) : null;
35
+ },
36
+ set: (key, value) => syncResultOf(() => {
37
+ const normalized = settingKey(key);
38
+ context.store.runtime((now) => {
39
+ context.store.db
40
+ .prepare(`INSERT INTO runtime_settings(key, value_json, updated_at)
41
+ VALUES (?, ?, ?)
42
+ ON CONFLICT(key) DO UPDATE SET
43
+ value_json=excluded.value_json, updated_at=excluded.updated_at`)
44
+ .run(normalized, canonicalJson(value), now);
45
+ });
46
+ return value;
47
+ }),
48
+ delete: (key) => syncResultOf(() => {
49
+ const normalized = settingKey(key);
50
+ return context.store.runtime(() => context.store.db
51
+ .prepare("DELETE FROM runtime_settings WHERE key=?")
52
+ .run(normalized).changes > 0);
53
+ }),
54
+ };
55
+ }
56
+ export function createLogsApi(context) {
57
+ return {
58
+ append: (name, line) => resultOf(async () => {
59
+ const id = context.store.runtime((now) => context.store.db
60
+ .prepare(`INSERT INTO runtime_logs(name, body_json, created_at)
61
+ VALUES (?, ?, ?)`)
62
+ .run(logName(name), canonicalJson(line), now).lastInsertRowid);
63
+ return String(id);
64
+ }),
65
+ read: (name, options = {}) => {
66
+ const rows = context.store.db
67
+ .prepare(`SELECT body_json FROM runtime_logs
68
+ WHERE name=? ORDER BY id DESC LIMIT ?`)
69
+ .all(logName(name), Math.max(1, options.limit ?? 100));
70
+ return rows.reverse().map((row) => parseJson(row.body_json, {}));
71
+ },
72
+ };
73
+ }
74
+ function createArtifactWorkApi(context) {
75
+ return {
76
+ begin: (artifact, input) => {
77
+ const artifactRow = context.artifactRow(artifact);
78
+ return context.store.runtime((now) => {
79
+ const existing = context.store.db
80
+ .prepare("SELECT status, owner_id FROM runtime_artifact_views WHERE artifact_id=?")
81
+ .get(artifactRow.artifact_id);
82
+ if (existing?.owner_id ||
83
+ existing?.status === "working" ||
84
+ existing?.status === "error") {
85
+ return null;
86
+ }
87
+ const ownerId = uuidv7();
88
+ const deadline = now + Math.max(1, input.durationMs);
89
+ const pid = input.pid ?? (input.ownerKind === "job" ? process.pid : null);
90
+ const meta = {
91
+ kind: input.kind,
92
+ orientation: input.meta?.orientation ?? null,
93
+ queued: false,
94
+ progress: input.meta?.progress ?? null,
95
+ error: null,
96
+ ...(input.meta ?? {}),
97
+ };
98
+ context.store.db
99
+ .prepare(`INSERT INTO runtime_artifact_views(
100
+ artifact_id, status, meta_json, owner_id, owner_kind, pid,
101
+ deadline_at, updated_at, fence
102
+ ) VALUES (?, 'working', ?, ?, ?, ?, ?, ?, 1)
103
+ ON CONFLICT(artifact_id) DO UPDATE SET
104
+ status='working', meta_json=excluded.meta_json,
105
+ owner_id=excluded.owner_id, owner_kind=excluded.owner_kind,
106
+ pid=excluded.pid, deadline_at=excluded.deadline_at,
107
+ updated_at=excluded.updated_at,
108
+ fence=runtime_artifact_views.fence+1`)
109
+ .run(artifactRow.artifact_id, canonicalJson(meta), ownerId, input.ownerKind, pid, deadline, now);
110
+ return { ownerId };
111
+ });
112
+ },
113
+ complete: (artifact, ownerId) => {
114
+ const artifactId = context.artifactRow(artifact).artifact_id;
115
+ return context.store.runtime((now) => context.store.db
116
+ .prepare(`UPDATE runtime_artifact_views
117
+ SET status='ready', meta_json='{}', owner_id=NULL,
118
+ owner_kind=NULL, pid=NULL, deadline_at=NULL, updated_at=?
119
+ WHERE artifact_id=? AND owner_id=?`)
120
+ .run(now, artifactId, ownerId).changes > 0);
121
+ },
122
+ fail: (artifact, ownerId, failure) => failArtifactWork(context, artifact, ownerId, failure),
123
+ renew: (artifact, ownerId, extendMs) => {
124
+ const artifactId = context.artifactRow(artifact).artifact_id;
125
+ return context.store.runtime((now) => context.store.db
126
+ .prepare(`UPDATE runtime_artifact_views
127
+ SET deadline_at=MAX(COALESCE(deadline_at, 0), ?), updated_at=?
128
+ WHERE artifact_id=? AND owner_id=? AND status='working'`)
129
+ .run(now + Math.max(1, extendMs), now, artifactId, ownerId).changes > 0);
130
+ },
131
+ markSeen: (artifact) => {
132
+ const artifactId = context.artifactRow(artifact).artifact_id;
133
+ return context.store.runtime((now) => context.store.db
134
+ .prepare("UPDATE runtime_artifact_views SET seen_at=?, updated_at=? WHERE artifact_id=?")
135
+ .run(now, now, artifactId).changes > 0);
136
+ },
137
+ read: (artifact) => syncResultOf(() => {
138
+ const artifactId = context.artifactRow(artifact).artifact_id;
139
+ const row = context.store.db
140
+ .prepare(`${VIEW_SELECT} WHERE artifact_id=?`)
141
+ .get(artifactId);
142
+ return row ? viewFromRow(context, row) : null;
143
+ }),
144
+ list: () => syncResultOf(() => {
145
+ const rows = context.store.db
146
+ .prepare(`${VIEW_SELECT} ORDER BY updated_at DESC`)
147
+ .all();
148
+ return rows.map((row) => viewFromRow(context, row));
149
+ }),
150
+ };
151
+ }
152
+ function createPendingApi(context) {
153
+ return {
154
+ write: (input, expectedOwnerId) => resultOf(async () => {
155
+ const artifact = context.artifactRow(input.artifactId);
156
+ const value = context.store.runtime((now) => {
157
+ const existing = context.store.db
158
+ .prepare("SELECT task_id, owner_id FROM runtime_pending_tasks WHERE artifact_id=?")
159
+ .get(artifact.artifact_id);
160
+ if (existing && existing.owner_id !== null && existing.owner_id !== expectedOwnerId) {
161
+ return null;
162
+ }
163
+ context.store.db
164
+ .prepare(`INSERT INTO runtime_pending_tasks(
165
+ artifact_id, task_id, task_type, created_at, meta_json, completing, owner_id
166
+ ) VALUES (?, ?, ?, ?, ?, 0, ?)
167
+ ON CONFLICT(artifact_id) DO UPDATE SET
168
+ task_id=excluded.task_id, task_type=excluded.task_type,
169
+ created_at=excluded.created_at, meta_json=excluded.meta_json,
170
+ completing=0, owner_id=excluded.owner_id`)
171
+ .run(artifact.artifact_id, input.taskId, input.taskType, now, canonicalJson(input.meta ?? {}), expectedOwnerId);
172
+ return {
173
+ task: pendingFromRow(context, requiredPendingRow(context, artifact.artifact_id)),
174
+ inserted: !existing,
175
+ };
176
+ });
177
+ return value;
178
+ }),
179
+ read: (artifact) => syncResultOf(() => {
180
+ const artifactId = context.artifactRow(artifact).artifact_id;
181
+ const row = context.store.db
182
+ .prepare(`${PENDING_SELECT} WHERE artifact_id=?`)
183
+ .get(artifactId);
184
+ return row ? pendingFromRow(context, row) : null;
185
+ }),
186
+ delete: (artifact, expectedTaskId) => syncResultOf(() => {
187
+ const artifactId = context.artifactRow(artifact).artifact_id;
188
+ return context.store.runtime(() => {
189
+ const statement = expectedTaskId
190
+ ? context.store.db.prepare("DELETE FROM runtime_pending_tasks WHERE artifact_id=? AND task_id=?")
191
+ : context.store.db.prepare("DELETE FROM runtime_pending_tasks WHERE artifact_id=?");
192
+ return statement.run(...(expectedTaskId ? [artifactId, expectedTaskId] : [artifactId])).changes > 0;
193
+ });
194
+ }),
195
+ markCompleting: (artifact) => updateCompleting(context, artifact, true),
196
+ clearCompleting: (artifact) => updateCompleting(context, artifact, false),
197
+ findAll: () => syncResultOf(() => {
198
+ const rows = context.store.db
199
+ .prepare(`${PENDING_SELECT} ORDER BY created_at, artifact_id`)
200
+ .all();
201
+ return rows.map((row) => pendingFromRow(context, row));
202
+ }),
203
+ findByExternalId: (taskId) => syncResultOf(() => {
204
+ const row = context.store.db
205
+ .prepare(`${PENDING_SELECT} WHERE task_id=?`)
206
+ .get(taskId);
207
+ return row ? pendingFromRow(context, row) : null;
208
+ }),
209
+ getOwner: (artifact, taskId) => {
210
+ const artifactId = context.artifactRow(artifact).artifact_id;
211
+ const row = context.store.db
212
+ .prepare("SELECT owner_id FROM runtime_pending_tasks WHERE artifact_id=? AND task_id=?")
213
+ .get(artifactId, taskId);
214
+ return row?.owner_id ?? null;
215
+ },
216
+ fail: (artifact, taskOrInfo, maybeInfo) => failPending(context, artifact, typeof taskOrInfo === "string" ? taskOrInfo : undefined, typeof taskOrInfo === "string" ? maybeInfo : taskOrInfo),
217
+ forceFail: (artifact, info) => failPending(context, artifact, undefined, info, true),
218
+ };
219
+ }
220
+ function createFailuresApi(context) {
221
+ return {
222
+ write: (artifact, info) => writeFailure(context, artifact, info),
223
+ read: (artifact) => syncResultOf(() => {
224
+ const artifactId = context.artifactRow(artifact).artifact_id;
225
+ const row = context.store.db
226
+ .prepare(`${FAILURE_SELECT} WHERE artifact_id=?`)
227
+ .get(artifactId);
228
+ return row ? failureFromRow(context, row) : null;
229
+ }),
230
+ clear: (artifact) => clearFailure(context, artifact),
231
+ findAll: () => syncResultOf(() => {
232
+ const rows = context.store.db
233
+ .prepare(`${FAILURE_SELECT} ORDER BY failed_at DESC`)
234
+ .all();
235
+ return rows.map((row) => failureFromRow(context, row));
236
+ }),
237
+ };
238
+ }
239
+ function createLocksApi(context) {
240
+ return {
241
+ acquire: (resource, options) => resultOf(async () => {
242
+ const key = resourceKey(resource);
243
+ const ownerId = options.ownerId ?? uuidv7();
244
+ const value = context.store.runtime((now) => {
245
+ context.store.db
246
+ .prepare(`UPDATE runtime_resource_leases SET revoked_at=?, fence=fence+1
247
+ WHERE resource_key=? AND revoked_at IS NULL AND expires_at<=?`)
248
+ .run(now, key, now);
249
+ const active = context.store.db
250
+ .prepare(`${LEASE_SELECT} WHERE resource_key=? AND revoked_at IS NULL`)
251
+ .get(key);
252
+ if (active)
253
+ throw new Error(`Resource is locked: ${key}`);
254
+ const identity = workspaceIdentity(context, key);
255
+ const fenceRow = context.store.db
256
+ .prepare("SELECT COALESCE(MAX(fence), 0) AS fence FROM runtime_resource_leases WHERE resource_key=?")
257
+ .get(key);
258
+ const leaseId = uuidv7();
259
+ const fence = fenceRow.fence + 1;
260
+ context.store.db
261
+ .prepare(`INSERT INTO runtime_resource_leases(
262
+ lease_id, artifact_id, resource_key, owner_id, owner_kind,
263
+ pid, state, data_json, fence, acquired_at, expires_at, revoked_at
264
+ ) VALUES (?, ?, ?, ?, 'process', ?, ?, ?, ?, ?, ?, NULL)`)
265
+ .run(leaseId, identity.artifactId, key, ownerId, process.pid, options.state ?? null, canonicalJson(options.data ?? {}), fence, now, now + Math.max(1, options.durationMs));
266
+ return requiredLease(context, leaseId);
267
+ });
268
+ return lockFromRow(value);
269
+ }),
270
+ release: (resource, ownerId) => syncResultOf(() => {
271
+ const key = resourceKey(resource);
272
+ return context.store.runtime((now) => {
273
+ const sql = ownerId
274
+ ? `UPDATE runtime_resource_leases SET revoked_at=?, fence=fence+1
275
+ WHERE resource_key=? AND owner_id=? AND revoked_at IS NULL`
276
+ : `UPDATE runtime_resource_leases SET revoked_at=?, fence=fence+1
277
+ WHERE resource_key=? AND revoked_at IS NULL`;
278
+ return context.store.db
279
+ .prepare(sql)
280
+ .run(...(ownerId ? [now, key, ownerId] : [now, key])).changes > 0;
281
+ });
282
+ }),
283
+ isLocked: (resource) => {
284
+ const key = resourceKey(resource);
285
+ return Boolean(context.store.db
286
+ .prepare(`SELECT 1 AS present FROM runtime_resource_leases
287
+ WHERE resource_key=? AND revoked_at IS NULL AND expires_at>?`)
288
+ .get(key, Date.now()));
289
+ },
290
+ get: (resource) => {
291
+ const row = context.store.db
292
+ .prepare(`${LEASE_SELECT}
293
+ WHERE resource_key=? AND revoked_at IS NULL AND expires_at>?
294
+ ORDER BY fence DESC LIMIT 1`)
295
+ .get(resourceKey(resource), Date.now());
296
+ return row ? lockFromRow(row) : null;
297
+ },
298
+ cleanStale: (resource) => {
299
+ const key = resourceKey(resource);
300
+ return context.store.runtime((now) => context.store.db
301
+ .prepare(`UPDATE runtime_resource_leases SET revoked_at=?, fence=fence+1
302
+ WHERE resource_key=? AND revoked_at IS NULL AND expires_at<=?`)
303
+ .run(now, key, now).changes > 0);
304
+ },
305
+ };
306
+ }
307
+ async function failArtifactWork(context, artifactReference, ownerId, failure) {
308
+ const artifact = context.artifactRow(artifactReference);
309
+ const current = context.store.db
310
+ .prepare("SELECT owner_id FROM runtime_artifact_views WHERE artifact_id=?")
311
+ .get(artifact.artifact_id);
312
+ if (current?.owner_id !== ownerId)
313
+ return false;
314
+ const result = await writeFailure(context, artifactReference, {
315
+ message: failure.message,
316
+ ...(failure.code ? { failCode: failure.code } : {}),
317
+ });
318
+ return result.ok;
319
+ }
320
+ async function failPending(context, artifactReference, expectedTaskId, info, force = false) {
321
+ return resultOf(async () => {
322
+ const artifact = context.artifactRow(artifactReference);
323
+ const pending = context.store.db
324
+ .prepare(`${PENDING_SELECT} WHERE artifact_id=?`)
325
+ .get(artifact.artifact_id);
326
+ if (!force && (!pending || (expectedTaskId !== undefined && pending.task_id !== expectedTaskId))) {
327
+ return null;
328
+ }
329
+ const result = await writeFailure(context, artifactReference, info);
330
+ if (!result.ok)
331
+ throw new Error(result.error.message);
332
+ context.store.runtime(() => {
333
+ context.store.db
334
+ .prepare("DELETE FROM runtime_pending_tasks WHERE artifact_id=?")
335
+ .run(artifact.artifact_id);
336
+ });
337
+ return result.value;
338
+ });
339
+ }
340
+ async function writeFailure(context, artifactReference, info) {
341
+ return resultOf(async () => {
342
+ const artifact = context.artifactRow(artifactReference);
343
+ const mutation = await context.store.semantic({
344
+ operation: "artifact_failed",
345
+ artifactId: artifact.artifact_id,
346
+ details: { ...info },
347
+ writeSet: [`artifact-runtime:${artifact.artifact_id}`],
348
+ }, ["job_runs"], (_operationId, now) => {
349
+ context.store.db
350
+ .prepare(`INSERT INTO runtime_generation_errors(
351
+ artifact_id, message, fail_code, prompt, failed_at
352
+ ) VALUES (?, ?, ?, ?, ?)
353
+ ON CONFLICT(artifact_id) DO UPDATE SET
354
+ message=excluded.message, fail_code=excluded.fail_code,
355
+ prompt=excluded.prompt, failed_at=excluded.failed_at`)
356
+ .run(artifact.artifact_id, info.message, info.failCode ?? null, info.prompt ?? null, now);
357
+ context.store.db
358
+ .prepare(`INSERT INTO runtime_artifact_views(
359
+ artifact_id, status, meta_json, updated_at
360
+ ) VALUES (?, 'error', ?, ?)
361
+ ON CONFLICT(artifact_id) DO UPDATE SET
362
+ status='error', meta_json=excluded.meta_json, owner_id=NULL,
363
+ owner_kind=NULL, pid=NULL, deadline_at=NULL,
364
+ updated_at=excluded.updated_at`)
365
+ .run(artifact.artifact_id, canonicalJson({
366
+ error: { message: info.message, code: info.failCode ?? null },
367
+ }), now);
368
+ context.store.db
369
+ .prepare(`INSERT INTO job_runs(
370
+ run_id, artifact_id, job_type, state, payload_json, result_json,
371
+ error_json, started_at, finished_at
372
+ ) VALUES (?, ?, 'external', 'failed', '{}', NULL, ?, NULL, ?)`)
373
+ .run(uuidv7(), artifact.artifact_id, canonicalJson(info), now);
374
+ return now;
375
+ });
376
+ return ok({
377
+ artifactId: artifact.artifact_id,
378
+ artifactSlug: artifact.slug,
379
+ message: info.message,
380
+ ...(info.failCode ? { failCode: info.failCode } : {}),
381
+ ...(info.prompt !== undefined ? { prompt: info.prompt } : {}),
382
+ failedAt: mutation.value,
383
+ }, mutation.revision);
384
+ });
385
+ }
386
+ async function clearFailure(context, artifactReference) {
387
+ return resultOf(async () => {
388
+ const artifact = context.artifactRow(artifactReference);
389
+ const exists = context.store.db
390
+ .prepare("SELECT 1 AS present FROM runtime_generation_errors WHERE artifact_id=?")
391
+ .get(artifact.artifact_id);
392
+ if (!exists)
393
+ return false;
394
+ const mutation = await context.store.semantic({
395
+ operation: "clear_artifact_failure",
396
+ artifactId: artifact.artifact_id,
397
+ writeSet: [`artifact-runtime:${artifact.artifact_id}`],
398
+ }, [], (_operationId, now) => {
399
+ context.store.db
400
+ .prepare("DELETE FROM runtime_generation_errors WHERE artifact_id=?")
401
+ .run(artifact.artifact_id);
402
+ context.store.db
403
+ .prepare(`UPDATE runtime_artifact_views
404
+ SET status='ready', meta_json='{}', owner_id=NULL, owner_kind=NULL,
405
+ pid=NULL, deadline_at=NULL, updated_at=? WHERE artifact_id=?`)
406
+ .run(now, artifact.artifact_id);
407
+ });
408
+ return ok(true, mutation.revision);
409
+ });
410
+ }
411
+ function updateCompleting(context, artifactReference, completing) {
412
+ return syncResultOf(() => {
413
+ const artifactId = context.artifactRow(artifactReference).artifact_id;
414
+ return context.store.runtime(() => context.store.db
415
+ .prepare("UPDATE runtime_pending_tasks SET completing=? WHERE artifact_id=?")
416
+ .run(completing ? 1 : 0, artifactId).changes > 0);
417
+ });
418
+ }
419
+ function recoverArtifact(context, artifactReference) {
420
+ return syncResultOf(() => {
421
+ const artifact = context.artifactRow(artifactReference);
422
+ context.store.runtime((now) => {
423
+ context.store.db
424
+ .prepare(`INSERT OR IGNORE INTO runtime_artifact_views(
425
+ artifact_id, status, meta_json, updated_at
426
+ ) VALUES (?, 'ready', '{}', ?)`)
427
+ .run(artifact.artifact_id, now);
428
+ });
429
+ });
430
+ }
431
+ function recoverAll(context) {
432
+ return syncResultOf(() => {
433
+ const artifacts = context.store.db
434
+ .prepare("SELECT artifact_id FROM artifacts")
435
+ .all();
436
+ const recovered = context.store.runtime((now) => {
437
+ let count = 0;
438
+ for (const artifact of artifacts) {
439
+ count += context.store.db
440
+ .prepare(`INSERT OR IGNORE INTO runtime_artifact_views(
441
+ artifact_id, status, meta_json, updated_at
442
+ ) VALUES (?, 'ready', '{}', ?)`)
443
+ .run(artifact.artifact_id, now).changes;
444
+ }
445
+ return count;
446
+ });
447
+ return { recovered };
448
+ });
449
+ }
450
+ function startReaper(context, options) {
451
+ const timer = setInterval(() => {
452
+ context.store.runtime((now) => {
453
+ context.store.db
454
+ .prepare(`UPDATE runtime_resource_leases SET revoked_at=?, fence=fence+1
455
+ WHERE revoked_at IS NULL AND expires_at<=?`)
456
+ .run(now, now);
457
+ context.store.db
458
+ .prepare(`UPDATE runtime_artifact_views
459
+ SET status='error',
460
+ meta_json='{"error":{"message":"Work lease expired","code":"LEASE_EXPIRED"}}',
461
+ owner_id=NULL, owner_kind=NULL, pid=NULL, deadline_at=NULL,
462
+ updated_at=?, fence=fence+1
463
+ WHERE status='working' AND deadline_at IS NOT NULL AND deadline_at<=?`)
464
+ .run(now, now);
465
+ });
466
+ }, Math.max(50, options.intervalMs));
467
+ timer.unref?.();
468
+ return { stop: () => clearInterval(timer) };
469
+ }
470
+ function viewFromRow(context, row) {
471
+ const artifact = context.artifactRowById(row.artifact_id);
472
+ return {
473
+ artifactId: row.artifact_id,
474
+ slug: artifact.slug,
475
+ status: row.status,
476
+ meta: parseJson(row.meta_json, {}),
477
+ ownerId: row.owner_id,
478
+ ownerKind: row.owner_kind,
479
+ pid: row.pid,
480
+ deadlineAt: row.deadline_at,
481
+ updatedAt: row.updated_at,
482
+ seenAt: row.seen_at,
483
+ };
484
+ }
485
+ function pendingFromRow(context, row) {
486
+ const artifact = context.artifactRowById(row.artifact_id);
487
+ return {
488
+ artifactId: row.artifact_id,
489
+ artifactSlug: artifact.slug,
490
+ taskId: row.task_id,
491
+ taskType: row.task_type,
492
+ workspacePath: context.artifactPath(row.artifact_id),
493
+ createdAt: row.created_at,
494
+ meta: parseJson(row.meta_json, {}),
495
+ completing: row.completing === 1,
496
+ ownerId: row.owner_id,
497
+ };
498
+ }
499
+ function failureFromRow(context, row) {
500
+ const artifact = context.artifactRowById(row.artifact_id);
501
+ return {
502
+ artifactId: row.artifact_id,
503
+ artifactSlug: artifact.slug,
504
+ message: row.message,
505
+ ...(row.fail_code ? { failCode: row.fail_code } : {}),
506
+ ...(row.prompt !== null ? { prompt: row.prompt } : {}),
507
+ failedAt: row.failed_at,
508
+ };
509
+ }
510
+ function requiredPendingRow(context, artifactId) {
511
+ const row = context.store.db
512
+ .prepare(`${PENDING_SELECT} WHERE artifact_id=?`)
513
+ .get(artifactId);
514
+ if (!row)
515
+ throw new Error(`Pending task not found: ${artifactId}`);
516
+ return row;
517
+ }
518
+ function requiredLease(context, leaseId) {
519
+ const row = context.store.db
520
+ .prepare(`${LEASE_SELECT} WHERE lease_id=?`)
521
+ .get(leaseId);
522
+ if (!row)
523
+ throw new Error(`Lease not found: ${leaseId}`);
524
+ return row;
525
+ }
526
+ function lockFromRow(row) {
527
+ return {
528
+ id: row.lease_id,
529
+ resource: row.resource_key,
530
+ ownerId: row.owner_id,
531
+ created_at: row.acquired_at,
532
+ timeout_at: row.expires_at,
533
+ ...(row.pid !== null ? { pid: row.pid } : {}),
534
+ ...(row.state ? { state: row.state } : {}),
535
+ data: parseJson(row.data_json, {}),
536
+ };
537
+ }
538
+ function workspaceIdentity(context, resource) {
539
+ const row = context.store.db
540
+ .prepare(`SELECT artifact_id FROM runtime_workspace_entries
541
+ WHERE ?=path OR ? LIKE path || '/%'
542
+ ORDER BY length(path) DESC LIMIT 1`)
543
+ .get(resource, resource);
544
+ return { artifactId: row?.artifact_id ?? null };
545
+ }
546
+ function resourceKey(input) {
547
+ const key = input.trim();
548
+ if (!key)
549
+ throw new Error("Lock resource is required");
550
+ return key;
551
+ }
552
+ function settingKey(input) {
553
+ const key = input.trim();
554
+ if (key.length === 0 || key.length > 255 || /[\u0000-\u001f\u007f]/.test(key)) {
555
+ throw new Error("Invalid runtime setting key");
556
+ }
557
+ return key;
558
+ }
559
+ function logName(input) {
560
+ const name = input.trim();
561
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/.test(name)) {
562
+ throw new Error(`Invalid log name: ${input}`);
563
+ }
564
+ return name;
565
+ }
566
+ const VIEW_SELECT = `
567
+ SELECT artifact_id, status, meta_json, owner_id,
568
+ owner_kind, pid, deadline_at, updated_at, seen_at
569
+ FROM runtime_artifact_views
570
+ `;
571
+ const PENDING_SELECT = `
572
+ SELECT artifact_id, task_id, task_type, created_at, meta_json, completing, owner_id
573
+ FROM runtime_pending_tasks
574
+ `;
575
+ const FAILURE_SELECT = `
576
+ SELECT artifact_id, message, fail_code, prompt, failed_at
577
+ FROM runtime_generation_errors
578
+ `;
579
+ const LEASE_SELECT = `
580
+ SELECT lease_id, artifact_id, resource_key, owner_id,
581
+ pid, state, data_json, fence, acquired_at, expires_at
582
+ FROM runtime_resource_leases
583
+ `;
584
+ //# sourceMappingURL=runtime-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-services.js","sourceRoot":"","sources":["../src/runtime-services.ts"],"names":[],"mappings":"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"}