@osolmaz/pi-workflows 0.16.4 → 0.16.6

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 (173) hide show
  1. package/README.md +5 -5
  2. package/dist/builtins/autoimplement.workflow.d.ts +5 -1
  3. package/dist/builtins/autoimplement.workflow.js +29 -10
  4. package/dist/builtins/autoimplement.workflow.js.map +1 -1
  5. package/dist/client/client.js +3 -1
  6. package/dist/client/client.js.map +1 -1
  7. package/dist/client/protocol.d.ts +1 -1
  8. package/dist/client/protocol.js +18 -1
  9. package/dist/client/protocol.js.map +1 -1
  10. package/dist/client/view.d.ts +7 -5
  11. package/dist/extension/index.d.ts +2 -1
  12. package/dist/extension/index.js +115 -165
  13. package/dist/extension/index.js.map +1 -1
  14. package/dist/extension/recorder.d.ts +1 -1
  15. package/dist/extension/recorder.js +2 -2
  16. package/dist/extension/recorder.js.map +1 -1
  17. package/dist/extension/step-message.d.ts +1 -1
  18. package/dist/extension/step-message.js +4 -4
  19. package/dist/extension/step-message.js.map +1 -1
  20. package/dist/extension/workflow-message-coordinator.d.ts +12 -1
  21. package/dist/extension/workflow-message-coordinator.js +65 -54
  22. package/dist/extension/workflow-message-coordinator.js.map +1 -1
  23. package/dist/resource-managers/index.d.ts +1 -2
  24. package/dist/resource-managers/index.js +1 -2
  25. package/dist/resource-managers/index.js.map +1 -1
  26. package/dist/resource-managers/sqlite.d.ts +2 -295
  27. package/dist/resource-managers/sqlite.js +71 -1528
  28. package/dist/resource-managers/sqlite.js.map +1 -1
  29. package/dist/resource-managers/types.d.ts +2 -7
  30. package/dist/server/resource-runner-entry.js +2 -6
  31. package/dist/server/resource-runner-entry.js.map +1 -1
  32. package/dist/server/rpc-bridge.js +1 -1
  33. package/dist/server/rpc-bridge.js.map +1 -1
  34. package/dist/server/rpc-executor.js +2 -4
  35. package/dist/server/rpc-executor.js.map +1 -1
  36. package/dist/server/server-entry.js +3 -0
  37. package/dist/server/server-entry.js.map +1 -1
  38. package/dist/server/server.d.ts +22 -8
  39. package/dist/server/server.js +498 -543
  40. package/dist/server/server.js.map +1 -1
  41. package/dist/server/state.d.ts +16 -29
  42. package/dist/server/state.js +105 -319
  43. package/dist/server/state.js.map +1 -1
  44. package/dist/server/view.d.ts +4 -5
  45. package/dist/server/view.js +51 -51
  46. package/dist/server/view.js.map +1 -1
  47. package/dist/server/workflow-runner-entry.d.ts +1 -1
  48. package/dist/server/workflow-runner-entry.js +1 -49
  49. package/dist/server/workflow-runner-entry.js.map +1 -1
  50. package/dist/server/workflow-runner-protocol.d.ts +2 -7
  51. package/dist/server/workflow-runner-protocol.js +5 -10
  52. package/dist/server/workflow-runner-protocol.js.map +1 -1
  53. package/dist/server/workflow-runner-store.d.ts +5 -6
  54. package/dist/server/workflow-runner-store.js +7 -14
  55. package/dist/server/workflow-runner-store.js.map +1 -1
  56. package/dist/state/attempt-time.d.ts +21 -0
  57. package/dist/state/attempt-time.js +95 -0
  58. package/dist/state/attempt-time.js.map +1 -0
  59. package/dist/state/json.d.ts +2 -1
  60. package/dist/state/json.js.map +1 -1
  61. package/dist/state/project-store.d.ts +39 -0
  62. package/dist/state/project-store.js +154 -0
  63. package/dist/state/project-store.js.map +1 -0
  64. package/dist/state/prune.d.ts +28 -0
  65. package/dist/state/prune.js +278 -83
  66. package/dist/state/prune.js.map +1 -1
  67. package/dist/state/schema.js +23 -23
  68. package/dist/state/workflow-messages.d.ts +1 -1
  69. package/dist/state/workflow-messages.js +3 -1
  70. package/dist/state/workflow-messages.js.map +1 -1
  71. package/dist/viewer/backup.js +5 -0
  72. package/dist/viewer/backup.js.map +1 -1
  73. package/dist/workflows/diagnostics.d.ts +8 -0
  74. package/dist/workflows/diagnostics.js +61 -0
  75. package/dist/workflows/diagnostics.js.map +1 -0
  76. package/dist/workflows/engine.d.ts +2 -15
  77. package/dist/workflows/engine.js +125 -245
  78. package/dist/workflows/engine.js.map +1 -1
  79. package/dist/workflows/human-decision.d.ts +3 -7
  80. package/dist/workflows/human-decision.js +2 -56
  81. package/dist/workflows/human-decision.js.map +1 -1
  82. package/dist/workflows/index.d.ts +2 -1
  83. package/dist/workflows/index.js +1 -0
  84. package/dist/workflows/index.js.map +1 -1
  85. package/dist/workflows/queue.d.ts +267 -0
  86. package/dist/workflows/queue.js +1248 -0
  87. package/dist/workflows/queue.js.map +1 -0
  88. package/dist/workflows/requests.d.ts +47 -0
  89. package/dist/workflows/requests.js +158 -0
  90. package/dist/workflows/requests.js.map +1 -0
  91. package/dist/workflows/schema.js +2 -4
  92. package/dist/workflows/schema.js.map +1 -1
  93. package/dist/workflows/store.d.ts +11 -16
  94. package/dist/workflows/store.js +174 -169
  95. package/dist/workflows/store.js.map +1 -1
  96. package/dist/workflows/tool-input.d.ts +6 -9
  97. package/dist/workflows/tool-input.js +15 -12
  98. package/dist/workflows/tool-input.js.map +1 -1
  99. package/dist/workflows/transitions.d.ts +38 -0
  100. package/dist/workflows/transitions.js +276 -0
  101. package/dist/workflows/transitions.js.map +1 -0
  102. package/dist/workflows/types.d.ts +9 -42
  103. package/dist/workflows/workflow-message-content.d.ts +7 -1
  104. package/dist/workflows/workflow-message-content.js +22 -4
  105. package/dist/workflows/workflow-message-content.js.map +1 -1
  106. package/docs/2026-08-25-workflow-follow-ups.md +5 -5
  107. package/docs/2026-09-02-unify-workflow-messages-plan.md +2 -0
  108. package/docs/2026-09-04-workflow-run-state-plan.md +2 -0
  109. package/docs/2026-09-06-durable-execution-plan.md +176 -0
  110. package/docs/DEFERRED_TURNS.md +84 -105
  111. package/docs/HUMAN_DECISIONS.md +17 -19
  112. package/docs/HUMAN_DECISION_PRESENTATIONS.md +1 -1
  113. package/docs/SQLITE_STATE.md +87 -30
  114. package/docs/WORKFLOW_SERVER.md +50 -11
  115. package/docs/WORKFLOW_STEP_MESSAGES.md +72 -54
  116. package/docs/plans/2026-08-04-controller-runtime-plan.md +2 -0
  117. package/docs/plans/2026-08-21-deferred-turn-intents-plan.md +2 -0
  118. package/docs/plans/2026-08-27-workflow-terminal-restart-plan.md +2 -0
  119. package/docs/plans/2026-09-04-automatic-state-retention-plan.md +283 -0
  120. package/docs/workflows.md +109 -44
  121. package/examples/workflows/autoresearch.workflow.ts +0 -2
  122. package/examples/workflows/branch.workflow.ts +0 -4
  123. package/examples/workflows/echo.workflow.ts +0 -2
  124. package/examples/workflows/live-settings.workflow.ts +0 -2
  125. package/examples/workflows/two-turn.workflow.ts +0 -2
  126. package/herdr-plugin.toml +1 -1
  127. package/package.json +1 -1
  128. package/protocol/fixtures/client-v1.json +1 -1
  129. package/skills/pi-workflows/SKILL.md +8 -7
  130. package/src/builtins/autoimplement.workflow.ts +31 -10
  131. package/src/client/client.ts +3 -1
  132. package/src/client/protocol.ts +21 -1
  133. package/src/client/view.ts +9 -5
  134. package/src/extension/index.ts +117 -189
  135. package/src/extension/recorder.ts +2 -2
  136. package/src/extension/step-message.ts +4 -4
  137. package/src/extension/workflow-message-coordinator.ts +78 -50
  138. package/src/resource-managers/index.ts +1 -9
  139. package/src/resource-managers/sqlite.ts +330 -2655
  140. package/src/resource-managers/types.ts +2 -3
  141. package/src/server/resource-runner-entry.ts +2 -7
  142. package/src/server/rpc-bridge.ts +1 -1
  143. package/src/server/rpc-executor.ts +4 -9
  144. package/src/server/server-entry.ts +3 -0
  145. package/src/server/server.ts +568 -644
  146. package/src/server/state.ts +122 -466
  147. package/src/server/view.ts +56 -60
  148. package/src/server/workflow-runner-entry.ts +2 -55
  149. package/src/server/workflow-runner-protocol.ts +5 -15
  150. package/src/server/workflow-runner-store.ts +12 -27
  151. package/src/state/attempt-time.ts +122 -0
  152. package/src/state/json.ts +2 -1
  153. package/src/state/project-store.ts +218 -0
  154. package/src/state/prune.ts +408 -95
  155. package/src/state/schema.ts +23 -23
  156. package/src/state/workflow-messages.ts +4 -2
  157. package/src/viewer/backup.ts +7 -0
  158. package/src/workflows/diagnostics.ts +78 -0
  159. package/src/workflows/engine.ts +133 -291
  160. package/src/workflows/human-decision.ts +3 -81
  161. package/src/workflows/index.ts +8 -2
  162. package/src/workflows/queue.ts +2091 -0
  163. package/src/workflows/requests.ts +283 -0
  164. package/src/workflows/schema.ts +2 -6
  165. package/src/workflows/store.ts +223 -231
  166. package/src/workflows/tool-input.ts +20 -12
  167. package/src/workflows/transitions.ts +330 -0
  168. package/src/workflows/types.ts +9 -46
  169. package/src/workflows/workflow-message-content.ts +28 -4
  170. package/dist/resource-managers/runtime.d.ts +0 -59
  171. package/dist/resource-managers/runtime.js +0 -423
  172. package/dist/resource-managers/runtime.js.map +0 -1
  173. package/src/resource-managers/runtime.ts +0 -576
@@ -16,7 +16,6 @@ import type {
16
16
  HumanDecisionCancellationRecord,
17
17
  HumanDecisionChoiceMap,
18
18
  HumanDecisionChannelRequest,
19
- HumanDecisionContinuationRecord,
20
19
  HumanDecisionDeliveryRecord,
21
20
  HumanDecisionPrompt,
22
21
  HumanDecisionRequest,
@@ -377,7 +376,7 @@ export class HumanDecisionStore {
377
376
  if (this.ownsState) this.state.close();
378
377
  }
379
378
 
380
- async createRequest(request: HumanDecisionRequest): Promise<"created" | "adopted"> {
379
+ createRequest(request: HumanDecisionRequest): "created" | "adopted" {
381
380
  validateHumanDecisionRequestIntegrity(request);
382
381
  return this.state.transaction(() => {
383
382
  const existing = this.readRequestRow(request.decisionId);
@@ -674,42 +673,9 @@ export class HumanDecisionStore {
674
673
  return resolution?.outcome === "accepted" ? resolution.decision : null;
675
674
  }
676
675
 
677
- async recordContinuation(
678
- decisionId: string,
679
- value: HumanDecisionContinuationRecord,
680
- ): Promise<"created" | "adopted"> {
681
- return this.state.transaction(() => {
682
- const existing = this.readContinuationRow(decisionId);
683
- if (existing !== undefined) {
684
- const stored = this.continuationRecord(decisionId, existing);
685
- if (canonicalJson(stored) !== canonicalJson(value)) {
686
- throw new Error("Immutable human decision continuation conflicts");
687
- }
688
- return "adopted";
689
- }
690
- const resolution = this.readResolution(decisionId);
691
- if (resolution?.outcome !== "accepted") {
692
- throw new Error("A continuation requires an accepted human decision");
693
- }
694
- this.state.connection
695
- .prepare(
696
- `INSERT INTO continuations(
697
- decision_id, parent_run_id, continuation_run_id, created_at
698
- ) VALUES (?, ?, ?, ?)`,
699
- )
700
- .run(decisionId, value.parentRunId, value.runId, Date.parse(value.createdAt));
701
- return "created";
702
- });
703
- }
704
-
705
- async readContinuation(decisionId: string): Promise<HumanDecisionContinuationRecord | null> {
706
- const row = this.readContinuationRow(decisionId);
707
- return row === undefined ? null : this.continuationRecord(decisionId, row);
708
- }
709
-
710
676
  markEffectApplied(
711
677
  decisionId: string,
712
- effectType: "decision.continue" | "decision.cancel_parent" | "decision.settle_presentations",
678
+ effectType: "decision.cancel_parent" | "decision.settle_presentations",
713
679
  ): void {
714
680
  const rows = this.state.connection
715
681
  .prepare(
@@ -1005,7 +971,7 @@ export class HumanDecisionStore {
1005
971
  ): void {
1006
972
  const types =
1007
973
  outcome === "accepted"
1008
- ? ["decision.continue", "decision.settle_presentations"]
974
+ ? ["decision.settle_presentations"]
1009
975
  : ["decision.cancel_parent", "decision.settle_presentations"];
1010
976
  for (const effectType of types) {
1011
977
  const idempotencyKey = request.decisionId;
@@ -1188,38 +1154,6 @@ export class HumanDecisionStore {
1188
1154
  )
1189
1155
  .run(outcome, resultHash, decisionId, attemptId);
1190
1156
  }
1191
-
1192
- private readContinuationRow(decisionId: string): ContinuationRow | undefined {
1193
- const row = this.state.connection
1194
- .prepare(
1195
- `SELECT c.parent_run_id AS parentRunId, c.continuation_run_id AS continuationRunId,
1196
- c.created_at AS createdAt, d.request_hash AS requestHash,
1197
- r.response_hash AS resolutionHash
1198
- FROM continuations c
1199
- JOIN human_decisions d ON d.decision_id = c.decision_id
1200
- JOIN human_decision_resolutions r ON r.decision_id = c.decision_id
1201
- WHERE c.decision_id = ? AND r.outcome = 'accepted'`,
1202
- )
1203
- .get(decisionId);
1204
- return isContinuationRow(row) ? row : undefined;
1205
- }
1206
-
1207
- private continuationRecord(
1208
- decisionId: string,
1209
- row: ContinuationRow,
1210
- ): HumanDecisionContinuationRecord {
1211
- const request = this.state.readJson(row.requestHash) as HumanDecisionRequest;
1212
- const decision = this.state.readJson(row.resolutionHash) as ResolvedHumanDecision;
1213
- return {
1214
- schema: "pi-workflows.human-decision-continuation.v1",
1215
- decisionId,
1216
- requestDigest: request.requestDigest,
1217
- provenance: decision.provenance,
1218
- parentRunId: row.parentRunId,
1219
- runId: row.continuationRunId,
1220
- createdAt: new Date(row.createdAt).toISOString(),
1221
- };
1222
- }
1223
1157
  }
1224
1158
 
1225
1159
  function recordDecisionViewerChange(
@@ -1302,18 +1236,6 @@ function isContentHashRow(value: unknown): value is { contentHash: Buffer } {
1302
1236
  return isRecordValue(value);
1303
1237
  }
1304
1238
 
1305
- type ContinuationRow = {
1306
- parentRunId: string;
1307
- continuationRunId: string;
1308
- createdAt: number;
1309
- requestHash: Buffer;
1310
- resolutionHash: Buffer;
1311
- };
1312
-
1313
- function isContinuationRow(value: unknown): value is ContinuationRow {
1314
- return isRecordValue(value);
1315
- }
1316
-
1317
1239
  function isDecisionResourceRow(value: unknown): value is { resourceId: string; revision: number } {
1318
1240
  return isRecordValue(value);
1319
1241
  }
@@ -1,3 +1,11 @@
1
+ export {
2
+ WorkflowRunQueueStore,
3
+ type RunEventRecord,
4
+ type WorkflowRunPreparationResult,
5
+ type WorkflowRunQueueRecord,
6
+ type WorkflowRunQueueViewRecord,
7
+ type WorkflowRunReservationOptions,
8
+ } from "./queue.js";
1
9
  export {
2
10
  agent,
3
11
  assistantMessage,
@@ -203,7 +211,6 @@ export type {
203
211
  HumanDecisionChannelRequest,
204
212
  HumanDecisionChoice,
205
213
  HumanDecisionChoiceMap,
206
- HumanDecisionContinuationRecord,
207
214
  HumanDecisionDeliveryRecord,
208
215
  HumanDecisionNodeContract,
209
216
  HumanDecisionPrompt,
@@ -247,7 +254,6 @@ export type {
247
254
  WorkflowNotificationReceipt,
248
255
  WorkflowNotificationRequest,
249
256
  WorkflowNotificationSink,
250
- WorkflowPresentationContext,
251
257
  WorkflowProgressData,
252
258
  WorkflowProgressStatus,
253
259
  WorkflowRunResult,