119 Commits

Author SHA1 Message Date
Hannes Rudolph c2ff7d0ace chore: align pull request template (#120) 2026-07-13 12:42:54 -06:00
Vincent Koc affca75be8 chore(repo): enforce pnpm runtime policy 2026-07-11 13:15:14 +08:00
Peter Steinberger 42b09e2077 fix(ci): pin TypeScript age exemptions 2026-07-09 15:03:09 +01:00
Peter Steinberger 1dfedd5ae8 fix(ci): enable TypeScript age exemptions 2026-07-09 14:56:20 +01:00
Peter Steinberger e77e279a01 fix(ci): match TypeScript age exemptions 2026-07-09 14:51:20 +01:00
Peter Steinberger 378f30beba chore(deps): adopt TypeScript 7 and update dependencies 2026-07-09 14:25:36 +01:00
Vincent Koc d9a0fe7e02 style: format lobster sources 2026-06-22 14:26:35 +08:00
Vincent Koc 7a57f25720 fix: harden lobster release and invoke paths 2026-06-22 13:53:21 +08:00
Peter Steinberger d759d5c3ba feat: add OpenClaw agent invocation (#118) 2026-06-18 08:01:23 +02:00
Peter Steinberger 7d3b6a1512 chore: reopen changelog after release 2026-06-11 02:58:26 +01:00
Peter Steinberger 86b8cc20a8 chore(release): 2026.6.11 v2026.6.11 2026-06-11 02:36:52 +01:00
Peter Steinberger 77b0a55692 feat: add command-level input requests
Adds state-backed command-level requestInput resume across CLI/tool/SDK pipelines and workflow pipeline steps. Closes #101.
2026-06-10 17:50:51 -07:00
Peter Steinberger ff0791b78b fix: warn on unknown LLM cost models (#115) 2026-06-10 02:59:02 -07:00
Andy Ye 69dcc88cad fix: harden disposable persistence writes
Harden LLM cache files, diff snapshots, and approval ID indexes against truncated or malformed JSON after process termination.

Disposable cache and snapshot corruption now recovers as a miss; authoritative resume state still surfaces malformed JSON. Approval short-ID indexes use atomic no-overwrite publication and degrade to full resume-token approval when the index cannot be published durably.

Closes #111.
Closes #112.
Closes #113.

Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>
2026-06-10 00:36:09 -07:00
Peter Steinberger bd007370f9 chore(deps): update development tooling 2026-06-10 04:48:39 +01:00
Peter Steinberger 315e550f3d chore: update dependencies 2026-06-08 21:43:07 +01:00
Peter Steinberger d04ae974cf chore: require Node.js 22 2026-06-08 20:00:46 +01:00
Krasimir Kralev 1679bed1a4 fix(state): write state atomically
Fixes #108 and #109.

- Replace direct state writes with same-directory atomic temp-file writes.
- Preserve existing file modes and create new state files as 0600.
- Clean up temp files on failed replacement paths.
- Add state/SDK regression coverage plus changelog entry.

Proof:
- pnpm run typecheck
- node --test dist/test/state.test.js dist/test/resume.test.js dist/test/multi_approval_resume.test.js dist/test/approve_preview.test.js
- pnpm run lint
- pnpm run test
- built SDK write/read proof preserved 0600 across replacement
- autoreview clean: no accepted/actionable findings

Co-authored-by: Krasimir Kralev <krasi@idrobots.com>
2026-06-03 14:05:28 -07:00
Peter Steinberger f0b63a4e54 docs: position README banner 2026-05-28 20:47:50 +01:00
Peter Steinberger 2c9ba7d604 docs: add README banner 2026-05-28 19:43:06 +01:00
Krasimir Kralev 930930a02c fix: retry timed-out workflow steps
* fix(retry): only propagate AbortError on external cancellation, not per-attempt timeout

Fixes #105.

withRetry unconditionally re-threw AbortErrors before calling shouldRetry,
causing timeout_ms + retry.max combinations to always result in a single
attempt regardless of retry configuration. Fix: check options?.signal?.aborted
before short-circuiting — external workflow cancellation still propagates
immediately, but per-attempt timeout AbortErrors now flow through shouldRetry.

* test(retry): update abort-error test to use aborted external signal; add timeout-retry unit test

Update withRetry test to properly simulate external cancellation (aborted
signal) rather than a bare AbortError without signal context.

Add unit test proving per-attempt timeout AbortErrors (no external signal)
are now retried as documented when timeout_ms + retry are combined.

* fix(retry): revert quote style to single-quote (match fork base)

* fix(retry): revert test quote style to single-quote (match fork base)

* test: add workflow-level proof that timeout_ms + retry retries on timeout

Integration test that runs a real step with timeout_ms=1500 + retry.max=3
where the command hangs past the timeout on attempts 1-2 (SIGKILLed) then
succeeds on attempt 3. Asserts status ok + attempt 3 + [RETRY] logs.

Verified the test fails against the pre-fix withRetry (short-circuit on
any AbortError) and passes with the fix. Addresses the review request for
real behavior proof at the workflow level, complementing the existing
withRetry unit tests.

* docs: credit timeout retry fix

* test: harden timeout retry workflow proof

* style: format timeout retry patch

---------

Co-authored-by: KrasimirKralev <krasi@idrobots.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-28 16:35:04 +01:00
Vincent Koc c1649457ce chore: add constrained Crabbox setup
Adds constrained Crabbox setup and the exact OpenClaw Crabbox skill for maintainer validation.
2026-05-23 05:59:21 +08:00
Peter Steinberger 66cbee5896 chore: reopen changelog after release 2026-05-22 13:15:49 +01:00
Peter Steinberger 57a9967d13 chore(release): 2026.5.22 v2026.5.22 2026-05-22 13:10:10 +01:00
Krasimir Kralev 042e833e62 fix(validation): memoize Ajv compile cache (#98)
Memoize repeated Ajv schema compilation across validation paths and add regression coverage for structurally equivalent schema cache hits.

Closes #96.

Co-authored-by: Krasimir Kralev <263465593+KrasimirKralev@users.noreply.github.com>
2026-05-22 13:09:07 +01:00
Peter Steinberger bddb44c0bb docs: add README emoji tagline 2026-05-15 20:24:20 +01:00
Peter Steinberger bec7fb81b4 ci: skip duplicate npm publishes 2026-05-15 05:17:37 +01:00
Peter Steinberger e4514ecad5 style: format with oxfmt 2026-05-04 01:56:15 +01:00
Vincent Koc 0af9ff116f fix(deps): update vulnerable parser dependencies 2026-04-30 14:58:13 -07:00
Vignesh Natarajan a95f133c2e fix(workflows): support legacy resume key aliases cleanly (#4) (thanks @brownetw-ai) 2026-04-11 16:42:58 -07:00
Bruce 14e46b388c Fix resume state lookup for workflow key variants 2026-04-11 16:42:58 -07:00
Vignesh Natarajan 595f862d73 docs: document workflow retry feature (#84) (thanks @scottgl9) 2026-04-11 16:40:17 -07:00
scottgl 7d6ecec694 feat: step-level retry with configurable backoff
Adds retry field to workflow steps with exponential/fixed backoff,
jitter, and configurable max attempts. Retry delays are signal-aware
(abort cancels immediately). Abort errors never trigger retries.

- New src/core/retry.ts: withRetry utility with backoff calculation
- Step execution wrapped in retry loop when retry.max > 1
- Retry attempts logged to stderr as [RETRY] messages
- Dry-run renders retry config (attempts, backoff, base delay)
- Comprehensive validation for all retry fields
2026-04-11 16:40:17 -07:00
Vignesh Natarajan 04e01b5027 feat: add approval identity constraints for workflow gates 2026-04-11 16:07:27 -07:00
Vignesh Natarajan 6d397c51c1 test/docs: clarify llm_task workflow stdin usage 2026-04-11 16:02:30 -07:00
Vignesh Natarajan 7d6a22a0c3 feat: add workflow graph visualization command 2026-04-11 15:54:17 -07:00
Vignesh Natarajan 60c976571a feat: add template filters for template command 2026-04-11 15:44:57 -07:00
Vignesh Natarajan 933fb49f6f feat: add for_each workflow step type 2026-04-11 15:43:40 -07:00
Vignesh Natarajan 503a2f6053 feat: add parallel workflow step execution 2026-04-11 15:37:35 -07:00
Vignesh Natarajan 373c447e39 feat: add llm cost tracking and spending limits 2026-04-11 15:35:00 -07:00
Vignesh Natarajan 05e34d741f feat: add comparison operators for workflow conditions 2026-04-11 15:33:39 -07:00
Vignesh Natarajan 425198e09d test: add on_error workflow coverage 2026-04-11 15:32:52 -07:00
Vignesh Natarajan 47eb7e81b3 feat: add workflow composition and step timeout controls 2026-04-11 15:31:54 -07:00
Peter Steinberger b9a1b1b2a5 docs: reorder 2026.4.6 release notes 2026-04-06 14:59:55 +01:00
Peter Steinberger 4bd02a21ae ci: configure npm auth for release publish jobs v2026.4.6 2026-04-06 14:53:17 +01:00
Mariano cccbfad606 ci: fix lobster release changelog validation (#62) 2026-04-06 15:51:55 +02:00
Peter Steinberger ee2dc74dd5 ci: pass npm token to release publish step 2026-04-06 14:50:48 +01:00
Peter Steinberger 68ce811f0a ci: export release version for changelog validation 2026-04-06 14:48:08 +01:00
Mariano 0db6755ddc chore: prepare 2026.4.6 release metadata (#61)
* chore: prepare 2026.4.6 release metadata

* docs: finalize 2026.4.6 release notes
2026-04-06 15:46:19 +02:00
Peter Steinberger 255d3cd56e test: stream long workflow subjects in truncate test 2026-04-06 14:45:36 +01:00