@openclaw/lobster 2026.5.24-beta.1 → 2026.5.25-beta.1

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 (171) hide show
  1. package/node_modules/@clawdbot/lobster/README.md +50 -1
  2. package/node_modules/@clawdbot/lobster/dist/src/cli.js +295 -94
  3. package/node_modules/@clawdbot/lobster/dist/src/cli.js.map +1 -1
  4. package/node_modules/@clawdbot/lobster/dist/src/commands/commands_list.js +8 -6
  5. package/node_modules/@clawdbot/lobster/dist/src/commands/commands_list.js.map +1 -1
  6. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/approve.js +16 -16
  7. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/ask.js +52 -41
  8. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/ask.js.map +1 -1
  9. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/dedupe.js +10 -7
  10. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/dedupe.js.map +1 -1
  11. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/diff_last.js +10 -10
  12. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/email_triage.js +85 -67
  13. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/email_triage.js.map +1 -1
  14. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/exec.js +48 -34
  15. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/exec.js.map +1 -1
  16. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/gog_gmail_search.js +1 -1
  17. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/gog_gmail_send.js +1 -1
  18. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/group_by.js +9 -9
  19. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/head.js +6 -6
  20. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/json.js +3 -3
  21. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/llm_invoke.js +219 -185
  22. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/llm_invoke.js.map +1 -1
  23. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/llm_task_invoke.js +1 -1
  24. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/map.js +21 -17
  25. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/map.js.map +1 -1
  26. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/openclaw_invoke.js +36 -33
  27. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/openclaw_invoke.js.map +1 -1
  28. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/pick.js +13 -10
  29. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/pick.js.map +1 -1
  30. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/sort.js +9 -9
  31. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/state.js +19 -19
  32. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/table.js +14 -15
  33. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/table.js.map +1 -1
  34. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/template.js +73 -19
  35. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/template.js.map +1 -1
  36. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/where.js +29 -22
  37. package/node_modules/@clawdbot/lobster/dist/src/commands/stdlib/where.js.map +1 -1
  38. package/node_modules/@clawdbot/lobster/dist/src/commands/workflows/workflows_list.js +4 -4
  39. package/node_modules/@clawdbot/lobster/dist/src/commands/workflows/workflows_run.js +18 -18
  40. package/node_modules/@clawdbot/lobster/dist/src/commands/workflows/workflows_run.js.map +1 -1
  41. package/node_modules/@clawdbot/lobster/dist/src/core/cost_tracker.js +73 -0
  42. package/node_modules/@clawdbot/lobster/dist/src/core/cost_tracker.js.map +1 -0
  43. package/node_modules/@clawdbot/lobster/dist/src/core/filters.js +102 -0
  44. package/node_modules/@clawdbot/lobster/dist/src/core/filters.js.map +1 -0
  45. package/node_modules/@clawdbot/lobster/dist/src/core/index.js +6 -6
  46. package/node_modules/@clawdbot/lobster/dist/src/core/retry.js +85 -0
  47. package/node_modules/@clawdbot/lobster/dist/src/core/retry.js.map +1 -0
  48. package/node_modules/@clawdbot/lobster/dist/src/core/tool_runtime.js +57 -57
  49. package/node_modules/@clawdbot/lobster/dist/src/core/tool_runtime.js.map +1 -1
  50. package/node_modules/@clawdbot/lobster/dist/src/parser.js +18 -18
  51. package/node_modules/@clawdbot/lobster/dist/src/pipeline_resume_state.js +28 -31
  52. package/node_modules/@clawdbot/lobster/dist/src/pipeline_resume_state.js.map +1 -1
  53. package/node_modules/@clawdbot/lobster/dist/src/read_line.js +11 -11
  54. package/node_modules/@clawdbot/lobster/dist/src/read_line.js.map +1 -1
  55. package/node_modules/@clawdbot/lobster/dist/src/recipes/github/index.js +4 -4
  56. package/node_modules/@clawdbot/lobster/dist/src/recipes/github/pr-monitor.js +61 -53
  57. package/node_modules/@clawdbot/lobster/dist/src/recipes/github/pr-monitor.js.map +1 -1
  58. package/node_modules/@clawdbot/lobster/dist/src/recipes/github/stages/pr-view.js +33 -26
  59. package/node_modules/@clawdbot/lobster/dist/src/recipes/github/stages/pr-view.js.map +1 -1
  60. package/node_modules/@clawdbot/lobster/dist/src/renderers/json.js +2 -2
  61. package/node_modules/@clawdbot/lobster/dist/src/resume.js +51 -49
  62. package/node_modules/@clawdbot/lobster/dist/src/resume.js.map +1 -1
  63. package/node_modules/@clawdbot/lobster/dist/src/runtime.js +10 -10
  64. package/node_modules/@clawdbot/lobster/dist/src/sdk/Lobster.js +49 -41
  65. package/node_modules/@clawdbot/lobster/dist/src/sdk/Lobster.js.map +1 -1
  66. package/node_modules/@clawdbot/lobster/dist/src/sdk/index.js +6 -6
  67. package/node_modules/@clawdbot/lobster/dist/src/sdk/primitives/approve.js +3 -3
  68. package/node_modules/@clawdbot/lobster/dist/src/sdk/primitives/approve.js.map +1 -1
  69. package/node_modules/@clawdbot/lobster/dist/src/sdk/primitives/diff.js +22 -20
  70. package/node_modules/@clawdbot/lobster/dist/src/sdk/primitives/diff.js.map +1 -1
  71. package/node_modules/@clawdbot/lobster/dist/src/sdk/primitives/exec.js +21 -17
  72. package/node_modules/@clawdbot/lobster/dist/src/sdk/primitives/exec.js.map +1 -1
  73. package/node_modules/@clawdbot/lobster/dist/src/sdk/primitives/state.js +18 -18
  74. package/node_modules/@clawdbot/lobster/dist/src/sdk/runtime.js +7 -7
  75. package/node_modules/@clawdbot/lobster/dist/src/sdk/runtime.js.map +1 -1
  76. package/node_modules/@clawdbot/lobster/dist/src/sdk/token.js +1 -1
  77. package/node_modules/@clawdbot/lobster/dist/src/shell.js +14 -14
  78. package/node_modules/@clawdbot/lobster/dist/src/state/store.js +37 -33
  79. package/node_modules/@clawdbot/lobster/dist/src/state/store.js.map +1 -1
  80. package/node_modules/@clawdbot/lobster/dist/src/token.js +4 -4
  81. package/node_modules/@clawdbot/lobster/dist/src/validation.js +31 -1
  82. package/node_modules/@clawdbot/lobster/dist/src/validation.js.map +1 -1
  83. package/node_modules/@clawdbot/lobster/dist/src/workflows/file.js +1367 -379
  84. package/node_modules/@clawdbot/lobster/dist/src/workflows/file.js.map +1 -1
  85. package/node_modules/@clawdbot/lobster/dist/src/workflows/github_pr_monitor.js +35 -31
  86. package/node_modules/@clawdbot/lobster/dist/src/workflows/github_pr_monitor.js.map +1 -1
  87. package/node_modules/@clawdbot/lobster/dist/src/workflows/graph.js +234 -0
  88. package/node_modules/@clawdbot/lobster/dist/src/workflows/graph.js.map +1 -0
  89. package/node_modules/@clawdbot/lobster/dist/src/workflows/registry.js +24 -21
  90. package/node_modules/@clawdbot/lobster/dist/src/workflows/registry.js.map +1 -1
  91. package/node_modules/@clawdbot/lobster/dist/test/approval_id.test.js +87 -77
  92. package/node_modules/@clawdbot/lobster/dist/test/approval_id.test.js.map +1 -1
  93. package/node_modules/@clawdbot/lobster/dist/test/approve_preview.test.js +9 -9
  94. package/node_modules/@clawdbot/lobster/dist/test/clawd_invoke.test.js +41 -38
  95. package/node_modules/@clawdbot/lobster/dist/test/clawd_invoke.test.js.map +1 -1
  96. package/node_modules/@clawdbot/lobster/dist/test/clawd_invoke_legacy.test.js +20 -20
  97. package/node_modules/@clawdbot/lobster/dist/test/cli_run_file_args_json.test.js +15 -21
  98. package/node_modules/@clawdbot/lobster/dist/test/cli_run_file_args_json.test.js.map +1 -1
  99. package/node_modules/@clawdbot/lobster/dist/test/commands_list.test.js +14 -14
  100. package/node_modules/@clawdbot/lobster/dist/test/condition_comparison.test.js +127 -0
  101. package/node_modules/@clawdbot/lobster/dist/test/condition_comparison.test.js.map +1 -0
  102. package/node_modules/@clawdbot/lobster/dist/test/core_tool_runtime.test.js +57 -57
  103. package/node_modules/@clawdbot/lobster/dist/test/cost_tracker.test.js +126 -0
  104. package/node_modules/@clawdbot/lobster/dist/test/cost_tracker.test.js.map +1 -0
  105. package/node_modules/@clawdbot/lobster/dist/test/dedupe.test.js +20 -18
  106. package/node_modules/@clawdbot/lobster/dist/test/dedupe.test.js.map +1 -1
  107. package/node_modules/@clawdbot/lobster/dist/test/diff_last.test.js +39 -15
  108. package/node_modules/@clawdbot/lobster/dist/test/diff_last.test.js.map +1 -1
  109. package/node_modules/@clawdbot/lobster/dist/test/doctor.test.js +11 -11
  110. package/node_modules/@clawdbot/lobster/dist/test/dry_run.test.js +232 -178
  111. package/node_modules/@clawdbot/lobster/dist/test/dry_run.test.js.map +1 -1
  112. package/node_modules/@clawdbot/lobster/dist/test/email_triage.test.js +3 -1
  113. package/node_modules/@clawdbot/lobster/dist/test/email_triage.test.js.map +1 -1
  114. package/node_modules/@clawdbot/lobster/dist/test/exec_stdin.test.js +9 -9
  115. package/node_modules/@clawdbot/lobster/dist/test/for_each.test.js +211 -0
  116. package/node_modules/@clawdbot/lobster/dist/test/for_each.test.js.map +1 -0
  117. package/node_modules/@clawdbot/lobster/dist/test/github_pr_notify_format.test.js +14 -14
  118. package/node_modules/@clawdbot/lobster/dist/test/github_pr_summary.test.js +25 -25
  119. package/node_modules/@clawdbot/lobster/dist/test/group_by.test.js +21 -23
  120. package/node_modules/@clawdbot/lobster/dist/test/group_by.test.js.map +1 -1
  121. package/node_modules/@clawdbot/lobster/dist/test/llm_invoke.test.js +60 -60
  122. package/node_modules/@clawdbot/lobster/dist/test/llm_invoke.test.js.map +1 -1
  123. package/node_modules/@clawdbot/lobster/dist/test/llm_task_invoke.test.js +119 -113
  124. package/node_modules/@clawdbot/lobster/dist/test/llm_task_invoke.test.js.map +1 -1
  125. package/node_modules/@clawdbot/lobster/dist/test/map.test.js +20 -18
  126. package/node_modules/@clawdbot/lobster/dist/test/map.test.js.map +1 -1
  127. package/node_modules/@clawdbot/lobster/dist/test/multi_approval_resume.test.js +23 -23
  128. package/node_modules/@clawdbot/lobster/dist/test/multi_approval_resume.test.js.map +1 -1
  129. package/node_modules/@clawdbot/lobster/dist/test/on_error.test.js +151 -0
  130. package/node_modules/@clawdbot/lobster/dist/test/on_error.test.js.map +1 -0
  131. package/node_modules/@clawdbot/lobster/dist/test/openclaw_invoke_alias.test.js +10 -10
  132. package/node_modules/@clawdbot/lobster/dist/test/parallel.test.js +171 -0
  133. package/node_modules/@clawdbot/lobster/dist/test/parallel.test.js.map +1 -0
  134. package/node_modules/@clawdbot/lobster/dist/test/parser.test.js +22 -22
  135. package/node_modules/@clawdbot/lobster/dist/test/parser.test.js.map +1 -1
  136. package/node_modules/@clawdbot/lobster/dist/test/read_line.test.js +11 -11
  137. package/node_modules/@clawdbot/lobster/dist/test/read_line.test.js.map +1 -1
  138. package/node_modules/@clawdbot/lobster/dist/test/resume.test.js +45 -39
  139. package/node_modules/@clawdbot/lobster/dist/test/resume.test.js.map +1 -1
  140. package/node_modules/@clawdbot/lobster/dist/test/sdk_lobster.test.js +23 -23
  141. package/node_modules/@clawdbot/lobster/dist/test/shell.test.js +21 -21
  142. package/node_modules/@clawdbot/lobster/dist/test/sort.test.js +27 -25
  143. package/node_modules/@clawdbot/lobster/dist/test/sort.test.js.map +1 -1
  144. package/node_modules/@clawdbot/lobster/dist/test/state.test.js +35 -19
  145. package/node_modules/@clawdbot/lobster/dist/test/state.test.js.map +1 -1
  146. package/node_modules/@clawdbot/lobster/dist/test/step_retry.test.js +210 -0
  147. package/node_modules/@clawdbot/lobster/dist/test/step_retry.test.js.map +1 -0
  148. package/node_modules/@clawdbot/lobster/dist/test/step_timeout.test.js +154 -0
  149. package/node_modules/@clawdbot/lobster/dist/test/step_timeout.test.js.map +1 -0
  150. package/node_modules/@clawdbot/lobster/dist/test/template.test.js +25 -23
  151. package/node_modules/@clawdbot/lobster/dist/test/template.test.js.map +1 -1
  152. package/node_modules/@clawdbot/lobster/dist/test/template_filters.test.js +107 -0
  153. package/node_modules/@clawdbot/lobster/dist/test/template_filters.test.js.map +1 -0
  154. package/node_modules/@clawdbot/lobster/dist/test/tool_envelope_version.test.js +8 -8
  155. package/node_modules/@clawdbot/lobster/dist/test/tool_mode.test.js +21 -21
  156. package/node_modules/@clawdbot/lobster/dist/test/tool_mode.test.js.map +1 -1
  157. package/node_modules/@clawdbot/lobster/dist/test/validation.test.js +28 -0
  158. package/node_modules/@clawdbot/lobster/dist/test/validation.test.js.map +1 -0
  159. package/node_modules/@clawdbot/lobster/dist/test/workflow_args_env.test.js +17 -17
  160. package/node_modules/@clawdbot/lobster/dist/test/workflow_args_env.test.js.map +1 -1
  161. package/node_modules/@clawdbot/lobster/dist/test/workflow_composition.test.js +238 -0
  162. package/node_modules/@clawdbot/lobster/dist/test/workflow_composition.test.js.map +1 -0
  163. package/node_modules/@clawdbot/lobster/dist/test/workflow_file.test.js +551 -217
  164. package/node_modules/@clawdbot/lobster/dist/test/workflow_file.test.js.map +1 -1
  165. package/node_modules/@clawdbot/lobster/dist/test/workflow_graph.test.js +97 -0
  166. package/node_modules/@clawdbot/lobster/dist/test/workflow_graph.test.js.map +1 -0
  167. package/node_modules/@clawdbot/lobster/dist/test/workflows.test.js +15 -7
  168. package/node_modules/@clawdbot/lobster/dist/test/workflows.test.js.map +1 -1
  169. package/node_modules/@clawdbot/lobster/package.json +39 -34
  170. package/npm-shrinkwrap.json +8 -8
  171. package/package.json +5 -5
@@ -1,4 +1,4 @@
1
- # Lobster
1
+ # 🦞 Lobster
2
2
 
3
3
  An OpenClaw-native workflow shell: typed (JSON-first) pipelines, jobs, and approval gates.
4
4
 
@@ -208,6 +208,38 @@ Notes:
208
208
  - `pipeline:` shares the same args/env/results model as shell steps, so later steps can still reference `$step.stdout` or `$step.json`.
209
209
  - If you need a human checkpoint before an LLM call, use a dedicated `approval:` step in the workflow file rather than `approve` inside the nested pipeline.
210
210
  - `cwd`, `env`, `stdin`, `when`, and `condition` work for both shell and pipeline steps.
211
+ - Use `retry`, `timeout_ms`, and `on_error` per step to control transient-failure behavior and recovery.
212
+ - Approval steps can optionally enforce identity constraints:
213
+ - `approval.required_approver` (or `requiredApprover`) requires an exact approver id.
214
+ - `approval.require_different_approver` (or `requireDifferentApprover`) requires approver id to differ from initiator.
215
+ - `approval.initiated_by` (or `initiatedBy`) sets the initiator id for comparison.
216
+ - `LOBSTER_APPROVAL_INITIATED_BY` can provide a default initiator id at run time.
217
+ - `LOBSTER_APPROVAL_APPROVED_BY` is used at resume/approval time for identity checks.
218
+
219
+ ## Visualizing workflows
220
+
221
+ Use `lobster graph` to inspect workflow structure before execution.
222
+
223
+ ```bash
224
+ lobster graph --file path/to/workflow.lobster
225
+ lobster graph --file path/to/workflow.lobster --format mermaid
226
+ lobster graph --file path/to/workflow.lobster --format dot
227
+ lobster graph --file path/to/workflow.lobster --format ascii
228
+ lobster graph --file path/to/workflow.lobster --args-json '{"location":"Seattle"}'
229
+ ```
230
+
231
+ What gets visualized:
232
+
233
+ - each workflow step as a node (`run`, `pipeline`, `approval`, etc.)
234
+ - data-flow edges from `stdin: $step.stdout` / `$step.json` references
235
+ - conditional dependencies from `when:` / `condition:` expressions
236
+ - approval gates as diamond-shaped nodes in `mermaid` and `dot` output
237
+
238
+ Format notes:
239
+
240
+ - `mermaid` (default): emits `flowchart TD` text for GitHub/Markdown rendering
241
+ - `dot`: emits Graphviz DOT syntax
242
+ - `ascii`: emits a terminal-friendly node/edge list
211
243
 
212
244
  ## Calling LLMs from workflows
213
245
 
@@ -233,6 +265,23 @@ Built-in providers today:
233
265
 
234
266
  `llm_task.invoke` remains available as a backward-compatible alias for the OpenClaw provider.
235
267
 
268
+ ### `pipeline:` vs `run:` for LLM calls
269
+
270
+ - Use `pipeline:` for `llm.invoke` and `llm_task.invoke` (they are Lobster pipeline stages, not shell executables).
271
+ - Use `run:` only for real binaries in your shell (for example `openclaw.invoke`).
272
+
273
+ Example (`stdin` from a prior step is passed to the LLM as artifacts):
274
+
275
+ ```yaml
276
+ steps:
277
+ - id: make_words
278
+ run: echo "One two three four five six"
279
+
280
+ - id: count_words
281
+ pipeline: llm_task.invoke --prompt "How many words have been pasted below?"
282
+ stdin: $make_words.stdout
283
+ ```
284
+
236
285
  ## Calling OpenClaw tools from workflows
237
286
 
238
287
  Shell `run:` steps execute in your system shell, so OpenClaw tool calls there must be real executables.