@bastani/atomic 0.9.16-alpha.8 → 0.9.16

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 (212) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/README.md +4 -4
  3. package/dist/builtin/intercom/CHANGELOG.md +42 -0
  4. package/dist/builtin/intercom/README.md +18 -17
  5. package/dist/builtin/intercom/broker/broker.ts +43 -18
  6. package/dist/builtin/intercom/broker/client.ts +138 -7
  7. package/dist/builtin/intercom/broker/group-isolation.ts +3 -3
  8. package/dist/builtin/intercom/broker/group-membership.ts +55 -0
  9. package/dist/builtin/intercom/broker/presence-handler.ts +62 -50
  10. package/dist/builtin/intercom/broker/send-handler.ts +2 -3
  11. package/dist/builtin/intercom/group.ts +40 -0
  12. package/dist/builtin/intercom/index.bundle.mjs +556 -185
  13. package/dist/builtin/intercom/package.json +2 -2
  14. package/dist/builtin/intercom/skills/intercom/SKILL.md +16 -10
  15. package/dist/builtin/intercom/types.ts +24 -2
  16. package/dist/builtin/mcp/index.bundle.mjs +268 -54
  17. package/dist/builtin/mcp/package.json +2 -2
  18. package/dist/builtin/subagents/CHANGELOG.md +51 -0
  19. package/dist/builtin/subagents/README.md +3 -3
  20. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  21. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  22. package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
  23. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  24. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
  25. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  26. package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
  27. package/dist/builtin/subagents/agents/debugger.md +1 -1
  28. package/dist/builtin/subagents/agents/worker.md +1 -1
  29. package/dist/builtin/subagents/package.json +3 -3
  30. package/dist/builtin/subagents/src/extension/index.bundle.mjs +488 -142
  31. package/dist/builtin/web-access/index.bundle.mjs +268 -54
  32. package/dist/builtin/web-access/package.json +2 -2
  33. package/dist/builtin/workflows/CHANGELOG.md +70 -0
  34. package/dist/builtin/workflows/README.md +2 -2
  35. package/dist/builtin/workflows/builtin/{chunk-zf28603f.js → chunk-3y1hmzw6.js} +36 -6
  36. package/dist/builtin/workflows/builtin/{chunk-nqr34qp3.js → chunk-6rbajjf5.js} +7 -1
  37. package/dist/builtin/workflows/builtin/{chunk-v04c5qmd.js → chunk-bz1c9732.js} +15 -3
  38. package/dist/builtin/workflows/builtin/{chunk-cdtd3m3w.js → chunk-dattsgxg.js} +1 -1
  39. package/dist/builtin/workflows/builtin/{chunk-5n10x7j2.js → chunk-gdx0avpx.js} +421 -69
  40. package/dist/builtin/workflows/builtin/{chunk-hdpj1dkw.js → chunk-w9c7rkrk.js} +1 -1
  41. package/dist/builtin/workflows/builtin/goal.js +3 -3
  42. package/dist/builtin/workflows/builtin/index.js +5 -5
  43. package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
  44. package/dist/builtin/workflows/builtin/ralph.js +3 -3
  45. package/dist/builtin/workflows/package.json +2 -2
  46. package/dist/builtin/workflows/src/extension/index.bundle.mjs +597 -145
  47. package/dist/builtin/workflows/src/index.js +278 -74
  48. package/dist/cli/args.js +6 -6
  49. package/dist/cli/args.js.map +1 -1
  50. package/dist/cli/config-selector.d.ts.map +1 -1
  51. package/dist/cli/config-selector.js +2 -1
  52. package/dist/cli/config-selector.js.map +1 -1
  53. package/dist/cli/session-picker.d.ts +2 -1
  54. package/dist/cli/session-picker.d.ts.map +1 -1
  55. package/dist/cli/session-picker.js +3 -2
  56. package/dist/cli/session-picker.js.map +1 -1
  57. package/dist/cli/startup-ui.d.ts.map +1 -1
  58. package/dist/cli/startup-ui.js +2 -1
  59. package/dist/cli/startup-ui.js.map +1 -1
  60. package/dist/core/agent-session-methods.d.ts +1 -0
  61. package/dist/core/agent-session-methods.d.ts.map +1 -1
  62. package/dist/core/agent-session-methods.js.map +1 -1
  63. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  64. package/dist/core/agent-session-post-tool-compaction.js +3 -6
  65. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  66. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  67. package/dist/core/agent-session-prompt.js +3 -1
  68. package/dist/core/agent-session-prompt.js.map +1 -1
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js +6 -3
  71. package/dist/core/agent-session-services.js.map +1 -1
  72. package/dist/core/agent-session-state.d.ts.map +1 -1
  73. package/dist/core/agent-session-state.js +7 -5
  74. package/dist/core/agent-session-state.js.map +1 -1
  75. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  76. package/dist/core/agent-session-tool-hooks.js +37 -23
  77. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  78. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  79. package/dist/core/agent-session-tool-registry.js +9 -2
  80. package/dist/core/agent-session-tool-registry.js.map +1 -1
  81. package/dist/core/agent-session.d.ts +2 -0
  82. package/dist/core/agent-session.d.ts.map +1 -1
  83. package/dist/core/agent-session.js +2 -0
  84. package/dist/core/agent-session.js.map +1 -1
  85. package/dist/core/builtin-packages.d.ts +4 -0
  86. package/dist/core/builtin-packages.d.ts.map +1 -1
  87. package/dist/core/builtin-packages.js +22 -1
  88. package/dist/core/builtin-packages.js.map +1 -1
  89. package/dist/core/callback-activity.d.ts.map +1 -1
  90. package/dist/core/callback-activity.js +6 -3
  91. package/dist/core/callback-activity.js.map +1 -1
  92. package/dist/core/extensions/agent-events.d.ts +15 -0
  93. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  94. package/dist/core/extensions/agent-events.js.map +1 -1
  95. package/dist/core/extensions/api-types.d.ts +3 -1
  96. package/dist/core/extensions/api-types.d.ts.map +1 -1
  97. package/dist/core/extensions/api-types.js.map +1 -1
  98. package/dist/core/extensions/event-types.d.ts +2 -2
  99. package/dist/core/extensions/event-types.d.ts.map +1 -1
  100. package/dist/core/extensions/event-types.js.map +1 -1
  101. package/dist/core/extensions/index.d.ts +1 -1
  102. package/dist/core/extensions/index.d.ts.map +1 -1
  103. package/dist/core/extensions/index.js.map +1 -1
  104. package/dist/core/extensions/loader-core.d.ts +1 -0
  105. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  106. package/dist/core/extensions/loader-core.js +11 -1
  107. package/dist/core/extensions/loader-core.js.map +1 -1
  108. package/dist/core/extensions/loader.d.ts +1 -1
  109. package/dist/core/extensions/loader.d.ts.map +1 -1
  110. package/dist/core/extensions/loader.js +1 -1
  111. package/dist/core/extensions/loader.js.map +1 -1
  112. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  113. package/dist/core/extensions/runner-registries.js +9 -4
  114. package/dist/core/extensions/runner-registries.js.map +1 -1
  115. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
  116. package/dist/core/extensions/runner-shortcuts.js +1 -0
  117. package/dist/core/extensions/runner-shortcuts.js.map +1 -1
  118. package/dist/core/extensions/runner.d.ts +6 -0
  119. package/dist/core/extensions/runner.d.ts.map +1 -1
  120. package/dist/core/extensions/runner.js +65 -1
  121. package/dist/core/extensions/runner.js.map +1 -1
  122. package/dist/core/keybindings.d.ts +5 -0
  123. package/dist/core/keybindings.d.ts.map +1 -1
  124. package/dist/core/keybindings.js +4 -0
  125. package/dist/core/keybindings.js.map +1 -1
  126. package/dist/core/mandatory-resource-loader.d.ts +6 -0
  127. package/dist/core/mandatory-resource-loader.d.ts.map +1 -0
  128. package/dist/core/mandatory-resource-loader.js +94 -0
  129. package/dist/core/mandatory-resource-loader.js.map +1 -0
  130. package/dist/core/mandatory-runtime-tools.d.ts +10 -0
  131. package/dist/core/mandatory-runtime-tools.d.ts.map +1 -0
  132. package/dist/core/mandatory-runtime-tools.js +31 -0
  133. package/dist/core/mandatory-runtime-tools.js.map +1 -0
  134. package/dist/core/model-resolver-defaults.js +1 -1
  135. package/dist/core/model-resolver-defaults.js.map +1 -1
  136. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  137. package/dist/core/resource-loader-reload.js +24 -13
  138. package/dist/core/resource-loader-reload.js.map +1 -1
  139. package/dist/core/sdk.d.ts.map +1 -1
  140. package/dist/core/sdk.js +2 -0
  141. package/dist/core/sdk.js.map +1 -1
  142. package/dist/core/settings-manager-ui-accessors.d.ts +4 -1
  143. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  144. package/dist/core/settings-manager-ui-accessors.js +22 -0
  145. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  146. package/dist/core/settings-types.d.ts +4 -0
  147. package/dist/core/settings-types.d.ts.map +1 -1
  148. package/dist/core/settings-types.js.map +1 -1
  149. package/dist/core/slash-commands.js +1 -1
  150. package/dist/core/slash-commands.js.map +1 -1
  151. package/dist/index-extensions.d.ts +1 -1
  152. package/dist/index-extensions.d.ts.map +1 -1
  153. package/dist/index-extensions.js.map +1 -1
  154. package/dist/main-session.d.ts.map +1 -1
  155. package/dist/main-session.js +3 -2
  156. package/dist/main-session.js.map +1 -1
  157. package/dist/main.d.ts.map +1 -1
  158. package/dist/main.js +6 -0
  159. package/dist/main.js.map +1 -1
  160. package/dist/modes/interactive/components/fast-mode-selector.js +2 -2
  161. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  162. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  163. package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
  164. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  165. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  166. package/dist/modes/interactive/components/settings-selector-items.js +7 -0
  167. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  168. package/dist/modes/interactive/components/settings-selector-types.d.ts +2 -0
  169. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  170. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  171. package/dist/modes/interactive/interactive-agent-events.js +2 -1
  172. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  173. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  174. package/dist/modes/interactive/interactive-deferred-startup.js +1 -0
  175. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  176. package/dist/modes/interactive/interactive-extension-runtime.js +1 -1
  177. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  178. package/dist/modes/interactive/interactive-input-handling.js +3 -0
  179. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  180. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  181. package/dist/modes/interactive/interactive-mode-base.js +15 -1
  182. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  183. package/dist/modes/interactive/interactive-mode-surface.d.ts +6 -1
  184. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  185. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  186. package/dist/modes/interactive/interactive-selectors.js +6 -1
  187. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  188. package/dist/modes/interactive/interactive-session-runtime.js +3 -0
  189. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  190. package/dist/modes/interactive/interactive-slash-commands.js +7 -12
  191. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  192. package/dist/modes/interactive/interactive-tui.d.ts +1 -0
  193. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  194. package/dist/modes/interactive/interactive-tui.js +16 -0
  195. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  196. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  197. package/dist/modes/rpc/rpc-session-binding.js +2 -0
  198. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  199. package/docs/compaction.md +1 -1
  200. package/docs/environment-variables.md +2 -0
  201. package/docs/extensions.md +20 -1
  202. package/docs/intercom.md +29 -24
  203. package/docs/keybindings.md +5 -2
  204. package/docs/packages.md +1 -1
  205. package/docs/providers.md +2 -2
  206. package/docs/sdk.md +9 -7
  207. package/docs/settings.md +9 -3
  208. package/docs/subagents.md +2 -2
  209. package/docs/usage.md +7 -6
  210. package/docs/workflows.md +11 -7
  211. package/npm-shrinkwrap.json +59 -77
  212. package/package.json +7 -7
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/web-access",
3
- "version": "0.9.16-alpha.8",
3
+ "version": "0.9.16",
4
4
  "private": true,
5
5
  "description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction. Fork of: https://github.com/nicobailon/pi-web-access",
6
6
  "contributors": [
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@bastani/atomic": "*",
34
- "@earendil-works/pi-tui": "^0.84.3"
34
+ "@earendil-works/pi-tui": "^0.84.4"
35
35
  },
36
36
  "peerDependenciesMeta": {
37
37
  "@bastani/atomic": {
@@ -6,6 +6,76 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.16] - 2026-08-29
10
+
11
+ Cumulative release of the `0.9.16-alpha.1` – `0.9.16-alpha.11` prereleases. The summary below covers the user-visible outcome of that work; the per-change detail remains in the prerelease sections below.
12
+
13
+ ### Added
14
+
15
+ - Added a dedicated `workflow answer` action for responding to pending primitive and structured human-in-the-loop prompts without exposing stage-message delivery semantics.
16
+ - Added durable pending-stage message state for ordinary Intercom delivery, including FIFO delivery before the first model turn, resume/replay persistence, exactly-once stage-attempt handling, lifecycle failure notifications, and guidance for propagating material updates to known workflow stages that have not started. ([#2717](https://github.com/bastani-inc/atomic/issues/2717))
17
+ - Added Lauren Tan's bundled `bro`, `how`, `teach`, `unslop`, and `why` pstack skills for plain-language restatement, codebase explanation, teaching, writing cleanup, and evidence-backed design rationale. Sourced from https://github.com/cursor/plugins and distributed under the MIT License.
18
+
19
+ ### Changed
20
+
21
+ - Every workflow model stage now retains ordinary `intercom` and its invocation group through `tools`, `excludedTools`, `noTools`, extension restrictions, and reload. Restrictions on every other tool and workflow group isolation are unchanged.
22
+ - Added the full and Flash GLM-5.3 direct Z.AI, Z.AI Coding Plan, Baseten, and OpenRouter routes to every built-in Goal, Ralph, and Open Claude Design fallback chain.
23
+ - Periodic workflow heartbeat prompts now guide supervising agents to use ordinary Intercom when steering or communication is useful, match an update's reach to the expanded workflow topology, send shared scope or acceptance changes consistently across every relevant live and known unstarted worker/reviewer stage, account for immediate and queued pre-first-turn delivery, and use workflow pause, resume, interrupt, or quit for run control.
24
+ - Builtin `goal` and `ralph` stage prompts now carry a shared `code_quality_verification` section pointing stages at the `qlty` skill (or `skill: "qlty"` delegation) for linting, auto-formatting, complexity and duplication metrics, and code smells — weighted higher when the objective asks for verifiers or high code quality. It reaches the goal controller, goal orchestrator, goal reviewer, ralph orchestrator, and both ralph reviewers, alongside the existing end-to-end verification guidance. Repository-defined checks in AGENTS.md/CLAUDE.md, package scripts, and CI remain authoritative.
25
+ - Builtin `goal` and `ralph` stage prompts now carry a shared `repository_intent` section instructing implementers and reviewers to infer maintainer and requesting-user conventions by mining repository behavior — git history (including `git log --show-signature`), merged PRs, issues and their comments, review comments, commit subjects and trailers, and CI/branch-protection config — for unwritten norms. Behavioral evidence fills contract gaps and never overrides the literal objective, acceptance criteria, or explicit AGENTS.md/CLAUDE.md guidance.
26
+ - The `workflow` tool's routing guidance adds a repository-intent clause to the pre-launch architecture pass: for coding tasks, mine git history, merged PRs, issues, commits, and review comments before freezing authored workflow objectives and acceptance criteria so they capture unwritten conventions, weighing the requesting user's own activity highest; non-coding tasks mine their analogous available context sources the same way.
27
+ - The `workflow` tool description, agent routing guidance, and workflow docs now treat a blocked run as continuable by default: resume resumable blocks, answer pending prompts, steer past the obstacle, or start a follow-up workflow past a terminal block (inline only when the remaining work is minimal), stopping for user input only when the task is so ambiguous that judgment cannot infer intent from the objective and repository evidence. When `ask_user_question` or human input is unavailable, the agent is instructed to continue fully autonomously on the interpretation best supported by that evidence and to record the assumption.
28
+ - `WORKFLOW BLOCKED` lifecycle notices now carry that continuation instruction in their text: resume or steer the run, or continue with a follow-up workflow (inline only if what remains is minimal), and ask the user only when intent cannot be inferred from repository evidence.
29
+ - A budget-exceeded stop is now reported as its own blocked-notice variant (`stopped at its <dimension> budget limit`, with `budgetExceeded`/`budgetDimension` details and a `/workflow resume` hint) whose text instructs the agent to summarize progress and estimated next steps, ask the user whether to proceed — preferring the `ask_user_question` tool when available — and resume with a raised `budget` only after approval.
30
+ - The public `workflow` tool now has a two-minute request deadline. Timed-out requests return `WORKFLOW_TIMEOUT` with `timeoutMs: 120000`, abort cancellable work, discard late settlement, and never retry. Mutating actions keep the unknown-outcome warning that tells callers to inspect workflow status before retrying ([#2654](https://github.com/bastani-inc/atomic/issues/2654), [#2605](https://github.com/bastani-inc/atomic/issues/2605)).
31
+ - Agent guidance now treats "no budget" as the default for workflow runs. A `budget` is passed on `run`/`resume` only when the operator asked for a limit, and only the fields they named; otherwise the field is omitted so the workflow declaration and config resolve normally.
32
+ - Agent guidance now assumes the existing 15-minute heartbeat cadence and does not shorten, lengthen, or disable it unless the operator asks. Heartbeats are documented as periodic alignment checks rather than failure signals, so a progressing run is not interrupted, re-capped, or polled in response to one.
33
+
34
+ ### Fixed
35
+
36
+ - Fixed Git-installed workflow discovery when production-only package installs omit local TypeBox by resolving `typebox/compile`, `typebox/value`, and supported legacy `@sinclair/typebox` aliases through the host loader for workflow files and their helpers.
37
+ - Fixed a hung DBOS write in one workflow blocking independent top-level workflows before startup admission. Durable writes now remain ordered per root workflow while workflow-local flushes wait only their own root; process shutdown still drains every root.
38
+ - Workflow heartbeat and routing guidance now tells agents to discover a stage's `workflow:<rootRunId>` invocation group with the Intercom `groups` action and join it before steering the stage.
39
+ - An in-flight workflow run no longer fails after a preserving `/reload` when the predecessor persistence port becomes stale. Advisory `workflow.stage.end` and `workflow.run.end` transcript appends swallow exactly `isStaleExtensionContextError` and rethrow every other error. ([#2749](https://github.com/bastani-inc/atomic/issues/2749))
40
+ - Fixed running durable `ctx.tool` message blocks showing a trailing `●` after the tool call header; running and completed calls now use the same marker-free `$ <tool-name>` presentation while other tool-state markers remain unchanged.
41
+ - Fixed a completed `ctx.task` leaving the root raw `running` with no active stage or tool and no path to the next budget boundary. The durable task-result checkpoint now fails closed, duration is rechecked after that checkpoint, quit/interrupt can abort a never-settling persist, and a terminal-only stage checkpoint replays the complete `WorkflowTaskResult` without rerunning the task ([#2650](https://github.com/bastani-inc/atomic/issues/2650)).
42
+ - Fixed raised-budget resume of a blocked workflow when parallel stages shared a completed `ctx.tool` parent. Fresh-ID continuations translate tool parent identities during fail-closed topology validation, preserve cached root-level tool siblings without a false mismatch, and keep a blocked source retryable after a rejection without dropping recorded prompt answers ([#2639](https://github.com/bastani-inc/atomic/issues/2639)).
43
+ - Fresh-ID continuations reuse the source `ctx.tool` checkpoint, including `failureMode: "return"` success and `return_failure` outcomes. To re-run a completed return-mode callback, start a new run or change the tool name or args ([#2639](https://github.com/bastani-inc/atomic/issues/2639)).
44
+ - Fixed ordinary in-process subagents stealing the parent session's workflow store binding. Subagent children retain bundled workflow definitions as resources without loading the workflows extension or exposing its tool, and the extension factory rejects admitted child sessions as a second boundary.
45
+ - Fixed simultaneous post-task budget exhaustion in `ctx.parallel(..., { failFast: false })` being replaced by a generic aggregate failure after every task had already persisted a complete result. Budget-only parallel failures now retain the engine-owned resumable `budget_exceeded` classification and replay all completed task results under a raised budget without rerunning their models.
46
+ - Fixed workflow name resolution racing past an in-flight `/workflow reload`: a run dispatched immediately after a reload could resolve against the pre-reload registry and execute the old module. Resolution now awaits any in-flight discovery before resolving names. ([#2667](https://github.com/bastani-inc/atomic/pull/2667) by [@uppifyagency](https://github.com/uppifyagency))
47
+ - Fixed Goal losing its ledger, orchestrator receipt, and review artifacts when a durable resume continued under a fresh run ID. Goal now checkpoints the complete artifact directory, reloads exact turn-bearing ledger state from a durable sidecar without truncating records or fabricating reducer turns, and scopes artifact ownership to the run's own identity plus its continuation chain.
48
+ - Fixed a missing Goal reviewer `reads` artifact being reported as malformed structured reviewer output. Missing referenced files now remain explicit reviewer execution failures attributed to the `reads` contract.
49
+ - Fixed Windows embedded Postgres startup waiting forever when the daemon inherited `pg_ctl` pipes by directly spawning Postgres behind an opaque native process lease. Orderly shutdown now sends fast shutdown and bounded-waits on that exact retained child/HANDLE, preventing mutable-pidfile and PID-reuse races while leaving attached clusters untouched ([#2547](https://github.com/bastani-inc/atomic/issues/2547), [#2544](https://github.com/bastani-inc/atomic/pull/2544) by [@darionco](https://github.com/darionco)).
50
+ - Fixed active zero-stage workflows whose only work is durable `ctx.tool` calls being under-represented in the below-editor `BACKGROUND` panel. Normal-width cards now show a single pending or running tool node by name and status; when multiple nodes are live, their total appears before the width-clamped node details.
51
+ - Fixed a never-settling public workflow tool request blocking the interactive agent indefinitely ([#2605](https://github.com/bastani-inc/atomic/issues/2605)).
52
+
53
+ ### Removed
54
+
55
+ - Removed the public `workflow send` action and its stage-chat delivery modes. Use `workflow answer` for pending human-input prompts, `workflow resume` for paused control, and ordinary Intercom for live or deferred workflow-stage communication.
56
+
57
+ ## [0.9.16-alpha.11] - 2026-08-28
58
+
59
+ ### Changed
60
+
61
+ - Every workflow model stage now retains ordinary `intercom` and its invocation group through `tools`, `excludedTools`, `noTools`, extension restrictions, and reload. Restrictions on every other tool and workflow group isolation are unchanged.
62
+
63
+ ### Fixed
64
+
65
+ - Fixed Git-installed workflow discovery when production-only package installs omit local TypeBox by resolving `typebox/compile`, `typebox/value`, and supported legacy `@sinclair/typebox` aliases through the host loader for workflow files and their helpers.
66
+ - Fixed a hung DBOS write in one workflow blocking independent top-level workflows before startup admission. Durable writes now remain ordered per root workflow while workflow-local flushes wait only their own root; process shutdown still drains every root.
67
+
68
+ ## [0.9.16-alpha.10] - 2026-08-28
69
+
70
+ ### Changed
71
+
72
+ - Added the full and Flash GLM-5.3 direct Z.AI, Z.AI Coding Plan, Baseten, and OpenRouter routes to every built-in Goal, Ralph, and Open Claude Design fallback chain.
73
+
74
+ ### Fixed
75
+
76
+ - Workflow heartbeat and routing guidance now tells agents to discover a stage's `workflow:<rootRunId>` invocation group with the Intercom `groups` action and join it before steering the stage.
77
+ - An in-flight workflow run no longer fails after a preserving `/reload` when the predecessor persistence port becomes stale. Advisory `workflow.stage.end` and `workflow.run.end` transcript appends swallow exactly `isStaleExtensionContextError` and rethrow every other error. ([#2749](https://github.com/bastani-inc/atomic/issues/2749))
78
+
9
79
  ## [0.9.16-alpha.8] - 2026-08-27
10
80
 
11
81
  ### Added
@@ -443,7 +443,7 @@ Atomic registers the canonical `structured_output` tool only for schema-enabled
443
443
 
444
444
  When an item configures both `schema` and `output`, its successful `structured_output` turn has two separate channels: all ordinary assistant text blocks from that exact message, in order, form the human-readable artifact written to `output`, while the successful tool arguments remain the typed machine-readable workflow result. Atomic never serializes those arguments into the artifact. The runner snapshots the result together with the exact successful tool-call id, so corrective attempts, another call with the same tool name, and later admitted turns cannot replace either side of the pairing. When the successful message has no ordinary text — including after a model-fallback session recreation that leaves the live session without that message — Atomic falls back to the most recent earlier assistant text that made no `structured_output` call; only when no such text exists is the artifact written empty, with the standard empty-artifact warning in the receipt. Items with `schema` but no `output` keep their existing result-text behavior.
445
445
 
446
- `subagent` is available as a default workflow-stage tool on the same terms as main chat: a stage is a top-level session, so it can delegate once, and the children it launches cannot delegate further. Delegation is one level deep and nothing configures it. `tools` allowlists apply to bundled extension tools as well as built-ins; if a stage sets `tools`, list every tool it should see. Workflow stages can explicitly list `subagent`, `web_search`, `fetch_content`, `intercom`, and other loaded extension tools, while `excludedTools` and `noTools: "all"` still win. Bundled `@bastani/subagents` agent definitions are available to the `subagent` tool in workflow stages, including workflows launched from a subagent child process.
446
+ `subagent` is available as a default workflow-stage tool on the same terms as main chat: a stage is a top-level session, so it can delegate once, and the children it launches cannot delegate further. Delegation is one level deep and nothing configures it. `tools` allowlists apply to bundled extension tools as well as built-ins; if a stage sets `tools`, list every non-mandatory tool it should see. Ordinary `intercom` remains registered and active in every workflow model stage even under `noTools: "all"`, restrictive allowlists, or exclusions. Restrictions on `subagent`, `web_search`, `fetch_content`, and every other tool are unchanged. Bundled `@bastani/subagents` agent definitions are available to the `subagent` tool in workflow stages, including workflows launched from a subagent child process.
447
447
 
448
448
  Send material updates through Intercom to every affected workflow stage, including stages that have not started. Address a known pending stage with ordinary `intercom send` at `<runId>:<stageKey>`; Atomic queues the message with workflow state and delivers it through the existing inbound Intercom path when the stage session initializes, before its first model turn. Live stage delivery is immediate. Use `ask` once the stage session is live and can reply. Unknown stage identities retain the ordinary unknown-target failure. Workflow `answer` handles pending human-input prompts, and workflow `resume` handles paused run control.
449
449
 
@@ -681,7 +681,7 @@ Raw stage-chat prompt answer replay is live-memory only. `StageSnapshot.promptAn
681
681
  ```json
682
682
  {
683
683
  "name": "workflow",
684
- "description": "Run named builtin, project, user, or package workflows; custom definitions may import reusable project/package workflows or builtin definitions from @bastani/atomic/workflows/builtin and nest them with ctx.workflow(...), including deeper composition within the configured maxDepth; when workflow execution fits but another shape would better achieve the task, author a custom TypeScript workflow({...}) inline with normal coding tools, reload it, and run it; after successfully creating and reloading a newly authored custom workflow, report the folder containing its generated code as 'Custom workflow created. You can inspect its code at: <workflow-folder-path>'; do this only for newly created custom workflows, never builtin or pre-existing workflows; discover with list/get/inputs/models, list session runs with status (no runId; statusFilter narrows the list), inspect status/stages/stage details, answer pending prompts only while the root workflow is nonterminal, pause/resume/interrupt/quit runs, and reload workflow resources. When steering or communication is useful, use Intercom; address a workflow stage as `<runId>:<stageKey>`. Live delivery is immediate; a known stage that has not started is queued and receives the message before its first model turn. Use `ask` only for a reply-capable live session. Treat a blocked run as continuable by default: resume resumable blocks, answer pending prompts, steer past the obstacle, or start a follow-up workflow past a terminal block, and escalate to the user only when the blocked result is so ambiguous that human input or steering must settle it; when ask_user_question or human input is unavailable, continue fully autonomously on the interpretation best supported by the objective and repository evidence, and record the assumption. For action 'run' and 'resume', budget accepts per-field duration, token, cost, and warning overrides; fields resolve over the workflow declaration and config, and 0 disables a field. Pass budget only when the user asked for a limit; otherwise omit it entirely and inherit the declaration and config rather than inventing a cap. For primitive prompt answers, use booleans or the documented confirm labels, exact case-insensitive select labels or 1-based indexes, and text strings for input/editor; an invalid answer remains pending and returns guidance instead of choosing a default. For large stage handoffs, write context to files/artifacts, pass paths via reads, and prompt downstream agents to 'Read the file at <path>...' instead of injecting large previous text. Wrap critical parts of run inputs and steering messages in <keepContext>...</keepContext> so compaction preserves them verbatim in the stages that inherit them; tag role constraints, prohibitions, must-hold criteria, and identifiers, not background or bulk reference material. For transcripts, prefer status/stages/stage to get sessionFile/transcriptPath, quote the exact path without rewriting separators (Windows backslashes are valid), then search it with rg/grep and read small ranges; transcript is path-only by default when sessionFile/transcriptPath exists, explicit tail/limit returns bounded previews, and missing transcript paths fall back to a small preview. Use action 'models' to inspect models in the configured catalog; the result is a configured-auth snapshot showing what's present in the registry with configured authentication, not proof of credentials, entitlements, OAuth freshness, or live provider access. When authoring a workflow that should dynamically select a model, first call workflow({ action: 'models' }) to inspect the configured catalog, then select from the returned provider/id entries considering the isCurrent marker and available thinking levels.",
684
+ "description": "Run named builtin, project, user, or package workflows; custom definitions may import reusable project/package workflows or builtin definitions from @bastani/atomic/workflows/builtin and nest them with ctx.workflow(...), including deeper composition within the configured maxDepth; when workflow execution fits but another shape would better achieve the task, author a custom TypeScript workflow({...}) inline with normal coding tools, reload it, and run it; after successfully creating and reloading a newly authored custom workflow, report the folder containing its generated code as 'Custom workflow created. You can inspect its code at: <workflow-folder-path>'; do this only for newly created custom workflows, never builtin or pre-existing workflows; discover with list/get/inputs/models, list session runs with status (no runId; statusFilter narrows the list), inspect status/stages/stage details, answer pending prompts only while the root workflow is nonterminal, pause/resume/interrupt/quit runs, and reload workflow resources. When steering or communication is useful, use Intercom. Before steering a stage, join its invocation group. Use the Intercom `groups` action to discover it. Workflow invocation groups are named `workflow:<rootRunId>`. Then address the stage as `<runId>:<stageKey>`. Live delivery is immediate; a known stage that has not started is queued and receives the message before its first model turn. Use `ask` only for a reply-capable live session. Treat a blocked run as continuable by default: resume resumable blocks, answer pending prompts, steer past the obstacle, or start a follow-up workflow past a terminal block, and escalate to the user only when the blocked result is so ambiguous that human input or steering must settle it; when ask_user_question or human input is unavailable, continue fully autonomously on the interpretation best supported by the objective and repository evidence, and record the assumption. For action 'run' and 'resume', budget accepts per-field duration, token, cost, and warning overrides; fields resolve over the workflow declaration and config, and 0 disables a field. Pass budget only when the user asked for a limit; otherwise omit it entirely and inherit the declaration and config rather than inventing a cap. For primitive prompt answers, use booleans or the documented confirm labels, exact case-insensitive select labels or 1-based indexes, and text strings for input/editor; an invalid answer remains pending and returns guidance instead of choosing a default. For large stage handoffs, write context to files/artifacts, pass paths via reads, and prompt downstream agents to 'Read the file at <path>...' instead of injecting large previous text. Wrap critical parts of run inputs and steering messages in <keepContext>...</keepContext> so compaction preserves them verbatim in the stages that inherit them; tag role constraints, prohibitions, must-hold criteria, and identifiers, not background or bulk reference material. For transcripts, prefer status/stages/stage to get sessionFile/transcriptPath, quote the exact path without rewriting separators (Windows backslashes are valid), then search it with rg/grep and read small ranges; transcript is path-only by default when sessionFile/transcriptPath exists, explicit tail/limit returns bounded previews, and missing transcript paths fall back to a small preview. Use action 'models' to inspect models in the configured catalog; the result is a configured-auth snapshot showing what's present in the registry with configured authentication, not proof of credentials, entitlements, OAuth freshness, or live provider access. When authoring a workflow that should dynamically select a model, first call workflow({ action: 'models' }) to inspect the configured catalog, then select from the returned provider/id entries considering the isCurrent marker and available thinking levels.",
685
685
  "parameters": {
686
686
  "workflow": "string (optional) — workflow ID or normalized name",
687
687
  "inputs": "object (optional) — key/value map of workflow inputs",
@@ -8,7 +8,7 @@ import {
8
8
  reverify_consolidated_batch,
9
9
  reviewerFailureText,
10
10
  summarizeReviewConvergence
11
- } from "./chunk-hdpj1dkw.js";
11
+ } from "./chunk-w9c7rkrk.js";
12
12
  import {
13
13
  fold_usage
14
14
  } from "./chunk-7at6dnkr.js";
@@ -508,6 +508,10 @@ var promptEngineerModelConfig = {
508
508
  "github-copilot/grok-4.6:xhigh",
509
509
  "zai/glm-5.3:high",
510
510
  "zai-coding-cn/glm-5.3:high",
511
+ "zai/glm-5.3-flash:high",
512
+ "zai-coding-cn/glm-5.3-flash:high",
513
+ "baseten/zai-org/GLM-5.3:high",
514
+ "baseten/zai-org/GLM-5.3-Flash:high",
511
515
  "openrouter/anthropic/claude-opus-5:high",
512
516
  "openrouter/anthropic/claude-fable-5:high",
513
517
  "openrouter/openai/gpt-5.6-sol:xhigh",
@@ -515,7 +519,9 @@ var promptEngineerModelConfig = {
515
519
  "openrouter/sakana/fugu-ultra:high",
516
520
  "openrouter/openai/gpt-5.5:xhigh",
517
521
  "openrouter/anthropic/claude-opus-4-8:high",
518
- "openrouter/x-ai/grok-4.6"
522
+ "openrouter/x-ai/grok-4.6",
523
+ "openrouter/z-ai/glm-5.3:high",
524
+ "openrouter/z-ai/glm-5.3-flash:high"
519
525
  ],
520
526
  excludedTools: ["ask_user_question"]
521
527
  };
@@ -540,6 +546,10 @@ var researchModelConfig = {
540
546
  "github-copilot/grok-4.6:xhigh",
541
547
  "zai/glm-5.3:high",
542
548
  "zai-coding-cn/glm-5.3:high",
549
+ "zai/glm-5.3-flash:high",
550
+ "zai-coding-cn/glm-5.3-flash:high",
551
+ "baseten/zai-org/GLM-5.3:high",
552
+ "baseten/zai-org/GLM-5.3-Flash:high",
543
553
  "openrouter/anthropic/claude-opus-5:high",
544
554
  "openrouter/openai/gpt-5.6-sol:xhigh",
545
555
  "openrouter/anthropic/claude-fable-5:high",
@@ -547,7 +557,9 @@ var researchModelConfig = {
547
557
  "openrouter/sakana/fugu-ultra:high",
548
558
  "openrouter/openai/gpt-5.5:xhigh",
549
559
  "openrouter/anthropic/claude-opus-4-8:high",
550
- "openrouter/x-ai/grok-4.6"
560
+ "openrouter/x-ai/grok-4.6",
561
+ "openrouter/z-ai/glm-5.3:high",
562
+ "openrouter/z-ai/glm-5.3-flash:high"
551
563
  ],
552
564
  excludedTools: ["ask_user_question"]
553
565
  };
@@ -572,6 +584,10 @@ var orchestratorModelConfig = {
572
584
  "github-copilot/grok-4.6:xhigh",
573
585
  "zai/glm-5.3:high",
574
586
  "zai-coding-cn/glm-5.3:high",
587
+ "zai/glm-5.3-flash:high",
588
+ "zai-coding-cn/glm-5.3-flash:high",
589
+ "baseten/zai-org/GLM-5.3:high",
590
+ "baseten/zai-org/GLM-5.3-Flash:high",
575
591
  "openrouter/anthropic/claude-opus-5:high",
576
592
  "openrouter/openai/gpt-5.6-sol:xhigh",
577
593
  "openrouter/anthropic/claude-fable-5:high",
@@ -579,7 +595,9 @@ var orchestratorModelConfig = {
579
595
  "openrouter/sakana/fugu-ultra:high",
580
596
  "openrouter/openai/gpt-5.5:xhigh",
581
597
  "openrouter/anthropic/claude-opus-4-8:high",
582
- "openrouter/x-ai/grok-4.6"
598
+ "openrouter/x-ai/grok-4.6",
599
+ "openrouter/z-ai/glm-5.3:high",
600
+ "openrouter/z-ai/glm-5.3-flash:high"
583
601
  ],
584
602
  excludedTools: ["ask_user_question"]
585
603
  };
@@ -604,6 +622,10 @@ var reviewerAModelConfig = {
604
622
  "github-copilot/grok-4.6:xhigh",
605
623
  "zai/glm-5.3:high",
606
624
  "zai-coding-cn/glm-5.3:high",
625
+ "zai/glm-5.3-flash:high",
626
+ "zai-coding-cn/glm-5.3-flash:high",
627
+ "baseten/zai-org/GLM-5.3:high",
628
+ "baseten/zai-org/GLM-5.3-Flash:high",
607
629
  "openrouter/anthropic/claude-opus-5:high",
608
630
  "openrouter/anthropic/claude-fable-5:high",
609
631
  "openrouter/moonshotai/kimi-k3:max",
@@ -611,7 +633,9 @@ var reviewerAModelConfig = {
611
633
  "openrouter/sakana/fugu-ultra:high",
612
634
  "openrouter/openai/gpt-5.5:xhigh",
613
635
  "openrouter/anthropic/claude-opus-4-8:high",
614
- "openrouter/x-ai/grok-4.6"
636
+ "openrouter/x-ai/grok-4.6",
637
+ "openrouter/z-ai/glm-5.3:high",
638
+ "openrouter/z-ai/glm-5.3-flash:high"
615
639
  ],
616
640
  excludedTools: ["ask_user_question"],
617
641
  schema: reviewDecisionSchema
@@ -637,6 +661,10 @@ var reviewerBModelConfig = {
637
661
  "github-copilot/grok-4.6:xhigh",
638
662
  "zai/glm-5.3:high",
639
663
  "zai-coding-cn/glm-5.3:high",
664
+ "zai/glm-5.3-flash:high",
665
+ "zai-coding-cn/glm-5.3-flash:high",
666
+ "baseten/zai-org/GLM-5.3:high",
667
+ "baseten/zai-org/GLM-5.3-Flash:high",
640
668
  "openrouter/openai/gpt-5.6-sol:xhigh",
641
669
  "openrouter/anthropic/claude-opus-5:high",
642
670
  "openrouter/anthropic/claude-fable-5:high",
@@ -644,7 +672,9 @@ var reviewerBModelConfig = {
644
672
  "openrouter/openai/gpt-5.5:xhigh",
645
673
  "openrouter/sakana/fugu-ultra:high",
646
674
  "openrouter/anthropic/claude-opus-4-8:high",
647
- "openrouter/x-ai/grok-4.6"
675
+ "openrouter/x-ai/grok-4.6",
676
+ "openrouter/z-ai/glm-5.3:high",
677
+ "openrouter/z-ai/glm-5.3-flash:high"
648
678
  ],
649
679
  excludedTools: ["ask_user_question"],
650
680
  schema: reviewDecisionSchema
@@ -825,13 +825,19 @@ async function runOpenClaudeDesignWorkflow(ctx) {
825
825
  "github-copilot/grok-4.6:xhigh",
826
826
  "zai/glm-5.3:high",
827
827
  "zai-coding-cn/glm-5.3:high",
828
+ "zai/glm-5.3-flash:high",
829
+ "zai-coding-cn/glm-5.3-flash:high",
830
+ "baseten/zai-org/GLM-5.3:high",
831
+ "baseten/zai-org/GLM-5.3-Flash:high",
828
832
  "openrouter/anthropic/claude-opus-5:high",
829
833
  "openrouter/anthropic/claude-fable-5:high",
830
834
  "openrouter/anthropic/claude-opus-4-8:high",
831
835
  "openrouter/moonshotai/kimi-k3:max",
832
836
  "openrouter/openai/gpt-5.6-sol:xhigh",
833
837
  "openrouter/sakana/fugu-ultra:high",
834
- "openrouter/x-ai/grok-4.6"
838
+ "openrouter/x-ai/grok-4.6",
839
+ "openrouter/z-ai/glm-5.3:high",
840
+ "openrouter/z-ai/glm-5.3-flash:high"
835
841
  ]
836
842
  };
837
843
  const frontDoor = await runDiscoveryAndInit({
@@ -9,7 +9,7 @@ import {
9
9
  reviewerFailureText,
10
10
  summarizeReviewConvergence,
11
11
  workflowArtifactDirectoryPath
12
- } from "./chunk-hdpj1dkw.js";
12
+ } from "./chunk-w9c7rkrk.js";
13
13
  import {
14
14
  fold_usage
15
15
  } from "./chunk-7at6dnkr.js";
@@ -132,6 +132,10 @@ var orchestratorModelConfig = {
132
132
  "github-copilot/grok-4.6:xhigh",
133
133
  "zai/glm-5.3:high",
134
134
  "zai-coding-cn/glm-5.3:high",
135
+ "zai/glm-5.3-flash:high",
136
+ "zai-coding-cn/glm-5.3-flash:high",
137
+ "baseten/zai-org/GLM-5.3:high",
138
+ "baseten/zai-org/GLM-5.3-Flash:high",
135
139
  "openrouter/anthropic/claude-opus-5:high",
136
140
  "openrouter/openai/gpt-5.6-sol:xhigh",
137
141
  "openrouter/anthropic/claude-fable-5:high",
@@ -139,7 +143,9 @@ var orchestratorModelConfig = {
139
143
  "openrouter/sakana/fugu-ultra:high",
140
144
  "openrouter/openai/gpt-5.5:xhigh",
141
145
  "openrouter/anthropic/claude-opus-4-8:high",
142
- "openrouter/x-ai/grok-4.6"
146
+ "openrouter/x-ai/grok-4.6",
147
+ "openrouter/z-ai/glm-5.3:high",
148
+ "openrouter/z-ai/glm-5.3-flash:high"
143
149
  ],
144
150
  excludedTools: ["ask_user_question"]
145
151
  };
@@ -164,6 +170,10 @@ var reviewerModelConfig = {
164
170
  "github-copilot/grok-4.6:xhigh",
165
171
  "zai/glm-5.3:high",
166
172
  "zai-coding-cn/glm-5.3:high",
173
+ "zai/glm-5.3-flash:high",
174
+ "zai-coding-cn/glm-5.3-flash:high",
175
+ "baseten/zai-org/GLM-5.3:high",
176
+ "baseten/zai-org/GLM-5.3-Flash:high",
167
177
  "openrouter/anthropic/claude-opus-5:high",
168
178
  "openrouter/anthropic/claude-fable-5:high",
169
179
  "openrouter/openai/gpt-5.6-sol:xhigh",
@@ -171,7 +181,9 @@ var reviewerModelConfig = {
171
181
  "openrouter/sakana/fugu-ultra:high",
172
182
  "openrouter/openai/gpt-5.5:xhigh",
173
183
  "openrouter/anthropic/claude-opus-4-8:high",
174
- "openrouter/x-ai/grok-4.6"
184
+ "openrouter/x-ai/grok-4.6",
185
+ "openrouter/z-ai/glm-5.3:high",
186
+ "openrouter/z-ai/glm-5.3-flash:high"
175
187
  ],
176
188
  excludedTools: ["ask_user_question"],
177
189
  schema: reviewDecisionSchema
@@ -201,7 +201,7 @@ import {
201
201
  wrapRegisteredTool,
202
202
  wrapRegisteredTools,
203
203
  writeToolSystemPromptContribution
204
- } from "./chunk-5n10x7j2.js";
204
+ } from "./chunk-gdx0avpx.js";
205
205
  import {
206
206
  APP_NAME,
207
207
  APP_TITLE,