@bastani/atomic 0.8.1 → 0.8.2-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 (149) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/builtin/intercom/config.ts +3 -4
  3. package/dist/builtin/intercom/index.ts +6 -6
  4. package/dist/builtin/intercom/package.json +1 -1
  5. package/dist/builtin/mcp/agent-dir.ts +11 -2
  6. package/dist/builtin/mcp/cli.js +12 -6
  7. package/dist/builtin/mcp/config.ts +31 -22
  8. package/dist/builtin/mcp/package.json +1 -1
  9. package/dist/builtin/subagents/package.json +1 -1
  10. package/dist/builtin/subagents/src/agents/agents.ts +63 -23
  11. package/dist/builtin/subagents/src/agents/skills.ts +21 -21
  12. package/dist/builtin/subagents/src/extension/index.ts +9 -8
  13. package/dist/builtin/subagents/src/runs/shared/run-history.ts +13 -10
  14. package/dist/builtin/subagents/src/runs/shared/subagent-prompt-runtime.ts +3 -3
  15. package/dist/builtin/subagents/src/shared/artifacts.ts +18 -17
  16. package/dist/builtin/subagents/src/shared/types.ts +4 -4
  17. package/dist/builtin/web-access/config-paths.ts +11 -0
  18. package/dist/builtin/web-access/exa.ts +3 -2
  19. package/dist/builtin/web-access/gemini-api.ts +2 -1
  20. package/dist/builtin/web-access/gemini-search.ts +2 -1
  21. package/dist/builtin/web-access/gemini-web-config.ts +2 -1
  22. package/dist/builtin/web-access/github-extract.ts +2 -1
  23. package/dist/builtin/web-access/index.ts +11 -8
  24. package/dist/builtin/web-access/package.json +1 -1
  25. package/dist/builtin/web-access/perplexity.ts +2 -1
  26. package/dist/builtin/web-access/video-extract.ts +2 -1
  27. package/dist/builtin/web-access/youtube-extract.ts +2 -1
  28. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +4 -0
  29. package/dist/builtin/workflows/builtin/open-claude-design.ts +39 -22
  30. package/dist/builtin/workflows/builtin/ralph.ts +7 -0
  31. package/dist/builtin/workflows/package.json +1 -1
  32. package/dist/builtin/workflows/skills/workflow/SKILL.md +28 -20
  33. package/dist/builtin/workflows/skills/workflow/references/design-checklist.md +8 -4
  34. package/dist/builtin/workflows/skills/workflow/references/running-workflows.md +52 -23
  35. package/dist/builtin/workflows/skills/workflow/references/sdk-authoring.md +41 -12
  36. package/dist/builtin/workflows/src/extension/config-loader.ts +13 -14
  37. package/dist/builtin/workflows/src/extension/discovery.ts +4 -6
  38. package/dist/builtin/workflows/src/extension/index.ts +675 -524
  39. package/dist/builtin/workflows/src/extension/runtime.ts +40 -16
  40. package/dist/builtin/workflows/src/extension/wiring.ts +3 -0
  41. package/dist/builtin/workflows/src/extension/workflow-schema.ts +43 -33
  42. package/dist/builtin/workflows/src/runs/foreground/executor.ts +34 -10
  43. package/dist/builtin/workflows/src/shared/types.ts +1 -5
  44. package/dist/builtin/workflows/src/tui/graph-view.ts +245 -75
  45. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +23 -0
  46. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +259 -149
  47. package/dist/builtin/workflows/src/tui/status-helpers.ts +3 -3
  48. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +99 -10
  49. package/dist/builtin/workflows/src/tui/switcher.ts +4 -5
  50. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +29 -0
  51. package/dist/cli/args.d.ts.map +1 -1
  52. package/dist/cli/args.js +11 -8
  53. package/dist/cli/args.js.map +1 -1
  54. package/dist/config.d.ts +21 -0
  55. package/dist/config.d.ts.map +1 -1
  56. package/dist/config.js +59 -4
  57. package/dist/config.js.map +1 -1
  58. package/dist/core/agent-session.d.ts +1 -1
  59. package/dist/core/agent-session.d.ts.map +1 -1
  60. package/dist/core/agent-session.js +2 -2
  61. package/dist/core/agent-session.js.map +1 -1
  62. package/dist/core/auth-storage.d.ts +3 -1
  63. package/dist/core/auth-storage.d.ts.map +1 -1
  64. package/dist/core/auth-storage.js +31 -8
  65. package/dist/core/auth-storage.js.map +1 -1
  66. package/dist/core/extensions/runner.d.ts.map +1 -1
  67. package/dist/core/extensions/runner.js +9 -0
  68. package/dist/core/extensions/runner.js.map +1 -1
  69. package/dist/core/extensions/types.d.ts +11 -0
  70. package/dist/core/extensions/types.d.ts.map +1 -1
  71. package/dist/core/extensions/types.js.map +1 -1
  72. package/dist/core/model-registry.d.ts +3 -2
  73. package/dist/core/model-registry.d.ts.map +1 -1
  74. package/dist/core/model-registry.js +25 -8
  75. package/dist/core/model-registry.js.map +1 -1
  76. package/dist/core/package-manager.d.ts +3 -0
  77. package/dist/core/package-manager.d.ts.map +1 -1
  78. package/dist/core/package-manager.js +97 -58
  79. package/dist/core/package-manager.js.map +1 -1
  80. package/dist/core/resource-loader.d.ts +1 -0
  81. package/dist/core/resource-loader.d.ts.map +1 -1
  82. package/dist/core/resource-loader.js +37 -36
  83. package/dist/core/resource-loader.js.map +1 -1
  84. package/dist/core/sdk.d.ts +5 -4
  85. package/dist/core/sdk.d.ts.map +1 -1
  86. package/dist/core/sdk.js +2 -2
  87. package/dist/core/sdk.js.map +1 -1
  88. package/dist/core/settings-manager.d.ts +7 -1
  89. package/dist/core/settings-manager.d.ts.map +1 -1
  90. package/dist/core/settings-manager.js +29 -8
  91. package/dist/core/settings-manager.js.map +1 -1
  92. package/dist/core/system-prompt.d.ts +1 -1
  93. package/dist/core/system-prompt.d.ts.map +1 -1
  94. package/dist/core/system-prompt.js.map +1 -1
  95. package/dist/core/telemetry.d.ts.map +1 -1
  96. package/dist/core/telemetry.js +2 -2
  97. package/dist/core/telemetry.js.map +1 -1
  98. package/dist/core/timings.d.ts.map +1 -1
  99. package/dist/core/timings.js +2 -2
  100. package/dist/core/timings.js.map +1 -1
  101. package/dist/core/tools/index.d.ts +1 -0
  102. package/dist/core/tools/index.d.ts.map +1 -1
  103. package/dist/core/tools/index.js +8 -0
  104. package/dist/core/tools/index.js.map +1 -1
  105. package/dist/core/tools/todos.d.ts.map +1 -1
  106. package/dist/core/tools/todos.js +3 -3
  107. package/dist/core/tools/todos.js.map +1 -1
  108. package/dist/index.d.ts +2 -2
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +2 -2
  111. package/dist/index.js.map +1 -1
  112. package/dist/main.d.ts.map +1 -1
  113. package/dist/main.js +6 -6
  114. package/dist/main.js.map +1 -1
  115. package/dist/modes/interactive/components/atomic-banner.d.ts +4 -0
  116. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -0
  117. package/dist/modes/interactive/components/atomic-banner.js +34 -0
  118. package/dist/modes/interactive/components/atomic-banner.js.map +1 -0
  119. package/dist/modes/interactive/components/chat-message-renderer.d.ts +99 -0
  120. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -0
  121. package/dist/modes/interactive/components/chat-message-renderer.js +450 -0
  122. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -0
  123. package/dist/modes/interactive/components/chat-transcript.d.ts +69 -0
  124. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -0
  125. package/dist/modes/interactive/components/chat-transcript.js +183 -0
  126. package/dist/modes/interactive/components/chat-transcript.js.map +1 -0
  127. package/dist/modes/interactive/components/footer.d.ts +16 -4
  128. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  129. package/dist/modes/interactive/components/footer.js +110 -137
  130. package/dist/modes/interactive/components/footer.js.map +1 -1
  131. package/dist/modes/interactive/components/index.d.ts +2 -0
  132. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  133. package/dist/modes/interactive/components/index.js +2 -0
  134. package/dist/modes/interactive/components/index.js.map +1 -1
  135. package/dist/modes/interactive/interactive-mode.d.ts +9 -0
  136. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  137. package/dist/modes/interactive/interactive-mode.js +192 -137
  138. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  139. package/dist/modes/interactive/theme/catppuccin-mocha.json +5 -5
  140. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  141. package/dist/modes/rpc/rpc-mode.js +11 -0
  142. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  143. package/dist/utils/tools-manager.d.ts.map +1 -1
  144. package/dist/utils/tools-manager.js +2 -2
  145. package/dist/utils/tools-manager.js.map +1 -1
  146. package/dist/utils/version-check.d.ts.map +1 -1
  147. package/dist/utils/version-check.js +2 -2
  148. package/dist/utils/version-check.js.map +1 -1
  149. package/package.json +1 -1
@@ -153,23 +153,47 @@ export function createExtensionRuntime(opts: ExtensionRuntimeOpts = {}): Extensi
153
153
  };
154
154
  }
155
155
 
156
+ function withoutUndefinedProperties<T extends object>(value: T): Partial<T> {
157
+ return Object.fromEntries(
158
+ Object.entries(value).filter(([, field]) => field !== undefined),
159
+ ) as Partial<T>;
160
+ }
161
+
156
162
  function directOptions(args: WorkflowToolArgs): WorkflowDirectOptions {
163
+ const {
164
+ workflow: _workflow,
165
+ inputs: _inputs,
166
+ action: _action,
167
+ runId: _runId,
168
+ task,
169
+ tasks: _tasks,
170
+ chain: _chain,
171
+ chainName,
172
+ concurrency,
173
+ async: _async,
174
+ intercom: _intercom,
175
+ output,
176
+ outputMode,
177
+ chainDir,
178
+ maxOutput,
179
+ artifacts,
180
+ progress,
181
+ worktree,
182
+ ...stageOptions
183
+ } = args;
184
+
157
185
  return {
158
- ...(typeof args.task === "string" ? { task: args.task } : {}),
159
- ...(typeof args.chainName === "string" ? { chainName: args.chainName } : {}),
160
- ...(args.context !== undefined ? { context: args.context } : {}),
161
- ...(typeof args.forkFromSessionFile === "string" ? { forkFromSessionFile: args.forkFromSessionFile } : {}),
162
- ...(typeof args.concurrency === "number" ? { concurrency: args.concurrency } : {}),
163
- ...(typeof args.chainDir === "string" ? { chainDir: args.chainDir } : {}),
164
- ...(typeof args.cwd === "string" ? { cwd: args.cwd } : {}),
165
- ...(args.output !== undefined ? { output: args.output } : {}),
166
- ...(args.outputMode !== undefined ? { outputMode: args.outputMode } : {}),
167
- ...(args.maxOutput !== undefined ? { maxOutput: args.maxOutput } : {}),
168
- ...(typeof args.artifacts === "boolean" ? { artifacts: args.artifacts } : {}),
169
- ...(typeof args.sessionDir === "string" ? { sessionDir: args.sessionDir } : {}),
170
- ...(typeof args.progress === "boolean" ? { progress: args.progress } : {}),
171
- ...(typeof args.worktree === "boolean" ? { worktree: args.worktree } : {}),
172
- ...(Array.isArray(args.fallbackModels) ? { fallbackModels: args.fallbackModels } : {}),
186
+ ...withoutUndefinedProperties(stageOptions),
187
+ ...(typeof task === "string" ? { task } : {}),
188
+ ...(typeof chainName === "string" ? { chainName } : {}),
189
+ ...(typeof concurrency === "number" ? { concurrency } : {}),
190
+ ...(typeof chainDir === "string" ? { chainDir } : {}),
191
+ ...(output !== undefined ? { output } : {}),
192
+ ...(outputMode !== undefined ? { outputMode } : {}),
193
+ ...(maxOutput !== undefined ? { maxOutput } : {}),
194
+ ...(typeof artifacts === "boolean" ? { artifacts } : {}),
195
+ ...(typeof progress === "boolean" ? { progress } : {}),
196
+ ...(typeof worktree === "boolean" ? { worktree } : {}),
173
197
  };
174
198
  }
175
199
 
@@ -182,7 +206,7 @@ export function createExtensionRuntime(opts: ExtensionRuntimeOpts = {}): Extensi
182
206
  function directModelRequests(args: WorkflowToolArgs): Array<{ readonly model?: WorkflowDirectTaskItem["model"]; readonly fallbackModels?: readonly string[] }> {
183
207
  const options = directOptions(args);
184
208
  const withFallbackDefault = (item: WorkflowDirectTaskItem) => ({
185
- model: item.model,
209
+ model: item.model ?? options.model,
186
210
  fallbackModels: item.fallbackModels ?? options.fallbackModels,
187
211
  });
188
212
  if (args.task !== undefined && typeof args.task === "object") return [withFallbackDefault(args.task)];
@@ -22,6 +22,7 @@
22
22
  */
23
23
 
24
24
  import type { CreateAgentSessionOptions } from "@earendil-works/pi-coding-agent";
25
+ import type { ChatMessageRenderOptions } from "@bastani/atomic";
25
26
  import type { StageAdapters, StageSessionRuntime } from "../runs/foreground/stage-runner.js";
26
27
  import type { StageExecutionMeta, StageOptions } from "../shared/types.js";
27
28
 
@@ -233,6 +234,7 @@ function makeStageExtensionUiContext(ui: PiUISurface) {
233
234
  setTheme: ui.setTheme ?? (() => ({ success: false, error: "pi-workflows: theme UI is unavailable" })),
234
235
  getToolsExpanded: ui.getToolsExpanded ?? (() => false),
235
236
  setToolsExpanded: ui.setToolsExpanded ?? (() => undefined),
237
+ getChatRenderSettings: ui.getChatRenderSettings ?? (() => undefined),
236
238
  };
237
239
  }
238
240
 
@@ -539,6 +541,7 @@ export interface PiUISurface {
539
541
  setTheme?: (theme: string | unknown) => { success: boolean; error?: string };
540
542
  getToolsExpanded?: () => boolean;
541
543
  setToolsExpanded?: (expanded: boolean) => void;
544
+ getChatRenderSettings?: () => Partial<Omit<ChatMessageRenderOptions, "ui" | "cwd" | "markdownTheme">> | undefined;
542
545
  }
543
546
 
544
547
  /**
@@ -17,33 +17,54 @@ const IntercomOptionsSchema = Type.Object({
17
17
  ]))),
18
18
  });
19
19
 
20
- const DirectTaskSchema = Type.Object({
21
- name: Type.String({ description: "Task/stage label." }),
22
- prompt: Type.Optional(Type.String({ description: "Prompt text for this task." })),
23
- task: Type.Optional(Type.String({ description: "Task text for this task." })),
24
- context: Type.Optional(Type.Union([Type.Literal("fresh"), Type.Literal("fork")])),
20
+ const MaxOutputSchema = Type.Object({
21
+ bytes: Type.Optional(Type.Number()),
22
+ lines: Type.Optional(Type.Number()),
23
+ });
24
+
25
+ const McpOptionsSchema = Type.Object({
26
+ allow: Type.Optional(Type.Array(Type.String())),
27
+ deny: Type.Optional(Type.Array(Type.String())),
28
+ });
29
+
30
+ const StageSessionOptionProperties = {
25
31
  cwd: Type.Optional(Type.String()),
32
+ agentDir: Type.Optional(Type.String()),
33
+ authStorage: Type.Optional(Type.Any()),
34
+ modelRegistry: Type.Optional(Type.Any()),
35
+ model: Type.Optional(Type.Any()),
36
+ thinkingLevel: Type.Optional(Type.String()),
37
+ scopedModels: Type.Optional(Type.Array(Type.Any())),
38
+ noTools: Type.Optional(Type.Union([Type.Literal("all"), Type.Literal("builtin")])),
39
+ tools: Type.Optional(Type.Array(Type.String())),
40
+ customTools: Type.Optional(Type.Array(Type.Any())),
41
+ resourceLoader: Type.Optional(Type.Any()),
42
+ sessionManager: Type.Optional(Type.Any()),
43
+ settingsManager: Type.Optional(Type.Any()),
44
+ sessionStartEvent: Type.Optional(Type.Any()),
45
+ fallbackModels: Type.Optional(Type.Array(Type.String())),
46
+ mcp: Type.Optional(McpOptionsSchema),
47
+ sessionDir: Type.Optional(Type.String()),
48
+ context: Type.Optional(Type.Union([Type.Literal("fresh"), Type.Literal("fork")])),
49
+ forkFromSessionFile: Type.Optional(Type.String()),
50
+ };
51
+
52
+ const WorkflowTaskOptionProperties = {
26
53
  output: Type.Optional(Type.Union([Type.String(), Type.Literal(false)])),
27
54
  outputMode: Type.Optional(Type.Union([Type.Literal("inline"), Type.Literal("file-only")])),
28
55
  reads: Type.Optional(Type.Union([Type.Array(Type.String()), Type.Literal(false)])),
29
56
  progress: Type.Optional(Type.Boolean()),
30
57
  worktree: Type.Optional(Type.Boolean()),
31
- maxOutput: Type.Optional(Type.Object({
32
- bytes: Type.Optional(Type.Number()),
33
- lines: Type.Optional(Type.Number()),
34
- })),
58
+ maxOutput: Type.Optional(MaxOutputSchema),
35
59
  artifacts: Type.Optional(Type.Boolean()),
36
- sessionDir: Type.Optional(Type.String()),
37
- model: Type.Optional(Type.Any()),
38
- fallbackModels: Type.Optional(Type.Array(Type.String())),
39
- tools: Type.Optional(Type.Any()),
40
- toolNames: Type.Optional(Type.Array(Type.String())),
41
- noTools: Type.Optional(Type.Any()),
42
- thinkingLevel: Type.Optional(Type.String()),
43
- mcp: Type.Optional(Type.Object({
44
- allow: Type.Optional(Type.Array(Type.String())),
45
- deny: Type.Optional(Type.Array(Type.String())),
46
- })),
60
+ };
61
+
62
+ const DirectTaskSchema = Type.Object({
63
+ name: Type.String({ description: "Task/stage label." }),
64
+ prompt: Type.Optional(Type.String({ description: "Prompt text for this task." })),
65
+ task: Type.Optional(Type.String({ description: "Task text for this task." })),
66
+ ...StageSessionOptionProperties,
67
+ ...WorkflowTaskOptionProperties,
47
68
  });
48
69
 
49
70
  const ParallelChainStepSchema = Type.Object({
@@ -83,20 +104,9 @@ export const WorkflowParametersSchema = Type.Object({
83
104
  concurrency: Type.Optional(Type.Number()),
84
105
  async: Type.Optional(Type.Boolean()),
85
106
  intercom: Type.Optional(IntercomOptionsSchema),
86
- context: Type.Optional(Type.Union([Type.Literal("fresh"), Type.Literal("fork")])),
87
- cwd: Type.Optional(Type.String()),
88
- output: Type.Optional(Type.Union([Type.String(), Type.Literal(false)])),
89
- outputMode: Type.Optional(Type.Union([Type.Literal("inline"), Type.Literal("file-only")])),
107
+ ...StageSessionOptionProperties,
108
+ ...WorkflowTaskOptionProperties,
90
109
  chainDir: Type.Optional(Type.String()),
91
- maxOutput: Type.Optional(Type.Object({
92
- bytes: Type.Optional(Type.Number()),
93
- lines: Type.Optional(Type.Number()),
94
- })),
95
- artifacts: Type.Optional(Type.Boolean()),
96
- sessionDir: Type.Optional(Type.String()),
97
- progress: Type.Optional(Type.Boolean()),
98
- worktree: Type.Optional(Type.Boolean()),
99
- fallbackModels: Type.Optional(Type.Array(Type.String())),
100
110
  });
101
111
 
102
112
  export type WorkflowParameters = Static<typeof WorkflowParametersSchema>;
@@ -376,21 +376,45 @@ function truncateTaskOutput(text: string, maxOutput: WorkflowMaxOutput | undefin
376
376
  return `${byBytes.text}\n\n[workflow output truncated; limits: ${limits.bytes} bytes, ${limits.lines} lines]`;
377
377
  }
378
378
 
379
+ function withoutUndefinedProperties<T extends object>(value: T): Partial<T> {
380
+ return Object.fromEntries(
381
+ Object.entries(value).filter(([, field]) => field !== undefined),
382
+ ) as Partial<T>;
383
+ }
384
+
379
385
  function directTaskWithDefaults(
380
386
  item: WorkflowDirectTaskItem,
381
387
  options: WorkflowDirectOptions,
382
388
  ): WorkflowDirectTaskItem {
389
+ const {
390
+ task: _task,
391
+ chainName: _chainName,
392
+ concurrency: _concurrency,
393
+ failFast: _failFast,
394
+ chainDir: _chainDir,
395
+ output,
396
+ outputMode,
397
+ progress,
398
+ worktree,
399
+ maxOutput,
400
+ artifacts,
401
+ ...stageDefaults
402
+ } = options;
403
+
404
+ const taskWithStageDefaults = {
405
+ ...withoutUndefinedProperties(stageDefaults),
406
+ ...withoutUndefinedProperties(item),
407
+ name: item.name,
408
+ } as WorkflowDirectTaskItem;
409
+
383
410
  return {
384
- ...item,
385
- ...(item.context === undefined && options.context !== undefined ? { context: options.context } : {}),
386
- ...(item.forkFromSessionFile === undefined && options.forkFromSessionFile !== undefined ? { forkFromSessionFile: options.forkFromSessionFile } : {}),
387
- ...(item.cwd === undefined && options.cwd !== undefined ? { cwd: options.cwd } : {}),
388
- ...(item.output === undefined && options.output !== undefined ? { output: options.output } : {}),
389
- ...(item.outputMode === undefined && options.outputMode !== undefined ? { outputMode: options.outputMode } : {}),
390
- ...(item.maxOutput === undefined && options.maxOutput !== undefined ? { maxOutput: options.maxOutput } : {}),
391
- ...(item.artifacts === undefined && options.artifacts !== undefined ? { artifacts: options.artifacts } : {}),
392
- ...(item.sessionDir === undefined && options.sessionDir !== undefined ? { sessionDir: options.sessionDir } : {}),
393
- ...(item.fallbackModels === undefined && options.fallbackModels !== undefined ? { fallbackModels: options.fallbackModels } : {}),
411
+ ...taskWithStageDefaults,
412
+ ...(item.output === undefined && output !== undefined ? { output } : {}),
413
+ ...(item.outputMode === undefined && outputMode !== undefined ? { outputMode } : {}),
414
+ ...(item.progress === undefined && progress !== undefined ? { progress } : {}),
415
+ ...(item.worktree === undefined && worktree !== undefined ? { worktree } : {}),
416
+ ...(item.maxOutput === undefined && maxOutput !== undefined ? { maxOutput } : {}),
417
+ ...(item.artifacts === undefined && artifacts !== undefined ? { artifacts } : {}),
394
418
  };
395
419
  }
396
420
 
@@ -405,24 +405,20 @@ export interface WorkflowParallelChainStep {
405
405
 
406
406
  export type WorkflowChainStep = WorkflowDirectTaskItem | WorkflowParallelChainStep;
407
407
 
408
- export interface WorkflowDirectOptions extends WorkflowModelFallbackFields {
408
+ export interface WorkflowDirectOptions extends StageOptions {
409
409
  /** Shared/root task used for `{task}` in direct parallel or chain steps. */
410
410
  task?: string;
411
411
  /** Optional named chain identifier for status/artifact grouping. */
412
412
  chainName?: string;
413
- context?: "fresh" | "fork";
414
- forkFromSessionFile?: string;
415
413
  concurrency?: number;
416
414
  failFast?: boolean;
417
415
  chainDir?: string;
418
- cwd?: string;
419
416
  output?: string | false;
420
417
  outputMode?: WorkflowOutputMode;
421
418
  progress?: boolean;
422
419
  worktree?: boolean;
423
420
  maxOutput?: WorkflowMaxOutput;
424
421
  artifacts?: boolean;
425
- sessionDir?: string;
426
422
  }
427
423
 
428
424
  // ---------------------------------------------------------------------------