@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
@@ -1,9 +1,8 @@
1
+ import type { JsonObject } from "../state/json.js";
1
2
  import type { JsonPatch } from "../workflows/json-patch.js";
2
3
 
4
+ export type { JsonPrimitive, JsonValue, JsonObject } from "../state/json.js";
3
5
  export type MaybePromise<T> = T | Promise<T>;
4
- export type JsonPrimitive = string | number | boolean | null;
5
- export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };
6
- export type JsonObject = { [key: string]: JsonValue };
7
6
 
8
7
  export type ManagedResourceConditionStatus = true | false | "unknown";
9
8
 
@@ -145,7 +145,7 @@ class ServerBackedResourceManagerEffects implements ResourceManagerEffects {
145
145
  try {
146
146
  applied = await definition.apply(this.signal);
147
147
  } catch (error) {
148
- applied = { state: "indeterminate", error: boundedError(error) };
148
+ applied = { state: "indeterminate", error: errorMessage(error) };
149
149
  }
150
150
  return await this.transport.request<EffectRecord>("effect.settle", {
151
151
  key: definition.key,
@@ -246,7 +246,7 @@ export async function runResourceRunner(): Promise<number> {
246
246
  validateResult(result);
247
247
  await transport.request("runner.finished", result as unknown as JsonValue);
248
248
  } catch (error) {
249
- await transport.request("runner.failed", { error: boundedError(error) });
249
+ await transport.request("runner.failed", { error: errorMessage(error) });
250
250
  } finally {
251
251
  clearTimeout(timer);
252
252
  }
@@ -296,11 +296,6 @@ function raceWithAbort<T>(operation: Promise<T>, signal: AbortSignal): Promise<T
296
296
  });
297
297
  }
298
298
 
299
- function boundedError(error: unknown): string {
300
- const message = errorMessage(error);
301
- return message.length <= 8_192 ? message : `${message.slice(0, 8_192)}…`;
302
- }
303
-
304
299
  async function main(): Promise<void> {
305
300
  try {
306
301
  process.exitCode = await runResourceRunner();
@@ -19,7 +19,7 @@ export default function piWorkflowsRpcBridge(pi: ExtensionAPI) {
19
19
  description: [
20
20
  "Publish an update or submit the output for the pending workflow step.",
21
21
  "Only call this tool when a workflow step contract in the conversation asks you to.",
22
- "Pass the exact step and attempt ids from the contract.",
22
+ "Pass the exact requestId from the contract.",
23
23
  ].join(" "),
24
24
  parameters: WorkflowSubmissionToolParameters,
25
25
  async execute(toolCallId, rawParams) {
@@ -18,15 +18,13 @@ const DEFAULT_ABORT_GRACE_MS = 3_000;
18
18
 
19
19
  type StepSubmission = {
20
20
  action: "submit";
21
- step: string;
22
- attempt: string;
21
+ requestId: string;
23
22
  output: unknown;
24
23
  };
25
24
 
26
25
  type StepUpdate = {
27
26
  action: "update";
28
- step: string;
29
- attempt: string;
27
+ requestId: string;
30
28
  update: { type: string; key: string; data: Record<string, unknown> };
31
29
  idempotencyKey?: string;
32
30
  };
@@ -203,8 +201,7 @@ export class RpcStepExecutor implements AgentStepExecutor {
203
201
  const parsed = JSON.parse(line.slice(RPC_SUBMISSION_PREFIX.length)) as StepAction;
204
202
  if (
205
203
  (parsed.action === "submit" || parsed.action === "update") &&
206
- typeof parsed.step === "string" &&
207
- typeof parsed.attempt === "string"
204
+ typeof parsed.requestId === "string"
208
205
  ) {
209
206
  this.actions.push(parsed);
210
207
  }
@@ -289,9 +286,7 @@ export class RpcStepExecutor implements AgentStepExecutor {
289
286
 
290
287
  private takeMatchingAction(request: AgentStepRequest): StepAction | undefined {
291
288
  const index = this.actions.findIndex(
292
- (candidate) =>
293
- candidate.step === request.contract.nodeId &&
294
- candidate.attempt === request.contract.attemptId,
289
+ (candidate) => candidate.requestId === request.contract.requestId,
295
290
  );
296
291
  return index === -1 ? undefined : (this.actions.splice(index, 1)[0] as StepAction);
297
292
  }
@@ -7,6 +7,9 @@ async function main(): Promise<void> {
7
7
  const databasePath = databaseIndex < 0 ? undefined : process.argv[databaseIndex + 1];
8
8
  const server = new WorkflowServer({
9
9
  ...(databasePath === undefined ? {} : { databasePath }),
10
+ ...(process.env.PI_WORKFLOWS_MAX_WORKERS === undefined
11
+ ? {}
12
+ : { maxWorkers: Number(process.env.PI_WORKFLOWS_MAX_WORKERS) }),
10
13
  onLog: (message) => process.stderr.write(`[pi-workflows server] ${message}\n`),
11
14
  });
12
15
  const shutdown = () => void server.stop();