Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ jobs:
run: rm -rf -- moltnet-fixture

- name: Verify native helper syscalls
run: node --test scripts/native-helper-artifacts.test.mjs scripts/native-helper-integration.test.mjs
run: node --experimental-strip-types --test scripts/native-helper-artifacts.test.ts scripts/native-helper-integration.test.ts

- name: Verify package contents
run: npm run verify:package-closure
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/runtime-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ jobs:
# args the Dockerfile does not declare — so it had never produced an
# image, only a red check.
#
# `npm run build:local-daimon` (scripts/build-local-daimon-runtime.mjs)
# `npm run build:local-daimon` (scripts/build-local-daimon-runtime.ts)
# assembles all of that and is the supported path today. Publishing
# from CI means teaching this workflow to call that script with a
# non-loopback registry target, which `resolveLocalImageTag` currently
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ jobs:
run: npm run build

- name: Verify native helper syscalls
run: node --test scripts/native-helper-artifacts.test.mjs scripts/native-helper-integration.test.mjs
run: node --experimental-strip-types --test scripts/native-helper-artifacts.test.ts scripts/native-helper-integration.test.ts

- name: Verify Daimon image layering
run: node --test scripts/build-local-daimon-runtime.test.mjs
- name: Verify maintained TypeScript scripts
run: npm run test:scripts

# Preseed reads the candidate volume through its Docker Mountpoint and
# relies on host rename/fsync/hardlink semantics a container cannot give
Expand Down
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ This repository is the reference implementation of the Spawnfile v0.1 compiler.
├── runtimes.yaml # Runtime registry — pinned versions and status
├── moltnet-releases.json # Pinned, checksum-verified Moltnet release authority
├── blueprints/ # Frozen reference layouts per runtime at pinned version
├── archive/ # Historical plans, diagrams, and retired tooling
├── specs/ # Specs, architecture docs, and runtime research
├── scripts/ # Bootstrap and repo helper scripts
├── src/ # CLI, compiler, adapters, manifests, reports, target contracts
Expand All @@ -33,6 +34,7 @@ This repository is the reference implementation of the Spawnfile v0.1 compiler.
- Prefer small, composable modules with explicit responsibilities.
- Do not allow source files to grow past 400 lines. Split early when files start creeping up.
- Use named exports only. Do not introduce default exports.
- Write maintained repository scripts in TypeScript and include them in strict typechecking. Keep historical plans and audit diagrams in `archive/`, not at the root or in active documentation.
- Use barrel exports for folder entry points.
- Keep test files next to the files they cover: `file.ts` and `file.test.ts`.
- Aim for 90% or better coverage.
Expand Down
10 changes: 6 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Prerequisites

- Node 22+
- Node 22.19+ (including native TypeScript script execution)
- Docker if you want to run the `spawnfile build` end-to-end test against a real image

## Local Workflow
Expand All @@ -28,7 +28,7 @@ npm run typecheck
Run the CLI on a fixture without a global link:

```bash
npm run dev -- validate test/fixtures/single-agent
npm run dev -- validate fixtures/single-agent
```

## Website
Expand All @@ -41,13 +41,13 @@ npm run build

## Testing

- `npm test` — unit tests via Vitest.
- `npm test` — compiler tests via Vitest, runtime node:test cases, and maintained script unit tests.
- `npm run coverage` — unit tests with coverage output.
- `npm run test:e2e:docker-auth` — end-to-end against a real compiled container. Needs Docker.

## Adding a runtime

Runtime adapters live in `src/adapters/`. Each adapter lowers the resolved graph into runtime-native output and reports per-capability support.
Runtime adapters live in `src/runtime/`. Each adapter lowers the resolved graph into runtime-native output and reports per-capability support.

- Start from [`specs/SPEC.md`](specs/SPEC.md) to understand the source shape.
- Read [`specs/COMPILER.md`](specs/COMPILER.md) for the adapter contract.
Expand All @@ -60,6 +60,8 @@ When adding a runtime, also update `runtimes.yaml` with the pinned version and s

- Keep `README.md` focused on getting started.
- Put detailed specification material in `specs/`.
- Keep historical plans, reviews, and audit diagrams in `archive/`.
- Write repository scripts in TypeScript. Their purpose, callers, and checks belong in [`scripts/README.md`](scripts/README.md).
- Keep package `AGENTS.md` guides in present tense and aligned with current code, with `CLAUDE.md` symlinks for compatibility.

## Commit style
Expand Down
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ v0.1 targets autonomous agent runtimes that share a markdown workspace identity
|-----------|---------------|---------|-----------------------------------------------|
| OpenClaw | active | ✅ | Discord, Telegram, WhatsApp, Slack |
| PicoClaw | active | | Discord, Telegram, Slack (WhatsApp blocked) |
| Daimon | active | | Subscription CLI engines, Moltnet |
| Pi | active | | Embedded org app, Moltnet client config |
| OpenFang | exploratory | | No active adapter yet |
| Hermes Agent | exploratory | | No active adapter yet |
Expand All @@ -217,7 +218,9 @@ The source-of-truth specs live in this repo:
- [`specs/STATUS.md`](specs/STATUS.md) — static and live operational status
- [`specs/DISTRIBUTION.md`](specs/DISTRIBUTION.md) — image distribution, publish, and sourceless run
- [`specs/research/WORKSPACE-PACKAGING.md`](specs/research/WORKSPACE-PACKAGING.md) — planned source-directory and toolset authoring; not implemented
- [`test/fixtures/`](test/fixtures/) — canonical example projects
- [`fixtures/`](fixtures/) — test-only projects; [`examples/`](examples/) — user-facing examples
- [`scripts/README.md`](scripts/README.md) — maintained tooling and its callers
- [`archive/`](archive/) — historical plans, diagrams, and retired tooling

## From source

Expand Down
File renamed without changes.
15 changes: 15 additions & 0 deletions archive/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Archive

Historical material retained for context, not current instructions or executable
tooling. File contents describe the repository at the time they were written.

| Material | Why archived | Current reference |
| --- | --- | --- |
| [Daimon migration plan](DAIMON_RUNTIME_MIGRATION_PLAN.md) | Plan for replacing the former Pi alias; predates the standalone adapter | [Daimon adapter](../src/runtime/daimon/AGENTS.md), [runtime contracts](../specs/RUNTIMES.md) |
| [Distribution design](DISTRIBUTION.md) | Original phased design, superseded as implementation authority | [Distribution specification](../specs/DISTRIBUTION.md) |
| [Diagrams and boundary audit](diagrams/) | Point-in-time illustrations and migration blockers; not maintained against current code | [Compiler specification](../specs/COMPILER.md), [ecosystem boundaries](../specs/ECOSYSTEM_RUNTIME_BOUNDARIES.md) |
| [Legacy worktree tools](legacy-worktree-tools/) | Assume sibling projects live inside `ecosystem/`; that layout no longer exists here. No package command or CI job uses them | [Contributing](../CONTRIBUTING.md), [maintained scripts](../scripts/README.md) |

Archived JavaScript is preserved as historical source. It is excluded from the
maintained TypeScript scripts, package contents, and automated test discovery.
Do not run archived tools or copy their configuration into a current deployment.
File renamed without changes.
File renamed without changes.
File renamed without changes.
19 changes: 17 additions & 2 deletions blueprints/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Blueprints

Frozen reference layouts for each runtime at the version pinned in `runtimes.yaml`.
Frozen upstream reference layouts for OpenClaw and PicoClaw at the versions
pinned in [`runtimes.yaml`](../runtimes.yaml). These files document upstream
defaults; the compiler does not read this directory during a build.

Each blueprint shows exactly what a runtime expects when you set up a bot — config files, workspace structure, doc locations, skill directories.

Expand All @@ -18,13 +20,26 @@ same review.
| OpenClaw | npm | `openclaw.json` | AGENTS, BOOTSTRAP, HEARTBEAT, IDENTITY, SOUL, TOOLS, USER | `openclaw onboard` |
| PicoClaw | Go | `config.json` | AGENTS, SOUL, USER, IDENTITY, HEARTBEAT, memory/MEMORY | `config.example.json` |

## Compiler-generated runtimes

Daimon has no upstream onboarding scaffold to freeze here. Spawnfile's
[Daimon adapter](../src/runtime/daimon/AGENTS.md) generates
`daimon-organization-runtime.json` and each agent's workspace from the resolved
organization. Its [configuration tests](../src/runtime/daimon/config.test.ts)
and [adapter tests](../src/runtime/daimon/adapter.test.ts) verify the versioned
runtime contract, workspace documents, and launch artifacts. A separate
hand-maintained blueprint is not a compile input or a missing runtime dependency.

The legacy Pi adapter likewise generates its application and configuration;
see its [working guide](../src/runtime/pi/AGENTS.md).

## Incompatible Runtimes

These were evaluated but are fundamentally incompatible with Spawnfile's config + markdown workspace model:

- **IronClaw** — env-vars-only orchestrator/worker system, no agent config files
- **NanoClaw** — code-driven via Claude Code skills, no declarative config surface
See `specs/research/RUNTIME-NOTES.md` for the full research on each.
See [runtime research](../specs/research/RUNTIME-NOTES.md) for the full research on each.

## Adapter Candidates

Expand Down
Loading
Loading