@osolmaz/pi-workflows 0.13.2 → 0.13.4

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 (134) hide show
  1. package/README.md +5 -3
  2. package/dist/builtins/autodoc.workflow.d.ts +5 -5
  3. package/dist/builtins/autoimplement.workflow.d.ts +77 -73
  4. package/dist/builtins/autoimplement.workflow.js +47 -8
  5. package/dist/builtins/autoimplement.workflow.js.map +1 -1
  6. package/dist/builtins/autoplan.workflow.d.ts +8 -8
  7. package/dist/builtins/autoplan.workflow.js +44 -35
  8. package/dist/builtins/autoplan.workflow.js.map +1 -1
  9. package/dist/builtins/catalog.js +2 -2
  10. package/dist/builtins/change-verification.workflow.d.ts +1 -1
  11. package/dist/builtins/plain-summary.workflow.d.ts +1 -1
  12. package/dist/builtins/plan-approval.workflow.d.ts +1 -1
  13. package/dist/builtins/plan-change.workflow.d.ts +29 -29
  14. package/dist/builtins/sanity-check.workflow.d.ts +3 -3
  15. package/dist/builtins/workspace-preparation.workflow.d.ts +1 -1
  16. package/dist/controllers/index.d.ts +2 -2
  17. package/dist/controllers/index.js.map +1 -1
  18. package/dist/controllers/sqlite.js +85 -23
  19. package/dist/controllers/sqlite.js.map +1 -1
  20. package/dist/controllers/types.d.ts +34 -0
  21. package/dist/controllers/workflow-engine-scheduler.d.ts +5 -1
  22. package/dist/controllers/workflow-engine-scheduler.js +83 -1
  23. package/dist/controllers/workflow-engine-scheduler.js.map +1 -1
  24. package/dist/controllers/workflows.d.ts +8 -1
  25. package/dist/controllers/workflows.js +36 -0
  26. package/dist/controllers/workflows.js.map +1 -1
  27. package/dist/extension/controller-host.d.ts +2 -1
  28. package/dist/extension/controller-host.js +1 -1
  29. package/dist/extension/controller-host.js.map +1 -1
  30. package/dist/extension/follow-up-coordinator.d.ts +27 -0
  31. package/dist/extension/follow-up-coordinator.js +131 -0
  32. package/dist/extension/follow-up-coordinator.js.map +1 -0
  33. package/dist/extension/index.d.ts +9 -0
  34. package/dist/extension/index.js +460 -75
  35. package/dist/extension/index.js.map +1 -1
  36. package/dist/extension/session-events.d.ts +2 -3
  37. package/dist/extension/session-events.js +11 -10
  38. package/dist/extension/session-events.js.map +1 -1
  39. package/dist/extension/widget.js +9 -0
  40. package/dist/extension/widget.js.map +1 -1
  41. package/dist/state/database.d.ts +2 -1
  42. package/dist/state/database.js +11 -13
  43. package/dist/state/database.js.map +1 -1
  44. package/dist/state/json.js +6 -1
  45. package/dist/state/json.js.map +1 -1
  46. package/dist/state/mutation.d.ts +1 -1
  47. package/dist/state/mutation.js.map +1 -1
  48. package/dist/state/prune.d.ts +18 -0
  49. package/dist/state/prune.js +373 -0
  50. package/dist/state/prune.js.map +1 -0
  51. package/dist/state/schema.d.ts +1 -1
  52. package/dist/state/schema.js +116 -18
  53. package/dist/state/schema.js.map +1 -1
  54. package/dist/viewer/cli.d.ts +3 -1
  55. package/dist/viewer/cli.js +55 -4
  56. package/dist/viewer/cli.js.map +1 -1
  57. package/dist/viewer/render.js +19 -1
  58. package/dist/viewer/render.js.map +1 -1
  59. package/dist/workflows/composition.d.ts +2 -0
  60. package/dist/workflows/composition.js +15 -0
  61. package/dist/workflows/composition.js.map +1 -1
  62. package/dist/workflows/definition.d.ts +6 -3
  63. package/dist/workflows/definition.js +3 -0
  64. package/dist/workflows/definition.js.map +1 -1
  65. package/dist/workflows/engine.d.ts +6 -1
  66. package/dist/workflows/engine.js +301 -35
  67. package/dist/workflows/engine.js.map +1 -1
  68. package/dist/workflows/human-decision.d.ts +1 -0
  69. package/dist/workflows/human-decision.js +25 -9
  70. package/dist/workflows/human-decision.js.map +1 -1
  71. package/dist/workflows/index.d.ts +3 -1
  72. package/dist/workflows/index.js +2 -0
  73. package/dist/workflows/index.js.map +1 -1
  74. package/dist/workflows/json-patch.d.ts +47 -0
  75. package/dist/workflows/json-patch.js +298 -0
  76. package/dist/workflows/json-patch.js.map +1 -0
  77. package/dist/workflows/schema.js +29 -1
  78. package/dist/workflows/schema.js.map +1 -1
  79. package/dist/workflows/settings.d.ts +128 -0
  80. package/dist/workflows/settings.js +199 -0
  81. package/dist/workflows/settings.js.map +1 -0
  82. package/dist/workflows/store.d.ts +75 -2
  83. package/dist/workflows/store.js +1349 -89
  84. package/dist/workflows/store.js.map +1 -1
  85. package/dist/workflows/tool-input.d.ts +22 -0
  86. package/dist/workflows/tool-input.js +43 -0
  87. package/dist/workflows/tool-input.js.map +1 -1
  88. package/dist/workflows/types.d.ts +40 -5
  89. package/docs/2026-08-25-workflow-follow-ups.md +132 -0
  90. package/docs/2026-08-25-workflow-settings.md +169 -0
  91. package/docs/DEFERRED_TURNS.md +6 -0
  92. package/docs/DESIGN_PHILOSOPHY.md +2 -0
  93. package/docs/SQLITE_STATE.md +31 -18
  94. package/docs/WORKFLOW_COMPOSITION.md +16 -1
  95. package/docs/WORKFLOW_STEP_MESSAGES.md +4 -2
  96. package/docs/plans/2026-08-25-live-workflow-settings-plan.md +532 -0
  97. package/docs/plans/2026-08-25-workflow-run-storage-plan.md +67 -0
  98. package/docs/tui-viewer.md +7 -6
  99. package/docs/workflows.md +22 -1
  100. package/examples/workflows/live-settings.workflow.ts +93 -0
  101. package/herdr-plugin.toml +1 -1
  102. package/package.json +1 -1
  103. package/skills/autoplan/SKILL.md +6 -6
  104. package/src/builtins/autoimplement.workflow.ts +56 -8
  105. package/src/builtins/autoplan.workflow.ts +45 -37
  106. package/src/builtins/catalog.ts +2 -2
  107. package/src/controllers/index.ts +6 -0
  108. package/src/controllers/sqlite.ts +129 -35
  109. package/src/controllers/types.ts +40 -0
  110. package/src/controllers/workflow-engine-scheduler.ts +103 -1
  111. package/src/controllers/workflows.ts +68 -0
  112. package/src/extension/controller-host.ts +6 -1
  113. package/src/extension/follow-up-coordinator.ts +151 -0
  114. package/src/extension/index.ts +538 -88
  115. package/src/extension/session-events.ts +15 -13
  116. package/src/extension/widget.ts +8 -0
  117. package/src/state/database.ts +12 -12
  118. package/src/state/json.ts +6 -1
  119. package/src/state/mutation.ts +4 -1
  120. package/src/state/prune.ts +502 -0
  121. package/src/state/schema.ts +116 -18
  122. package/src/viewer/cli.ts +52 -5
  123. package/src/viewer/render.ts +43 -1
  124. package/src/workflows/composition.ts +19 -0
  125. package/src/workflows/definition.ts +19 -5
  126. package/src/workflows/engine.ts +363 -35
  127. package/src/workflows/human-decision.ts +41 -11
  128. package/src/workflows/index.ts +43 -0
  129. package/src/workflows/json-patch.ts +375 -0
  130. package/src/workflows/schema.ts +31 -1
  131. package/src/workflows/settings.ts +430 -0
  132. package/src/workflows/store.ts +1977 -184
  133. package/src/workflows/tool-input.ts +58 -0
  134. package/src/workflows/types.ts +43 -4
@@ -0,0 +1,373 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { StateDatabase } from "./database.js";
4
+ const TERMINAL_RUN_STATUSES = new Set(["completed", "failed", "timed_out", "cancelled"]);
5
+ const LIVE_QUEUE_STATUSES = ["queued", "starting", "running", "parked"];
6
+ const UNSETTLED_EFFECT_STATUSES = ["pending", "applying", "ambiguous"];
7
+ export async function pruneState(databasePath, options) {
8
+ const cutoff = parseCutoff(options.before);
9
+ if (options.apply && options.backupPath === undefined) {
10
+ throw new Error("state prune --apply requires --backup <absolute-path>");
11
+ }
12
+ if (options.backupPath !== undefined && !path.isAbsolute(options.backupPath)) {
13
+ throw new Error("state prune backup path must be absolute");
14
+ }
15
+ const lockPath = `${databasePath}.maintenance.lock`;
16
+ const lock = options.apply ? acquireMaintenanceLock(lockPath) : undefined;
17
+ let state;
18
+ try {
19
+ state = new StateDatabase({
20
+ filePath: databasePath,
21
+ mode: options.apply ? "read-write" : "read-only",
22
+ });
23
+ const selection = selectRunTrees(state.connection, cutoff);
24
+ const sizeBefore = databaseBytes(databasePath);
25
+ const base = {
26
+ cutoff: new Date(cutoff).toISOString(),
27
+ candidateTrees: selection.candidateTrees,
28
+ blockedTrees: selection.blockedTrees,
29
+ selectedRuns: selection.runIds.length,
30
+ databaseBytesBefore: sizeBefore,
31
+ };
32
+ if (!options.apply) {
33
+ return {
34
+ ...base,
35
+ deletedRows: 0,
36
+ deletedBlobs: 0,
37
+ deletedBlobBytes: 0,
38
+ databaseBytesAfter: sizeBefore,
39
+ applied: false,
40
+ };
41
+ }
42
+ const backupPath = path.resolve(options.backupPath);
43
+ if (fs.existsSync(backupPath)) {
44
+ throw new Error(`Backup destination already exists: ${backupPath}`);
45
+ }
46
+ await state.backup(backupPath);
47
+ let deletedRows = 0;
48
+ let deletedBlobs = 0;
49
+ let deletedBlobBytes = 0;
50
+ state.connection.exec("BEGIN EXCLUSIVE");
51
+ try {
52
+ const checked = selectRunTrees(state.connection, cutoff);
53
+ if (checked.runIds.join("\0") !== selection.runIds.join("\0") ||
54
+ checked.signature !== selection.signature) {
55
+ throw new Error("Prune selection changed after backup; run the command again");
56
+ }
57
+ const beforeChanges = totalChanges(state.connection);
58
+ if (checked.runIds.length !== 0) {
59
+ deleteRunAggregates(state.connection, checked.runIds);
60
+ }
61
+ state.connection
62
+ .prepare(`DELETE FROM workflow_definitions
63
+ WHERE NOT EXISTS (
64
+ SELECT 1 FROM runs WHERE runs.definition_digest = workflow_definitions.definition_digest
65
+ )`)
66
+ .run();
67
+ state.connection
68
+ .prepare(`DELETE FROM projects
69
+ WHERE NOT EXISTS (SELECT 1 FROM runs WHERE runs.project_id = projects.project_id)
70
+ AND NOT EXISTS (
71
+ SELECT 1 FROM controller_resources
72
+ WHERE controller_resources.project_id = projects.project_id
73
+ )`)
74
+ .run();
75
+ const blobStats = unreferencedBlobStats(state.connection);
76
+ deleteUnreferencedBlobs(state.connection);
77
+ deletedRows = totalChanges(state.connection) - beforeChanges;
78
+ deletedBlobs = blobStats.count;
79
+ deletedBlobBytes = blobStats.bytes;
80
+ state.connection.exec("COMMIT");
81
+ }
82
+ catch (error) {
83
+ if (state.connection.inTransaction)
84
+ state.connection.exec("ROLLBACK");
85
+ throw error;
86
+ }
87
+ state.connection.pragma("wal_checkpoint(TRUNCATE)");
88
+ state.connection.exec("VACUUM");
89
+ state.connection.pragma("wal_checkpoint(TRUNCATE)");
90
+ state.integrityCheck();
91
+ return {
92
+ ...base,
93
+ deletedRows,
94
+ deletedBlobs,
95
+ deletedBlobBytes,
96
+ databaseBytesAfter: databaseBytes(databasePath),
97
+ applied: true,
98
+ };
99
+ }
100
+ finally {
101
+ state?.close();
102
+ if (lock !== undefined)
103
+ releaseMaintenanceLock(lockPath, lock);
104
+ }
105
+ }
106
+ function selectRunTrees(database, cutoff) {
107
+ const rows = database
108
+ .prepare(`SELECT run_id AS runId, parent_run_id AS parentRunId, status, finished_at AS finishedAt
109
+ FROM runs ORDER BY created_at, run_id`)
110
+ .all()
111
+ .filter(isRunAgeRow);
112
+ const eligible = new Set(rows
113
+ .filter((row) => TERMINAL_RUN_STATUSES.has(row.status) &&
114
+ row.finishedAt !== null &&
115
+ row.finishedAt < cutoff)
116
+ .map((row) => row.runId));
117
+ const children = new Map();
118
+ for (const row of rows) {
119
+ if (row.parentRunId === null)
120
+ continue;
121
+ const values = children.get(row.parentRunId) ?? [];
122
+ values.push(row.runId);
123
+ children.set(row.parentRunId, values);
124
+ }
125
+ const roots = rows.filter((row) => eligible.has(row.runId) && (row.parentRunId === null || !eligible.has(row.parentRunId)));
126
+ const selected = new Set();
127
+ let blockedTrees = 0;
128
+ for (const root of roots) {
129
+ const tree = descendants(root.runId, children);
130
+ if (tree.some((runId) => !eligible.has(runId)) || treeHasBlocker(database, tree)) {
131
+ blockedTrees += 1;
132
+ continue;
133
+ }
134
+ for (const runId of tree)
135
+ selected.add(runId);
136
+ }
137
+ const runIds = [...selected].sort();
138
+ return {
139
+ candidateTrees: roots.length,
140
+ blockedTrees,
141
+ runIds,
142
+ signature: selectionSignature(database, runIds),
143
+ };
144
+ }
145
+ function treeHasBlocker(database, runIds) {
146
+ const values = placeholders(runIds);
147
+ if (hasRow(database, `SELECT 1 FROM run_queue WHERE run_id IN (${values}) AND status IN (${placeholders(LIVE_QUEUE_STATUSES)})`, [...runIds, ...LIVE_QUEUE_STATUSES]) ||
148
+ hasRow(database, `SELECT 1 FROM workflow_follow_ups
149
+ WHERE run_id IN (${values}) AND status IN ('queued', 'pending_presentation', 'ready')`, runIds) ||
150
+ hasRow(database, `SELECT 1 FROM workflow_follow_up_queues
151
+ WHERE run_id IN (${values}) AND presentation_state = 'pending'`, runIds) ||
152
+ hasRow(database, `SELECT 1 FROM controller_workflows
153
+ WHERE run_id IN (${values}) OR reserved_run_id IN (${values})`, [...runIds, ...runIds]) ||
154
+ hasRow(database, `SELECT 1 FROM run_steps s JOIN node_attempts a ON a.attempt_id = s.attempt_id
155
+ WHERE a.run_id IN (${values}) AND s.run_id NOT IN (${values})`, [...runIds, ...runIds]) ||
156
+ hasRow(database, `SELECT 1 FROM continuations
157
+ WHERE (parent_run_id IN (${values}) AND continuation_run_id NOT IN (${values}))
158
+ OR (continuation_run_id IN (${values}) AND parent_run_id NOT IN (${values}))`, [...runIds, ...runIds, ...runIds, ...runIds]) ||
159
+ hasRow(database, `SELECT 1 FROM workflow_settings
160
+ WHERE (origin_run_id IN (${values}) AND active_run_id NOT IN (${values}))
161
+ OR (active_run_id IN (${values}) AND origin_run_id NOT IN (${values}))`, [...runIds, ...runIds, ...runIds, ...runIds])) {
162
+ return true;
163
+ }
164
+ const resources = relatedResourceIds(database, runIds);
165
+ const resourceValues = placeholders(resources);
166
+ if (hasRow(database, `SELECT 1 FROM leases
167
+ WHERE resource_id IN (${resourceValues}) AND owner_id IS NOT NULL AND expires_at > ?`, [...resources, Date.now()]) ||
168
+ hasRow(database, `SELECT 1 FROM effects
169
+ WHERE source_resource_id IN (${resourceValues})
170
+ AND status IN (${placeholders(UNSETTLED_EFFECT_STATUSES)})`, [...resources, ...UNSETTLED_EFFECT_STATUSES]) ||
171
+ hasRow(database, `SELECT 1 FROM channel_messages m JOIN human_decisions d ON d.decision_id = m.decision_id
172
+ WHERE d.run_id IN (${values})`, runIds)) {
173
+ return true;
174
+ }
175
+ return false;
176
+ }
177
+ function deleteRunAggregates(database, runIds) {
178
+ const values = placeholders(runIds);
179
+ const resources = relatedResourceIds(database, runIds);
180
+ const effectRows = database
181
+ .prepare(`SELECT effect_id AS effectId, resource_id AS resourceId
182
+ FROM effects WHERE source_resource_id IN (${placeholders(resources)})`)
183
+ .all(...resources)
184
+ .filter(isEffectResourceRow);
185
+ const effectIds = effectRows.map((row) => row.effectId);
186
+ if (effectIds.length !== 0) {
187
+ const effectValues = placeholders(effectIds);
188
+ database
189
+ .prepare(`DELETE FROM notifications WHERE effect_id IN (${effectValues})`)
190
+ .run(...effectIds);
191
+ database
192
+ .prepare(`DELETE FROM turn_intents WHERE effect_id IN (${effectValues})`)
193
+ .run(...effectIds);
194
+ database.prepare(`DELETE FROM effects WHERE effect_id IN (${effectValues})`).run(...effectIds);
195
+ }
196
+ database.prepare(`DELETE FROM turn_intents WHERE run_id IN (${values})`).run(...runIds);
197
+ database
198
+ .prepare(`DELETE FROM continuations
199
+ WHERE parent_run_id IN (${values}) OR continuation_run_id IN (${values})`)
200
+ .run(...runIds, ...runIds);
201
+ const allResources = [...new Set([...resources, ...effectRows.map((row) => row.resourceId)])];
202
+ if (allResources.length !== 0) {
203
+ database
204
+ .prepare(`DELETE FROM events WHERE resource_id IN (${placeholders(allResources)})`)
205
+ .run(...allResources);
206
+ }
207
+ database.prepare(`DELETE FROM runs WHERE run_id IN (${values})`).run(...runIds);
208
+ if (allResources.length !== 0) {
209
+ database
210
+ .prepare(`DELETE FROM resources WHERE resource_id IN (${placeholders(allResources)})`)
211
+ .run(...allResources);
212
+ }
213
+ }
214
+ function relatedResourceIds(database, runIds) {
215
+ if (runIds.length === 0)
216
+ return [];
217
+ const values = placeholders(runIds);
218
+ const rows = database
219
+ .prepare(`SELECT resource_id AS resourceId FROM runs WHERE run_id IN (${values})
220
+ UNION SELECT resource_id FROM session_segments WHERE run_id IN (${values})
221
+ UNION SELECT resource_id FROM human_decisions WHERE run_id IN (${values})
222
+ UNION SELECT resource_id FROM turn_intents WHERE run_id IN (${values})
223
+ UNION SELECT resource_id FROM workflow_settings
224
+ WHERE origin_run_id IN (${values}) OR active_run_id IN (${values})
225
+ UNION SELECT resource_id FROM workflow_follow_up_queues WHERE run_id IN (${values})
226
+ UNION SELECT resource_id FROM workflow_follow_ups WHERE run_id IN (${values})`)
227
+ .all(...runIds, ...runIds, ...runIds, ...runIds, ...runIds, ...runIds, ...runIds, ...runIds)
228
+ .filter(isResourceRow);
229
+ const resources = rows.map((row) => row.resourceId);
230
+ if (resources.length === 0)
231
+ return [];
232
+ const effectResources = database
233
+ .prepare(`SELECT resource_id AS resourceId FROM effects
234
+ WHERE source_resource_id IN (${placeholders(resources)})`)
235
+ .all(...resources)
236
+ .filter(isResourceRow)
237
+ .map((row) => row.resourceId);
238
+ const notificationResources = database
239
+ .prepare(`SELECT resource.resource_id AS resourceId
240
+ FROM notifications notification
241
+ JOIN effects effect ON effect.effect_id = notification.effect_id
242
+ JOIN resources resource
243
+ ON resource.resource_type = 'notification'
244
+ AND resource.aggregate_key = notification.notification_id
245
+ WHERE effect.source_resource_id IN (${placeholders(resources)})`)
246
+ .all(...resources)
247
+ .filter(isResourceRow)
248
+ .map((row) => row.resourceId);
249
+ return [...new Set([...resources, ...effectResources, ...notificationResources])];
250
+ }
251
+ function selectionSignature(database, runIds) {
252
+ if (runIds.length === 0)
253
+ return "";
254
+ const resources = relatedResourceIds(database, runIds);
255
+ const resourceRows = database
256
+ .prepare(`SELECT resource_id AS resourceId, revision, updated_at AS updatedAt
257
+ FROM resources WHERE resource_id IN (${placeholders(resources)})
258
+ ORDER BY resource_id`)
259
+ .all(...resources);
260
+ const queueRows = database
261
+ .prepare(`SELECT run_id AS runId, status, updated_at AS updatedAt
262
+ FROM run_queue WHERE run_id IN (${placeholders(runIds)}) ORDER BY run_id`)
263
+ .all(...runIds);
264
+ return JSON.stringify([resourceRows, queueRows]);
265
+ }
266
+ function unreferencedBlobStats(database) {
267
+ const predicate = blobReferencePredicate(database);
268
+ const row = database
269
+ .prepare(`SELECT count(*) AS count, COALESCE(sum(byte_length), 0) AS bytes FROM blobs WHERE ${predicate}`)
270
+ .get();
271
+ return isBlobStatsRow(row) ? row : { count: 0, bytes: 0 };
272
+ }
273
+ function deleteUnreferencedBlobs(database) {
274
+ database.prepare(`DELETE FROM blobs WHERE ${blobReferencePredicate(database)}`).run();
275
+ }
276
+ function blobReferencePredicate(database) {
277
+ const tables = database
278
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'")
279
+ .all()
280
+ .filter(isTableRow);
281
+ const references = [];
282
+ for (const table of tables) {
283
+ const foreignKeys = database.pragma(`foreign_key_list(${quoteIdentifier(table.name)})`);
284
+ if (!Array.isArray(foreignKeys))
285
+ continue;
286
+ for (const value of foreignKeys) {
287
+ if (!isForeignKeyRow(value) || value.table !== "blobs" || value.to !== "blob_hash")
288
+ continue;
289
+ references.push(`SELECT ${quoteIdentifier(value.from)} FROM ${quoteIdentifier(table.name)} ` +
290
+ `WHERE ${quoteIdentifier(value.from)} IS NOT NULL`);
291
+ }
292
+ }
293
+ return references.length === 0 ? "1 = 1" : `blob_hash NOT IN (${references.join(" UNION ")})`;
294
+ }
295
+ function descendants(root, children) {
296
+ const result = [];
297
+ const pending = [root];
298
+ while (pending.length !== 0) {
299
+ const runId = pending.pop();
300
+ result.push(runId);
301
+ pending.push(...(children.get(runId) ?? []));
302
+ }
303
+ return result;
304
+ }
305
+ function parseCutoff(value) {
306
+ const cutoff = Date.parse(value);
307
+ if (!Number.isFinite(cutoff))
308
+ throw new Error("state prune --before requires a valid timestamp");
309
+ return cutoff;
310
+ }
311
+ function databaseBytes(databasePath) {
312
+ return [databasePath, `${databasePath}-wal`]
313
+ .filter((filePath) => fs.existsSync(filePath))
314
+ .reduce((total, filePath) => total + fs.statSync(filePath).size, 0);
315
+ }
316
+ function acquireMaintenanceLock(lockPath) {
317
+ try {
318
+ return fs.openSync(lockPath, "wx", 0o600);
319
+ }
320
+ catch (error) {
321
+ if (error.code === "EEXIST") {
322
+ throw new Error(`State maintenance is already active: ${lockPath}`);
323
+ }
324
+ throw error;
325
+ }
326
+ }
327
+ function releaseMaintenanceLock(lockPath, descriptor) {
328
+ fs.closeSync(descriptor);
329
+ fs.unlinkSync(lockPath);
330
+ }
331
+ function hasRow(database, sql, values) {
332
+ return database.prepare(sql).get(...values) !== undefined;
333
+ }
334
+ function totalChanges(database) {
335
+ const row = database.prepare("SELECT total_changes() AS count").get();
336
+ return isCountRow(row) ? row.count : 0;
337
+ }
338
+ function placeholders(values) {
339
+ if (values.length === 0)
340
+ return "NULL";
341
+ return values.map(() => "?").join(", ");
342
+ }
343
+ function quoteIdentifier(value) {
344
+ return `"${value.replaceAll('"', '""')}"`;
345
+ }
346
+ function isRecord(value) {
347
+ return typeof value === "object" && value !== null && !Array.isArray(value);
348
+ }
349
+ function isRunAgeRow(value) {
350
+ return isRecord(value);
351
+ }
352
+ function isResourceRow(value) {
353
+ return isRecord(value) && typeof value.resourceId === "string";
354
+ }
355
+ function isEffectResourceRow(value) {
356
+ return (isRecord(value) && typeof value.effectId === "string" && typeof value.resourceId === "string");
357
+ }
358
+ function isBlobStatsRow(value) {
359
+ return isRecord(value) && typeof value.count === "number" && typeof value.bytes === "number";
360
+ }
361
+ function isCountRow(value) {
362
+ return isRecord(value) && typeof value.count === "number";
363
+ }
364
+ function isTableRow(value) {
365
+ return isRecord(value) && typeof value.name === "string";
366
+ }
367
+ function isForeignKeyRow(value) {
368
+ return (isRecord(value) &&
369
+ typeof value.table === "string" &&
370
+ typeof value.from === "string" &&
371
+ typeof value.to === "string");
372
+ }
373
+ //# sourceMappingURL=prune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/state/prune.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export declare const STATE_APPLICATION_ID = 1346983750;
2
2
  export declare const STATE_SCHEMA_NAME = "pi-workflows-state";
3
3
  export declare const STATE_SCHEMA_VERSION = 1;
4
- export declare const STATE_APP_VERSION = "0.12.1";
4
+ export declare const STATE_APP_VERSION = "0.13.3";
5
5
  export declare const STATE_SCHEMA_SQL: string;
6
6
  export declare const STATE_SCHEMA_DIGEST: NonSharedBuffer;
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
2
2
  export const STATE_APPLICATION_ID = 0x50495746;
3
3
  export const STATE_SCHEMA_NAME = "pi-workflows-state";
4
4
  export const STATE_SCHEMA_VERSION = 1;
5
- export const STATE_APP_VERSION = "0.12.1";
5
+ export const STATE_APP_VERSION = "0.13.3";
6
6
  export const STATE_SCHEMA_SQL = String.raw `
7
7
  CREATE TABLE schema_meta (
8
8
  id INTEGER PRIMARY KEY CHECK (id = 1),
@@ -32,7 +32,8 @@ CREATE TABLE blobs (
32
32
  CREATE TABLE resources (
33
33
  resource_id TEXT PRIMARY KEY,
34
34
  resource_type TEXT NOT NULL CHECK (resource_type IN (
35
- 'run', 'session', 'decision', 'controller', 'effect', 'channel', 'notification', 'turn_intent'
35
+ 'run', 'session', 'decision', 'controller', 'effect', 'channel', 'notification', 'turn_intent',
36
+ 'settings', 'follow_up_queue', 'follow_up'
36
37
  )),
37
38
  aggregate_key TEXT NOT NULL,
38
39
  revision INTEGER NOT NULL DEFAULT 0 CHECK (revision >= 0),
@@ -92,11 +93,7 @@ CREATE TABLE runs (
92
93
  parent_run_id TEXT REFERENCES runs(run_id),
93
94
  definition_digest BLOB NOT NULL REFERENCES workflow_definitions(definition_digest),
94
95
  workflow_ref TEXT NOT NULL,
95
- workflow_source_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
96
96
  launch_options_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
97
- source_type TEXT NOT NULL CHECK (source_type IN ('builtin', 'file')),
98
- source_ref TEXT NOT NULL,
99
- source_revision TEXT NOT NULL,
100
97
  title TEXT,
101
98
  status TEXT NOT NULL CHECK (status IN (
102
99
  'queued', 'running', 'waiting', 'completed', 'failed', 'timed_out', 'cancelled'
@@ -104,15 +101,8 @@ CREATE TABLE runs (
104
101
  paused INTEGER NOT NULL DEFAULT 0 CHECK (paused IN (0, 1)),
105
102
  status_detail TEXT,
106
103
  input_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
107
- workflow_sources_hash BLOB REFERENCES blobs(blob_hash),
108
- human_decision_hash BLOB REFERENCES blobs(blob_hash),
109
104
  final_output_hash BLOB REFERENCES blobs(blob_hash),
110
105
  error_hash BLOB REFERENCES blobs(blob_hash),
111
- carried_step_count INTEGER NOT NULL DEFAULT 0 CHECK (carried_step_count >= 0),
112
- current_node TEXT,
113
- current_attempt_id TEXT,
114
- current_node_started_at INTEGER,
115
- waiting_on TEXT,
116
106
  created_at INTEGER NOT NULL,
117
107
  updated_at INTEGER NOT NULL,
118
108
  finished_at INTEGER,
@@ -123,6 +113,15 @@ CREATE INDEX runs_project_idx ON runs(project_id, created_at DESC);
123
113
  CREATE INDEX runs_status_idx ON runs(status, updated_at DESC);
124
114
  CREATE INDEX runs_parent_idx ON runs(parent_run_id);
125
115
 
116
+ CREATE TABLE run_sources (
117
+ run_id TEXT NOT NULL REFERENCES runs(run_id) ON DELETE CASCADE,
118
+ mount_path TEXT NOT NULL,
119
+ source_type TEXT NOT NULL CHECK (source_type IN ('builtin', 'file')),
120
+ source_ref TEXT NOT NULL,
121
+ source_revision TEXT NOT NULL,
122
+ PRIMARY KEY (run_id, mount_path)
123
+ ) STRICT;
124
+
126
125
  CREATE TABLE run_bindings (
127
126
  run_id TEXT PRIMARY KEY REFERENCES runs(run_id) ON DELETE CASCADE,
128
127
  origin_session_id TEXT NOT NULL,
@@ -132,6 +131,92 @@ CREATE TABLE run_bindings (
132
131
 
133
132
  CREATE INDEX run_bindings_session_idx ON run_bindings(origin_session_id, created_at DESC);
134
133
 
134
+ CREATE TABLE workflow_settings (
135
+ scope_id TEXT PRIMARY KEY,
136
+ resource_id TEXT NOT NULL UNIQUE REFERENCES resources(resource_id) ON DELETE CASCADE,
137
+ origin_run_id TEXT NOT NULL REFERENCES runs(run_id) ON DELETE CASCADE,
138
+ active_run_id TEXT NOT NULL REFERENCES runs(run_id) ON DELETE CASCADE,
139
+ mount_path TEXT NOT NULL,
140
+ invocation INTEGER NOT NULL CHECK (invocation > 0),
141
+ initial_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
142
+ current_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
143
+ created_at INTEGER NOT NULL,
144
+ updated_at INTEGER NOT NULL,
145
+ UNIQUE (origin_run_id, mount_path, invocation)
146
+ ) STRICT;
147
+
148
+ CREATE INDEX workflow_settings_active_run_idx ON workflow_settings(active_run_id, mount_path, invocation);
149
+
150
+ CREATE TABLE workflow_setting_changes (
151
+ change_id TEXT PRIMARY KEY,
152
+ scope_id TEXT NOT NULL REFERENCES workflow_settings(scope_id) ON DELETE CASCADE,
153
+ request_id TEXT NOT NULL,
154
+ change_number INTEGER NOT NULL CHECK (change_number > 0),
155
+ actor_type TEXT NOT NULL CHECK (actor_type IN (
156
+ 'session', 'host', 'controller', 'channel', 'human', 'policy', 'control', 'system'
157
+ )),
158
+ actor_id TEXT,
159
+ source_type TEXT NOT NULL,
160
+ patch_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
161
+ before_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
162
+ after_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
163
+ accepted_at INTEGER NOT NULL,
164
+ UNIQUE (scope_id, request_id),
165
+ UNIQUE (scope_id, change_number)
166
+ ) STRICT;
167
+
168
+ CREATE TABLE workflow_follow_up_queues (
169
+ run_id TEXT PRIMARY KEY REFERENCES runs(run_id) ON DELETE CASCADE,
170
+ resource_id TEXT NOT NULL UNIQUE REFERENCES resources(resource_id) ON DELETE CASCADE,
171
+ origin_session_id TEXT,
172
+ presentation_state TEXT NOT NULL DEFAULT 'none' CHECK (presentation_state IN (
173
+ 'none', 'not-needed', 'pending', 'settled', 'unavailable'
174
+ )),
175
+ presentation_entry_id TEXT,
176
+ presentation_assistant_entry_id TEXT,
177
+ presentation_reason_hash BLOB REFERENCES blobs(blob_hash),
178
+ presentation_updated_at INTEGER,
179
+ created_at INTEGER NOT NULL,
180
+ updated_at INTEGER NOT NULL,
181
+ CHECK (
182
+ (presentation_state IN ('none', 'not-needed', 'pending') AND presentation_assistant_entry_id IS NULL AND presentation_reason_hash IS NULL)
183
+ OR
184
+ (presentation_state = 'unavailable' AND presentation_assistant_entry_id IS NULL AND presentation_reason_hash IS NOT NULL)
185
+ OR
186
+ (presentation_state = 'settled' AND presentation_entry_id IS NOT NULL AND presentation_assistant_entry_id IS NOT NULL AND presentation_reason_hash IS NULL)
187
+ )
188
+ ) STRICT;
189
+
190
+ CREATE TABLE workflow_follow_ups (
191
+ follow_up_id TEXT PRIMARY KEY,
192
+ resource_id TEXT NOT NULL UNIQUE REFERENCES resources(resource_id) ON DELETE CASCADE,
193
+ queue_resource_id TEXT NOT NULL REFERENCES resources(resource_id),
194
+ run_id TEXT NOT NULL REFERENCES workflow_follow_up_queues(run_id) ON DELETE CASCADE,
195
+ request_id TEXT NOT NULL,
196
+ order_number INTEGER NOT NULL CHECK (order_number > 0),
197
+ target_session_id TEXT NOT NULL,
198
+ actor_type TEXT NOT NULL CHECK (actor_type IN (
199
+ 'session', 'host', 'controller', 'channel', 'human', 'policy', 'control', 'system'
200
+ )),
201
+ actor_id TEXT,
202
+ source_type TEXT NOT NULL,
203
+ prompt_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
204
+ status TEXT NOT NULL CHECK (status IN (
205
+ 'queued', 'pending_presentation', 'ready', 'sent', 'removed', 'cancelled'
206
+ )),
207
+ session_entry_id TEXT,
208
+ reason_hash BLOB REFERENCES blobs(blob_hash),
209
+ created_at INTEGER NOT NULL,
210
+ updated_at INTEGER NOT NULL,
211
+ sent_at INTEGER,
212
+ UNIQUE (run_id, request_id),
213
+ UNIQUE (run_id, order_number),
214
+ CHECK ((status = 'sent') = (session_entry_id IS NOT NULL AND sent_at IS NOT NULL)),
215
+ CHECK ((status IN ('removed', 'cancelled')) = (reason_hash IS NOT NULL))
216
+ ) STRICT;
217
+
218
+ CREATE INDEX workflow_follow_ups_delivery_idx ON workflow_follow_ups(target_session_id, status, order_number);
219
+
135
220
  CREATE TABLE run_queue (
136
221
  run_id TEXT PRIMARY KEY REFERENCES runs(run_id) ON DELETE CASCADE,
137
222
  status TEXT NOT NULL CHECK (status IN (
@@ -160,14 +245,16 @@ CREATE TABLE node_attempts (
160
245
  attempt_number INTEGER NOT NULL CHECK (attempt_number > 0),
161
246
  node_type TEXT NOT NULL,
162
247
  status TEXT NOT NULL CHECK (status IN (
163
- 'pending', 'running', 'waiting', 'completed', 'failed', 'timed_out', 'cancelled'
248
+ 'pending', 'running', 'waiting', 'interrupted',
249
+ 'completed', 'failed', 'timed_out', 'cancelled'
164
250
  )),
165
- input_hash BLOB REFERENCES blobs(blob_hash),
166
- contract_hash BLOB REFERENCES blobs(blob_hash),
167
251
  prompt_hash BLOB REFERENCES blobs(blob_hash),
168
252
  output_hash BLOB REFERENCES blobs(blob_hash),
169
- step_metadata_hash BLOB REFERENCES blobs(blob_hash),
253
+ receipt_hash BLOB REFERENCES blobs(blob_hash),
170
254
  error_hash BLOB REFERENCES blobs(blob_hash),
255
+ settings_scope_id TEXT REFERENCES workflow_settings(scope_id),
256
+ settings_change_number INTEGER CHECK (settings_change_number IS NULL OR settings_change_number >= 0),
257
+ settings_hash BLOB REFERENCES blobs(blob_hash),
171
258
  started_at INTEGER,
172
259
  deadline_at INTEGER,
173
260
  finished_at INTEGER,
@@ -233,6 +320,18 @@ CREATE TABLE session_entries (
233
320
  UNIQUE (segment_id, entry_id)
234
321
  ) STRICT;
235
322
 
323
+ CREATE TABLE attempt_entries (
324
+ attempt_id TEXT NOT NULL REFERENCES node_attempts(attempt_id) ON DELETE CASCADE,
325
+ role TEXT NOT NULL CHECK (role IN ('prompt', 'response', 'first', 'last')),
326
+ segment_id TEXT NOT NULL,
327
+ entry_id TEXT NOT NULL,
328
+ PRIMARY KEY (attempt_id, role),
329
+ FOREIGN KEY (segment_id, entry_id)
330
+ REFERENCES session_entries(segment_id, entry_id) ON DELETE CASCADE
331
+ ) STRICT;
332
+
333
+ CREATE INDEX attempt_entries_entry_idx ON attempt_entries(segment_id, entry_id);
334
+
236
335
  CREATE TABLE session_events (
237
336
  segment_id TEXT NOT NULL REFERENCES session_segments(segment_id) ON DELETE CASCADE,
238
337
  event_seq INTEGER NOT NULL CHECK (event_seq > 0),
@@ -304,7 +403,6 @@ CREATE TABLE continuations (
304
403
  decision_id TEXT PRIMARY KEY REFERENCES human_decisions(decision_id) ON DELETE CASCADE,
305
404
  parent_run_id TEXT NOT NULL UNIQUE REFERENCES runs(run_id),
306
405
  continuation_run_id TEXT NOT NULL UNIQUE REFERENCES runs(run_id),
307
- response_hash BLOB NOT NULL REFERENCES blobs(blob_hash),
308
406
  created_at INTEGER NOT NULL
309
407
  ) STRICT;
310
408
 
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoezC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAskBzC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC"}
@@ -5,8 +5,10 @@ export type CliArgs = {
5
5
  controllerName?: string;
6
6
  resourceKey?: string;
7
7
  herdrAction?: string;
8
- stateAction?: "status" | "verify" | "backup";
8
+ stateAction?: "status" | "verify" | "backup" | "prune";
9
9
  backupDestination?: string;
10
+ pruneBefore?: string;
11
+ pruneApply?: boolean;
10
12
  once: boolean;
11
13
  json: boolean;
12
14
  project?: string | undefined;