@osolmaz/pi-workflows 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/README.md +56 -31
  2. package/dist/builtins/autodoc.workflow.d.ts +4 -4
  3. package/dist/builtins/autoimplement.workflow.d.ts +797 -142
  4. package/dist/builtins/autoimplement.workflow.js +17 -105
  5. package/dist/builtins/autoimplement.workflow.js.map +1 -1
  6. package/dist/builtins/autoplan.workflow.d.ts +126 -13
  7. package/dist/builtins/autoplan.workflow.js +200 -29
  8. package/dist/builtins/autoplan.workflow.js.map +1 -1
  9. package/dist/builtins/catalog.js +7 -5
  10. package/dist/builtins/catalog.js.map +1 -1
  11. package/dist/builtins/index.d.ts +4 -2
  12. package/dist/builtins/index.js +3 -1
  13. package/dist/builtins/index.js.map +1 -1
  14. package/dist/builtins/monitor.workflow.d.ts +56 -23
  15. package/dist/builtins/monitor.workflow.js +508 -329
  16. package/dist/builtins/monitor.workflow.js.map +1 -1
  17. package/dist/builtins/pi-agent-group.d.ts +72 -0
  18. package/dist/builtins/pi-agent-group.js +1087 -0
  19. package/dist/builtins/pi-agent-group.js.map +1 -0
  20. package/dist/builtins/plain-summary.workflow.d.ts +32 -0
  21. package/dist/builtins/plain-summary.workflow.js +134 -0
  22. package/dist/builtins/plain-summary.workflow.js.map +1 -0
  23. package/dist/builtins/plan-approval.workflow.d.ts +39 -5
  24. package/dist/builtins/plan-approval.workflow.js +92 -14
  25. package/dist/builtins/plan-approval.workflow.js.map +1 -1
  26. package/dist/builtins/plan-change.workflow.d.ts +449 -0
  27. package/dist/builtins/plan-change.workflow.js +256 -0
  28. package/dist/builtins/plan-change.workflow.js.map +1 -0
  29. package/dist/builtins/plan-presentation.js +2 -2
  30. package/dist/builtins/plan-presentation.js.map +1 -1
  31. package/dist/builtins/sanity-check.workflow.d.ts +50 -6
  32. package/dist/builtins/sanity-check.workflow.js +150 -28
  33. package/dist/builtins/sanity-check.workflow.js.map +1 -1
  34. package/dist/controllers/effects.d.ts +3 -2
  35. package/dist/controllers/effects.js +8 -1
  36. package/dist/controllers/effects.js.map +1 -1
  37. package/dist/controllers/index.d.ts +1 -1
  38. package/dist/controllers/index.js +1 -1
  39. package/dist/controllers/index.js.map +1 -1
  40. package/dist/controllers/manager.d.ts +1 -0
  41. package/dist/controllers/manager.js +41 -17
  42. package/dist/controllers/manager.js.map +1 -1
  43. package/dist/controllers/sqlite.d.ts +107 -85
  44. package/dist/controllers/sqlite.js +1611 -1486
  45. package/dist/controllers/sqlite.js.map +1 -1
  46. package/dist/controllers/store.d.ts +9 -8
  47. package/dist/controllers/store.js +1 -31
  48. package/dist/controllers/store.js.map +1 -1
  49. package/dist/controllers/types.d.ts +3 -0
  50. package/dist/controllers/workflow-engine-scheduler.d.ts +1 -1
  51. package/dist/controllers/workflow-engine-scheduler.js +3 -5
  52. package/dist/controllers/workflow-engine-scheduler.js.map +1 -1
  53. package/dist/controllers/workflows.d.ts +2 -2
  54. package/dist/controllers/workflows.js +11 -10
  55. package/dist/controllers/workflows.js.map +1 -1
  56. package/dist/extension/controller-host.js +2 -2
  57. package/dist/extension/controller-host.js.map +1 -1
  58. package/dist/extension/decision-channels.d.ts +4 -2
  59. package/dist/extension/decision-channels.js +333 -146
  60. package/dist/extension/decision-channels.js.map +1 -1
  61. package/dist/extension/executor.d.ts +9 -2
  62. package/dist/extension/executor.js +89 -2
  63. package/dist/extension/executor.js.map +1 -1
  64. package/dist/extension/herdr-viewer.d.ts +0 -1
  65. package/dist/extension/herdr-viewer.js +0 -4
  66. package/dist/extension/herdr-viewer.js.map +1 -1
  67. package/dist/extension/index.js +209 -127
  68. package/dist/extension/index.js.map +1 -1
  69. package/dist/extension/recorder.d.ts +3 -10
  70. package/dist/extension/recorder.js +13 -22
  71. package/dist/extension/recorder.js.map +1 -1
  72. package/dist/extension/session-events.d.ts +2 -2
  73. package/dist/extension/step-message.d.ts +7 -2
  74. package/dist/extension/step-message.js +94 -2
  75. package/dist/extension/step-message.js.map +1 -1
  76. package/dist/extension/widget.js +29 -3
  77. package/dist/extension/widget.js.map +1 -1
  78. package/dist/host/rpc-executor.d.ts +3 -0
  79. package/dist/host/rpc-executor.js +2 -0
  80. package/dist/host/rpc-executor.js.map +1 -1
  81. package/dist/host/runner.d.ts +3 -6
  82. package/dist/host/runner.js +83 -32
  83. package/dist/host/runner.js.map +1 -1
  84. package/dist/render/graph-render.js +15 -10
  85. package/dist/render/graph-render.js.map +1 -1
  86. package/dist/state/database.d.ts +35 -0
  87. package/dist/state/database.js +287 -0
  88. package/dist/state/database.js.map +1 -0
  89. package/dist/state/index.d.ts +4 -0
  90. package/dist/state/index.js +5 -0
  91. package/dist/state/index.js.map +1 -0
  92. package/dist/state/json.d.ts +6 -0
  93. package/dist/state/json.js +38 -0
  94. package/dist/state/json.js.map +1 -0
  95. package/dist/state/mutation.d.ts +57 -0
  96. package/dist/state/mutation.js +255 -0
  97. package/dist/state/mutation.js.map +1 -0
  98. package/dist/state/schema.d.ts +6 -0
  99. package/dist/state/schema.js +473 -0
  100. package/dist/state/schema.js.map +1 -0
  101. package/dist/viewer/cli.d.ts +2 -2
  102. package/dist/viewer/cli.js +142 -122
  103. package/dist/viewer/cli.js.map +1 -1
  104. package/dist/viewer/render.d.ts +4 -4
  105. package/dist/viewer/render.js +9 -23
  106. package/dist/viewer/render.js.map +1 -1
  107. package/dist/viewer/session-reducer.d.ts +1 -1
  108. package/dist/viewer/session-reducer.js +1 -1
  109. package/dist/viewer/tui.d.ts +3 -3
  110. package/dist/viewer/tui.js +15 -13
  111. package/dist/viewer/tui.js.map +1 -1
  112. package/dist/viewer/watch.d.ts +2 -5
  113. package/dist/viewer/watch.js +13 -13
  114. package/dist/viewer/watch.js.map +1 -1
  115. package/dist/workflows/catalog.js +7 -2
  116. package/dist/workflows/catalog.js.map +1 -1
  117. package/dist/workflows/composition.js +20 -2
  118. package/dist/workflows/composition.js.map +1 -1
  119. package/dist/workflows/decision-presentation.d.ts +1 -1
  120. package/dist/workflows/decision-presentation.js +51 -38
  121. package/dist/workflows/decision-presentation.js.map +1 -1
  122. package/dist/workflows/definition.d.ts +6 -2
  123. package/dist/workflows/definition.js +17 -0
  124. package/dist/workflows/definition.js.map +1 -1
  125. package/dist/workflows/engine.d.ts +7 -7
  126. package/dist/workflows/engine.js +196 -115
  127. package/dist/workflows/engine.js.map +1 -1
  128. package/dist/workflows/errors.d.ts +16 -3
  129. package/dist/workflows/errors.js +18 -3
  130. package/dist/workflows/errors.js.map +1 -1
  131. package/dist/workflows/human-decision.d.ts +45 -8
  132. package/dist/workflows/human-decision.js +641 -274
  133. package/dist/workflows/human-decision.js.map +1 -1
  134. package/dist/workflows/index.d.ts +5 -6
  135. package/dist/workflows/index.js +4 -5
  136. package/dist/workflows/index.js.map +1 -1
  137. package/dist/workflows/progress.d.ts +1 -0
  138. package/dist/workflows/progress.js +15 -3
  139. package/dist/workflows/progress.js.map +1 -1
  140. package/dist/workflows/schema.js +27 -1
  141. package/dist/workflows/schema.js.map +1 -1
  142. package/dist/workflows/store.d.ts +83 -103
  143. package/dist/workflows/store.js +907 -951
  144. package/dist/workflows/store.js.map +1 -1
  145. package/dist/workflows/types.d.ts +88 -126
  146. package/docs/CONTROLLERS.md +10 -8
  147. package/docs/DEFERRED_TURNS.md +2 -2
  148. package/docs/DESIGN_PHILOSOPHY.md +4 -2
  149. package/docs/HUMAN_DECISIONS.md +36 -47
  150. package/docs/HUMAN_DECISION_PRESENTATIONS.md +14 -24
  151. package/docs/MONITOR.md +179 -237
  152. package/docs/SQLITE_STATE.md +219 -0
  153. package/docs/WORKFLOW_COMPOSITION.md +27 -26
  154. package/docs/WORKFLOW_STEP_MESSAGES.md +20 -18
  155. package/docs/WORKFLOW_UPDATES.md +10 -9
  156. package/docs/development.md +9 -9
  157. package/docs/live-replay-protocol.md +28 -37
  158. package/docs/plans/2026-08-16-workflow-updates-plan.md +1 -1
  159. package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
  160. package/docs/plans/2026-08-21-autoimplement-timeout-fallback-plan.md +1 -1
  161. package/docs/plans/2026-08-21-plan-change-approval-policy-plan.md +322 -0
  162. package/docs/plans/2026-08-21-sanity-check-plan.md +217 -95
  163. package/docs/plans/2026-08-22-goal-finishing-monitor-plan.md +200 -0
  164. package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +701 -0
  165. package/docs/plans/2026-08-23-sqlite-state-plan.md +970 -0
  166. package/docs/plans/replayable-run-bundles-implementation-plan.md +2 -2
  167. package/docs/plans/session-event-replay-implementation-plan.md +1 -1
  168. package/docs/plans/tui-viewer-implementation-plan.md +1 -1
  169. package/docs/session-event-journal.md +63 -434
  170. package/docs/tui-viewer.md +13 -15
  171. package/docs/workflows.md +127 -53
  172. package/examples/workflows/approved-plan.workflow.ts +19 -46
  173. package/examples/workflows/plain-summary.workflow.ts +1 -0
  174. package/herdr-plugin.toml +1 -1
  175. package/package.json +7 -7
  176. package/plugins/herdr/viewer.mjs +1 -11
  177. package/schemas/human-decision-accepted-v1.schema.json +15 -3
  178. package/schemas/human-decision-continuation-v1.schema.json +10 -1
  179. package/schemas/human-decision-delivery-v1.schema.json +8 -0
  180. package/schemas/human-decision-receipt-v1.schema.json +8 -0
  181. package/schemas/human-decision-request-v1.schema.json +24 -4
  182. package/skills/autoimplement/SKILL.md +27 -0
  183. package/skills/autoplan/SKILL.md +5 -4
  184. package/skills/monitor/SKILL.md +91 -135
  185. package/skills/pi-workflows/SKILL.md +9 -8
  186. package/skills/sanity-check/SKILL.md +44 -0
  187. package/src/builtins/autoimplement.workflow.ts +19 -118
  188. package/src/builtins/autoplan.workflow.ts +290 -40
  189. package/src/builtins/catalog.ts +7 -5
  190. package/src/builtins/index.ts +18 -1
  191. package/src/builtins/monitor.workflow.ts +673 -382
  192. package/src/builtins/pi-agent-group.ts +1407 -0
  193. package/src/builtins/plain-summary.workflow.ts +185 -0
  194. package/src/builtins/plan-approval.workflow.ts +157 -24
  195. package/src/builtins/plan-change.workflow.ts +321 -0
  196. package/src/builtins/plan-presentation.ts +2 -2
  197. package/src/builtins/sanity-check.workflow.ts +248 -48
  198. package/src/controllers/effects.ts +7 -0
  199. package/src/controllers/index.ts +0 -6
  200. package/src/controllers/manager.ts +72 -32
  201. package/src/controllers/sqlite.ts +2420 -1948
  202. package/src/controllers/store.ts +17 -38
  203. package/src/controllers/types.ts +3 -0
  204. package/src/controllers/workflow-engine-scheduler.ts +4 -8
  205. package/src/controllers/workflows.ts +45 -21
  206. package/src/extension/controller-host.ts +1 -2
  207. package/src/extension/decision-channels.ts +456 -203
  208. package/src/extension/executor.ts +105 -2
  209. package/src/extension/herdr-viewer.ts +0 -5
  210. package/src/extension/index.ts +251 -151
  211. package/src/extension/recorder.ts +13 -22
  212. package/src/extension/session-events.ts +2 -2
  213. package/src/extension/step-message.ts +106 -4
  214. package/src/extension/widget.ts +32 -5
  215. package/src/host/rpc-executor.ts +4 -0
  216. package/src/host/runner.ts +93 -41
  217. package/src/render/graph-render.ts +12 -6
  218. package/src/state/database.ts +375 -0
  219. package/src/state/index.ts +29 -0
  220. package/src/state/json.ts +42 -0
  221. package/src/state/mutation.ts +435 -0
  222. package/src/state/schema.ts +475 -0
  223. package/src/viewer/cli.ts +151 -144
  224. package/src/viewer/render.ts +19 -30
  225. package/src/viewer/session-reducer.ts +1 -1
  226. package/src/viewer/tui.ts +18 -17
  227. package/src/viewer/watch.ts +13 -17
  228. package/src/workflows/catalog.ts +7 -2
  229. package/src/workflows/composition.ts +21 -3
  230. package/src/workflows/decision-presentation.ts +56 -43
  231. package/src/workflows/definition.ts +36 -3
  232. package/src/workflows/engine.ts +228 -130
  233. package/src/workflows/errors.ts +27 -3
  234. package/src/workflows/human-decision.ts +921 -349
  235. package/src/workflows/index.ts +20 -30
  236. package/src/workflows/progress.ts +18 -3
  237. package/src/workflows/schema.ts +36 -1
  238. package/src/workflows/store.ts +1300 -1163
  239. package/src/workflows/types.ts +100 -137
  240. package/dist/builtins/sanity-check-session.d.ts +0 -17
  241. package/dist/builtins/sanity-check-session.js +0 -168
  242. package/dist/builtins/sanity-check-session.js.map +0 -1
  243. package/dist/workflows/artifacts.d.ts +0 -40
  244. package/dist/workflows/artifacts.js +0 -155
  245. package/dist/workflows/artifacts.js.map +0 -1
  246. package/dist/workflows/migrate-sources.d.ts +0 -42
  247. package/dist/workflows/migrate-sources.js +0 -133
  248. package/dist/workflows/migrate-sources.js.map +0 -1
  249. package/docs/run-bundles.md +0 -481
  250. package/schemas/human-decision-accepted-v2.schema.json +0 -50
  251. package/schemas/human-decision-delivery-v2.schema.json +0 -36
  252. package/schemas/human-decision-receipt-v2.schema.json +0 -39
  253. package/schemas/human-decision-request-v2.schema.json +0 -69
  254. package/schemas/human-decision-resolution-v2.schema.json +0 -27
  255. package/src/builtins/sanity-check-session.ts +0 -205
  256. package/src/workflows/artifacts.ts +0 -188
  257. package/src/workflows/migrate-sources.ts +0 -178
@@ -1,3 +1,5 @@
1
+ import { createHash } from "node:crypto";
2
+ import type { AssistantMessage } from "@earendil-works/pi-ai";
1
3
  import type {
2
4
  AgentStepExecutor,
3
5
  AgentStepRequest,
@@ -27,6 +29,7 @@ export type PromptDelivery = {
27
29
  */
28
30
  export type ConversationHooks = {
29
31
  beginAttempt?: (contract: AgentStepRequest["contract"]) => void;
32
+ recoverAssistant?: (contract: AgentStepRequest["contract"]) => AgentStepSubmission | undefined;
30
33
  mark: () => number;
31
34
  rangeSince: (mark: number) => ConversationRange | undefined;
32
35
  };
@@ -49,6 +52,8 @@ type PendingStep = {
49
52
  nudgesSent: number;
50
53
  /** Conversation mark taken when the prompt was first delivered. */
51
54
  mark: number | null;
55
+ /** Latest finalized assistant message observed for this attempt. */
56
+ assistantMessage?: AssistantMessage;
52
57
  cleanup: () => void;
53
58
  /** Resolves when this step stops being the pending step. */
54
59
  cleared: Promise<void>;
@@ -65,6 +70,7 @@ const DEFAULT_MAX_NUDGES = 2;
65
70
  * bounded number of times before failing the step.
66
71
  */
67
72
  export class ConversationStepExecutor implements AgentStepExecutor {
73
+ readonly assistantMessageMode = "visible" as const;
68
74
  private readonly sendPrompt: (delivery: PromptDelivery) => void;
69
75
  private readonly maxNudges: number;
70
76
  private readonly conversation: ConversationHooks | undefined;
@@ -89,6 +95,10 @@ export class ConversationStepExecutor implements AgentStepExecutor {
89
95
  return this.pending?.request.contract.nodeId ?? null;
90
96
  }
91
97
 
98
+ get pendingCompletion(): "submit" | "assistant" | null {
99
+ return this.pending === null ? null : completionKind(this.pending.request);
100
+ }
101
+
92
102
  /**
93
103
  * Hold the pending step for the user: no nudges are sent while held, so an
94
104
  * escape-interrupted conversation stays quiet until the user resumes.
@@ -127,6 +137,12 @@ export class ConversationStepExecutor implements AgentStepExecutor {
127
137
  if (this.pending) {
128
138
  throw new Error("Another workflow step is already awaiting output");
129
139
  }
140
+ if (completionKind(request) === "assistant") {
141
+ const recovered = this.conversation?.recoverAssistant?.(request.contract);
142
+ if (recovered !== undefined) {
143
+ return recovered;
144
+ }
145
+ }
130
146
  return await new Promise<AgentStepSubmission>((resolve, reject) => {
131
147
  const onAbort = () => {
132
148
  const reason: unknown = signal.reason ?? new Error("Workflow step aborted");
@@ -199,6 +215,13 @@ export class ConversationStepExecutor implements AgentStepExecutor {
199
215
  )}; the pending attempt is ${JSON.stringify(expectedAttempt)}. Use the attempt id from the latest step contract.`,
200
216
  };
201
217
  }
218
+ if (completionKind(pending.request) === "assistant") {
219
+ return {
220
+ accepted: false,
221
+ message:
222
+ "This step completes with a normal assistant response. Do not submit workflow output.",
223
+ };
224
+ }
202
225
  // Race validation against the step being cleared: a hung `validate`
203
226
  // callback must not leave this tool call (and therefore pi) blocked after
204
227
  // a timeout or cancel already resolved the run.
@@ -237,10 +260,22 @@ export class ConversationStepExecutor implements AgentStepExecutor {
237
260
  };
238
261
  }
239
262
 
263
+ /** Keep the latest finalized assistant message for an assistant-output step. */
264
+ handleMessageEnd(message: unknown): void {
265
+ const pending = this.pending;
266
+ if (pending === null || completionKind(pending.request) !== "assistant") {
267
+ return;
268
+ }
269
+ const assistant = assistantMessageLike(message);
270
+ if (assistant !== undefined) {
271
+ pending.assistantMessage = assistant as AssistantMessage;
272
+ }
273
+ }
274
+
240
275
  /**
241
276
  * Called when the agent settles. Returns true when a nudge was sent, false
242
- * when there was nothing to do. Fails the pending step once the nudge
243
- * budget is exhausted.
277
+ * when there was nothing to do. Submitted steps use bounded nudges;
278
+ * assistant-output steps accept or fail the one visible response.
244
279
  */
245
280
  handleAgentSettled(): boolean {
246
281
  const pending = this.pending;
@@ -252,6 +287,33 @@ export class ConversationStepExecutor implements AgentStepExecutor {
252
287
  // steal the conversation back. The step waits for an explicit resume.
253
288
  return false;
254
289
  }
290
+ if (completionKind(pending.request) === "assistant") {
291
+ try {
292
+ const output = visibleAssistantText(
293
+ pending.assistantMessage,
294
+ pending.request.contract.maxOutputChars,
295
+ );
296
+ const conversation =
297
+ pending.mark !== null ? this.conversation?.rangeSince(pending.mark) : undefined;
298
+ const assistantMessage = {
299
+ sha256: createHash("sha256").update(output).digest("hex"),
300
+ ...(conversation?.lastEntryId !== undefined ? { entryId: conversation.lastEntryId } : {}),
301
+ ...(pending.request.contract.maxOutputChars !== undefined
302
+ ? { maxChars: pending.request.contract.maxOutputChars }
303
+ : {}),
304
+ };
305
+ this.clearPending();
306
+ pending.resolve({
307
+ output,
308
+ assistantMessage,
309
+ ...(conversation !== undefined ? { conversation } : {}),
310
+ });
311
+ } catch (error) {
312
+ this.clearPending();
313
+ pending.reject(error);
314
+ }
315
+ return false;
316
+ }
255
317
  if (pending.nudgesSent >= this.maxNudges) {
256
318
  this.clearPending();
257
319
  pending.reject(
@@ -309,3 +371,44 @@ export class ConversationStepExecutor implements AgentStepExecutor {
309
371
  this.pending = null;
310
372
  }
311
373
  }
374
+
375
+ function completionKind(request: AgentStepRequest): "submit" | "assistant" {
376
+ return request.contract.completion;
377
+ }
378
+
379
+ function assistantMessageLike(
380
+ message: unknown,
381
+ ): Pick<AssistantMessage, "role" | "content" | "stopReason" | "errorMessage"> | undefined {
382
+ if (message === null || typeof message !== "object") return undefined;
383
+ const candidate = message as Partial<AssistantMessage>;
384
+ if (candidate.role !== "assistant" || !Array.isArray(candidate.content)) return undefined;
385
+ if (typeof candidate.stopReason !== "string") return undefined;
386
+ return candidate as Pick<AssistantMessage, "role" | "content" | "stopReason" | "errorMessage">;
387
+ }
388
+
389
+ /** Extract the exact visible text blocks from one finalized assistant message. */
390
+ export function visibleAssistantText(message: unknown, maxChars?: number): string {
391
+ const assistant = assistantMessageLike(message);
392
+ if (assistant === undefined) {
393
+ throw new Error("Assistant step settled without a final assistant message");
394
+ }
395
+ if (assistant.stopReason !== "stop" && assistant.stopReason !== "length") {
396
+ throw new Error(
397
+ assistant.errorMessage?.trim() ||
398
+ `Assistant step stopped with ${JSON.stringify(assistant.stopReason)} before a final response`,
399
+ );
400
+ }
401
+ const text = assistant.content
402
+ .filter((part) => part.type === "text")
403
+ .map((part) => part.text)
404
+ .join("\n");
405
+ if (text.trim().length === 0) {
406
+ throw new Error("Assistant step returned no visible text");
407
+ }
408
+ if (maxChars !== undefined && text.length > maxChars) {
409
+ throw new Error(
410
+ `Assistant response has ${text.length} characters, above the configured limit of ${maxChars}`,
411
+ );
412
+ }
413
+ return text;
414
+ }
@@ -14,7 +14,6 @@ export type ViewerPlacement = (typeof VIEWER_PLACEMENTS)[number];
14
14
  export type WorkflowViewTarget = {
15
15
  runId: string;
16
16
  workflowName: string;
17
- runDir: string;
18
17
  };
19
18
 
20
19
  export type HerdrCapability = { available: true } | { available: false; reason: string };
@@ -178,8 +177,6 @@ export class HerdrWorkflowViewer {
178
177
  HERDR_PLUGIN_ENTRYPOINT,
179
178
  "--env",
180
179
  `PI_WORKFLOWS_RUN_ID=${target.runId}`,
181
- "--env",
182
- `PI_WORKFLOWS_RUN_DIR=${target.runDir}`,
183
180
  "--focus",
184
181
  ];
185
182
  if (placement === "tab") {
@@ -229,8 +226,6 @@ export class HerdrWorkflowViewer {
229
226
  created.workspaceId,
230
227
  "--env",
231
228
  `PI_WORKFLOWS_RUN_ID=${target.runId}`,
232
- "--env",
233
- `PI_WORKFLOWS_RUN_DIR=${target.runDir}`,
234
229
  "--focus",
235
230
  ]),
236
231
  );