Skip to content

Commit 620882b

Browse files
committed
Add iso-orchestrator package
1 parent 7f46d47 commit 620882b

17 files changed

Lines changed: 1327 additions & 6 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ jobs:
5050
- workspace: "@razroo/iso-route"
5151
node: "20.6.0"
5252
extra: ""
53+
- workspace: "@razroo/iso-orchestrator"
54+
node: "20.6.0"
55+
extra: ""
5356
- workspace: "@razroo/iso-trace"
5457
node: "20.6.0"
5558
extra: ""
@@ -133,7 +136,7 @@ jobs:
133136
working-directory: packages/isolint
134137
run: node dist/cli/index.js lint . --fail-on error
135138

136-
- name: Pipeline integration (all seven packages)
139+
- name: Pipeline integration (build/feedback toolchain)
137140
run: node examples/pipeline/build.mjs
138141

139142
- name: iso wrapper dogfood integration
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: iso-orchestrator Release to npm
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
defaults:
8+
run:
9+
working-directory: packages/iso-orchestrator
10+
11+
jobs:
12+
publish:
13+
if: startsWith(github.ref_name, 'iso-orchestrator-v')
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
checks: read
18+
id-token: write
19+
steps:
20+
- uses: actions/checkout@v6
21+
22+
- uses: actions/setup-node@v6
23+
with:
24+
node-version: '22'
25+
registry-url: 'https://registry.npmjs.org'
26+
cache: 'npm'
27+
28+
- name: Set version from release tag
29+
run: |
30+
VERSION="${GITHUB_REF_NAME#iso-orchestrator-v}"
31+
echo "VERSION=$VERSION" >> $GITHUB_ENV
32+
33+
- name: Verify required CI passed for release commit
34+
uses: ./.github/actions/verify-release-gate
35+
env:
36+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37+
38+
- name: Verify package.json version matches release tag
39+
run: npm run release:check-source -- "$VERSION"
40+
41+
- name: Install (workspace root)
42+
run: npm ci
43+
working-directory: .
44+
45+
- name: Publish to npm (with provenance)
46+
run: npm publish --provenance --access public
47+
env:
48+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

CLAUDE.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# iso — monorepo
22

3-
Workspaces monorepo (npm) housing seven Razroo tools that together make
3+
Workspaces monorepo (npm) housing eight Razroo tools that together make
44
AI-agent harnesses *isomorphic* — the same authored source producing the
55
same behavior across every coding harness (Cursor, Claude Code, Codex,
66
OpenCode) and every model tier (frontier → 7B local).
@@ -44,6 +44,14 @@ cross-package compositions and the decouplings that are deliberate.
4444
sessions into a normalized event model for local observability. Zero
4545
upload. TypeScript.
4646

47+
**Runtime control:**
48+
49+
- `packages/iso-orchestrator``@razroo/iso-orchestrator`. Durable
50+
workflow primitives for agent harnesses: resumable steps, keyed
51+
mutexes, bounded parallel fan-out, and file-backed run state.
52+
TypeScript, `tsc``dist/`. Tests via
53+
`node --test --import tsx tests/*.test.ts`.
54+
4755
## Conventions
4856

4957
- Each package owns its `package.json`, tests, README, LICENSE, and

INTEGRATIONS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Integrations
22

3-
This repo ships seven packages that **work on their own** but are **designed
3+
This repo ships eight packages that **work on their own** but are **designed
44
to compose**. The planned cross-package compositions listed here are already
55
shipped, so this file now serves as:
66

@@ -86,7 +86,7 @@ missing user messages, redaction, and directory layout stability.
8686

8787
---
8888

89-
## 5. `examples/pipeline/` ← exercise all seven packages**DONE**
89+
## 5. `examples/pipeline/` ← exercise the shipped build/feedback toolchain end-to-end**DONE**
9090

9191
Shipped and expanded. `examples/pipeline/build.mjs` now drives the full
9292
chain (`agentmd lint + render → isolint lint → iso-route build

README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Today, writing agent instructions is fragmented on two axes:
2525
unstructured rationale all drop silently at 7B. You don't find out
2626
until the agent misbehaves in production.
2727

28-
Seven packages solve that in one pipeline with a feedback loop:
28+
Eight packages solve that in one pipeline with a control layer and feedback loop:
2929

3030
- **Four build-time tools** turn your authored source into every harness's file layout:
3131
[`@razroo/agentmd`](./packages/agentmd) validates *structure*,
@@ -34,6 +34,9 @@ Seven packages solve that in one pipeline with a feedback loop:
3434
[`@razroo/iso-route`](./packages/iso-route) compiles *one model policy* into each harness's config.
3535
- **One wrapper** runs the whole build chain:
3636
[`@razroo/iso`](./packages/iso) chains the above into a single `iso build`.
37+
- **One orchestration library** handles durable runtime control:
38+
[`@razroo/iso-orchestrator`](./packages/iso-orchestrator) provides resumable
39+
steps, keyed mutexes, and bounded fan-out for side-effectful agent workflows.
3740
- **Two feedback tools** close the loop after deploy:
3841
[`@razroo/iso-eval`](./packages/iso-eval) scores *did the agent complete the task?* and
3942
[`@razroo/iso-trace`](./packages/iso-trace) parses production transcripts to show *what the agent actually did*.
@@ -155,6 +158,14 @@ the repo now supports a tighter loop:
155158
transcripts do not yet expose stable model metadata. Zero upload —
156159
everything is local reads and user-controlled output.
157160

161+
- **[`packages/iso-orchestrator`](./packages/iso-orchestrator)**`@razroo/iso-orchestrator`
162+
Durable orchestration primitives for the runtime layer above a single
163+
agent session. Persists workflow state to local disk, memoizes
164+
load-bearing `step()` results, provides keyed mutexes for "same
165+
entity" exclusion, and offers bounded `forEach()` fan-out so domain
166+
packages can move invariants out of prompt prose and shell scripts.
167+
Library-first today: no CLI, no harness-specific task-dispatch adapter.
168+
158169
Each package is independently published on npm and works on its own.
159170
They're in one repo because they're designed to compose.
160171

@@ -262,6 +273,7 @@ iso/
262273
├── iso-harness/ # one source, every harness
263274
├── iso/ # one command for the whole pipeline
264275
├── iso-route/ # one model policy → per-harness config
276+
├── iso-orchestrator/ # durable runtime control above one agent session
265277
├── iso-eval/ # behavioral eval on the produced harness
266278
└── iso-trace/ # parse + query real agent transcripts (observability)
267279
```
@@ -313,7 +325,7 @@ build, and `npm publish --provenance`.
313325
## End-to-end example
314326

315327
[`examples/pipeline/`](./examples/pipeline) is an executable demonstration
316-
that exercises **all seven packages end-to-end** in one `npm run
328+
that exercises **seven of the eight packages end-to-end** in one `npm run
317329
test:pipeline` invocation: `agentmd lint` + `render``isolint lint` →
318330
`iso-route build` (from a bundled `models.yaml` that extends the
319331
`standard` preset) → `iso-harness build` (which consumes iso-route's

package-lock.json

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# @razroo/iso-orchestrator
2+
3+
## 0.1.0
4+
5+
### Minor Changes
6+
7+
- Initial release. Adds a library-first orchestration layer for agent harnesses
8+
with file-backed workflow records, idempotent/resumable `step()` execution,
9+
process-safe keyed mutexes, and bounded parallel `forEach()` fan-out.
10+
11+
The package is intentionally generic: it does not know about any particular
12+
harness or task-dispatch surface yet, so domain packages can bring their own
13+
adapters.

packages/iso-orchestrator/LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Razroo
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

0 commit comments

Comments
 (0)