@bastani/atomic 0.9.0-alpha.1 → 0.9.0-alpha.2

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 (211) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/builtin/cursor/CHANGELOG.md +6 -0
  3. package/dist/builtin/cursor/package.json +2 -2
  4. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  5. package/dist/builtin/intercom/package.json +2 -2
  6. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  7. package/dist/builtin/mcp/package.json +3 -3
  8. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  9. package/dist/builtin/subagents/package.json +4 -4
  10. package/dist/builtin/web-access/CHANGELOG.md +6 -0
  11. package/dist/builtin/web-access/package.json +2 -2
  12. package/dist/builtin/workflows/CHANGELOG.md +12 -0
  13. package/dist/builtin/workflows/README.md +189 -122
  14. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +30 -27
  15. package/dist/builtin/workflows/builtin/goal-runner.ts +10 -17
  16. package/dist/builtin/workflows/builtin/goal.ts +39 -44
  17. package/dist/builtin/workflows/builtin/index.d.ts +1 -0
  18. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +16 -17
  19. package/dist/builtin/workflows/builtin/open-claude-design.d.ts +1 -0
  20. package/dist/builtin/workflows/builtin/open-claude-design.ts +42 -50
  21. package/dist/builtin/workflows/builtin/ralph.ts +44 -41
  22. package/dist/builtin/workflows/package.json +2 -2
  23. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
  24. package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +217 -0
  25. package/dist/builtin/workflows/src/authoring/workflow.ts +184 -0
  26. package/dist/builtin/workflows/src/authoring.d.ts +14 -66
  27. package/dist/builtin/workflows/src/engine/graph-inference.ts +100 -0
  28. package/dist/builtin/workflows/src/engine/options.ts +40 -0
  29. package/dist/builtin/workflows/src/engine/primitives/chain.ts +29 -0
  30. package/dist/builtin/workflows/src/engine/primitives/exit.ts +2 -0
  31. package/dist/builtin/workflows/src/engine/primitives/parallel.ts +47 -0
  32. package/dist/builtin/workflows/src/engine/primitives/task.ts +108 -0
  33. package/dist/builtin/workflows/src/engine/primitives/ui.ts +41 -0
  34. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +159 -0
  35. package/dist/builtin/workflows/src/engine/replay.ts +8 -0
  36. package/dist/builtin/workflows/src/engine/run.ts +356 -0
  37. package/dist/builtin/workflows/src/engine/runtime.ts +160 -0
  38. package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +9 -3
  39. package/dist/builtin/workflows/src/extension/workflow-schema.ts +0 -18
  40. package/dist/builtin/workflows/src/index.ts +0 -2
  41. package/dist/builtin/workflows/src/runs/background/runner.ts +6 -3
  42. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +3 -3
  43. package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +4 -4
  44. package/dist/builtin/workflows/src/runs/foreground/executor-child-workflow.ts +1 -158
  45. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +1 -1
  46. package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +2 -2
  47. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +1 -1
  48. package/dist/builtin/workflows/src/runs/foreground/executor-run.ts +1 -359
  49. package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +1 -1
  50. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +2 -5
  51. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +12 -4
  52. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +4 -3
  53. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +9 -2
  54. package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +2 -132
  55. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +2 -2
  56. package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +2 -100
  57. package/dist/builtin/workflows/src/sdk-surface.ts +6 -9
  58. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +9 -3
  59. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +17 -3
  60. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +3 -33
  61. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +9 -81
  62. package/dist/builtin/workflows/src/shared/types.ts +25 -8
  63. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +49 -0
  64. package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +84 -0
  65. package/dist/builtin/workflows/src/workflows/registry.ts +7 -3
  66. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  67. package/dist/core/agent-session-auto-compaction.js +6 -1
  68. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  69. package/dist/core/agent-session-bash.d.ts.map +1 -1
  70. package/dist/core/agent-session-bash.js +0 -5
  71. package/dist/core/agent-session-bash.js.map +1 -1
  72. package/dist/core/agent-session-methods.d.ts +0 -2
  73. package/dist/core/agent-session-methods.d.ts.map +1 -1
  74. package/dist/core/agent-session-methods.js.map +1 -1
  75. package/dist/core/agent-session-services.d.ts +0 -1
  76. package/dist/core/agent-session-services.d.ts.map +1 -1
  77. package/dist/core/agent-session-services.js +0 -1
  78. package/dist/core/agent-session-services.js.map +1 -1
  79. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  80. package/dist/core/agent-session-tool-registry.js +0 -2
  81. package/dist/core/agent-session-tool-registry.js.map +1 -1
  82. package/dist/core/agent-session-types.d.ts +0 -2
  83. package/dist/core/agent-session-types.d.ts.map +1 -1
  84. package/dist/core/agent-session-types.js.map +1 -1
  85. package/dist/core/agent-session.d.ts +0 -2
  86. package/dist/core/agent-session.d.ts.map +1 -1
  87. package/dist/core/agent-session.js +0 -1
  88. package/dist/core/agent-session.js.map +1 -1
  89. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  90. package/dist/core/atomic-guide-command.js +1 -1
  91. package/dist/core/atomic-guide-command.js.map +1 -1
  92. package/dist/core/extensions/loader-core.d.ts +1 -3
  93. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  94. package/dist/core/extensions/loader-core.js +13 -6
  95. package/dist/core/extensions/loader-core.js.map +1 -1
  96. package/dist/core/extensions/loader-virtual-modules.d.ts +7 -1
  97. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  98. package/dist/core/extensions/loader-virtual-modules.js +34 -2
  99. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  100. package/dist/core/extensions/loader.d.ts +2 -1
  101. package/dist/core/extensions/loader.d.ts.map +1 -1
  102. package/dist/core/extensions/loader.js +2 -1
  103. package/dist/core/extensions/loader.js.map +1 -1
  104. package/dist/core/index.d.ts +0 -1
  105. package/dist/core/index.d.ts.map +1 -1
  106. package/dist/core/index.js +0 -1
  107. package/dist/core/index.js.map +1 -1
  108. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  109. package/dist/core/model-registry-builtins.js +6 -0
  110. package/dist/core/model-registry-builtins.js.map +1 -1
  111. package/dist/core/model-registry-schemas.d.ts +65 -13
  112. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  113. package/dist/core/model-registry-schemas.js +10 -0
  114. package/dist/core/model-registry-schemas.js.map +1 -1
  115. package/dist/core/resource-loader-core.d.ts +1 -0
  116. package/dist/core/resource-loader-core.d.ts.map +1 -1
  117. package/dist/core/resource-loader-core.js +2 -0
  118. package/dist/core/resource-loader-core.js.map +1 -1
  119. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  120. package/dist/core/resource-loader-extensions.js +3 -3
  121. package/dist/core/resource-loader-extensions.js.map +1 -1
  122. package/dist/core/resource-loader-internals.d.ts +1 -0
  123. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  124. package/dist/core/resource-loader-internals.js.map +1 -1
  125. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  126. package/dist/core/resource-loader-reload.js +6 -2
  127. package/dist/core/resource-loader-reload.js.map +1 -1
  128. package/dist/core/sdk-exports.d.ts +1 -1
  129. package/dist/core/sdk-exports.d.ts.map +1 -1
  130. package/dist/core/sdk-exports.js.map +1 -1
  131. package/dist/core/sdk-types.d.ts +0 -3
  132. package/dist/core/sdk-types.d.ts.map +1 -1
  133. package/dist/core/sdk-types.js.map +1 -1
  134. package/dist/core/sdk.d.ts.map +1 -1
  135. package/dist/core/sdk.js +0 -1
  136. package/dist/core/sdk.js.map +1 -1
  137. package/dist/core/session-manager-history.d.ts.map +1 -1
  138. package/dist/core/session-manager-history.js +2 -1
  139. package/dist/core/session-manager-history.js.map +1 -1
  140. package/dist/core/tools/bash.d.ts +0 -5
  141. package/dist/core/tools/bash.d.ts.map +1 -1
  142. package/dist/core/tools/bash.js +10 -11
  143. package/dist/core/tools/bash.js.map +1 -1
  144. package/dist/core/tools/edit-diff-preserve.d.ts +18 -0
  145. package/dist/core/tools/edit-diff-preserve.d.ts.map +1 -0
  146. package/dist/core/tools/edit-diff-preserve.js +85 -0
  147. package/dist/core/tools/edit-diff-preserve.js.map +1 -0
  148. package/dist/core/tools/edit-diff.d.ts +3 -2
  149. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  150. package/dist/core/tools/edit-diff.js +15 -18
  151. package/dist/core/tools/edit-diff.js.map +1 -1
  152. package/dist/core/tools/index.d.ts +0 -1
  153. package/dist/core/tools/index.d.ts.map +1 -1
  154. package/dist/core/tools/index.js +0 -1
  155. package/dist/core/tools/index.js.map +1 -1
  156. package/dist/index.d.ts +2 -2
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +1 -1
  159. package/dist/index.js.map +1 -1
  160. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  161. package/dist/modes/interactive/components/model-selector.js +2 -2
  162. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  163. package/dist/modes/interactive/model-search.d.ts +5 -0
  164. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  165. package/dist/modes/interactive/model-search.js +9 -0
  166. package/dist/modes/interactive/model-search.js.map +1 -1
  167. package/dist/utils/shell.d.ts +1 -0
  168. package/dist/utils/shell.d.ts.map +1 -1
  169. package/dist/utils/shell.js +12 -5
  170. package/dist/utils/shell.js.map +1 -1
  171. package/docs/custom-provider.md +4 -3
  172. package/docs/models.md +3 -2
  173. package/docs/packages.md +2 -2
  174. package/docs/quickstart.md +1 -1
  175. package/docs/sdk.md +2 -40
  176. package/docs/security.md +1 -1
  177. package/docs/workflows.md +238 -173
  178. package/package.json +5 -5
  179. package/dist/builtin/workflows/src/workflows/define-workflow.ts +0 -277
  180. package/dist/core/tools/bash-policy-compile.d.ts +0 -5
  181. package/dist/core/tools/bash-policy-compile.d.ts.map +0 -1
  182. package/dist/core/tools/bash-policy-compile.js +0 -241
  183. package/dist/core/tools/bash-policy-compile.js.map +0 -1
  184. package/dist/core/tools/bash-policy-evaluate.d.ts +0 -3
  185. package/dist/core/tools/bash-policy-evaluate.d.ts.map +0 -1
  186. package/dist/core/tools/bash-policy-evaluate.js +0 -92
  187. package/dist/core/tools/bash-policy-evaluate.js.map +0 -1
  188. package/dist/core/tools/bash-policy-format.d.ts +0 -5
  189. package/dist/core/tools/bash-policy-format.d.ts.map +0 -1
  190. package/dist/core/tools/bash-policy-format.js +0 -49
  191. package/dist/core/tools/bash-policy-format.js.map +0 -1
  192. package/dist/core/tools/bash-policy-parser.d.ts +0 -4
  193. package/dist/core/tools/bash-policy-parser.d.ts.map +0 -1
  194. package/dist/core/tools/bash-policy-parser.js +0 -155
  195. package/dist/core/tools/bash-policy-parser.js.map +0 -1
  196. package/dist/core/tools/bash-policy-segment.d.ts +0 -3
  197. package/dist/core/tools/bash-policy-segment.d.ts.map +0 -1
  198. package/dist/core/tools/bash-policy-segment.js +0 -275
  199. package/dist/core/tools/bash-policy-segment.js.map +0 -1
  200. package/dist/core/tools/bash-policy-shell.d.ts +0 -11
  201. package/dist/core/tools/bash-policy-shell.d.ts.map +0 -1
  202. package/dist/core/tools/bash-policy-shell.js +0 -267
  203. package/dist/core/tools/bash-policy-shell.js.map +0 -1
  204. package/dist/core/tools/bash-policy-types.d.ts +0 -146
  205. package/dist/core/tools/bash-policy-types.d.ts.map +0 -1
  206. package/dist/core/tools/bash-policy-types.js +0 -2
  207. package/dist/core/tools/bash-policy-types.js.map +0 -1
  208. package/dist/core/tools/bash-policy.d.ts +0 -6
  209. package/dist/core/tools/bash-policy.d.ts.map +0 -1
  210. package/dist/core/tools/bash-policy.js +0 -5
  211. package/dist/core/tools/bash-policy.js.map +0 -1
@@ -0,0 +1,217 @@
1
+ import type * as TypeBox from "typebox";
2
+ import type {
3
+ TAny,
4
+ TArray,
5
+ TArrayOptions,
6
+ TBoolean,
7
+ TEnum,
8
+ TEnumValue,
9
+ TInteger,
10
+ TIntersect,
11
+ TIntersectOptions,
12
+ TLiteral,
13
+ TLiteralValue,
14
+ TNull,
15
+ TNumber,
16
+ TNumberOptions,
17
+ TObject,
18
+ TObjectOptions,
19
+ TOmit,
20
+ TPartial,
21
+ TPick,
22
+ TProperties,
23
+ TRequired,
24
+ TSchema,
25
+ TSchemaOptions,
26
+ TString,
27
+ TStringOptions,
28
+ TTuple,
29
+ TTupleOptions,
30
+ TTypeScriptEnumLike,
31
+ TTypeScriptEnumToEnumValues,
32
+ TUnion,
33
+ TUnknown,
34
+ } from "typebox";
35
+ import type { WorkflowSerializableValue } from "../shared/authoring-contract.js";
36
+
37
+ type TypeBoxDefaultOptions<TOptions> = TOptions & {
38
+ readonly default: WorkflowSerializableValue;
39
+ };
40
+
41
+ type TypeBoxDefaulted<TOptions extends { readonly default: WorkflowSerializableValue }> = {
42
+ readonly default: TOptions["default"];
43
+ };
44
+
45
+ type TypeBoxKeysToLiterals<
46
+ TKeys extends readonly PropertyKey[],
47
+ TResult extends TLiteral[] = [],
48
+ > = TKeys extends readonly [infer TLeft extends PropertyKey, ...infer TRight extends PropertyKey[]]
49
+ ? TLeft extends TLiteralValue
50
+ ? TypeBoxKeysToLiterals<TRight, [...TResult, TLiteral<TLeft>]>
51
+ : TypeBoxKeysToLiterals<TRight, TResult>
52
+ : TResult;
53
+
54
+ type TypeBoxKeysToIndexer<TKeys extends readonly PropertyKey[]> = TUnion<TypeBoxKeysToLiterals<TKeys>>;
55
+
56
+ type TypeBoxRecord<TKey extends TSchema, TValue extends TSchema> = ReturnType<typeof TypeBox.Type.Record<TKey, TValue>>;
57
+
58
+ declare module "typebox" {
59
+ export namespace Type {
60
+ export function Any<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(
61
+ options: TOptions,
62
+ ): TAny & TypeBoxDefaulted<TOptions>;
63
+
64
+ export function Unknown<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(
65
+ options: TOptions,
66
+ ): TUnknown & TypeBoxDefaulted<TOptions>;
67
+
68
+ export function String<const TOptions extends TypeBoxDefaultOptions<TStringOptions>>(
69
+ options: TOptions,
70
+ ): TString & TypeBoxDefaulted<TOptions>;
71
+
72
+ export function Number<const TOptions extends TypeBoxDefaultOptions<TNumberOptions>>(
73
+ options: TOptions,
74
+ ): TNumber & TypeBoxDefaulted<TOptions>;
75
+
76
+ export function Integer<const TOptions extends TypeBoxDefaultOptions<TNumberOptions>>(
77
+ options: TOptions,
78
+ ): TInteger & TypeBoxDefaulted<TOptions>;
79
+
80
+ export function Boolean<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(
81
+ options: TOptions,
82
+ ): TBoolean & TypeBoxDefaulted<TOptions>;
83
+
84
+ export function Literal<
85
+ const TValue extends TLiteralValue,
86
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
87
+ >(
88
+ value: TValue,
89
+ options: TOptions,
90
+ ): TLiteral<TValue> & TypeBoxDefaulted<TOptions>;
91
+
92
+ export function Enum<
93
+ const TValues extends TEnumValue[],
94
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
95
+ >(
96
+ values: readonly [...TValues],
97
+ options: TOptions,
98
+ ): TEnum<TValues> & TypeBoxDefaulted<TOptions>;
99
+ export function Enum<
100
+ const TEnumLike extends TTypeScriptEnumLike,
101
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
102
+ >(
103
+ value: TEnumLike,
104
+ options: TOptions,
105
+ ): TEnum<TTypeScriptEnumToEnumValues<TEnumLike>> & TypeBoxDefaulted<TOptions>;
106
+
107
+ export function Array<
108
+ const TItem extends TSchema,
109
+ const TOptions extends TypeBoxDefaultOptions<TArrayOptions>,
110
+ >(
111
+ items: TItem,
112
+ options: TOptions,
113
+ ): TArray<TItem> & TypeBoxDefaulted<TOptions>;
114
+
115
+ export function Object<
116
+ const TSchemaProperties extends TProperties,
117
+ const TOptions extends TypeBoxDefaultOptions<TObjectOptions>,
118
+ >(
119
+ properties: TSchemaProperties,
120
+ options: TOptions,
121
+ ): TObject<TSchemaProperties> & TypeBoxDefaulted<TOptions>;
122
+
123
+ export function Partial<
124
+ const TType extends TSchema,
125
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
126
+ >(
127
+ type: TType,
128
+ options: TOptions,
129
+ ): TPartial<TType> & TypeBoxDefaulted<TOptions>;
130
+
131
+ export function Pick<
132
+ const TType extends TSchema,
133
+ const TIndexer extends PropertyKey[],
134
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
135
+ >(
136
+ type: TType,
137
+ indexer: readonly [...TIndexer],
138
+ options: TOptions,
139
+ ): TPick<TType, TypeBoxKeysToIndexer<TIndexer>> & TypeBoxDefaulted<TOptions>;
140
+ export function Pick<
141
+ const TType extends TSchema,
142
+ const TIndexer extends TSchema,
143
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
144
+ >(
145
+ type: TType,
146
+ indexer: TIndexer,
147
+ options: TOptions,
148
+ ): TPick<TType, TIndexer> & TypeBoxDefaulted<TOptions>;
149
+
150
+ export function Omit<
151
+ const TType extends TSchema,
152
+ const TIndexer extends PropertyKey[],
153
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
154
+ >(
155
+ type: TType,
156
+ indexer: readonly [...TIndexer],
157
+ options: TOptions,
158
+ ): TOmit<TType, TypeBoxKeysToIndexer<TIndexer>> & TypeBoxDefaulted<TOptions>;
159
+ export function Omit<
160
+ const TType extends TSchema,
161
+ const TIndexer extends TSchema,
162
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
163
+ >(
164
+ type: TType,
165
+ indexer: TIndexer,
166
+ options: TOptions,
167
+ ): TOmit<TType, TIndexer> & TypeBoxDefaulted<TOptions>;
168
+
169
+ export function Required<
170
+ const TType extends TSchema,
171
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
172
+ >(
173
+ type: TType,
174
+ options: TOptions,
175
+ ): TRequired<TType> & TypeBoxDefaulted<TOptions>;
176
+
177
+ export function Union<
178
+ const TTypes extends TSchema[],
179
+ const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>,
180
+ >(
181
+ anyOf: [...TTypes],
182
+ options: TOptions,
183
+ ): TUnion<TTypes> & TypeBoxDefaulted<TOptions>;
184
+
185
+ export function Intersect<
186
+ const TTypes extends TSchema[],
187
+ const TOptions extends TypeBoxDefaultOptions<TIntersectOptions>,
188
+ >(
189
+ types: [...TTypes],
190
+ options: TOptions,
191
+ ): TIntersect<TTypes> & TypeBoxDefaulted<TOptions>;
192
+
193
+ export function Record<
194
+ const TKey extends TSchema,
195
+ const TValue extends TSchema,
196
+ const TOptions extends TypeBoxDefaultOptions<TObjectOptions>,
197
+ >(
198
+ key: TKey,
199
+ value: TValue,
200
+ options: TOptions,
201
+ ): TypeBoxRecord<TKey, TValue> & TypeBoxDefaulted<TOptions>;
202
+
203
+ export function Tuple<
204
+ const TTypes extends TSchema[],
205
+ const TOptions extends TypeBoxDefaultOptions<TTupleOptions>,
206
+ >(
207
+ types: [...TTypes],
208
+ options: TOptions,
209
+ ): TTuple<TTypes> & TypeBoxDefaulted<TOptions>;
210
+
211
+ export function Null<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(
212
+ options: TOptions,
213
+ ): TNull & TypeBoxDefaulted<TOptions>;
214
+ }
215
+ }
216
+
217
+ export {};
@@ -0,0 +1,184 @@
1
+ import { basename } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import type {
4
+ AuthoredWorkflowSpec as SharedAuthoredWorkflowSpec,
5
+ WorkflowInputsFromSchemas,
6
+ WorkflowOutputsFromSchemas,
7
+ WorkflowProvidedInputsFromSchemas,
8
+ } from "../shared/workflow-authoring-types.js";
9
+ import type {
10
+ WorkflowDefinition,
11
+ WorkflowInputBindings,
12
+ WorkflowInputSchemaMap,
13
+ WorkflowInputValues,
14
+ WorkflowOutputSchemaMap,
15
+ WorkflowOutputValues,
16
+ WorkflowRunContext,
17
+ WorkflowRunFn,
18
+ WorkflowWorktreeInputBinding,
19
+ } from "../shared/types.js";
20
+ import { normalizeWorkflowName } from "../workflows/identity.js";
21
+
22
+ export type {
23
+ WorkflowInputsFromSchemas,
24
+ WorkflowOutputsFromSchemas,
25
+ WorkflowProvidedInputsFromSchemas,
26
+ } from "../shared/workflow-authoring-types.js";
27
+
28
+ const BRANDED_WORKFLOW_DEFINITIONS = new WeakSet<object>();
29
+
30
+ export type AuthoredWorkflowSpec<
31
+ TInputs extends WorkflowInputSchemaMap = {},
32
+ TOutputs extends WorkflowOutputSchemaMap = WorkflowOutputSchemaMap,
33
+ TActualOutputs extends WorkflowOutputsFromSchemas<TOutputs> = WorkflowOutputsFromSchemas<TOutputs>,
34
+ > = SharedAuthoredWorkflowSpec<
35
+ TInputs,
36
+ TOutputs,
37
+ TActualOutputs,
38
+ WorkflowRunContext<WorkflowInputsFromSchemas<TInputs>, WorkflowOutputsFromSchemas<TOutputs>>
39
+ >;
40
+
41
+ export type AuthoredWorkflowDefinition<
42
+ TInputs extends WorkflowInputSchemaMap,
43
+ TOutputs extends WorkflowOutputSchemaMap,
44
+ > = WorkflowDefinition<
45
+ WorkflowInputsFromSchemas<TInputs>,
46
+ WorkflowOutputsFromSchemas<TOutputs>,
47
+ WorkflowProvidedInputsFromSchemas<TInputs>
48
+ > & {
49
+ readonly outputs: Readonly<TOutputs>;
50
+ };
51
+
52
+ // Package-internal runtime brand. It deliberately is not exported through the
53
+ // public SDK surface; workflow({...}) and executor-created direct workflows are
54
+ // the only package code paths that can mint accepted runtime definitions.
55
+ export function stampWorkflowDefinition<
56
+ TInputs extends WorkflowInputValues,
57
+ TOutputs extends WorkflowOutputValues,
58
+ TRunInputs extends WorkflowInputValues = TInputs,
59
+ >(
60
+ definition: object,
61
+ ): WorkflowDefinition<TInputs, TOutputs, TRunInputs> {
62
+ BRANDED_WORKFLOW_DEFINITIONS.add(definition);
63
+ return definition as never as WorkflowDefinition<TInputs, TOutputs, TRunInputs>;
64
+ }
65
+
66
+ export function isBrandedWorkflowDefinition(value: object): value is WorkflowDefinition {
67
+ return BRANDED_WORKFLOW_DEFINITIONS.has(value);
68
+ }
69
+
70
+ function requireNonEmptyString(value: string, label: string): void {
71
+ if (value.trim().length === 0) {
72
+ throw new TypeError(`workflow: ${label} must be a non-empty string`);
73
+ }
74
+ }
75
+
76
+ function freezeSchemaMap<TSchemas extends WorkflowInputSchemaMap | WorkflowOutputSchemaMap>(
77
+ schemas: TSchemas,
78
+ ): Readonly<TSchemas> {
79
+ return Object.freeze({ ...schemas }) as Readonly<TSchemas>;
80
+ }
81
+
82
+ function stackFilePath(line: string): string | undefined {
83
+ const fileUrlMatch = line.match(/\(?((?:file:\/\/)[^\s)]+?\.[cm]?[jt]sx?):\d+:\d+\)?/);
84
+ const rawPath = fileUrlMatch?.[1]
85
+ ?? line.match(/\(?((?:\/|[A-Za-z]:[\\/])[^():]+?\.[cm]?[jt]sx?):\d+:\d+\)?/)?.[1];
86
+ if (rawPath === undefined) return undefined;
87
+ if (!rawPath.startsWith("file://")) return rawPath;
88
+ try {
89
+ return fileURLToPath(rawPath);
90
+ } catch {
91
+ return undefined;
92
+ }
93
+ }
94
+
95
+ function isWorkflowAuthoringImplementationFrame(filePath: string): boolean {
96
+ const normalized = filePath.replace(/\\/g, "/");
97
+ if (!/\/authoring\/workflow\.[cm]?[jt]sx?$/.test(normalized)) return false;
98
+ return normalized.includes("/packages/workflows/")
99
+ || normalized.includes("/node_modules/@bastani/workflows/")
100
+ || normalized.includes("/dist/builtin/workflows/")
101
+ || normalized.includes("/.atomic/agent/extensions/workflows/")
102
+ || normalized.includes("/.pi/agent/extensions/workflows/");
103
+ }
104
+
105
+ function workflowNameFromCaller(): string | undefined {
106
+ const stack = new Error().stack;
107
+ if (stack === undefined) return undefined;
108
+
109
+ for (const line of stack.split("\n")) {
110
+ const filePath = stackFilePath(line);
111
+ if (filePath === undefined) continue;
112
+ if (isWorkflowAuthoringImplementationFrame(filePath)) continue;
113
+ const base = basename(filePath.replace(/\\/g, "/")).replace(/\.[cm]?[jt]sx?$/, "");
114
+ if (base.length > 0) return base;
115
+ }
116
+
117
+ return undefined;
118
+ }
119
+
120
+ function resolveWorkflowName(name: string | undefined): string {
121
+ const resolved = name ?? workflowNameFromCaller();
122
+ if (resolved === undefined) {
123
+ throw new TypeError("workflow: name must be provided when caller filename cannot be inferred");
124
+ }
125
+ requireNonEmptyString(resolved, "name");
126
+ return resolved;
127
+ }
128
+
129
+ function freezeInputBindings(
130
+ binding: WorkflowWorktreeInputBinding | undefined,
131
+ ): WorkflowInputBindings | undefined {
132
+ if (binding === undefined) return undefined;
133
+ return Object.freeze({
134
+ worktree: Object.freeze({ ...binding }),
135
+ });
136
+ }
137
+
138
+ export function workflow<
139
+ const TInputs extends WorkflowInputSchemaMap = {},
140
+ const TOutputs extends WorkflowOutputSchemaMap = WorkflowOutputSchemaMap,
141
+ TActualOutputs extends WorkflowOutputsFromSchemas<TOutputs> = WorkflowOutputsFromSchemas<TOutputs>,
142
+ >(
143
+ spec: AuthoredWorkflowSpec<TInputs, TOutputs, TActualOutputs>,
144
+ ): AuthoredWorkflowDefinition<TInputs, TOutputs> {
145
+ const specRun = spec.run;
146
+ if (typeof spec.description !== "string") {
147
+ throw new TypeError("workflow: description must be a string");
148
+ }
149
+ if (typeof specRun !== "function") {
150
+ throw new TypeError("workflow: run must be a function");
151
+ }
152
+ if (spec.outputs === undefined || spec.outputs === null || typeof spec.outputs !== "object" || Array.isArray(spec.outputs)) {
153
+ throw new TypeError("workflow: outputs must be a schema map");
154
+ }
155
+ if (spec.inputs !== undefined && (spec.inputs === null || typeof spec.inputs !== "object" || Array.isArray(spec.inputs))) {
156
+ throw new TypeError("workflow: inputs must be a schema map");
157
+ }
158
+
159
+ const name = resolveWorkflowName(spec.name);
160
+ const normalizedName = normalizeWorkflowName(name);
161
+ requireNonEmptyString(normalizedName, "normalized name");
162
+ const frozenInputs = freezeSchemaMap(spec.inputs ?? {} as TInputs);
163
+ const frozenOutputs = freezeSchemaMap(spec.outputs);
164
+ const inputBindings = freezeInputBindings(spec.worktreeFromInputs);
165
+ const run: WorkflowRunFn<WorkflowInputsFromSchemas<TInputs>, WorkflowOutputsFromSchemas<TOutputs>> = async (ctx) => specRun(ctx);
166
+
167
+ const definition = {
168
+ __piWorkflow: true,
169
+ name,
170
+ normalizedName,
171
+ description: spec.description,
172
+ inputs: frozenInputs,
173
+ outputs: frozenOutputs,
174
+ ...(inputBindings !== undefined ? { inputBindings } : {}),
175
+ run,
176
+ };
177
+
178
+ const branded = stampWorkflowDefinition<
179
+ WorkflowInputsFromSchemas<TInputs>,
180
+ WorkflowOutputsFromSchemas<TOutputs>,
181
+ WorkflowProvidedInputsFromSchemas<TInputs>
182
+ >(definition);
183
+ return Object.freeze(branded) as AuthoredWorkflowDefinition<TInputs, TOutputs>;
184
+ }
@@ -1,76 +1,24 @@
1
- import type { TAny, TArray, TArrayOptions, TBigInt, TBoolean, TEnum, TEnumValue, TInteger, TIntersect, TIntersectOptions, TLiteral, TLiteralValue, TNever, TNull, TNumber, TNumberOptions, TOmit, TObject, TObjectOptions, TPartial, TPick, TRecordAction, TRequired, TSchema, TSchemaOptions, TString, TStringOptions, TTuple, TTupleOptions, TUndefined, TUnion, TUnknown, TVoid, Type as TypeboxType, TKeysToIndexer } from "typebox";
2
- type PreserveOptions<T extends TSchema, O extends TSchemaOptions> = T & O;
3
- type TypeScriptEnumLike = Record<string, string | number>;
4
- type TypeScriptEnumValues<T extends TypeScriptEnumLike> = Extract<T[keyof T], TEnumValue>[];
5
- export declare const Type: Omit<typeof TypeboxType, "Any" | "Array" | "BigInt" | "Boolean" | "Enum" | "Integer" | "Intersect" | "Literal" | "Never" | "Null" | "Number" | "Omit" | "Partial" | "Pick" | "Object" | "Record" | "Required" | "String" | "Tuple" | "Undefined" | "Union" | "Unknown" | "Void"> & {
6
- Any<const O extends TSchemaOptions>(options: O): PreserveOptions<TAny, O>;
7
- Any(): TAny;
8
- Array<Type extends TSchema, const O extends TArrayOptions>(items: Type, options: O): PreserveOptions<TArray<Type>, O>;
9
- Array<Type extends TSchema>(items: Type): TArray<Type>;
10
- BigInt<const O extends TSchemaOptions>(options: O): PreserveOptions<TBigInt, O>;
11
- BigInt(): TBigInt;
12
- Boolean<const O extends TSchemaOptions>(options: O): PreserveOptions<TBoolean, O>;
13
- Boolean(): TBoolean;
14
- Enum<Values extends TEnumValue[], const O extends TSchemaOptions>(values: readonly [...Values], options: O): PreserveOptions<TEnum<Values>, O>;
15
- Enum<Values extends TEnumValue[]>(values: readonly [...Values]): TEnum<Values>;
16
- Enum<Enum extends TypeScriptEnumLike, const O extends TSchemaOptions>(value: Enum, options: O): PreserveOptions<TEnum<TypeScriptEnumValues<Enum>>, O>;
17
- Enum<Enum extends TypeScriptEnumLike>(value: Enum): TEnum<TypeScriptEnumValues<Enum>>;
18
- Integer<const O extends TNumberOptions>(options: O): PreserveOptions<TInteger, O>;
19
- Integer(): TInteger;
20
- Intersect<Types extends TSchema[], const O extends TIntersectOptions>(types: [...Types], options: O): PreserveOptions<TIntersect<Types>, O>;
21
- Intersect<Types extends TSchema[]>(types: [...Types]): TIntersect<Types>;
22
- Literal<const Value extends TLiteralValue, const O extends TSchemaOptions>(value: Value, options: O): PreserveOptions<TLiteral<Value>, O>;
23
- Literal<const Value extends TLiteralValue>(value: Value): TLiteral<Value>;
24
- Never<const O extends TSchemaOptions>(options: O): PreserveOptions<TNever, O>;
25
- Never(): TNever;
26
- Null<const O extends TSchemaOptions>(options: O): PreserveOptions<TNull, O>;
27
- Null(): TNull;
28
- Number<const O extends TNumberOptions>(options: O): PreserveOptions<TNumber, O>;
29
- Number(): TNumber;
30
- Omit<Type extends TSchema, Indexer extends PropertyKey[], const O extends TSchemaOptions>(type: Type, indexer: readonly [...Indexer], options: O): PreserveOptions<TOmit<Type, TKeysToIndexer<Indexer>>, O>;
31
- Omit<Type extends TSchema, Indexer extends PropertyKey[]>(type: Type, indexer: readonly [...Indexer]): TOmit<Type, TKeysToIndexer<Indexer>>;
32
- Omit<Type extends TSchema, Indexer extends TSchema, const O extends TSchemaOptions>(type: Type, indexer: Indexer, options: O): PreserveOptions<TOmit<Type, Indexer>, O>;
33
- Omit<Type extends TSchema, Indexer extends TSchema>(type: Type, indexer: Indexer): TOmit<Type, Indexer>;
34
- Partial<Type extends TSchema, const O extends TSchemaOptions>(type: Type, options: O): PreserveOptions<TPartial<Type>, O>;
35
- Partial<Type extends TSchema>(type: Type): TPartial<Type>;
36
- Pick<Type extends TSchema, Indexer extends PropertyKey[], const O extends TSchemaOptions>(type: Type, indexer: readonly [...Indexer], options: O): PreserveOptions<TPick<Type, TKeysToIndexer<Indexer>>, O>;
37
- Pick<Type extends TSchema, Indexer extends PropertyKey[]>(type: Type, indexer: readonly [...Indexer]): TPick<Type, TKeysToIndexer<Indexer>>;
38
- Pick<Type extends TSchema, Indexer extends TSchema, const O extends TSchemaOptions>(type: Type, indexer: Indexer, options: O): PreserveOptions<TPick<Type, Indexer>, O>;
39
- Pick<Type extends TSchema, Indexer extends TSchema>(type: Type, indexer: Indexer): TPick<Type, Indexer>;
40
- Object<Properties extends Record<PropertyKey, TSchema>, const O extends TObjectOptions>(properties: Properties, options: O): PreserveOptions<TObject<Properties>, O>;
41
- Object<Properties extends Record<PropertyKey, TSchema>>(properties: Properties): TObject<Properties>;
42
- Record<Key extends TSchema, Value extends TSchema, const O extends TObjectOptions>(key: Key, value: Value, options: O): PreserveOptions<TRecordAction<Key, Value>, O>;
43
- Record<Key extends TSchema, Value extends TSchema>(key: Key, value: Value): TRecordAction<Key, Value>;
44
- Required<Type extends TSchema, const O extends TSchemaOptions>(type: Type, options: O): PreserveOptions<TRequired<Type>, O>;
45
- Required<Type extends TSchema>(type: Type): TRequired<Type>;
46
- String<const O extends TStringOptions>(options: O): PreserveOptions<TString, O>;
47
- String(): TString;
48
- Tuple<Types extends TSchema[], const O extends TTupleOptions>(types: [...Types], options: O): PreserveOptions<TTuple<Types>, O>;
49
- Tuple<Types extends TSchema[]>(types: [...Types]): TTuple<Types>;
50
- Undefined<const O extends TSchemaOptions>(options: O): PreserveOptions<TUndefined, O>;
51
- Undefined(): TUndefined;
52
- Union<Types extends TSchema[], const O extends TSchemaOptions>(anyOf: [...Types], options: O): PreserveOptions<TUnion<Types>, O>;
53
- Union<Types extends TSchema[]>(anyOf: [...Types]): TUnion<Types>;
54
- Unknown<const O extends TSchemaOptions>(options: O): PreserveOptions<TUnknown, O>;
55
- Unknown(): TUnknown;
56
- Void<const O extends TSchemaOptions>(options: O): PreserveOptions<TVoid, O>;
57
- Void(): TVoid;
58
- };
1
+ import type { TSchema } from "typebox";
59
2
  export type { Static, TSchema } from "typebox";
60
- export type { AgentSessionAdapter, CompleteAdapter, CompleteStageOpts, GitWorktreeSetupOptions, GitWorktreeSetupResult, PromptAdapter, PromptOptions, ResolvedInputs, RunResult, RunStatus, StageAdapters, StageStatus, StageOptions, StageContext, StageSnapshot, StageExecutionMeta, StageMcpOptions, StageOutputOptions, StagePromptOptions, StageSessionCreateOptions, StageSessionCreateResult, StageSessionRuntime, WorkflowAction, WorkflowArtifact, WorkflowChainOptions, WorkflowChainStep, WorkflowChildResult, WorkflowContextMode, WorkflowControlEvent, WorkflowCustomToolDefinition, WorkflowCustomUiComponent, WorkflowCustomUiFactory, WorkflowCustomUiKeybindings, WorkflowCustomUiOptions, WorkflowCustomUiOverlayHandle, WorkflowCustomUiOverlayOptions, WorkflowCustomUiTheme, WorkflowCustomUiTui, WorkflowDetails, WorkflowDetailsMode, WorkflowDetailsStatus, WorkflowDirectOptions, WorkflowDirectTaskItem, WorkflowExecutionMode, WorkflowExecutionPolicy, WorkflowExitOptions, WorkflowExitStatus, WorkflowInputBindings, WorkflowInputSchema, WorkflowInputSchemaMap, WorkflowInputValues, WorkflowIntercomSummary, WorkflowMaxOutput, WorkflowMcpPort, WorkflowModelAttempt, WorkflowModelCatalogPort, WorkflowModelFallbackFields, WorkflowModelInfo, WorkflowModelUsage, WorkflowModelValue, WorkflowOutputMode, WorkflowOutputSchema, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowParallelChainStep, WorkflowParallelOptions, WorkflowPersistencePort, WorkflowProgressSummary, WorkflowRunChildOptions, WorkflowRunOutput, WorkflowRuntimeConfig, WorkflowSerializableObject, WorkflowSerializablePrimitive, WorkflowSerializableValue, WorkflowSharedTaskDefaults, WorkflowTaskContext, WorkflowTaskContextInput, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskSessionFields, WorkflowTaskSessionOptions, WorkflowTaskStep, WorkflowThinkingLevel, WorkflowUIAdapter, WorkflowUIContext, WorkflowWorktreeInputBinding, } from "./shared/authoring-contract.js";
3
+ export type { AgentSessionAdapter, CompleteAdapter, CompleteStageOpts, GitWorktreeSetupOptions, GitWorktreeSetupResult, PromptAdapter, PromptOptions, ResolvedInputs, RunResult, RunStatus, StageAdapters, StageStatus, StageOptions, StageContext, StageSnapshot, StageExecutionMeta, StageMcpOptions, StageOutputOptions, StagePromptOptions, StageSessionCreateOptions, StageSessionCreateResult, StageSessionRuntime, WorkflowAction, WorkflowArtifact, WorkflowChainOptions, WorkflowChainStep, WorkflowChildResult, WorkflowContextMode, WorkflowControlEvent, WorkflowCustomToolDefinition, WorkflowCustomUiComponent, WorkflowCustomUiFactory, WorkflowCustomUiKeybindings, WorkflowCustomUiOptions, WorkflowCustomUiOverlayHandle, WorkflowCustomUiOverlayOptions, WorkflowCustomUiTheme, WorkflowCustomUiTui, WorkflowDetails, WorkflowDetailsMode, WorkflowDetailsStatus, WorkflowDirectOptions, WorkflowDirectTaskItem, WorkflowExecutionMode, WorkflowExecutionPolicy, WorkflowExitOptions, WorkflowExitStatus, WorkflowInputBindings, WorkflowInputSchema, WorkflowInputSchemaMap, WorkflowInputValues, WorkflowIntercomSummary, WorkflowMaxOutput, WorkflowMcpPort, WorkflowModelAttempt, WorkflowModelCatalogPort, WorkflowModelFallbackFields, WorkflowModelInfo, WorkflowModelUsage, WorkflowModelValue, WorkflowOutputMode, WorkflowOutputSchema, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowParallelChainStep, WorkflowParallelOptions, WorkflowPersistencePort, WorkflowProgressSummary, WorkflowRunChildArgs, WorkflowRunChildOptions, WorkflowRunChildOptionsArgument, WorkflowRunOutput, WorkflowRuntimeConfig, WorkflowSerializableObject, WorkflowSerializablePrimitive, WorkflowSerializableValue, WorkflowSharedTaskDefaults, WorkflowTaskContext, WorkflowTaskContextInput, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskSessionFields, WorkflowTaskSessionOptions, WorkflowTaskStep, WorkflowThinkingLevel, WorkflowUIAdapter, WorkflowUIContext, WorkflowWorktreeInputBinding, } from "./shared/authoring-contract.js";
61
4
  import type * as AuthoringContract from "./shared/authoring-contract.js";
62
- import type { GitWorktreeSetupOptions, GitWorktreeSetupResult, ResolvedInputs, RunResult, RunStatus, StageSnapshot, WorkflowDefinition as WorkflowContractDefinition, WorkflowDetails, WorkflowDirectOptions, WorkflowDirectTaskItem, WorkflowExecutionPolicy, WorkflowInputValues, WorkflowOutputValues, WorkflowSerializableObject, WorkflowChainStep } from "./shared/authoring-contract.js";
5
+ import type { AuthoredWorkflowSpec as SharedAuthoredWorkflowSpec, WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas } from "./shared/workflow-authoring-types.js";
6
+ export type { WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas, } from "./shared/workflow-authoring-types.js";
7
+ import type { GitWorktreeSetupOptions, GitWorktreeSetupResult, ResolvedInputs, RunResult, RunStatus, StageSnapshot, WorkflowDefinition as WorkflowContractDefinition, WorkflowDetails, WorkflowDirectOptions, WorkflowDirectTaskItem, WorkflowExecutionPolicy, WorkflowInputSchemaMap, WorkflowInputValues, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowSerializableObject, WorkflowChainStep } from "./shared/authoring-contract.js";
63
8
  declare const workflowDefinitionBrand: unique symbol;
64
9
  type WorkflowDefinitionBrand = {
65
10
  readonly [workflowDefinitionBrand]: true;
66
11
  };
67
12
  export interface WorkflowDefinition<TInputs extends WorkflowInputValues = WorkflowInputValues, TOutputs extends WorkflowOutputValues = WorkflowOutputValues, TRunInputs extends WorkflowInputValues = TInputs, TDefinitionBrand extends object = WorkflowDefinitionBrand> extends WorkflowContractDefinition<TInputs, TOutputs, TRunInputs, TDefinitionBrand>, WorkflowDefinitionBrand {
68
13
  }
14
+ export type AuthoredWorkflowDefinition<TInputs extends WorkflowInputSchemaMap, TOutputs extends WorkflowOutputSchemaMap> = WorkflowDefinition<WorkflowInputsFromSchemas<TInputs>, WorkflowOutputsFromSchemas<TOutputs>, WorkflowProvidedInputsFromSchemas<TInputs>> & {
15
+ readonly outputs: Readonly<TOutputs>;
16
+ };
69
17
  export type WorkflowRunContext<TInputs extends WorkflowInputValues = WorkflowInputValues, TOutputs extends WorkflowOutputValues = WorkflowOutputValues> = AuthoringContract.WorkflowRunContext<TInputs, WorkflowDefinitionBrand, TOutputs>;
70
18
  export type WorkflowRunFn<TInputs extends WorkflowInputValues = WorkflowInputValues, TOutputs extends WorkflowOutputValues = WorkflowOutputValues> = AuthoringContract.WorkflowRunFn<TInputs, TOutputs, WorkflowDefinitionBrand>;
19
+ type WorkflowRunInputArgument<TInputs extends WorkflowInputValues> = [keyof TInputs] extends [never] ? Readonly<Record<string, never>> : TInputs;
20
+ export type AuthoredWorkflowSpec<TInputs extends WorkflowInputSchemaMap = {}, TOutputs extends WorkflowOutputSchemaMap = WorkflowOutputSchemaMap, TActualOutputs extends WorkflowOutputsFromSchemas<TOutputs> = WorkflowOutputsFromSchemas<TOutputs>> = SharedAuthoredWorkflowSpec<TInputs, TOutputs, TActualOutputs, WorkflowRunContext<WorkflowInputsFromSchemas<TInputs>, WorkflowOutputsFromSchemas<TOutputs>>>;
71
21
  export type AnyWorkflowDefinition = WorkflowDefinition<WorkflowInputValues, WorkflowOutputValues, WorkflowInputValues>;
72
- export type WorkflowBuilder<TInputs extends WorkflowInputValues = {}, TOutputs extends WorkflowOutputValues = {}, TRunInputs extends WorkflowInputValues = TInputs> = AuthoringContract.WorkflowBuilder<TInputs, TOutputs, TRunInputs, WorkflowDefinitionBrand, WorkflowDefinition<TInputs, TOutputs, TRunInputs>>;
73
- export type CompletedWorkflowBuilder<TInputs extends WorkflowInputValues = {}, TOutputs extends WorkflowOutputValues = {}, TRunInputs extends WorkflowInputValues = TInputs> = AuthoringContract.CompletedWorkflowBuilder<TInputs, TOutputs, TRunInputs, WorkflowDefinitionBrand, WorkflowDefinition<TInputs, TOutputs, TRunInputs>>;
74
22
  export type RunContinuationOpts = AuthoringContract.RunContinuationOpts;
75
23
  export type WorkflowParentRunLink = AuthoringContract.WorkflowParentRunLink;
76
24
  export type RunOpts = Omit<AuthoringContract.RunOpts, "registry"> & {
@@ -78,7 +26,7 @@ export type RunOpts = Omit<AuthoringContract.RunOpts, "registry"> & {
78
26
  };
79
27
  export declare const INTERACTIVE_WORKFLOW_POLICY: WorkflowExecutionPolicy;
80
28
  export declare const NON_INTERACTIVE_WORKFLOW_POLICY: WorkflowExecutionPolicy;
81
- export declare function run<TInputs extends WorkflowInputValues, TOutputs extends WorkflowOutputValues, TRunInputs extends WorkflowInputValues = TInputs>(definition: WorkflowDefinition<TInputs, TOutputs, TRunInputs>, inputs: Readonly<NoInfer<TRunInputs>>, opts?: RunOpts): Promise<RunResult<TOutputs>>;
29
+ export declare function run<TInputs extends WorkflowInputValues, TOutputs extends WorkflowOutputValues, TRunInputs extends WorkflowInputValues = TInputs>(definition: WorkflowDefinition<TInputs, TOutputs, TRunInputs>, inputs: Readonly<NoInfer<WorkflowRunInputArgument<TRunInputs>>>, opts?: RunOpts): Promise<RunResult<TOutputs>>;
82
30
  export declare function runTask(task: WorkflowDirectTaskItem, runOptions?: RunOpts): Promise<WorkflowDetails>;
83
31
  export declare function runTask(task: WorkflowDirectTaskItem, options?: WorkflowDirectOptions, runOptions?: RunOpts): Promise<WorkflowDetails>;
84
32
  export declare function runParallel(tasks: readonly WorkflowDirectTaskItem[], options?: WorkflowDirectOptions, runOptions?: RunOpts): Promise<WorkflowDetails>;
@@ -86,7 +34,7 @@ export declare function runChain(steps: readonly WorkflowChainStep[], options?:
86
34
  export declare function resolveInputs<TInputs extends WorkflowInputValues>(schema: Readonly<Record<keyof TInputs & string, TSchema>>, provided: Partial<TInputs>): ResolvedInputs<TInputs>;
87
35
  export declare function setupGitWorktree(options: GitWorktreeSetupOptions): GitWorktreeSetupResult;
88
36
  export interface WorkflowRegistry {
89
- register<TInputs extends WorkflowInputValues, TOutputs extends WorkflowOutputValues>(definition: WorkflowDefinition<TInputs, TOutputs>): WorkflowRegistry;
37
+ register<TInputs extends WorkflowInputValues, TOutputs extends WorkflowOutputValues, TRunInputs extends WorkflowInputValues = TInputs>(definition: WorkflowDefinition<TInputs, TOutputs, TRunInputs>): WorkflowRegistry;
90
38
  merge(other: WorkflowRegistry): WorkflowRegistry;
91
39
  get(name: string): AnyWorkflowDefinition | undefined;
92
40
  has(name: string): boolean;
@@ -96,10 +44,10 @@ export interface WorkflowRegistry {
96
44
  }
97
45
  /**
98
46
  * @deprecated Removed imperative workflow API. This runtime value only throws
99
- * a migration error; author workflows with defineWorkflow(...).compile().
47
+ * a migration error; author workflows with workflow({...}).
100
48
  */
101
49
  export declare const runWorkflow: never;
102
- export declare function defineWorkflow(name: string): WorkflowBuilder;
50
+ export declare function workflow<const TInputs extends WorkflowInputSchemaMap = {}, const TOutputs extends WorkflowOutputSchemaMap = WorkflowOutputSchemaMap, TActualOutputs extends WorkflowOutputsFromSchemas<TOutputs> = WorkflowOutputsFromSchemas<TOutputs>>(spec: AuthoredWorkflowSpec<TInputs, TOutputs, TActualOutputs>): AuthoredWorkflowDefinition<TInputs, TOutputs>;
103
51
  export declare function createRegistry<TDefinitions extends readonly AnyWorkflowDefinition[] = readonly AnyWorkflowDefinition[]>(initial?: TDefinitions): WorkflowRegistry;
104
52
  export declare function normalizeWorkflowName(name: string): string;
105
53
  export declare function workflowNamesEqual(a: string, b: string): boolean;
@@ -0,0 +1,100 @@
1
+ /**
2
+ * GraphFrontierTracker — infers DAG parents from JavaScript execution order.
3
+ *
4
+ * Algorithm:
5
+ * - Maintain `frontier: Set<string>` — settled stage IDs not yet consumed as parents
6
+ * - At onSpawn(stageId): snapshot current frontier as parents, store in stageParents
7
+ * - At onSettle(stageId): remove stage's parents from frontier, add stageId to frontier
8
+ * - getParents(stageId): return recorded parents
9
+ */
10
+
11
+ export interface StageNode {
12
+ readonly id: string;
13
+ readonly name: string;
14
+ readonly parentIds: readonly string[];
15
+ }
16
+
17
+ export class GraphFrontierTracker {
18
+ private frontier: Set<string> = new Set();
19
+ private stageParents: Map<string, string[]> = new Map();
20
+ private nodes: Map<string, StageNode> = new Map();
21
+
22
+ /**
23
+ * Call when ctx.stage(name) is invoked.
24
+ * Returns the inferred parent IDs (snapshot of current frontier).
25
+ */
26
+ onSpawn(stageId: string, stageName: string): string[] {
27
+ const parents = Array.from(this.frontier);
28
+ this.stageParents.set(stageId, parents);
29
+
30
+ this.nodes.set(stageId, {
31
+ id: stageId,
32
+ name: stageName,
33
+ parentIds: Object.freeze(parents),
34
+ });
35
+
36
+ return parents;
37
+ }
38
+
39
+ /**
40
+ * Snapshot the current frontier without registering or mutating a stage.
41
+ *
42
+ * Use this when an already-spawned stage needs its parents refreshed before
43
+ * it starts; `onSpawn` must only be called for the initial `ctx.stage()`
44
+ * invocation that creates the graph node.
45
+ */
46
+ currentParents(): string[] {
47
+ return Array.from(this.frontier);
48
+ }
49
+
50
+ /**
51
+ * Replace the recorded parents for a stage before it settles.
52
+ *
53
+ * Continuation replay uses source-run topology as authoritative: a replayed
54
+ * stage may spawn with provisional parents inferred from the continuation's
55
+ * current frontier, then install the translated source parents before the
56
+ * stage is recorded or settled.
57
+ */
58
+ replaceParents(stageId: string, parentIds: readonly string[]): void {
59
+ const parents = Array.from(parentIds);
60
+ this.stageParents.set(stageId, parents);
61
+ const node = this.nodes.get(stageId);
62
+ if (node !== undefined) {
63
+ this.nodes.set(stageId, {
64
+ ...node,
65
+ parentIds: Object.freeze(parents),
66
+ });
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Call when the stage's Promise settles.
72
+ * Removes the stage's parents from the frontier and adds stageId to frontier.
73
+ */
74
+ onSettle(stageId: string): void {
75
+ const parents = this.stageParents.get(stageId) ?? [];
76
+ // Remove parents from frontier (they are now consumed)
77
+ for (const parentId of parents) {
78
+ this.frontier.delete(parentId);
79
+ }
80
+ // Add this stage to the frontier
81
+ this.frontier.add(stageId);
82
+ }
83
+
84
+ /** Get all recorded nodes as an array. */
85
+ getNodes(): StageNode[] {
86
+ return Array.from(this.nodes.values());
87
+ }
88
+
89
+ /** Get parent IDs for a stage. */
90
+ getParents(stageId: string): string[] {
91
+ return this.stageParents.get(stageId) ?? [];
92
+ }
93
+
94
+ /** Reset to initial state. */
95
+ reset(): void {
96
+ this.frontier.clear();
97
+ this.stageParents.clear();
98
+ this.nodes.clear();
99
+ }
100
+ }
@@ -0,0 +1,40 @@
1
+ import type { RunOpts } from "../runs/foreground/executor-types.js";
2
+
3
+ export type EngineStageRuntimeOptions = Pick<
4
+ RunOpts,
5
+ | "continuation"
6
+ | "models"
7
+ | "executionMode"
8
+ | "defaultSessionDir"
9
+ | "persistence"
10
+ | "onStageStart"
11
+ | "onStageEnd"
12
+ | "confirmStageReadiness"
13
+ | "usePromptNodesForUi"
14
+ >;
15
+
16
+ export type EngineWorkflowBoundaryOptions = Pick<
17
+ RunOpts,
18
+ "persistence" | "onStageStart" | "onStageEnd"
19
+ >;
20
+
21
+ export type EngineChildRunOptions = Pick<
22
+ RunOpts,
23
+ | "adapters"
24
+ | "ui"
25
+ | "executionMode"
26
+ | "defaultSessionDir"
27
+ | "usePromptNodesForUi"
28
+ | "confirmStageReadiness"
29
+ | "store"
30
+ | "persistence"
31
+ | "mcp"
32
+ | "cancellation"
33
+ | "overlay"
34
+ | "config"
35
+ | "models"
36
+ | "registry"
37
+ | "stageControlRegistry"
38
+ | "onStageStart"
39
+ | "onStageEnd"
40
+ >;