@plateforme-ai/lobster 2026.6.12

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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +353 -0
  3. package/VISION.md +249 -0
  4. package/bin/clawd.invoke.js +18 -0
  5. package/bin/lobster.js +24 -0
  6. package/bin/openclaw.invoke.js +21 -0
  7. package/dist/src/cli.js +793 -0
  8. package/dist/src/cli.js.map +1 -0
  9. package/dist/src/commands/commands_list.js +49 -0
  10. package/dist/src/commands/commands_list.js.map +1 -0
  11. package/dist/src/commands/registry.js +66 -0
  12. package/dist/src/commands/registry.js.map +1 -0
  13. package/dist/src/commands/stdlib/approve.js +77 -0
  14. package/dist/src/commands/stdlib/approve.js.map +1 -0
  15. package/dist/src/commands/stdlib/ask.js +171 -0
  16. package/dist/src/commands/stdlib/ask.js.map +1 -0
  17. package/dist/src/commands/stdlib/dedupe.js +55 -0
  18. package/dist/src/commands/stdlib/dedupe.js.map +1 -0
  19. package/dist/src/commands/stdlib/diff_last.js +35 -0
  20. package/dist/src/commands/stdlib/diff_last.js.map +1 -0
  21. package/dist/src/commands/stdlib/email_triage.js +279 -0
  22. package/dist/src/commands/stdlib/email_triage.js.map +1 -0
  23. package/dist/src/commands/stdlib/exec.js +130 -0
  24. package/dist/src/commands/stdlib/exec.js.map +1 -0
  25. package/dist/src/commands/stdlib/gog_gmail_search.js +94 -0
  26. package/dist/src/commands/stdlib/gog_gmail_search.js.map +1 -0
  27. package/dist/src/commands/stdlib/gog_gmail_send.js +104 -0
  28. package/dist/src/commands/stdlib/gog_gmail_send.js.map +1 -0
  29. package/dist/src/commands/stdlib/group_by.js +59 -0
  30. package/dist/src/commands/stdlib/group_by.js.map +1 -0
  31. package/dist/src/commands/stdlib/head.js +34 -0
  32. package/dist/src/commands/stdlib/head.js.map +1 -0
  33. package/dist/src/commands/stdlib/json.js +20 -0
  34. package/dist/src/commands/stdlib/json.js.map +1 -0
  35. package/dist/src/commands/stdlib/llm_invoke.js +758 -0
  36. package/dist/src/commands/stdlib/llm_invoke.js.map +1 -0
  37. package/dist/src/commands/stdlib/llm_task_invoke.js +2 -0
  38. package/dist/src/commands/stdlib/llm_task_invoke.js.map +1 -0
  39. package/dist/src/commands/stdlib/map.js +104 -0
  40. package/dist/src/commands/stdlib/map.js.map +1 -0
  41. package/dist/src/commands/stdlib/openclaw_invoke.js +136 -0
  42. package/dist/src/commands/stdlib/openclaw_invoke.js.map +1 -0
  43. package/dist/src/commands/stdlib/pick.js +45 -0
  44. package/dist/src/commands/stdlib/pick.js.map +1 -0
  45. package/dist/src/commands/stdlib/sort.js +86 -0
  46. package/dist/src/commands/stdlib/sort.js.map +1 -0
  47. package/dist/src/commands/stdlib/state.js +76 -0
  48. package/dist/src/commands/stdlib/state.js.map +1 -0
  49. package/dist/src/commands/stdlib/table.js +57 -0
  50. package/dist/src/commands/stdlib/table.js.map +1 -0
  51. package/dist/src/commands/stdlib/template.js +126 -0
  52. package/dist/src/commands/stdlib/template.js.map +1 -0
  53. package/dist/src/commands/stdlib/where.js +81 -0
  54. package/dist/src/commands/stdlib/where.js.map +1 -0
  55. package/dist/src/commands/types.js +2 -0
  56. package/dist/src/commands/types.js.map +1 -0
  57. package/dist/src/commands/workflows/workflows_list.js +24 -0
  58. package/dist/src/commands/workflows/workflows_list.js.map +1 -0
  59. package/dist/src/commands/workflows/workflows_run.js +74 -0
  60. package/dist/src/commands/workflows/workflows_run.js.map +1 -0
  61. package/dist/src/core/cost_tracker.js +119 -0
  62. package/dist/src/core/cost_tracker.js.map +1 -0
  63. package/dist/src/core/filters.js +102 -0
  64. package/dist/src/core/filters.js.map +1 -0
  65. package/dist/src/core/index.js +7 -0
  66. package/dist/src/core/index.js.map +1 -0
  67. package/dist/src/core/retry.js +89 -0
  68. package/dist/src/core/retry.js.map +1 -0
  69. package/dist/src/core/tool_runtime.js +289 -0
  70. package/dist/src/core/tool_runtime.js.map +1 -0
  71. package/dist/src/input_request.js +430 -0
  72. package/dist/src/input_request.js.map +1 -0
  73. package/dist/src/parser.js +145 -0
  74. package/dist/src/parser.js.map +1 -0
  75. package/dist/src/pipeline_resume_state.js +186 -0
  76. package/dist/src/pipeline_resume_state.js.map +1 -0
  77. package/dist/src/read_line.js +50 -0
  78. package/dist/src/read_line.js.map +1 -0
  79. package/dist/src/recipes/github/index.js +16 -0
  80. package/dist/src/recipes/github/index.js.map +1 -0
  81. package/dist/src/recipes/github/pr-monitor.js +248 -0
  82. package/dist/src/recipes/github/pr-monitor.js.map +1 -0
  83. package/dist/src/recipes/github/stages/pr-view.js +107 -0
  84. package/dist/src/recipes/github/stages/pr-view.js.map +1 -0
  85. package/dist/src/recipes/index.js +7 -0
  86. package/dist/src/recipes/index.js.map +1 -0
  87. package/dist/src/recipes/registry.js +30 -0
  88. package/dist/src/recipes/registry.js.map +1 -0
  89. package/dist/src/renderers/json.js +13 -0
  90. package/dist/src/renderers/json.js.map +1 -0
  91. package/dist/src/resume.js +179 -0
  92. package/dist/src/resume.js.map +1 -0
  93. package/dist/src/runtime.js +230 -0
  94. package/dist/src/runtime.js.map +1 -0
  95. package/dist/src/sdk/Lobster.js +402 -0
  96. package/dist/src/sdk/Lobster.js.map +1 -0
  97. package/dist/src/sdk/index.js +25 -0
  98. package/dist/src/sdk/index.js.map +1 -0
  99. package/dist/src/sdk/primitives/approve.js +47 -0
  100. package/dist/src/sdk/primitives/approve.js.map +1 -0
  101. package/dist/src/sdk/primitives/diff.js +156 -0
  102. package/dist/src/sdk/primitives/diff.js.map +1 -0
  103. package/dist/src/sdk/primitives/exec.js +167 -0
  104. package/dist/src/sdk/primitives/exec.js.map +1 -0
  105. package/dist/src/sdk/primitives/state.js +203 -0
  106. package/dist/src/sdk/primitives/state.js.map +1 -0
  107. package/dist/src/sdk/runtime.js +131 -0
  108. package/dist/src/sdk/runtime.js.map +1 -0
  109. package/dist/src/sdk/token.js +9 -0
  110. package/dist/src/sdk/token.js.map +1 -0
  111. package/dist/src/shell.js +39 -0
  112. package/dist/src/shell.js.map +1 -0
  113. package/dist/src/state/store.js +337 -0
  114. package/dist/src/state/store.js.map +1 -0
  115. package/dist/src/token.js +15 -0
  116. package/dist/src/token.js.map +1 -0
  117. package/dist/src/validation.js +38 -0
  118. package/dist/src/validation.js.map +1 -0
  119. package/dist/src/workflows/file.js +2405 -0
  120. package/dist/src/workflows/file.js.map +1 -0
  121. package/dist/src/workflows/github_pr_monitor.js +167 -0
  122. package/dist/src/workflows/github_pr_monitor.js.map +1 -0
  123. package/dist/src/workflows/graph.js +234 -0
  124. package/dist/src/workflows/graph.js.map +1 -0
  125. package/dist/src/workflows/registry.js +57 -0
  126. package/dist/src/workflows/registry.js.map +1 -0
  127. package/dist/test/approval_id.test.js +171 -0
  128. package/dist/test/approval_id.test.js.map +1 -0
  129. package/dist/test/approve_preview.test.js +38 -0
  130. package/dist/test/approve_preview.test.js.map +1 -0
  131. package/dist/test/clawd_invoke.test.js +124 -0
  132. package/dist/test/clawd_invoke.test.js.map +1 -0
  133. package/dist/test/clawd_invoke_legacy.test.js +63 -0
  134. package/dist/test/clawd_invoke_legacy.test.js.map +1 -0
  135. package/dist/test/cli_run_file_args_json.test.js +27 -0
  136. package/dist/test/cli_run_file_args_json.test.js.map +1 -0
  137. package/dist/test/commands_list.test.js +44 -0
  138. package/dist/test/commands_list.test.js.map +1 -0
  139. package/dist/test/condition_comparison.test.js +127 -0
  140. package/dist/test/condition_comparison.test.js.map +1 -0
  141. package/dist/test/core_tool_runtime.test.js +160 -0
  142. package/dist/test/core_tool_runtime.test.js.map +1 -0
  143. package/dist/test/cost_tracker.test.js +231 -0
  144. package/dist/test/cost_tracker.test.js.map +1 -0
  145. package/dist/test/dedupe.test.js +48 -0
  146. package/dist/test/dedupe.test.js.map +1 -0
  147. package/dist/test/diff_last.test.js +70 -0
  148. package/dist/test/diff_last.test.js.map +1 -0
  149. package/dist/test/doctor.test.js +19 -0
  150. package/dist/test/doctor.test.js.map +1 -0
  151. package/dist/test/dry_run.test.js +502 -0
  152. package/dist/test/dry_run.test.js.map +1 -0
  153. package/dist/test/email_triage.test.js +296 -0
  154. package/dist/test/email_triage.test.js.map +1 -0
  155. package/dist/test/exec_stdin.test.js +43 -0
  156. package/dist/test/exec_stdin.test.js.map +1 -0
  157. package/dist/test/for_each.test.js +228 -0
  158. package/dist/test/for_each.test.js.map +1 -0
  159. package/dist/test/github_pr_notify_format.test.js +19 -0
  160. package/dist/test/github_pr_notify_format.test.js.map +1 -0
  161. package/dist/test/github_pr_summary.test.js +41 -0
  162. package/dist/test/github_pr_summary.test.js.map +1 -0
  163. package/dist/test/group_by.test.js +43 -0
  164. package/dist/test/group_by.test.js.map +1 -0
  165. package/dist/test/llm_invoke.test.js +166 -0
  166. package/dist/test/llm_invoke.test.js.map +1 -0
  167. package/dist/test/llm_task_invoke.test.js +416 -0
  168. package/dist/test/llm_task_invoke.test.js.map +1 -0
  169. package/dist/test/map.test.js +41 -0
  170. package/dist/test/map.test.js.map +1 -0
  171. package/dist/test/multi_approval_resume.test.js +48 -0
  172. package/dist/test/multi_approval_resume.test.js.map +1 -0
  173. package/dist/test/on_error.test.js +151 -0
  174. package/dist/test/on_error.test.js.map +1 -0
  175. package/dist/test/openclaw_invoke_alias.test.js +13 -0
  176. package/dist/test/openclaw_invoke_alias.test.js.map +1 -0
  177. package/dist/test/parallel.test.js +184 -0
  178. package/dist/test/parallel.test.js.map +1 -0
  179. package/dist/test/parser.test.js +39 -0
  180. package/dist/test/parser.test.js.map +1 -0
  181. package/dist/test/read_line.test.js +25 -0
  182. package/dist/test/read_line.test.js.map +1 -0
  183. package/dist/test/request_input.test.js +946 -0
  184. package/dist/test/request_input.test.js.map +1 -0
  185. package/dist/test/resume.test.js +82 -0
  186. package/dist/test/resume.test.js.map +1 -0
  187. package/dist/test/sdk_lobster.test.js +177 -0
  188. package/dist/test/sdk_lobster.test.js.map +1 -0
  189. package/dist/test/shell.test.js +31 -0
  190. package/dist/test/shell.test.js.map +1 -0
  191. package/dist/test/sort.test.js +51 -0
  192. package/dist/test/sort.test.js.map +1 -0
  193. package/dist/test/state.test.js +336 -0
  194. package/dist/test/state.test.js.map +1 -0
  195. package/dist/test/step_retry.test.js +254 -0
  196. package/dist/test/step_retry.test.js.map +1 -0
  197. package/dist/test/step_timeout.test.js +154 -0
  198. package/dist/test/step_timeout.test.js.map +1 -0
  199. package/dist/test/template.test.js +46 -0
  200. package/dist/test/template.test.js.map +1 -0
  201. package/dist/test/template_filters.test.js +107 -0
  202. package/dist/test/template_filters.test.js.map +1 -0
  203. package/dist/test/tool_envelope_version.test.js +15 -0
  204. package/dist/test/tool_envelope_version.test.js.map +1 -0
  205. package/dist/test/tool_mode.test.js +83 -0
  206. package/dist/test/tool_mode.test.js.map +1 -0
  207. package/dist/test/validation.test.js +28 -0
  208. package/dist/test/validation.test.js.map +1 -0
  209. package/dist/test/workflow_args_env.test.js +41 -0
  210. package/dist/test/workflow_args_env.test.js.map +1 -0
  211. package/dist/test/workflow_composition.test.js +238 -0
  212. package/dist/test/workflow_composition.test.js.map +1 -0
  213. package/dist/test/workflow_file.test.js +1399 -0
  214. package/dist/test/workflow_file.test.js.map +1 -0
  215. package/dist/test/workflow_graph.test.js +97 -0
  216. package/dist/test/workflow_graph.test.js.map +1 -0
  217. package/dist/test/workflows.test.js +32 -0
  218. package/dist/test/workflows.test.js.map +1 -0
  219. package/package.json +75 -0
@@ -0,0 +1,430 @@
1
+ import { stableStringify } from "./state/store.js";
2
+ import { compileCached } from "./validation.js";
3
+ const MAX_REPLAY_ITEMS = 1000;
4
+ const MAX_REPLAY_BYTES = 1024 * 1024;
5
+ const MAX_REQUEST_HISTORY = 100;
6
+ export class InputRequestSuspension extends Error {
7
+ stageIndex;
8
+ request;
9
+ constructor(stageIndex, request) {
10
+ super("Input request suspended");
11
+ this.name = "InputRequestSuspension";
12
+ this.stageIndex = stageIndex;
13
+ this.request = request;
14
+ }
15
+ }
16
+ export class RequestInputResumeError extends Error {
17
+ constructor(message) {
18
+ super(message);
19
+ this.name = "RequestInputResumeError";
20
+ }
21
+ }
22
+ export function createInputTracker(input) {
23
+ const knownItems = Array.isArray(input) ? input : null;
24
+ let iterator = null;
25
+ let completed = false;
26
+ let closed = false;
27
+ let replayEnabled = true;
28
+ let replaySnapshotItems = [];
29
+ let replaySnapshotIndex = 0;
30
+ let replaySnapshotError = null;
31
+ let replaySnapshotBytes = 0;
32
+ const iterable = {
33
+ async *[Symbol.asyncIterator]() {
34
+ const iter = getIterator();
35
+ let hasPrimaryError = false;
36
+ let yieldedIndex = 0;
37
+ try {
38
+ while (true) {
39
+ const next = await iter.next();
40
+ if (next.done) {
41
+ completed = true;
42
+ return;
43
+ }
44
+ if (knownItems) {
45
+ snapshotKnownItemsThrough(yieldedIndex);
46
+ yieldedIndex += 1;
47
+ }
48
+ yield next.value;
49
+ }
50
+ }
51
+ catch (err) {
52
+ hasPrimaryError = true;
53
+ throw err;
54
+ }
55
+ finally {
56
+ await closeTrackedIterator({ suppressErrors: hasPrimaryError });
57
+ }
58
+ },
59
+ };
60
+ return {
61
+ iterable,
62
+ getReplayItems(hasSuspendedState) {
63
+ if (!replayEnabled) {
64
+ throw new Error("requestInput replay is no longer available after command output");
65
+ }
66
+ if (!knownItems) {
67
+ if (hasSuspendedState)
68
+ return [];
69
+ throw new Error("requestInput requires suspendedState when command input is streaming");
70
+ }
71
+ snapshotKnownItemsThrough(knownItems.length - 1);
72
+ if (replaySnapshotError)
73
+ throw replaySnapshotError;
74
+ return snapshotArray(replaySnapshotItems, "requestInput replay input");
75
+ },
76
+ disableReplay() {
77
+ replayEnabled = false;
78
+ },
79
+ async close(options = {}) {
80
+ await closeTrackedIterator({ suppressErrors: options.suppressErrors === true });
81
+ },
82
+ };
83
+ function getIterator() {
84
+ iterator ??= toAsyncIterator(input);
85
+ return iterator;
86
+ }
87
+ async function closeTrackedIterator({ suppressErrors }) {
88
+ if (!iterator || completed || closed)
89
+ return;
90
+ closed = true;
91
+ await closeIterator(iterator, { suppressErrors });
92
+ }
93
+ function snapshotKnownItemsThrough(index) {
94
+ if (!knownItems || replaySnapshotError)
95
+ return;
96
+ while (replaySnapshotIndex <= index && replaySnapshotIndex < knownItems.length) {
97
+ try {
98
+ const snapshot = snapshotJson(knownItems[replaySnapshotIndex], "requestInput replay input");
99
+ replaySnapshotBytes += Buffer.byteLength(JSON.stringify(snapshot), "utf8");
100
+ if (replaySnapshotItems.length + 1 > MAX_REPLAY_ITEMS ||
101
+ replaySnapshotBytes > MAX_REPLAY_BYTES) {
102
+ throw new Error("requestInput replay limit exceeded");
103
+ }
104
+ replaySnapshotItems.push(snapshot);
105
+ replaySnapshotIndex += 1;
106
+ }
107
+ catch (err) {
108
+ replaySnapshotError = err instanceof Error ? err : new Error(String(err));
109
+ return;
110
+ }
111
+ }
112
+ }
113
+ }
114
+ export function createStageRequestInput({ ctx, stageIndex, mode, inputTracker, isCommandActive, getInactiveReason, isOutputStarted, resume, }) {
115
+ let requestIndex = 0;
116
+ const history = [...(resume?.state.history ?? [])];
117
+ const requestInput = async function requestInput(params) {
118
+ if (!isCommandActive()) {
119
+ throw new Error(getInactiveReason?.() ?? "requestInput cannot run after the command has completed");
120
+ }
121
+ const metadata = snapshotRequestMetadata(params);
122
+ const requestedSuspendedState = params.suspendedState === undefined
123
+ ? undefined
124
+ : snapshotJson(params.suspendedState, "requestInput suspendedState");
125
+ const historical = history[requestIndex];
126
+ if (historical) {
127
+ assertMetadataMatches(historical.requestIndex, historical.metadata, requestIndex, metadata);
128
+ assertSuspendedStateMatches(historical.suspendedState, requestedSuspendedState);
129
+ const response = snapshotJson(historical.response, "requestInput response");
130
+ validateRequestInputResponse(metadata.responseSchema, response, "requestInput");
131
+ requestIndex += 1;
132
+ return response;
133
+ }
134
+ if (resume && !resume.consumed) {
135
+ assertMetadataMatches(resume.state.pending.requestIndex, resume.state.pending.metadata, requestIndex, metadata);
136
+ assertSuspendedStateMatches(resume.state.pending.suspendedState, requestedSuspendedState);
137
+ const response = snapshotJson(resume.response, "requestInput response");
138
+ validateRequestInputResponse(metadata.responseSchema, response, "requestInput");
139
+ const historyResponse = snapshotJson(response, "requestInput response");
140
+ await resume.onConsumed?.();
141
+ resume.consumed = true;
142
+ history.push({
143
+ requestIndex,
144
+ metadata,
145
+ ...(requestedSuspendedState !== undefined
146
+ ? { suspendedState: requestedSuspendedState }
147
+ : null),
148
+ response: historyResponse,
149
+ });
150
+ requestIndex += 1;
151
+ return response;
152
+ }
153
+ if (mode === "human" && isInteractive(ctx.stdin)) {
154
+ return requestInputInteractively(ctx, metadata);
155
+ }
156
+ if (isOutputStarted()) {
157
+ throw new Error("requestInput cannot suspend after this command has produced output");
158
+ }
159
+ if (history.length >= MAX_REQUEST_HISTORY) {
160
+ throw new Error("requestInput replay history limit exceeded");
161
+ }
162
+ const items = inputTracker.getReplayItems(requestedSuspendedState !== undefined);
163
+ const pending = {
164
+ requestIndex,
165
+ metadata,
166
+ ...(requestedSuspendedState !== undefined
167
+ ? { suspendedState: requestedSuspendedState }
168
+ : null),
169
+ };
170
+ throw new InputRequestSuspension(stageIndex, {
171
+ type: "input_request",
172
+ prompt: metadata.prompt,
173
+ responseSchema: metadata.responseSchema,
174
+ ...(metadata.defaults !== undefined ? { defaults: metadata.defaults } : null),
175
+ ...(metadata.subject !== undefined ? { subject: metadata.subject } : null),
176
+ items,
177
+ commandInput: {
178
+ pending,
179
+ history,
180
+ },
181
+ });
182
+ };
183
+ requestInput.getSuspendedState = function getSuspendedState() {
184
+ if (requestIndex < history.length) {
185
+ return snapshotOptionalState(history[requestIndex].suspendedState);
186
+ }
187
+ if (resume && !resume.consumed && resume.state.pending.requestIndex === requestIndex) {
188
+ return snapshotOptionalState(resume.state.pending.suspendedState);
189
+ }
190
+ return undefined;
191
+ };
192
+ return requestInput;
193
+ }
194
+ export function assertRequestInputResumeConsumed(resume) {
195
+ if (resume && !resume.consumed) {
196
+ throw new RequestInputResumeError("resume input response was not consumed by requestInput");
197
+ }
198
+ }
199
+ export function snapshotRequestMetadata(params) {
200
+ validateRequestInputParams(params);
201
+ const responseSchema = snapshotJson(params.responseSchema, "requestInput responseSchema");
202
+ const defaults = params.defaults === undefined
203
+ ? undefined
204
+ : snapshotJson(params.defaults, "requestInput defaults");
205
+ const subject = params.subject === undefined ? undefined : snapshotJson(params.subject, "requestInput subject");
206
+ const unsigned = {
207
+ prompt: params.prompt,
208
+ responseSchema,
209
+ ...(defaults !== undefined ? { defaults } : null),
210
+ ...(subject !== undefined ? { subject } : null),
211
+ };
212
+ return {
213
+ ...unsigned,
214
+ signature: stableStringify(unsigned),
215
+ };
216
+ }
217
+ export function validateCommandInputState(value) {
218
+ if (!value || typeof value !== "object")
219
+ throw new Error("Invalid pipeline resume state");
220
+ const data = value;
221
+ validatePending(data.pending);
222
+ if (!Array.isArray(data.history))
223
+ throw new Error("Invalid pipeline resume state");
224
+ if (data.history.length !== data.pending.requestIndex) {
225
+ throw new Error("Invalid pipeline resume state");
226
+ }
227
+ data.history.forEach(validateHistoryEntry);
228
+ return data;
229
+ }
230
+ export function validateRequestInputResponse(schema, response, label) {
231
+ let validator;
232
+ try {
233
+ validator = compileCached(schema);
234
+ }
235
+ catch {
236
+ throw new Error(`${label} response schema is invalid`);
237
+ }
238
+ if (validator(response))
239
+ return;
240
+ const first = validator.errors?.[0];
241
+ const pathValue = first?.instancePath || "/";
242
+ const reason = first?.message ? ` ${first.message}` : "";
243
+ throw new Error(`${label} response failed schema validation at ${pathValue}:${reason}`);
244
+ }
245
+ function validateRequestInputParams(params) {
246
+ if (!params || typeof params !== "object") {
247
+ throw new Error("requestInput params must be an object");
248
+ }
249
+ if (typeof params.prompt !== "string" || params.prompt.length === 0) {
250
+ throw new Error("requestInput prompt is required");
251
+ }
252
+ if (params.responseSchema === undefined) {
253
+ throw new Error("requestInput responseSchema is required");
254
+ }
255
+ try {
256
+ compileCached(params.responseSchema);
257
+ }
258
+ catch {
259
+ throw new Error("requestInput response schema is invalid");
260
+ }
261
+ }
262
+ function validatePending(value) {
263
+ if (!value || typeof value !== "object")
264
+ throw new Error("Invalid pipeline resume state");
265
+ const data = value;
266
+ if (typeof data.requestIndex !== "number" ||
267
+ !Number.isInteger(data.requestIndex) ||
268
+ data.requestIndex < 0) {
269
+ throw new Error("Invalid pipeline resume state");
270
+ }
271
+ validateStoredMetadata(data.metadata);
272
+ if (data.suspendedState !== undefined) {
273
+ snapshotJson(data.suspendedState, "requestInput suspendedState");
274
+ }
275
+ }
276
+ function validateHistoryEntry(value, index) {
277
+ if (!value || typeof value !== "object")
278
+ throw new Error("Invalid pipeline resume state");
279
+ const data = value;
280
+ if (data.requestIndex !== index)
281
+ throw new Error("Invalid pipeline resume state");
282
+ validateStoredMetadata(data.metadata);
283
+ if (data.suspendedState !== undefined) {
284
+ snapshotJson(data.suspendedState, "requestInput suspendedState");
285
+ }
286
+ if (data.response === undefined)
287
+ throw new Error("Invalid pipeline resume state");
288
+ snapshotJson(data.response, "requestInput response");
289
+ }
290
+ function validateStoredMetadata(value) {
291
+ if (!value || typeof value !== "object")
292
+ throw new Error("Invalid pipeline resume state");
293
+ const data = value;
294
+ if (typeof data.prompt !== "string" || data.prompt.length === 0) {
295
+ throw new Error("Invalid pipeline resume state");
296
+ }
297
+ if (typeof data.signature !== "string" || data.signature.length === 0) {
298
+ throw new Error("Invalid pipeline resume state");
299
+ }
300
+ if (data.responseSchema === undefined)
301
+ throw new Error("Invalid pipeline resume state");
302
+ const actual = snapshotRequestMetadata({
303
+ prompt: data.prompt,
304
+ responseSchema: data.responseSchema,
305
+ ...(data.defaults !== undefined ? { defaults: data.defaults } : null),
306
+ ...(data.subject !== undefined ? { subject: data.subject } : null),
307
+ });
308
+ if (actual.signature !== data.signature)
309
+ throw new Error("Invalid pipeline resume state");
310
+ }
311
+ function assertMetadataMatches(storedIndex, stored, actualIndex, actual) {
312
+ if (storedIndex !== actualIndex ||
313
+ stored.prompt !== actual.prompt ||
314
+ stored.signature !== actual.signature) {
315
+ throw new RequestInputResumeError("requestInput resume request does not match suspended request");
316
+ }
317
+ }
318
+ function assertSuspendedStateMatches(stored, actual) {
319
+ if (stableStringify(stored) !== stableStringify(actual)) {
320
+ throw new RequestInputResumeError("requestInput resume state does not match suspended request");
321
+ }
322
+ }
323
+ function snapshotOptionalState(state) {
324
+ return state === undefined ? undefined : snapshotJson(state, "requestInput suspendedState");
325
+ }
326
+ function snapshotArray(items, label) {
327
+ if (items.length > MAX_REPLAY_ITEMS)
328
+ throw new Error("requestInput replay item limit exceeded");
329
+ let totalBytes = 0;
330
+ return items.map((item) => {
331
+ const snapshot = snapshotJson(item, label);
332
+ totalBytes += Buffer.byteLength(JSON.stringify(snapshot), "utf8");
333
+ if (totalBytes > MAX_REPLAY_BYTES) {
334
+ throw new Error("requestInput replay byte limit exceeded");
335
+ }
336
+ return snapshot;
337
+ });
338
+ }
339
+ function snapshotJson(value, label) {
340
+ assertJsonSerializable(value, label, new WeakSet());
341
+ const text = JSON.stringify(value);
342
+ if (text === undefined)
343
+ throw new Error(`${label} must be JSON-serializable`);
344
+ return JSON.parse(text);
345
+ }
346
+ function assertJsonSerializable(value, label, seen) {
347
+ if (value === null)
348
+ return;
349
+ const type = typeof value;
350
+ if (type === "string" || type === "boolean")
351
+ return;
352
+ if (type === "number") {
353
+ if (!Number.isFinite(value))
354
+ throw new Error(`${label} must be JSON-serializable`);
355
+ return;
356
+ }
357
+ if (type === "undefined" || type === "function" || type === "symbol" || type === "bigint") {
358
+ throw new Error(`${label} must be JSON-serializable`);
359
+ }
360
+ const object = value;
361
+ if (seen.has(object))
362
+ throw new Error(`${label} must be JSON-serializable`);
363
+ const prototype = Object.getPrototypeOf(object);
364
+ if (prototype !== Object.prototype && prototype !== null && !Array.isArray(value)) {
365
+ throw new Error(`${label} must be JSON-serializable`);
366
+ }
367
+ seen.add(object);
368
+ if (Array.isArray(value)) {
369
+ for (let index = 0; index < value.length; index++) {
370
+ if (!(index in value))
371
+ throw new Error(`${label} must be JSON-serializable`);
372
+ assertJsonSerializable(value[index], label, seen);
373
+ }
374
+ }
375
+ else {
376
+ for (const key of Object.keys(value)) {
377
+ assertJsonSerializable(value[key], label, seen);
378
+ }
379
+ }
380
+ seen.delete(object);
381
+ }
382
+ async function requestInputInteractively(ctx, metadata) {
383
+ ctx.stdout.write(`${metadata.prompt}\n> `);
384
+ const { readLineFromStream } = await import("./read_line.js");
385
+ const raw = await readLineFromStream(ctx.stdin, { timeoutMs: 0 });
386
+ let response;
387
+ try {
388
+ response = JSON.parse(String(raw ?? "").trim());
389
+ }
390
+ catch {
391
+ throw new Error("requestInput response must be valid JSON");
392
+ }
393
+ validateRequestInputResponse(metadata.responseSchema, response, "requestInput");
394
+ return snapshotJson(response, "requestInput response");
395
+ }
396
+ function isInteractive(stdin) {
397
+ return Boolean(stdin?.isTTY);
398
+ }
399
+ async function closeIterator(iterator, { suppressErrors }) {
400
+ if (typeof iterator.return !== "function")
401
+ return;
402
+ try {
403
+ await iterator.return();
404
+ }
405
+ catch (err) {
406
+ if (!suppressErrors)
407
+ throw err;
408
+ // Cleanup must not mask the original command error or suspension.
409
+ }
410
+ }
411
+ function toAsyncIterator(input) {
412
+ if (typeof input[Symbol.asyncIterator] === "function") {
413
+ return input[Symbol.asyncIterator]();
414
+ }
415
+ if (typeof input[Symbol.iterator] === "function") {
416
+ const iterator = input[Symbol.iterator]();
417
+ return {
418
+ async next() {
419
+ return iterator.next();
420
+ },
421
+ async return() {
422
+ if (typeof iterator.return === "function")
423
+ iterator.return();
424
+ return { done: true, value: undefined };
425
+ },
426
+ };
427
+ }
428
+ throw new Error("input is not iterable");
429
+ }
430
+ //# sourceMappingURL=input_request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input_request.js","sourceRoot":"","sources":["../../src/input_request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ function isWhitespace(ch) {
2
+ return ch === " " || ch === "\t" || ch === "\n" || ch === "\r";
3
+ }
4
+ function splitPipes(input) {
5
+ const parts = [];
6
+ let current = "";
7
+ let quote = null;
8
+ for (let i = 0; i < input.length; i++) {
9
+ const ch = input[i];
10
+ if (quote) {
11
+ if (ch === "\\") {
12
+ const next = input[i + 1];
13
+ if (next) {
14
+ current += ch + next;
15
+ i++;
16
+ continue;
17
+ }
18
+ }
19
+ current += ch;
20
+ if (ch === quote) {
21
+ quote = null;
22
+ }
23
+ continue;
24
+ }
25
+ if (ch === '"' || ch === "'") {
26
+ quote = ch;
27
+ current += ch;
28
+ continue;
29
+ }
30
+ if (ch === "|") {
31
+ parts.push(current.trim());
32
+ current = "";
33
+ continue;
34
+ }
35
+ current += ch;
36
+ }
37
+ if (quote)
38
+ throw new Error("Unclosed quote");
39
+ if (current.trim().length > 0)
40
+ parts.push(current.trim());
41
+ return parts;
42
+ }
43
+ function tokenizeCommand(input) {
44
+ const tokens = [];
45
+ let current = "";
46
+ let quote = null;
47
+ const push = () => {
48
+ if (current.length > 0)
49
+ tokens.push(current);
50
+ current = "";
51
+ };
52
+ for (let i = 0; i < input.length; i++) {
53
+ const ch = input[i];
54
+ if (quote) {
55
+ if (quote === "'") {
56
+ if (ch === "\\" && input[i + 1] === quote) {
57
+ current += quote;
58
+ i++;
59
+ continue;
60
+ }
61
+ if (ch === quote) {
62
+ quote = null;
63
+ continue;
64
+ }
65
+ current += ch;
66
+ continue;
67
+ }
68
+ // Double-quoted mode: preserve unknown escapes (\n, \t, etc) while
69
+ // unescaping only shell-like quote/backslash escapes.
70
+ if (ch === "\\") {
71
+ const next = input[i + 1];
72
+ if (next === '"' || next === "\\" || next === "$" || next === "`") {
73
+ current += next;
74
+ i++;
75
+ continue;
76
+ }
77
+ if (next === "\n") {
78
+ i++;
79
+ continue;
80
+ }
81
+ current += ch;
82
+ continue;
83
+ }
84
+ if (ch === quote) {
85
+ quote = null;
86
+ continue;
87
+ }
88
+ current += ch;
89
+ continue;
90
+ }
91
+ if (ch === '"' || ch === "'") {
92
+ quote = ch;
93
+ continue;
94
+ }
95
+ if (isWhitespace(ch)) {
96
+ push();
97
+ continue;
98
+ }
99
+ current += ch;
100
+ }
101
+ if (quote)
102
+ throw new Error("Unclosed quote");
103
+ push();
104
+ return tokens;
105
+ }
106
+ function parseArgs(tokens) {
107
+ const args = { _: [] };
108
+ for (let i = 0; i < tokens.length; i++) {
109
+ const tok = tokens[i];
110
+ if (tok.startsWith("--")) {
111
+ const eq = tok.indexOf("=");
112
+ if (eq !== -1) {
113
+ const key = tok.slice(2, eq);
114
+ const value = tok.slice(eq + 1);
115
+ args[key] = value;
116
+ continue;
117
+ }
118
+ const key = tok.slice(2);
119
+ const next = tokens[i + 1];
120
+ if (!next || next.startsWith("--")) {
121
+ args[key] = true;
122
+ continue;
123
+ }
124
+ args[key] = next;
125
+ i++;
126
+ continue;
127
+ }
128
+ args._.push(tok);
129
+ }
130
+ return args;
131
+ }
132
+ export function parsePipeline(input) {
133
+ const stages = splitPipes(input);
134
+ if (stages.length === 0)
135
+ throw new Error("Empty pipeline");
136
+ return stages.map((stage) => {
137
+ const tokens = tokenizeCommand(stage);
138
+ if (tokens.length === 0)
139
+ throw new Error("Empty command stage");
140
+ const name = tokens[0];
141
+ const args = parseArgs(tokens.slice(1));
142
+ return { name, args, raw: stage };
143
+ });
144
+ }
145
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}