Load operator extension paths in atomic Planner sessions - #238
Open
lavaman131 wants to merge 6 commits into
Open
lavaman131 wants to merge 6 commits into
lavaman131 wants to merge 6 commits into
Conversation
MaggieAppleton
approved these changes
Oct 2, 2026
Collaborator
There was a problem hiding this comment.
Reviewed the changes against #230: extension-path parsing and startup validation, loading operator packages only in full Planner sessions, worker isolation, and the added composer destination cue. No blocking issues found in this PR’s own diff. Validation, browser integration, and container CI all pass.
HARNESS_EXTENSIONS lists extension or package paths that every atomic Planner session loads, as Atomic's --extension flag would. A package's extensions, skills and workflows all register, so an operator can give the Planner workflows without installing them into the agent directory. The paths are split on the platform path delimiter, must be absolute and exist, and are refused under any other harness. Background workers never load them, and the startup line names them. Assistant-model: Claude Opus 5.5 Assistant-workflow: inline Assistant-verification: bun test passed: 1907 pass, 2 PostgreSQL skips, 0 fail; the new Planner test fails without the adapter change Assistant-verification: bun run types passed: all workspaces Assistant-verification: bun run ci passed: dprint, oxlint (7 existing warnings, none new), tokens, design contract, design record, Impeccable (no new findings) Assistant-verification: adapter integration passed: a Planner session with a local package on HARNESS_EXTENSIONS listed that package's workflows through the workflow tool Co-authored-by: Alex Lavaee <[email protected]>
…backend CI timed out the operator-extension test at Bun's 5 s default. Its first workflow tool call starts Atomic's durable backend, and without Postgres that falls back to the in-memory backend only after several seconds; with no Postgres runtime and no Docker, the call alone took 4.7 s locally. The test is split in two, and both tests that call the workflow tool get 30 s. Assistant-model: Claude Opus 5.5 Assistant-workflow: inline Assistant-verification: bun test failed before this change on CI: operator extension paths test timed out after 5000 ms Assistant-verification: bun test passed: full.test.ts with PATH lacking docker and ATOMIC_POSTGRES_RUNTIME_DIR=/nonexistent (15 pass), and the whole suite (1908 pass, 2 skip, 0 fail) Assistant-verification: bun run types and bun run ci passed: no new oxlint warnings, no new Impeccable findings Co-authored-by: Alex Lavaee <[email protected]>
…e room A message without @chopin is sent as a room message, and the composer gave no sign of it, so a member who expected a Planner reply got silence. The composer now says, below the draft and before anything is sent, "Sends to the Planner, which will reply" or "Room only. Add @chopin to ask the Planner". The cue comes from the same chatSendPayload prediction the send uses, so it follows references and an off Planner (no cue) exactly as the wire destination will. The @chopin addressing rule and addressed() are unchanged, and the Send button keeps its name. Assistant-workflow: goal (run c99248c7-a6cb-4858-95f9-5039c865f0b6) Assistant-model: Claude Sonnet 5.5 Assistant-verification: bun test passed: apps/web 355 pass, 0 fail, including destinationCue cases for room, planner, reference-masked mention, empty draft and Planner off Assistant-verification: bun run types and bun run ci passed: dprint, oxlint (7 existing warnings, none new), tokens, design contract, Impeccable (no new findings) Assistant-verification: playwright e2e passed: bun run e2e e2e/harness.e2e.ts, 2 passed including the composer destination cue test Co-authored-by: Alex Lavaee <[email protected]>
0.9.26-alpha.5 relays a workflow stage's ask_user_question to the session's HostInput (bastani-inc/atomic#3396). On 0.9.25 the relay missed the request, so a stage's question never reached Decisions and the stage waited forever. It also restores managed workflow PostgreSQL after a shutdown (bastani-inc/atomic#3413), which is what left Planner workflow runs non-durable, so the Planner keeps them durable with Atomic's own database selection and no extra configuration. The new full.test.ts case runs a workflow whose stage asks a question through a real Atomic session: the card appears in Decisions as a Questionnaire block and its answer reaches the stage. It times out with no card on 0.9.25. The five builtin packages are unchanged, so BUILTINS_OFF still turns off each one for the isolated Planner. Assistant-workflow: inline Assistant-model: Claude Opus 5.5 Assistant-verification: bun test failed on 0.9.25: the new workflow-stage question case timed out after 32.7s with no card Assistant-verification: bun test passed: 1911 pass, 2 PostgreSQL skips, 0 fail; full.test.ts 16 pass with the new case Assistant-verification: bun run types passed: all workspaces Assistant-verification: bun run ci passed: dprint, oxlint, tokens, design contract, design record, Impeccable (no new findings) Assistant-verification: durability check passed: a Planner workflow run with no DBOS_SYSTEM_DATABASE_URL used Atomic's managed PostgreSQL, logged no NON-DURABLY warning, and was kept after the process was killed Assistant-verification: cross-process /workflow resume from a fresh SDK session failed: timed out on both 0.9.25 and 0.9.26-alpha.5 with persisted checkpoints Assistant-verification: source check passed: @bastani/atomic 0.9.26-alpha.5 dist/builtin lists intercom, mcp, subagents, web-access, workflows Co-authored-by: Alex Lavaee <[email protected]>
0.9.26-alpha.6 lets a new session inspect and resume a workflow run whose owning session crashed (bastani-inc/atomic#3419). On 0.9.26-alpha.5 only the session that started a run could resume it, so a Planner session opened after a Chopin restart could never recover the runs the previous server left behind. The five builtin packages are unchanged, so BUILTINS_OFF still turns off each one for the isolated Planner. Assistant-workflow: inline Assistant-model: Claude Opus 5.5 Assistant-verification: SDK resume repro passed: after kill -9 and the 2-minute live window, a new session's getRun() reported crashed and resume() completed the run on 0.9.26-alpha.6 (rejected with WorkflowRunOwnershipError on 0.9.26-alpha.5) Assistant-verification: bun test passed: 1912 pass, 2 PostgreSQL skips, 0 fail Assistant-verification: bun run types passed: all 9 workspace checks Assistant-verification: bun run ci passed: dprint, oxlint, tokens, design contract, design record, Impeccable (no new findings) Assistant-verification: source check passed: @bastani/atomic 0.9.26-alpha.6 dist/builtin lists intercom, mcp, subagents, web-access, workflows Co-authored-by: Alex Lavaee <[email protected]>
lavaman131
force-pushed
the
atomic-planner-run-control
branch
from
October 4, 2026 19:39
24659d0 to
c29f101
Compare
lavaman131
force-pushed
the
atomic-planner-extensions
branch
from
October 4, 2026 19:39
ad38cd3 to
cb95a5f
Compare
0.9.26 is the stable release of the 0.9.26 prereleases already in use: a workflow stage's ask_user_question reaches Decisions, managed workflow PostgreSQL comes back after a shutdown, and a new session can resume a run whose owning session crashed, now with database ownership fencing. Its one breaking change, McpOAuthCredentialStore taking a server name, is not used here. @bastani/atomic-natives and @bastani/pi-ai follow to 0.9.26; Atomic's @earendil-works packages stay at 1.0.2. The five builtin packages are unchanged, so BUILTINS_OFF still turns off each one for the isolated Planner. Assistant-workflow: inline Assistant-model: Claude Opus 5.5 Assistant-verification: bun test passed: 1936 pass, 2 PostgreSQL skips, 0 fail Assistant-verification: bun run types passed: all 9 workspace checks Assistant-verification: bun run ci passed: dprint, oxlint, tokens, design contract, design record, Impeccable (no new findings) Assistant-verification: source check passed: @bastani/atomic 0.9.26 dist/builtin lists intercom, mcp, subagents, web-access, workflows; no McpOAuthCredentialStore use Co-authored-by: Alex Lavaee <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #230.
Operators can now give the atomic Planner extensions and workflows without installing them into the server's Atomic agent directory. Today the Planner only sees what the agent directory and a verified checkout's
.atomic/settings.jsoninstall, so a package an operator loads withatomic --extensionin their own terminal never reaches it.What changes
HARNESS_EXTENSIONS. A list of extension or package paths, separated by the platform path delimiter, that every atomic Planner session loads the same way Atomic's--extensionflag does. A package's extensions, skills, and workflows all register. Chopin passes the paths to Atomic's resource loader asadditionalExtensionPaths.self-hosting.md,hosted-agent.md, and.env.exampledescribe the variable.Verification
bun test: 1907 pass, 2 PostgreSQL skips, 0 fail. The new Planner test registers a local package's tool, skill, and workflow through the operator paths, confirms a worker session on the same harness doesn't see them, and fails without the adapter change.bun run typesandbun run cipass. oxlint reports no new warnings and Impeccable no new findings.Assistant-workflow: inline
Assistant-verification: bun test passed: 1907 pass, 2 skip, 0 fail
Assistant-verification: bun run types and bun run ci passed
Co-authored-by: Alex Lavaee [email protected]