@automatalabs/workflows 0.41.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +14 -15
  2. package/package.json +4 -4
package/README.md CHANGED
@@ -117,21 +117,21 @@ Every script **must** begin with `export const meta = { name, description, phase
117
117
  statement, and must be **deterministic** — `Date.now()`, `Math.random()`, and `new Date()` are
118
118
  unavailable inside the realm (they would break journal replay on resume).
119
119
 
120
- Replay-safe read-only/worktree fan-out is explicit:
120
+ Completed reader/worktree calls both use ordinary journal replay:
121
121
 
122
122
  ```js
123
123
  const [audit, experiment] = await parallel([
124
124
  () => agent("Audit src/api without changing files.", {
125
- label: "audit:api", resume: { filesystem: "read-only" },
125
+ label: "audit:api",
126
126
  }),
127
127
  () => agent("Try the worker fix in isolation; return a unified diff.", {
128
- label: "try:worker", isolation: "worktree", resume: { filesystem: "read-only" },
128
+ label: "try:worker", isolation: "worktree",
129
129
  }),
130
130
  ]);
131
131
  ```
132
132
 
133
- The worktree and edits are discarded; return the diff as data. The declaration is required for
134
- content-addressed reuse in both arms—worktree isolation alone is not a safety proof. See the
133
+ The worktree and edits are discarded; return the diff as data. Replay requires matching journal
134
+ identity/input facts, not a filesystem-safety declaration. See the
135
135
  [incremental resume API](../../docs/api.md#content-addressed-incremental-resume).
136
136
 
137
137
  ### Substitution testing (isolation mode)
@@ -303,7 +303,7 @@ boolean).
303
303
 
304
304
  Resume guarantees journal/script replay integrity and checkpoint-reply targeting only. It never
305
305
  assumes or guarantees that the filesystem, external systems, agent output semantics, or any other
306
- part of the world stayed fresh between runs. If an unsafe prefix must run live, a supplied reply is
306
+ part of the world stayed fresh between runs. If a prior correspondence miss runs live, a supplied reply is
307
307
  injected only when execution reaches the exact recorded checkpoint call site with the same
308
308
  checkpoint identity and inputs; content-only matching is insufficient after that live prefix. A
309
309
  reply that is not applied is reported in `resumeReport` and terminal summaries. Authors who want a
@@ -352,15 +352,15 @@ Run results expose `effectiveLimits`; inspect status exposes the same values as
352
352
  agent rows carry their resolved `timeoutMs` plus `errorCode`.
353
353
 
354
354
  `exec.resumeFromRunId` asks the manager to admit a terminal source, persist a self-contained seed
355
- under a new run ID, and match safe calls by exact path/hash or unique hash+input fingerprint.
355
+ under a new run ID, and match completed calls by exact path/hash or unique hash+input fingerprint.
356
356
  Every allocated call receives a terminal manifest row even when the run halts around it. A
357
357
  non-result occurrence remains live on resume and stays in the identity seed as an ambiguity
358
- blocker until reached, so completed siblings on either side can replay safely. Uncertain,
359
- ambiguous, or unsafe calls run live. Current-environment and Node/V8 differences are
358
+ blocker until reached, so completed siblings on either side can replay. Uncertain,
359
+ ambiguous, or mismatched calls run live. Filesystem/current-environment and Node/V8 differences are
360
360
  reported as provenance without changing admission or matching. Identity hits preserve
361
361
  script-visible logical budget debit while adding zero current provider usage; replayed session
362
362
  records are rebound to the current call index/label/phase. `resumePolicy: "positional"` requests
363
- index/prefix matching but cannot bypass new-format format/metadata/manifest/input/safety checks. The distinct
363
+ index/prefix matching but cannot bypass new-format format/metadata/manifest/input checks. The distinct
364
364
  same-ID `resume()` and low-level `resumeJournal` paths remain permanently legacy positional and
365
365
  emit no `resumeReport`. See the [full contract](../../docs/api.md#content-addressed-incremental-resume).
366
366
  Operational limits are resolved from the new execution's `exec` options and manager defaults, not
@@ -369,9 +369,8 @@ copied from the source run; pass the desired timeout/retry/concurrency values ag
369
369
  neither replay identity nor the execution-input fingerprint and may change without invalidating
370
370
  completed calls or interrupted-turn continuation.
371
371
 
372
- Crash snapshots reconciled to `paused` / `interrupted` without a terminal environment use the
373
- `crash-residue` positional bridge with legacy hash-stable prefix eligibility. Normally settled
374
- sources with an input-fingerprint format below 2 use the
372
+ Current-format crash snapshots reconciled to `paused` / `interrupted` use identity correspondence
373
+ even without terminal-environment capture. Sources with an input-fingerprint format below 2 use the
375
374
  `inputs-format-legacy` positional bridge. That bridge also accepts ancestor-scoped rows carried by a
376
375
  ≤0.23 resume hop when the ancestor run still exists in the same persistence directory; nested and deleted-run scopes stay live. Engine
377
376
  package versions are persisted and surfaced as diagnostics but never gate replay. Every new-run
@@ -544,7 +543,7 @@ Semantics worth knowing:
544
543
  is always treated as a verbatim script, never a name.
545
544
  - **Versioning is git's job.** Same-ID `resume()` reloads the exact persisted script. A new
546
545
  `resumeFromRunId` execution can use an edited script: changed calls run live, while uniquely
547
- matching safety-marked calls may move and replay after admission.
546
+ matching completed calls may move and replay after admission.
548
547
  - **`resolve()` validates name shape strictly** (one flat path segment) — inline nested scripts
549
548
  fall through to verbatim parsing, and path traversal out of the configured dirs is impossible.
550
549
 
@@ -621,7 +620,7 @@ ships no runtime code).
621
620
 
622
621
  | global | what it does |
623
622
  |--------|--------------|
624
- | `agent(prompt, options?)` | Run ONE subagent to completion; returns its result (text, or the validated object with `options.schema`). `options.resume: { filesystem: "read-only" }` is the author safety declaration for content-addressed replay. |
623
+ | `agent(prompt, options?)` | Run ONE subagent to completion; returns its result (text, or the validated object with `options.schema`). The legacy `options.resume` annotation is accepted but replay-neutral. |
625
624
  | `parallel(thunks)` | Run an array of **thunks** (`() => Promise`) concurrently; resolves in input order. |
626
625
  | `pipeline(items, ...stages)` | Map `items` through sequential async stages, concurrently across items. |
627
626
  | `workflow(nameOrScript, args?)` | Run a saved (or inline) workflow nested in this run, sharing its limiter/budget. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automatalabs/workflows",
3
- "version": "0.41.0",
3
+ "version": "0.42.0",
4
4
  "license": "Apache-2.0",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -31,9 +31,9 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "typebox": "1.3.2",
34
- "@automatalabs/shared-types": "0.27.0",
35
- "@automatalabs/workflow-engine": "0.30.0",
36
- "@automatalabs/acp-agents": "0.34.6"
34
+ "@automatalabs/shared-types": "0.27.1",
35
+ "@automatalabs/workflow-engine": "0.31.0",
36
+ "@automatalabs/acp-agents": "0.34.8"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "tsc -b",