From 12edf77a6c89580bebd3a8a6a24e0f05c2c4b10f Mon Sep 17 00:00:00 2001 From: Alex Lavaee Date: Sun, 25 Oct 2026 17:03:06 -0700 Subject: [PATCH] Upgrade Atomic to the stable 0.9.45 release The harness catalog now pins @bastani/atomic 0.9.45, and the lockfile resolves @bastani/atomic, @bastani/atomic-natives with its eight platform packages, and @bastani/pi-ai at 0.9.45, with no older @bastani package left. No other package in the lockfile moves. One change affects a Chopin server, and the self-hosting guide now says so. When an operator enables a local worker pool without setting workflows.localWorkers.startupTimeoutMs, the startup deadline is no longer a flat 30 seconds: it scales with the worker count and the one-minute load average per CPU core, from 30 seconds up to 10 minutes. A real Planner workflow on a two-worker pool with no startup timeout set ran both children and its card ended finished; with a 1 ms timeout its card ended failed and the journal recorded the new "workers were too slow to start" error, with the worker logs beside it. The journal changes do not reach Chopin. Planner sessions journal to a SQLite file Chopin passes as createAgentSession({ journal }), which uses Atomic's built-in journal; Chopin has no storage adapter or RunJournal of its own, so the optional changeToken, runVersions, snapshotTail and appendMany members, hostModules, and adapters that can now import @bastani/atomic/workflows need nothing here. The Atomic adapter needs no code change. Assistant-model: Claude Opus 5.5 (fast) Assistant-workflow: inline (fast subagents) Assistant-verification: bun test (6734 pass, 22 skip, 0 fail), bun run types, bun run ci Assistant-verification: real Planner workflow on a local worker pool with no startup timeout finished; with a 1 ms timeout it failed with the new startup error and its run card ended failed Assistant-verification: docker build of the server image; container started healthy with HARNESS=atomic and imports Atomic 0.9.45 Assistant-verification: targeted bun run e2e (35 passed) User-preference: Keep Atomic and its transitive packages on the same release everywhere Co-authored-by: Alex Lavaee --- bun.lock | 24 ++++++++++++------------ docs/self-hosting.md | 11 +++++++++-- package.json | 2 +- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/bun.lock b/bun.lock index 0874eae83..b36716b74 100644 --- a/bun.lock +++ b/bun.lock @@ -315,7 +315,7 @@ "@ai-sdk/harness": "1.0.146", "@ai-sdk/mcp": "2.0.72", "@ai-sdk/sandbox-just-bash": "1.0.146", - "@bastani/atomic": "0.9.44", + "@bastani/atomic": "0.9.45", "ai": "7.0.135", "typebox": "1.3.7", "zod": "4.4.3", @@ -456,27 +456,27 @@ "@base-ui/utils": ["@base-ui/utils@0.3.2", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.12", "reselect": "^5.2.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-oWy1aq/I2GmYjpl4PhEAhzflF8VPGKgZeq0xAWTbfD5KBWyxcN0ZP2+WHSUm/5Z6lVMBDLReLcoXwSYoRc/zNQ=="], - "@bastani/atomic": ["@bastani/atomic@0.9.44", "", { "dependencies": { "@bastani/atomic-natives": "0.9.44", "@bastani/pi-ai": "0.9.44", "@earendil-works/pi-agent-core": "1.4.0", "@earendil-works/pi-codemode": "1.4.0", "@earendil-works/pi-tui": "1.4.0", "@modelcontextprotocol/ext-apps": "^1.7.5", "@modelcontextprotocol/sdk": "1.32.1", "@mozilla/readability": "^0.6.0", "@silvia-odwyer/photon-node": "0.3.4", "@typesafe-ai/sdk": "0.7.0", "brace-expansion": "5.0.12", "chalk": "6.0.0", "cross-spawn": "7.0.6", "diff": "8.0.4", "glob": "13.0.6", "grok-mermaid": "0.2.3", "highlight.js": "10.7.3", "hosted-git-info": "9.0.3", "ignore": "7.0.8", "jiti": "2.7.0", "linkedom": "^0.18.13", "lru-cache": "11.5.3", "markit-ai": "0.5.3", "minimatch": "10.2.6", "open": "^11.0.1", "p-limit": "^7.3.2", "proper-lockfile": "4.1.2", "quickjs-wasi": "3.6.2", "semver": "7.8.5", "turndown": "^7.2.0", "typebox": "1.3.27", "undici": "8.12.3", "unpdf": "1.8.1", "yaml": "2.9.0", "zod": "^3.25.0 || ^4.0.0" }, "optionalDependencies": { "@mariozechner/clipboard": "0.3.9" }, "bin": { "atomic": "dist/cli.js" } }, "sha512-+djpJFpwapmahpi0azu0P3upWx1Ho1ZvxRw05vqQCqhZGtp2mHu+ADYjkUweAzKUsG8NCtCIg6WFt+V6lcqG6g=="], + "@bastani/atomic": ["@bastani/atomic@0.9.45", "", { "dependencies": { "@bastani/atomic-natives": "0.9.45", "@bastani/pi-ai": "0.9.45", "@earendil-works/pi-agent-core": "1.4.0", "@earendil-works/pi-codemode": "1.4.0", "@earendil-works/pi-tui": "1.4.0", "@modelcontextprotocol/ext-apps": "^1.7.5", "@modelcontextprotocol/sdk": "1.32.1", "@mozilla/readability": "^0.6.0", "@silvia-odwyer/photon-node": "0.3.4", "@typesafe-ai/sdk": "0.7.0", "brace-expansion": "5.0.12", "chalk": "6.0.0", "cross-spawn": "7.0.6", "diff": "8.0.4", "glob": "13.0.6", "grok-mermaid": "0.2.3", "highlight.js": "10.7.3", "hosted-git-info": "9.0.3", "ignore": "7.0.8", "jiti": "2.7.0", "linkedom": "^0.18.13", "lru-cache": "11.5.3", "markit-ai": "0.5.3", "minimatch": "10.2.6", "open": "^11.0.1", "p-limit": "^7.3.2", "proper-lockfile": "4.1.2", "quickjs-wasi": "3.6.2", "semver": "7.8.5", "turndown": "^7.2.0", "typebox": "1.3.27", "undici": "8.12.3", "unpdf": "1.8.1", "yaml": "2.9.0", "zod": "^3.25.0 || ^4.0.0" }, "optionalDependencies": { "@mariozechner/clipboard": "0.3.9" }, "bin": { "atomic": "dist/cli.js" } }, "sha512-zCGm9eQS7+xXjsWfTOiPMUGFfCVlQlRBYTONDVkmegsrpLOgcPxUlQl7Uc0N1/LNo4RXGl1pq7V6t49K/Lxqxg=="], - "@bastani/atomic-natives": ["@bastani/atomic-natives@0.9.44", "", { "optionalDependencies": { "@bastani/atomic-natives-darwin-arm64": "0.9.44", "@bastani/atomic-natives-darwin-x64": "0.9.44", "@bastani/atomic-natives-linux-arm64-gnu": "0.9.44", "@bastani/atomic-natives-linux-arm64-musl": "0.9.44", "@bastani/atomic-natives-linux-x64-gnu": "0.9.44", "@bastani/atomic-natives-linux-x64-musl": "0.9.44", "@bastani/atomic-natives-win32-arm64-msvc": "0.9.44", "@bastani/atomic-natives-win32-x64-msvc": "0.9.44" } }, "sha512-SAsOiJt1jdh5DtVa7mkyyhVWqWzWyWzhQU+RLzDX9xKz5jg8bMj7jCuVJcdQerRO7XR+uyB5B6ZnR0b2XveFRQ=="], + "@bastani/atomic-natives": ["@bastani/atomic-natives@0.9.45", "", { "optionalDependencies": { "@bastani/atomic-natives-darwin-arm64": "0.9.45", "@bastani/atomic-natives-darwin-x64": "0.9.45", "@bastani/atomic-natives-linux-arm64-gnu": "0.9.45", "@bastani/atomic-natives-linux-arm64-musl": "0.9.45", "@bastani/atomic-natives-linux-x64-gnu": "0.9.45", "@bastani/atomic-natives-linux-x64-musl": "0.9.45", "@bastani/atomic-natives-win32-arm64-msvc": "0.9.45", "@bastani/atomic-natives-win32-x64-msvc": "0.9.45" } }, "sha512-FQYWd/tqZvjrh9xURWkBCgL51LTRTgvEa+86j4WbrfaCz3U7Ffq1VFhM+pi5Qn2rd6ZRMQn/Vy0osZPT6VNbLQ=="], - "@bastani/atomic-natives-darwin-arm64": ["@bastani/atomic-natives-darwin-arm64@0.9.44", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JOeo8W0wB7EH/Kt5wJK+07gBwIMnnnJ8XhS6NVH0QylSkEMQjDKY3N3z+1QZaqzeArr4Uu/aM8bykDOFCd4BXw=="], + "@bastani/atomic-natives-darwin-arm64": ["@bastani/atomic-natives-darwin-arm64@0.9.45", "", { "os": "darwin", "cpu": "arm64" }, "sha512-WNwEZ1/esCO5+eyIcvlX3dcdpyqvguGjLu2N04ecxoHkefyADGjDPx4xiHlVyrpZ+ygIQS8MCvf42b+iBgvT7w=="], - "@bastani/atomic-natives-darwin-x64": ["@bastani/atomic-natives-darwin-x64@0.9.44", "", { "os": "darwin", "cpu": "x64" }, "sha512-CnZxuPzMYfNMWApzY8GHfhlY17lRVcNBkUEh2Ymf70xIZgxv6XE5LAfF1P2ibIn+SuFtpZnjv2UXZADo25+qoQ=="], + "@bastani/atomic-natives-darwin-x64": ["@bastani/atomic-natives-darwin-x64@0.9.45", "", { "os": "darwin", "cpu": "x64" }, "sha512-aYZT5pYiuYdDUTtBrCOGYIcbQSKBS+4zp3kjXPBZfCr+CC6Un4EF399wo2khxI+fmNHzi09djyaQMhzTs46GyQ=="], - "@bastani/atomic-natives-linux-arm64-gnu": ["@bastani/atomic-natives-linux-arm64-gnu@0.9.44", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-DLiruji4I/ZgNpDVyrGf8lsauaOLahFZezBFCqh/JpWPt+lyGl7U/S+QCBYziXeXk/86uEdYWJ8uBr6xWjJa0g=="], + "@bastani/atomic-natives-linux-arm64-gnu": ["@bastani/atomic-natives-linux-arm64-gnu@0.9.45", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-FAs/t8KKBV8vHibbMtRvNLaOwnQPUO0rNPxSxpKynp4Qja34Ou+JYoKsrYsEesoMi+yPhcDTe2EyXsocBJ6bAg=="], - "@bastani/atomic-natives-linux-arm64-musl": ["@bastani/atomic-natives-linux-arm64-musl@0.9.44", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-+UYmuRO7+Rf/vc8wvdjXxy9uu2MEYno+5q38nU8PC7e56PTGFucPQVY45zPNBiBI+2DkTdsGz9+5Iw+8kRGY5g=="], + "@bastani/atomic-natives-linux-arm64-musl": ["@bastani/atomic-natives-linux-arm64-musl@0.9.45", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-xBUgIGYbZ9XlfO6CqultfRwmAZF5dd3GLIAXQJUw8Xx8pU6jm2XnBR8r8fGflx1LwR9HMcAbSR09lXZ15HwjVQ=="], - "@bastani/atomic-natives-linux-x64-gnu": ["@bastani/atomic-natives-linux-x64-gnu@0.9.44", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-+tKW1fiqP3ORV2FAYvuo5KGY8B+j0hCjZ/uCvbwdvP40osxZ8F+wyrdUaaKL5L5ePo7GBoFoWQnSZfCVzJQd0A=="], + "@bastani/atomic-natives-linux-x64-gnu": ["@bastani/atomic-natives-linux-x64-gnu@0.9.45", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-r84HLGuEUcl+x9PpzYxdSzxr4xJyeSHGXkLGJr4kN0+OKrAbNQFt1Sdtf6AXn5PYefrNHwveO42Mo5UY3guFQw=="], - "@bastani/atomic-natives-linux-x64-musl": ["@bastani/atomic-natives-linux-x64-musl@0.9.44", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-FW7jvmV3MPMa8QqXFhX/XeDAmX/Gak7N+OH/RFgqLATWT4mfnIwxkVSplFpdvyzDZtRmnpqx10Fh2p2suwDenA=="], + "@bastani/atomic-natives-linux-x64-musl": ["@bastani/atomic-natives-linux-x64-musl@0.9.45", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-WEox1R5mskF8o6+Ilg9Ir03pcbqR+upWvHKaspr1h4RdmfZBI1S7NMJw+MDmp7wGe4edN56EK5S+XEh460UmPQ=="], - "@bastani/atomic-natives-win32-arm64-msvc": ["@bastani/atomic-natives-win32-arm64-msvc@0.9.44", "", { "os": "win32", "cpu": "arm64" }, "sha512-nfX6hVxQFbyoPZK0n3YcHZOBXFzEK/RdPLJTmGiHOkBIyB6wGqgX1FvXHyAATkn/K8FKp5VVoDlvIRrcfWoffA=="], + "@bastani/atomic-natives-win32-arm64-msvc": ["@bastani/atomic-natives-win32-arm64-msvc@0.9.45", "", { "os": "win32", "cpu": "arm64" }, "sha512-x4Nj9Vvmw0wV00h9zGvbkXUt3pOjNFOsPoVwZDRRiWRftiDNa0P30OHd/TKwA28tDF0AbDUOjP+SGuJhmt0mog=="], - "@bastani/atomic-natives-win32-x64-msvc": ["@bastani/atomic-natives-win32-x64-msvc@0.9.44", "", { "os": "win32", "cpu": "x64" }, "sha512-F3w02hmhwWDxaOr/jYWBzsUMjTEdEA9gjhsM3g2Hn+Nr0wYyrzrzBbA+TIGtV1KaK0COrs0OYEQTQLMU7zAbQw=="], + "@bastani/atomic-natives-win32-x64-msvc": ["@bastani/atomic-natives-win32-x64-msvc@0.9.45", "", { "os": "win32", "cpu": "x64" }, "sha512-gaNeZqBKgN7zrfRRPrG2XCPyravfwr9/B/WTot0S39uBcJqXscQH6WVXW7ldiVNU8GdtJXH+ikOsJ94Dz6eYUQ=="], - "@bastani/pi-ai": ["@bastani/pi-ai@0.9.44", "", { "dependencies": { "@anthropic-ai/sdk": "0.129.0", "@aws-sdk/client-bedrock-runtime": "3.1127.0", "@earendil-works/pi-telemetry": "1.4.0", "@google/genai": "2.21.0", "@smithy/node-http-handler": "4.12.1", "http-proxy-agent": "9.1.0", "https-proxy-agent": "9.1.0", "openai": "7.19.0", "partial-json": "0.1.7", "typebox": "1.3.27" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-ZokOT6jdtax/lI9sIrsJO/Cf1XucR5Q0Yg5Of2wg7YHzA4GuB9WM/GI1y7yaNC+n9p6I1E79Oa4+sUGr2qTMEg=="], + "@bastani/pi-ai": ["@bastani/pi-ai@0.9.45", "", { "dependencies": { "@anthropic-ai/sdk": "0.129.0", "@aws-sdk/client-bedrock-runtime": "3.1127.0", "@earendil-works/pi-telemetry": "1.4.0", "@google/genai": "2.21.0", "@smithy/node-http-handler": "4.12.1", "http-proxy-agent": "9.1.0", "https-proxy-agent": "9.1.0", "openai": "7.19.0", "partial-json": "0.1.7", "typebox": "1.3.27" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-kgdkQdmCru3edq7x+bGK5TomRQpqoPuDeKknKmujimbzm6Xk9p52fMbrqZgJ0qJYs/tqRjELmttJyfxGdsi+Sg=="], "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 2799e843b..60f4d9855 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -75,7 +75,7 @@ each owner's GitHub App user token and does not consume `HARNESS_AUTH`; setting `auto` on loopback passes the startup guard but does not enable host login in that adapter. -`HARNESS=atomic` runs Atomic 0.9.44 in the Chopin server process through its +`HARNESS=atomic` runs Atomic 0.9.45 in the Chopin server process through its headless SDK (`createAgentSession()`). It does not spawn the `atomic` CLI or use RPC mode. @@ -178,7 +178,14 @@ Atomic caveats: replayed on a new worker, up to three attempts; after that the run fails and its card in Chat says so. The settings `workflows.localWorkers.startupTimeoutMs` and `leaseMs` set how long a worker may take to start and how long an - unresponsive one keeps its child. + unresponsive one keeps its child; Chopin sets neither. A pool runs children + once one worker is ready and fails to start only when none is. Since Atomic + 0.9.45 an unset `startupTimeoutMs` is no longer a flat 30 seconds: it is 30 + seconds times the worker count plus the one-minute load average, divided by + the CPU cores, at least 30 seconds and at most 10 minutes, so a large pool on + a busy Chopin host waits longer. A run whose workers still miss it fails with + `Local worker startup timed out`, and its card in Chat says so; raise the + setting or use fewer workers. - Since Atomic 0.9.44 a workflow runs up to 1000 of its stages at once unless it says otherwise (`defaultConcurrency`, 3 before), nests child workflows at most three levels deep (`maxDepth`, 4 before), and a stage's `subagent` tool diff --git a/package.json b/package.json index 53fb94d69..9053e96f3 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@ai-sdk/harness": "1.0.146", "@ai-sdk/mcp": "2.0.72", "@ai-sdk/sandbox-just-bash": "1.0.146", - "@bastani/atomic": "0.9.44", + "@bastani/atomic": "0.9.45", "ai": "7.0.135", "typebox": "1.3.7", "zod": "4.4.3"