@bastani/atomic 0.9.14-alpha.1 → 0.9.14-alpha.2

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 (702) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +3 -3
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/package.json +3 -3
  5. package/dist/builtin/subagents/CHANGELOG.md +14 -0
  6. package/dist/builtin/subagents/README.md +6 -4
  7. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  8. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  9. package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
  10. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  11. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
  12. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  13. package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
  14. package/dist/builtin/subagents/agents/debugger.md +1 -1
  15. package/dist/builtin/subagents/agents/worker.md +1 -1
  16. package/dist/builtin/subagents/package.json +6 -5
  17. package/dist/builtin/subagents/src/agents/agent-discovery.ts +17 -11
  18. package/dist/builtin/subagents/src/agents/agent-loaders.ts +115 -43
  19. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +10 -8
  20. package/dist/builtin/subagents/src/agents/agent-management.ts +8 -7
  21. package/dist/builtin/subagents/src/agents/agent-overrides.ts +2 -2
  22. package/dist/builtin/subagents/src/agents/agent-scope.ts +1 -1
  23. package/dist/builtin/subagents/src/agents/agent-selection.ts +1 -1
  24. package/dist/builtin/subagents/src/agents/agent-serializer.ts +24 -3
  25. package/dist/builtin/subagents/src/agents/agent-types.ts +3 -1
  26. package/dist/builtin/subagents/src/agents/agents.ts +7 -5
  27. package/dist/builtin/subagents/src/agents/frontmatter.ts +67 -22
  28. package/dist/builtin/subagents/src/agents/identity.ts +1 -1
  29. package/dist/builtin/subagents/src/agents/skills-paths.ts +1 -1
  30. package/dist/builtin/subagents/src/agents/skills.ts +64 -6
  31. package/dist/builtin/subagents/src/extension/config.ts +1 -1
  32. package/dist/builtin/subagents/src/extension/control-notices.ts +2 -2
  33. package/dist/builtin/subagents/src/extension/doctor.ts +15 -5
  34. package/dist/builtin/subagents/src/extension/fanout-child.ts +12 -12
  35. package/dist/builtin/subagents/src/extension/index.ts +23 -23
  36. package/dist/builtin/subagents/src/extension/notification-content.ts +1 -1
  37. package/dist/builtin/subagents/src/extension/schemas.ts +1 -1
  38. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +3 -3
  39. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +3 -3
  40. package/dist/builtin/subagents/src/intercom/result-intercom.ts +1 -1
  41. package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +1 -1
  42. package/dist/builtin/subagents/src/runs/foreground/completion-notification.ts +2 -2
  43. package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +1 -1
  44. package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +3 -3
  45. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -1
  46. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +2 -2
  47. package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +1 -1
  48. package/dist/builtin/subagents/src/runs/foreground/execution.ts +2 -2
  49. package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +27 -11
  50. package/dist/builtin/subagents/src/runs/foreground/notify.ts +3 -3
  51. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +11 -11
  52. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +3 -3
  53. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +15 -14
  54. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +19 -19
  55. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -2
  56. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -13
  57. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +9 -9
  58. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +7 -7
  59. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +6 -6
  60. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +24 -23
  61. package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +1 -1
  62. package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +3 -3
  63. package/dist/builtin/subagents/src/runs/inprocess/index.ts +3 -3
  64. package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +17 -8
  65. package/dist/builtin/subagents/src/runs/inprocess/runner.ts +60 -12
  66. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +8 -8
  67. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +3 -3
  68. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +4 -4
  69. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +4 -4
  70. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +5 -5
  71. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +3 -3
  72. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +3 -3
  73. package/dist/builtin/subagents/src/runs/inprocess.ts +1 -1
  74. package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +1 -1
  75. package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -1
  76. package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +3 -3
  77. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +2 -2
  78. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -1
  79. package/dist/builtin/subagents/src/runs/shared/single-output.ts +1 -1
  80. package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +1 -1
  81. package/dist/builtin/subagents/src/shared/artifacts.ts +2 -2
  82. package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +1 -1
  83. package/dist/builtin/subagents/src/shared/fast-mode.ts +1 -1
  84. package/dist/builtin/subagents/src/shared/formatters.ts +2 -2
  85. package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -1
  86. package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
  87. package/dist/builtin/subagents/src/shared/session-tokens.ts +1 -1
  88. package/dist/builtin/subagents/src/shared/settings.ts +4 -4
  89. package/dist/builtin/subagents/src/shared/status-format.ts +1 -1
  90. package/dist/builtin/subagents/src/shared/types-config.ts +16 -4
  91. package/dist/builtin/subagents/src/shared/types-depth.ts +1 -1
  92. package/dist/builtin/subagents/src/shared/types-nested.ts +1 -1
  93. package/dist/builtin/subagents/src/shared/types-output.ts +1 -1
  94. package/dist/builtin/subagents/src/shared/types-results.ts +1 -1
  95. package/dist/builtin/subagents/src/shared/types-runtime.ts +1 -1
  96. package/dist/builtin/subagents/src/shared/types.ts +6 -6
  97. package/dist/builtin/subagents/src/shared/utils.ts +3 -3
  98. package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +1 -1
  99. package/dist/builtin/subagents/src/slash/slash-bridge.ts +3 -3
  100. package/dist/builtin/subagents/src/slash/slash-commands.ts +6 -6
  101. package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -3
  102. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -2
  103. package/dist/builtin/subagents/src/tui/render-layout.ts +1 -1
  104. package/dist/builtin/subagents/src/tui/render-progress.ts +2 -2
  105. package/dist/builtin/subagents/src/tui/render-result-compact.ts +7 -7
  106. package/dist/builtin/subagents/src/tui/render-result.ts +10 -10
  107. package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -1
  108. package/dist/builtin/subagents/src/tui/render-status-progress.ts +5 -5
  109. package/dist/builtin/subagents/src/tui/render.ts +4 -4
  110. package/dist/builtin/web-access/package.json +2 -2
  111. package/dist/builtin/workflows/CHANGELOG.md +45 -0
  112. package/dist/builtin/workflows/README.md +30 -8
  113. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +16 -5
  114. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +12 -4
  115. package/dist/builtin/workflows/builtin/goal-models.ts +8 -10
  116. package/dist/builtin/workflows/builtin/index.d.ts +0 -4
  117. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +4 -2
  118. package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +305 -0
  119. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +115 -171
  120. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +9 -25
  121. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +19 -86
  122. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -6
  123. package/dist/builtin/workflows/builtin/open-claude-design.d.ts +0 -5
  124. package/dist/builtin/workflows/builtin/open-claude-design.ts +7 -15
  125. package/dist/builtin/workflows/builtin/ralph-models.ts +24 -29
  126. package/dist/builtin/workflows/builtin/tournament-runner.ts +6 -3
  127. package/dist/builtin/workflows/package.json +2 -2
  128. package/dist/builtin/workflows/skills/impeccable/SKILL.md +3 -3
  129. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +25 -31
  130. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +1 -0
  131. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +16 -10
  132. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_manual_edit_applier.toml +2 -2
  133. package/dist/builtin/workflows/skills/impeccable/reference/android.md +6 -0
  134. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +3 -0
  135. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +3 -1
  136. package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +6 -1
  137. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +18 -2
  138. package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +24 -30
  139. package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +1 -0
  140. package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +16 -10
  141. package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +2 -2
  142. package/dist/builtin/workflows/skills/impeccable/reference/distill.md +1 -1
  143. package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +1 -0
  144. package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
  145. package/dist/builtin/workflows/skills/impeccable/reference/extract.md +1 -1
  146. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +12 -6
  147. package/dist/builtin/workflows/skills/impeccable/reference/init.md +12 -3
  148. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +6 -0
  149. package/dist/builtin/workflows/skills/impeccable/reference/live-setup.md +102 -0
  150. package/dist/builtin/workflows/skills/impeccable/reference/live.md +113 -521
  151. package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +39 -26
  152. package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -1
  153. package/dist/builtin/workflows/skills/impeccable/reference/polish.md +3 -3
  154. package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +1 -1
  155. package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +25 -11
  156. package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +332 -221
  157. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +10 -19
  158. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +91 -38
  159. package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +19 -10
  160. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +56 -6
  161. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +10 -16
  162. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +140 -2
  163. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +1174 -694
  164. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns.mjs +1 -0
  165. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +5 -1
  166. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +431 -45
  167. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +10 -1
  168. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +47 -6
  169. package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +23 -22
  170. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +0 -10
  171. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +384 -384
  172. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/color.mjs +466 -2
  173. package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +2 -0
  174. package/dist/builtin/workflows/skills/impeccable/scripts/embed-prompt.mjs +270 -0
  175. package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +51 -6
  176. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +70 -10
  177. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +336 -90
  178. package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +38 -3
  179. package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +77 -11
  180. package/dist/builtin/workflows/skills/impeccable/scripts/lib/design-parser.mjs +102 -19
  181. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +44 -59
  182. package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +3 -0
  183. package/dist/builtin/workflows/skills/impeccable/scripts/lib/open-system-browser.mjs +57 -0
  184. package/dist/builtin/workflows/skills/impeccable/scripts/lib/roll-selection.mjs +369 -0
  185. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +31 -3
  186. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +73 -2
  187. package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-css.mjs +617 -0
  188. package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-verify.mjs +71 -0
  189. package/dist/builtin/workflows/skills/impeccable/scripts/live/browser-script-parts.mjs +29 -2
  190. package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +54 -7
  191. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
  192. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +157 -0
  193. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
  194. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/journal.mjs +205 -0
  195. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
  196. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nuxt.mjs +170 -0
  197. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/script-src.mjs +26 -0
  198. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
  199. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
  200. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
  201. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
  202. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
  203. package/dist/builtin/workflows/skills/impeccable/scripts/live/instructions.mjs +169 -0
  204. package/dist/builtin/workflows/skills/impeccable/scripts/live/roots.mjs +670 -0
  205. package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +232 -35
  206. package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-ast.mjs +969 -0
  207. package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +621 -74
  208. package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +66 -28
  209. package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +12 -12
  210. package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-surfaces.mjs +75 -0
  211. package/dist/builtin/workflows/skills/impeccable/scripts/live/vocabulary.mjs +135 -0
  212. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +23 -37
  213. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +945 -115
  214. package/dist/builtin/workflows/skills/impeccable/scripts/live-complete.mjs +33 -1
  215. package/dist/builtin/workflows/skills/impeccable/scripts/live-copy-edit-agent.mjs +132 -15
  216. package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +173 -425
  217. package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +2 -0
  218. package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +16 -3
  219. package/dist/builtin/workflows/skills/impeccable/scripts/live-resume.mjs +39 -10
  220. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +194 -27
  221. package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +10 -4
  222. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +50 -31
  223. package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +91 -28
  224. package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +8 -5
  225. package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +759 -109
  226. package/dist/builtin/workflows/src/durable/completed-catalog.ts +10 -0
  227. package/dist/builtin/workflows/src/durable/dbos-backend.ts +30 -17
  228. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +14 -0
  229. package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +60 -57
  230. package/dist/builtin/workflows/src/durable/dbos-process-owner.ts +87 -0
  231. package/dist/builtin/workflows/src/durable/dbos-registration-diagnostics.ts +113 -0
  232. package/dist/builtin/workflows/src/durable/factory.ts +11 -8
  233. package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +5 -0
  234. package/dist/builtin/workflows/src/durable/tool-primitive.ts +186 -20
  235. package/dist/builtin/workflows/src/durable/types.ts +4 -0
  236. package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +9 -1
  237. package/dist/builtin/workflows/src/extension/adopt-session-run-state.ts +20 -0
  238. package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +9 -30
  239. package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
  240. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +28 -10
  241. package/dist/builtin/workflows/src/extension/index.bundle.mjs +2680 -1418
  242. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +4 -1
  243. package/dist/builtin/workflows/src/extension/workflow-schema.ts +29 -5
  244. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +32 -1
  245. package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +10 -1
  246. package/dist/builtin/workflows/src/runs/background/job-tracker.ts +10 -1
  247. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +16 -11
  248. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +31 -1
  249. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +41 -10
  250. package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +48 -0
  251. package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +4 -1
  252. package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +45 -12
  253. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +9 -0
  254. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +9 -0
  255. package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +14 -2
  256. package/dist/builtin/workflows/src/shared/prompt-answer.ts +130 -0
  257. package/dist/builtin/workflows/src/shared/session-scoped-singleton.ts +98 -0
  258. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +9 -1
  259. package/dist/builtin/workflows/src/shared/store-factory.ts +9 -1
  260. package/dist/builtin/workflows/src/shared/store-public-types.ts +2 -1
  261. package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +7 -0
  262. package/dist/builtin/workflows/src/shared/store-types.ts +18 -1
  263. package/dist/builtin/workflows/src/shared/tool-payload-bounds.ts +576 -0
  264. package/dist/builtin/workflows/src/tui/graph-theme.ts +8 -1
  265. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +11 -0
  266. package/dist/builtin/workflows/src/tui/graph-view-input.ts +100 -5
  267. package/dist/builtin/workflows/src/tui/graph-view-layout.ts +42 -11
  268. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +55 -6
  269. package/dist/builtin/workflows/src/tui/graph-view-render.ts +71 -6
  270. package/dist/builtin/workflows/src/tui/graph-view-state.ts +43 -0
  271. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +2 -0
  272. package/dist/builtin/workflows/src/tui/node-card.ts +5 -1
  273. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +11 -2
  274. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +36 -10
  275. package/dist/builtin/workflows/src/tui/switcher.ts +11 -4
  276. package/dist/builtin/workflows/src/tui/tool-detail.ts +348 -0
  277. package/dist/builtin/workflows/src/tui/workflow-status.ts +5 -2
  278. package/dist/cli/args.d.ts +1 -0
  279. package/dist/cli/args.d.ts.map +1 -1
  280. package/dist/cli/args.js +11 -0
  281. package/dist/cli/args.js.map +1 -1
  282. package/dist/cli/auth-check.d.ts +1 -1
  283. package/dist/cli/auth-check.js.map +1 -1
  284. package/dist/cli/credential-print.d.ts +1 -1
  285. package/dist/cli/credential-print.js.map +1 -1
  286. package/dist/cli/list-models.d.ts +1 -1
  287. package/dist/cli/list-models.js.map +1 -1
  288. package/dist/cli/startup-ui.d.ts +9 -0
  289. package/dist/cli/startup-ui.d.ts.map +1 -1
  290. package/dist/cli/startup-ui.js +7 -1
  291. package/dist/cli/startup-ui.js.map +1 -1
  292. package/dist/core/agent-session-custom-message-commit.js +2 -2
  293. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  294. package/dist/core/agent-session-export.d.ts +6 -1
  295. package/dist/core/agent-session-export.d.ts.map +1 -1
  296. package/dist/core/agent-session-export.js +6 -3
  297. package/dist/core/agent-session-export.js.map +1 -1
  298. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  299. package/dist/core/agent-session-extension-bindings.js +6 -4
  300. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  301. package/dist/core/agent-session-methods.d.ts +5 -2
  302. package/dist/core/agent-session-methods.d.ts.map +1 -1
  303. package/dist/core/agent-session-methods.js.map +1 -1
  304. package/dist/core/agent-session-prompt.d.ts +12 -1
  305. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  306. package/dist/core/agent-session-prompt.js +31 -10
  307. package/dist/core/agent-session-prompt.js.map +1 -1
  308. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  309. package/dist/core/agent-session-services.d.ts +1 -1
  310. package/dist/core/agent-session-services.js.map +1 -1
  311. package/dist/core/agent-session-skill-block.d.ts +1 -0
  312. package/dist/core/agent-session-skill-block.d.ts.map +1 -1
  313. package/dist/core/agent-session-skill-block.js +18 -2
  314. package/dist/core/agent-session-skill-block.js.map +1 -1
  315. package/dist/core/agent-session-state.d.ts.map +1 -1
  316. package/dist/core/agent-session-state.js +2 -1
  317. package/dist/core/agent-session-state.js.map +1 -1
  318. package/dist/core/agent-session-types.d.ts +2 -1
  319. package/dist/core/agent-session-types.d.ts.map +1 -1
  320. package/dist/core/agent-session-types.js.map +1 -1
  321. package/dist/core/agent-session.d.ts +1 -1
  322. package/dist/core/agent-session.js.map +1 -1
  323. package/dist/core/atomic-guide-command.js +2 -2
  324. package/dist/core/atomic-guide-command.js.map +1 -1
  325. package/dist/core/builtin-packages.d.ts.map +1 -1
  326. package/dist/core/builtin-packages.js +0 -6
  327. package/dist/core/builtin-packages.js.map +1 -1
  328. package/dist/core/cloudflare-gateway-binding.d.ts +11 -0
  329. package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -0
  330. package/dist/core/cloudflare-gateway-binding.js +11 -0
  331. package/dist/core/cloudflare-gateway-binding.js.map +1 -0
  332. package/dist/core/codex-fast-mode-transport.d.ts +12 -0
  333. package/dist/core/codex-fast-mode-transport.d.ts.map +1 -0
  334. package/dist/core/codex-fast-mode-transport.js +130 -0
  335. package/dist/core/codex-fast-mode-transport.js.map +1 -0
  336. package/dist/core/codex-fast-mode.d.ts +20 -6
  337. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  338. package/dist/core/codex-fast-mode.js +111 -3
  339. package/dist/core/codex-fast-mode.js.map +1 -1
  340. package/dist/core/diagnostics.d.ts +4 -0
  341. package/dist/core/diagnostics.d.ts.map +1 -1
  342. package/dist/core/diagnostics.js.map +1 -1
  343. package/dist/core/event-bus.d.ts +12 -0
  344. package/dist/core/event-bus.d.ts.map +1 -1
  345. package/dist/core/event-bus.js +22 -0
  346. package/dist/core/event-bus.js.map +1 -1
  347. package/dist/core/experimental.d.ts +25 -0
  348. package/dist/core/experimental.d.ts.map +1 -1
  349. package/dist/core/experimental.js +24 -0
  350. package/dist/core/experimental.js.map +1 -1
  351. package/dist/core/export-html/template-js/tree-filter-render.js +4 -3
  352. package/dist/core/export-html/template.js +4 -3
  353. package/dist/core/extension-session-state.d.ts +28 -0
  354. package/dist/core/extension-session-state.d.ts.map +1 -0
  355. package/dist/core/extension-session-state.js +55 -0
  356. package/dist/core/extension-session-state.js.map +1 -0
  357. package/dist/core/extensions/api-types.d.ts +6 -0
  358. package/dist/core/extensions/api-types.d.ts.map +1 -1
  359. package/dist/core/extensions/api-types.js.map +1 -1
  360. package/dist/core/extensions/context-types.d.ts +4 -0
  361. package/dist/core/extensions/context-types.d.ts.map +1 -1
  362. package/dist/core/extensions/context-types.js.map +1 -1
  363. package/dist/core/extensions/loader-api.d.ts +1 -1
  364. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  365. package/dist/core/extensions/loader-api.js +16 -10
  366. package/dist/core/extensions/loader-api.js.map +1 -1
  367. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  368. package/dist/core/extensions/loader-virtual-modules.js +12 -1
  369. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  370. package/dist/core/extensions/runner-context.d.ts +2 -0
  371. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  372. package/dist/core/extensions/runner-context.js +8 -0
  373. package/dist/core/extensions/runner-context.js.map +1 -1
  374. package/dist/core/extensions/runner.d.ts +1 -0
  375. package/dist/core/extensions/runner.d.ts.map +1 -1
  376. package/dist/core/extensions/runner.js +3 -0
  377. package/dist/core/extensions/runner.js.map +1 -1
  378. package/dist/core/extensions/runtime-types.d.ts +3 -0
  379. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  380. package/dist/core/extensions/runtime-types.js.map +1 -1
  381. package/dist/core/http-dispatcher.d.ts.map +1 -1
  382. package/dist/core/http-dispatcher.js +5 -0
  383. package/dist/core/http-dispatcher.js.map +1 -1
  384. package/dist/core/keybindings.d.ts +24 -0
  385. package/dist/core/keybindings.d.ts.map +1 -1
  386. package/dist/core/keybindings.js +6 -0
  387. package/dist/core/keybindings.js.map +1 -1
  388. package/dist/core/model-config.d.ts +5 -0
  389. package/dist/core/model-config.d.ts.map +1 -1
  390. package/dist/core/model-config.js +1 -0
  391. package/dist/core/model-config.js.map +1 -1
  392. package/dist/core/model-registry.d.ts +1 -1
  393. package/dist/core/model-registry.js.map +1 -1
  394. package/dist/core/model-resolver-cli.d.ts +1 -1
  395. package/dist/core/model-resolver-cli.js.map +1 -1
  396. package/dist/core/model-resolver-defaults.js +3 -3
  397. package/dist/core/model-resolver-defaults.js.map +1 -1
  398. package/dist/core/model-resolver-initial.d.ts +1 -1
  399. package/dist/core/model-resolver-initial.js.map +1 -1
  400. package/dist/core/model-resolver-scope.d.ts +1 -1
  401. package/dist/core/model-resolver-scope.js.map +1 -1
  402. package/dist/core/model-runtime.d.ts +54 -0
  403. package/dist/core/model-runtime.d.ts.map +1 -1
  404. package/dist/core/model-runtime.js +96 -13
  405. package/dist/core/model-runtime.js.map +1 -1
  406. package/dist/core/oauth-login.js.map +1 -1
  407. package/dist/core/project-trust.d.ts +10 -0
  408. package/dist/core/project-trust.d.ts.map +1 -1
  409. package/dist/core/project-trust.js +12 -0
  410. package/dist/core/project-trust.js.map +1 -1
  411. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  412. package/dist/core/resource-loader-assets.js +14 -5
  413. package/dist/core/resource-loader-assets.js.map +1 -1
  414. package/dist/core/resource-loader-core.d.ts +3 -0
  415. package/dist/core/resource-loader-core.d.ts.map +1 -1
  416. package/dist/core/resource-loader-core.js +5 -0
  417. package/dist/core/resource-loader-core.js.map +1 -1
  418. package/dist/core/resource-loader-internals.d.ts +2 -0
  419. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  420. package/dist/core/resource-loader-internals.js.map +1 -1
  421. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  422. package/dist/core/resource-loader-reload.js +2 -0
  423. package/dist/core/resource-loader-reload.js.map +1 -1
  424. package/dist/core/resource-loader-types.d.ts +2 -0
  425. package/dist/core/resource-loader-types.d.ts.map +1 -1
  426. package/dist/core/resource-loader-types.js.map +1 -1
  427. package/dist/core/resource-loader.d.ts +2 -0
  428. package/dist/core/resource-loader.d.ts.map +1 -1
  429. package/dist/core/resource-loader.js +1 -0
  430. package/dist/core/resource-loader.js.map +1 -1
  431. package/dist/core/sdk-types.d.ts +7 -6
  432. package/dist/core/sdk-types.d.ts.map +1 -1
  433. package/dist/core/sdk-types.js.map +1 -1
  434. package/dist/core/sdk.d.ts.map +1 -1
  435. package/dist/core/sdk.js +17 -6
  436. package/dist/core/sdk.js.map +1 -1
  437. package/dist/core/session-manager-core.d.ts +7 -1
  438. package/dist/core/session-manager-core.d.ts.map +1 -1
  439. package/dist/core/session-manager-core.js +11 -2
  440. package/dist/core/session-manager-core.js.map +1 -1
  441. package/dist/core/session-manager-entries.d.ts +2 -2
  442. package/dist/core/session-manager-entries.d.ts.map +1 -1
  443. package/dist/core/session-manager-entries.js +6 -4
  444. package/dist/core/session-manager-entries.js.map +1 -1
  445. package/dist/core/session-manager-list.d.ts.map +1 -1
  446. package/dist/core/session-manager-list.js +5 -1
  447. package/dist/core/session-manager-list.js.map +1 -1
  448. package/dist/core/session-manager-types.d.ts +25 -2
  449. package/dist/core/session-manager-types.d.ts.map +1 -1
  450. package/dist/core/session-manager-types.js.map +1 -1
  451. package/dist/core/session-manager.d.ts +1 -1
  452. package/dist/core/session-manager.d.ts.map +1 -1
  453. package/dist/core/session-manager.js.map +1 -1
  454. package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
  455. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  456. package/dist/core/settings-manager-basic-accessors.js +8 -0
  457. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  458. package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
  459. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  460. package/dist/core/settings-manager-ui-accessors.js +9 -0
  461. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  462. package/dist/core/settings-manager.d.ts +1 -1
  463. package/dist/core/settings-manager.d.ts.map +1 -1
  464. package/dist/core/settings-manager.js.map +1 -1
  465. package/dist/core/settings-types.d.ts +4 -0
  466. package/dist/core/settings-types.d.ts.map +1 -1
  467. package/dist/core/settings-types.js.map +1 -1
  468. package/dist/core/skill-catalog.d.ts +35 -0
  469. package/dist/core/skill-catalog.d.ts.map +1 -0
  470. package/dist/core/skill-catalog.js +264 -0
  471. package/dist/core/skill-catalog.js.map +1 -0
  472. package/dist/core/skills-async.d.ts.map +1 -1
  473. package/dist/core/skills-async.js +12 -6
  474. package/dist/core/skills-async.js.map +1 -1
  475. package/dist/core/skills.d.ts +2 -0
  476. package/dist/core/skills.d.ts.map +1 -1
  477. package/dist/core/skills.js +8 -5
  478. package/dist/core/skills.js.map +1 -1
  479. package/dist/core/slash-commands.d.ts.map +1 -1
  480. package/dist/core/slash-commands.js +1 -5
  481. package/dist/core/slash-commands.js.map +1 -1
  482. package/dist/core/system-prompt.js +2 -2
  483. package/dist/core/system-prompt.js.map +1 -1
  484. package/dist/core/tools/ask-user-question/ask-user-question.d.ts +4 -2
  485. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  486. package/dist/core/tools/ask-user-question/ask-user-question.js +13 -9
  487. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  488. package/dist/core/tools/bash.d.ts.map +1 -1
  489. package/dist/core/tools/bash.js +2 -0
  490. package/dist/core/tools/bash.js.map +1 -1
  491. package/dist/core/tools/edit.d.ts.map +1 -1
  492. package/dist/core/tools/edit.js +2 -0
  493. package/dist/core/tools/edit.js.map +1 -1
  494. package/dist/core/tools/find.d.ts.map +1 -1
  495. package/dist/core/tools/find.js +3 -1
  496. package/dist/core/tools/find.js.map +1 -1
  497. package/dist/core/tools/grep.js +1 -1
  498. package/dist/core/tools/grep.js.map +1 -1
  499. package/dist/core/tools/hashline-engine/format.d.ts +2 -0
  500. package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
  501. package/dist/core/tools/hashline-engine/format.js +4 -2
  502. package/dist/core/tools/hashline-engine/format.js.map +1 -1
  503. package/dist/core/tools/hashline-engine/messages.d.ts +2 -0
  504. package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -1
  505. package/dist/core/tools/hashline-engine/messages.js +4 -2
  506. package/dist/core/tools/hashline-engine/messages.js.map +1 -1
  507. package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -1
  508. package/dist/core/tools/hashline-engine/parser.js +16 -4
  509. package/dist/core/tools/hashline-engine/parser.js.map +1 -1
  510. package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -1
  511. package/dist/core/tools/hashline-engine/tokenizer.js +37 -27
  512. package/dist/core/tools/hashline-engine/tokenizer.js.map +1 -1
  513. package/dist/core/tools/hashline.d.ts.map +1 -1
  514. package/dist/core/tools/hashline.js +8 -2
  515. package/dist/core/tools/hashline.js.map +1 -1
  516. package/dist/core/tools/ls.d.ts.map +1 -1
  517. package/dist/core/tools/ls.js +2 -0
  518. package/dist/core/tools/ls.js.map +1 -1
  519. package/dist/core/tools/read.d.ts.map +1 -1
  520. package/dist/core/tools/read.js +8 -1
  521. package/dist/core/tools/read.js.map +1 -1
  522. package/dist/core/tools/search.d.ts.map +1 -1
  523. package/dist/core/tools/search.js +2 -0
  524. package/dist/core/tools/search.js.map +1 -1
  525. package/dist/core/tools/todos.d.ts +3 -12
  526. package/dist/core/tools/todos.d.ts.map +1 -1
  527. package/dist/core/tools/todos.js +19 -4
  528. package/dist/core/tools/todos.js.map +1 -1
  529. package/dist/core/tools/write.d.ts.map +1 -1
  530. package/dist/core/tools/write.js +2 -0
  531. package/dist/core/tools/write.js.map +1 -1
  532. package/dist/index.d.ts +8 -5
  533. package/dist/index.d.ts.map +1 -1
  534. package/dist/index.js +6 -2
  535. package/dist/index.js.map +1 -1
  536. package/dist/main-runtime-api-key.d.ts +1 -1
  537. package/dist/main-runtime-api-key.js.map +1 -1
  538. package/dist/main-session-options.d.ts +1 -1
  539. package/dist/main-session-options.js.map +1 -1
  540. package/dist/main.d.ts.map +1 -1
  541. package/dist/main.js +10 -2
  542. package/dist/main.js.map +1 -1
  543. package/dist/modes/interactive/components/chat-session-host-rendering.js +1 -1
  544. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  545. package/dist/modes/interactive/components/chat-session-host-state.d.ts +8 -0
  546. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  547. package/dist/modes/interactive/components/chat-session-host-state.js +8 -0
  548. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  549. package/dist/modes/interactive/components/chat-session-host.d.ts +26 -0
  550. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  551. package/dist/modes/interactive/components/chat-session-host.js +38 -0
  552. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  553. package/dist/modes/interactive/components/chat-transcript.d.ts +37 -0
  554. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  555. package/dist/modes/interactive/components/chat-transcript.js +54 -1
  556. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  557. package/dist/modes/interactive/components/fast-mode-selector.js +1 -1
  558. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  559. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  560. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  561. package/dist/modes/interactive/components/model-selector.js +2 -1
  562. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  563. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  564. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  565. package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
  566. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  567. package/dist/modes/interactive/components/session-selector-search.js +4 -0
  568. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  569. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  570. package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
  571. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  572. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/settings-selector-items.js +7 -0
  574. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  575. package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
  576. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  578. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/tool-execution.js +12 -1
  580. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  581. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  582. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  583. package/dist/modes/interactive/interactive-autocomplete.js +5 -4
  584. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  585. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  586. package/dist/modes/interactive/interactive-bash-compact.js +2 -2
  587. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  588. package/dist/modes/interactive/interactive-extension-custom-ui.js +2 -2
  589. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  590. package/dist/modes/interactive/interactive-mode-base.d.ts +38 -3
  591. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  592. package/dist/modes/interactive/interactive-mode-base.js +75 -10
  593. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  594. package/dist/modes/interactive/interactive-mode-surface.d.ts +7 -1
  595. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  596. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  597. package/dist/modes/interactive/interactive-mode-types.d.ts +2 -0
  598. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  599. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  600. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +8 -1
  601. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
  602. package/dist/modes/interactive/interactive-model-catalog-startup.js +13 -3
  603. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
  604. package/dist/modes/interactive/interactive-model-routing.js +3 -4
  605. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  606. package/dist/modes/interactive/interactive-render-chat.js +6 -0
  607. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  608. package/dist/modes/interactive/interactive-resource-disclosure.js +2 -2
  609. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  610. package/dist/modes/interactive/interactive-selectors.js +7 -3
  611. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  612. package/dist/modes/interactive/interactive-session-runtime.js +7 -1
  613. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  614. package/dist/modes/interactive/interactive-slash-commands.js +2 -2
  615. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  616. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  617. package/dist/modes/interactive/interactive-startup.js +34 -9
  618. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  619. package/dist/modes/interactive/interactive-tui.d.ts +18 -1
  620. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  621. package/dist/modes/interactive/interactive-tui.js +126 -38
  622. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  623. package/dist/modes/interactive/model-catalog-refresh.d.ts +17 -0
  624. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  625. package/dist/modes/interactive/model-catalog-refresh.js +84 -0
  626. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  627. package/dist/modes/interactive/theme/dark.json +2 -0
  628. package/dist/modes/interactive/theme/light.json +2 -0
  629. package/dist/modes/interactive/theme/theme-class.d.ts +12 -3
  630. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  631. package/dist/modes/interactive/theme/theme-class.js +6 -1
  632. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  633. package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
  634. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  635. package/dist/modes/interactive/theme/theme-controller.js +23 -10
  636. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  637. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  638. package/dist/modes/interactive/theme/theme-loading.js +1 -0
  639. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  640. package/dist/modes/interactive/theme/theme-schema.d.ts +8 -0
  641. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  642. package/dist/modes/interactive/theme/theme-schema.js +3 -1
  643. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  644. package/dist/modes/interactive/theme/theme-schema.json +9 -1
  645. package/dist/modes/json-event.d.ts +6 -1
  646. package/dist/modes/json-event.d.ts.map +1 -1
  647. package/dist/modes/json-event.js +17 -2
  648. package/dist/modes/json-event.js.map +1 -1
  649. package/dist/modes/rpc/rpc-client.js.map +1 -1
  650. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  651. package/dist/modes/rpc/rpc-command-handler.js +5 -4
  652. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  653. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  654. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  655. package/dist/modes/rpc/rpc-types.d.ts +1 -1
  656. package/dist/modes/rpc/rpc-types.js.map +1 -1
  657. package/dist/package-manager-cli.js.map +1 -1
  658. package/dist/server/create-harness.d.ts.map +1 -1
  659. package/dist/server/create-harness.js +11 -0
  660. package/dist/server/create-harness.js.map +1 -1
  661. package/dist/utils/abort.d.ts +9 -0
  662. package/dist/utils/abort.d.ts.map +1 -0
  663. package/dist/utils/abort.js +19 -0
  664. package/dist/utils/abort.js.map +1 -0
  665. package/dist/utils/tools-manager.d.ts +16 -1
  666. package/dist/utils/tools-manager.d.ts.map +1 -1
  667. package/dist/utils/tools-manager.js +19 -19
  668. package/dist/utils/tools-manager.js.map +1 -1
  669. package/docs/custom-provider.md +9 -8
  670. package/docs/development.md +0 -1
  671. package/docs/docs.json +0 -1
  672. package/docs/environment-variables.md +3 -0
  673. package/docs/extensions.md +73 -2
  674. package/docs/json.md +3 -1
  675. package/docs/keybindings.md +7 -3
  676. package/docs/models/artificial-analysis-index.md +2 -2
  677. package/docs/models/model-selection.md +32 -23
  678. package/docs/models/pareto-efficiency.md +25 -24
  679. package/docs/providers.md +95 -2
  680. package/docs/quickstart.md +4 -2
  681. package/docs/rpc.md +21 -7
  682. package/docs/sdk.md +26 -1
  683. package/docs/session-format.md +5 -2
  684. package/docs/settings.md +34 -3
  685. package/docs/skills.md +16 -1
  686. package/docs/terminal-setup.md +15 -2
  687. package/docs/themes.md +22 -4
  688. package/docs/tools.md +3 -1
  689. package/docs/tui.md +2 -0
  690. package/docs/usage.md +5 -4
  691. package/docs/workflows.md +62 -19
  692. package/npm-shrinkwrap.json +211 -232
  693. package/package.json +8 -8
  694. package/dist/builtin/i-have-adhd/CHANGELOG.md +0 -30
  695. package/dist/builtin/i-have-adhd/LICENSE +0 -21
  696. package/dist/builtin/i-have-adhd/README.md +0 -18
  697. package/dist/builtin/i-have-adhd/index.ts +0 -238
  698. package/dist/builtin/i-have-adhd/package.json +0 -56
  699. package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +0 -140
  700. package/dist/builtin/workflows/builtin/open-claude-design-feedback.ts +0 -359
  701. package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-core.mjs +0 -180
  702. package/docs/i-have-adhd.md +0 -36
@@ -10,47 +10,48 @@ A model is **Pareto-efficient** (on the frontier) if no other model is both chea
10
10
  The axes here are `pass@1` (accuracy) and `average dollars per task` (cost), taken from the [DeepSWE](https://deepswe.datacurve.ai/) coding-agent leaderboard. For the full table and role guidance, see [Model Selection](/models/model-selection).
11
11
 
12
12
  <Note>
13
- Figures are a snapshot of DeepSWE v1.1 (best effort per model). The frontier moves whenever a new model ships or prices change — DeepSWE publishes a live cost-vs-score scatter, so **read the frontier off the live chart** rather than trusting a static list. **Last compiled: 2026-07-17.**
13
+ Figures are a snapshot of DeepSWE v1.1 using the highest published thinking level per model and reporting corrections through August 14, 2026. The frontier moves whenever a model, run, or price changes — DeepSWE publishes a live cost-vs-score scatter, so **read the frontier off the live chart** rather than trusting a static list. **Last compiled: 2026-08-16.**
14
14
  </Note>
15
15
 
16
16
  ## The frontier
17
17
 
18
- Six models currently sit on the frontier, spanning "cheapest defensible worker" to "accuracy ceiling":
18
+ Six highest-effort model configurations currently sit on the frontier, from the cheapest measured task cost to the accuracy ceiling:
19
19
 
20
- - **gpt-5.6-sol [max]** — the accuracy axis (73% pass@1, $8.39). Nothing scores higher.
21
- - **gpt-5.6-terra [max]** — 70% for $4.95. Matches claude-fable-5's accuracy at roughly a quarter of the cost.
22
- - **kimi-k3 [max]** — 69% for $4.65. Near-top accuracy at the lowest top-tier price; open weights.
23
- - **gpt-5.6-luna [max]** — 67% for $3.03. The best value on the board for high-accuracy work.
24
- - **grok-4.5 [high]** — 54% for $2.42. A cheap, capable mid-tier worker.
25
- - **muse-spark-1.1 [xhigh]** — 53% for $2.36. The cheapest model still on the frontier.
20
+ - **deepseek-v4-flash [max]** — 53% for $0.10. The cheapest point, with lower accuracy and 153 average steps.
21
+ - **deepseek-v4-pro [max]** — 63% for $0.24. A large accuracy gain for another $0.14 per task, with 155 average steps.
22
+ - **gpt-5.6-luna [max]** — 67% for $0.61. The best broad value on the board.
23
+ - **gpt-5.6-terra [max]** — 70% for $3.96. The best top-tier value after the July price correction.
24
+ - **gpt-5.6-sol [max]** — 73% for $8.39. The lower-cost near-peer to the accuracy leader.
25
+ - **claude-opus-5 [max]** — 74% for $11.84. The current accuracy ceiling.
26
26
 
27
27
  ## What changed — the frontier moved
28
28
 
29
- The previous generation's frontier (gpt-5.5 and claude-fable-5) is now **dominated** by the gpt-5.6 family:
29
+ The August results and reporting fixes changed both ends of the frontier:
30
30
 
31
- - **claude-fable-5 [max]** (70%, $21.63) matched on accuracy by **gpt-5.6-terra** (70%, $4.95) at ~4× lower cost.
32
- - **gpt-5.5 [xhigh]** (67%, $7.23) matched on accuracy by **gpt-5.6-luna** (67%, $3.03) at less than half the cost.
33
-
34
- This is the reason to key these docs to the live benchmarks: a single release cycle reshaped the entire recommendation.
31
+ - **Claude Opus 5 [max]** set a new 74% ceiling, one point above Sol, at $11.84 per task.
32
+ - **DeepSeek V4 Flash and Pro [max]** added $0.10 and $0.24 budget-frontier points. Their 153–155 average steps remain a separate latency and loop-length cost.
33
+ - **GPT-5.6 Luna and Terra [max]** now cost $0.61 and $3.96 per task after corrected pricing, strengthening both positions.
35
34
 
36
35
  ## Dominated models — and why
37
36
 
38
- - **claude-fable-5 [max]** — superseded by gpt-5.6-terra on cost for equal accuracy.
39
- - **gpt-5.5 [xhigh]** and **gpt-5.4 [xhigh]** superseded by gpt-5.6-luna / grok-4.5.
40
- - **claude-opus-4.8 [max]**, **claude-sonnet-5 [max]** — dominated on cost/accuracy; sonnet-5 is the worst value on the chart.
41
- - **kimi-k2.7-code** — superseded by kimi-k3 and undercut by muse-spark-1.1.
42
- - **claude-sonnet-4.6 [high]**, **gemini-3.1-pro [high]** — dominated; not in any chain.
43
- - **gemini-3.5-flash [medium]** dropped from reasoning roles (token hose at 276k output tokens); retained only at `[low]` in retrieval chains where token price dominates.
37
+ - **claude-fable-5 [max]** — Sol is more accurate and much cheaper; Terra matches its rounded score for less than one fifth of the task cost.
38
+ - **kimi-k3 [max]** — Terra is one point more accurate and $0.69 cheaper; Kimi remains useful for open-weights diversity.
39
+ - **gpt-5.5 [xhigh]** and **grok-4.6 [xhigh]** — Luna matches their rounded 67% for $0.61.
40
+ - **gemini-3.7-flash [high]** — Luna is two points more accurate and less than one third of its task cost.
41
+ - **grok-4.5 [high]**, **muse-spark-1.1 [xhigh]**, **muse-spark-1.2 [xhigh]**, and **gpt-5.4 [xhigh]** the new DeepSeek and GPT-5.6 points dominate these former budget choices.
42
+ - **claude-opus-4.8 [max]** and **claude-sonnet-5 [max]** dominated on both cost and accuracy.
43
+ - **qwen3.8-max [xhigh]**, **gemini-3.6-flash [high]**, **gemini-3.5-flash [high]**, **glm-5.2 [max]**, **kimi-k2.7-code [low]**, **claude-sonnet-4.6 [high]**, and **gemini-3.1-pro [high]** — each has a cheaper, more accurate measured alternative.
44
44
 
45
45
  ## Diversity and role-fit exceptions
46
46
 
47
47
  Efficiency is not the only axis. A dominated model can still earn a slot when it decorrelates errors or fills a niche:
48
48
 
49
- - **glm-5.2** — kept as reviewer-C because a third model family decorrelates review errors, even though it is dominated on raw efficiency.
50
- - **kimi-k3** — frontier on efficiency *and* an open-weights provider-diversity option; a strong reviewer-C or fallback.
51
- - **claude-opus-4.8 [max]** — retained for Anthropic provider diversity and its long-context niche.
52
- - **claude-fable-5** — kept where Anthropic-family behavior is specifically wanted, e.g. the quality-first, unbenchmarked design chain.
53
- - **Unmeasured models** — any family in use on `main` without DeepSWE or Artificial Analysis coverage should be marked unmeasured. Being unmeasured is not the same as being dominated; such models may remain operational defaults until measured.
49
+ - **grok-4.6** — retained as the operational xAI and OpenRouter provider-diversity fallback.
50
+ - **glm-5.3 [high]** — unmeasured in the current DeepSWE snapshot; retained as a direct Z.AI provider-diversity fallback. GLM-5.2 results are not relabeled as GLM-5.3.
51
+ - **kimi-k3** — retained as a strong open-weights provider-diversity option despite Terra's strict DeepSWE dominance.
52
+ - **claude-opus-4.8 [max]** — retained where Anthropic diversity or its long-context behavior has separate value.
53
+ - **claude-fable-5** — kept where Anthropic-family behavior is specifically wanted, such as the quality-first, unbenchmarked design chain.
54
+ - **Unmeasured models** — a family without current DeepSWE or Artificial Analysis coverage may remain an operational default, but should not inherit a predecessor's score.
54
55
 
55
56
  ## How to use this
56
57
 
package/docs/providers.md CHANGED
@@ -51,7 +51,9 @@ If the Codex backend reports that an OAuth/auth token was invalidated or revoked
51
51
 
52
52
  ### Codex Fast Mode
53
53
 
54
- Run `/fast` in interactive mode to enable OpenAI priority service tier separately for normal chat and workflow-stage sessions. The command is shown only when the current model scope includes a supported `openai/*` or `openai-codex/*` model. Workflow stages, nested `ctx.workflow(...)` stages, and subagents launched by those stages use the workflow setting, not the chat setting. Each fallback attempt is evaluated against its effective model, so an eligible fallback gets the tier and an ineligible provider does not. When enabled for the active supported model, the UI appends `fast` after the model name in the chat footer, workflow stage model labels, and stage-launched subagent results. Fast mode intentionally does not apply to `github-copilot/*`, Azure OpenAI, OpenRouter, or custom OpenAI-compatible providers. Use workflow fast mode deliberately because parallel workflow fan-out can multiply priority-tier usage.
54
+ Run `/fast` in interactive mode to enable OpenAI priority service tier separately for normal chat and workflow-stage sessions. The command is shown when the current model scope includes a supported `openai/*` or `openai-codex/*` model. A resolved provider alias also qualifies when it uses the shared `openai-codex-responses` transport. Workflow stages, nested `ctx.workflow(...)` stages, and subagents launched by those stages use the workflow setting, not the chat setting. Each fallback, retry, compaction-planner, and branch-summary request is evaluated against its effective model, so an eligible fallback gets the tier and an ineligible provider does not. When enabled for the active supported model, the UI appends `fast` after the model name in the chat footer, workflow stage model labels, and stage-launched subagent results. Fast mode intentionally does not apply to `github-copilot/*`, Azure OpenAI, OpenRouter, or generic OpenAI-compatible providers. Use workflow fast mode deliberately because parallel workflow fan-out can multiply priority-tier usage.
55
+
56
+ The shared ChatGPT Codex transport sends the fast routing contract only after the final request payload contains `service_tier: priority`: `originator: codex_cli_rs` plus `x-codex-routing-hint: model=<effective-model>;tier=priority` on both HTTP/SSE and WebSocket transports. The same rule covers the stock provider, renamed providers, credential-resolved endpoints, and monitoring proxies that retain `api: "openai-codex-responses"`. WebSocket fallback, reconnect, and HTTP retry attempts reuse that identity; a final model or tier change drops a cached socket before reuse. Requests to the standard OpenAI API send only the tier. When Fast Mode is off, or a request hook changes the final tier away from `priority`, Atomic keeps the normal `originator: pi` identity and sends no routing hint.
55
57
 
56
58
  ### Claude Pro/Max
57
59
 
@@ -87,6 +89,8 @@ Business and enterprise tokens sent to the individual host return `421 Misdirect
87
89
 
88
90
  Run `/login xai`, then select **Use a subscription**. `XAI_API_KEY` remains available through **Use an API key**.
89
91
 
92
+ Atomic defaults xAI sessions to `grok-4.6`. Built-in workflow and subagent fallback chains use `xai/grok-4.6:high` and `openrouter/x-ai/grok-4.6`; GitHub Copilot also exposes Grok 4.6 when the account's model policy enables it. Network-backed catalogs refresh and cache these newer entries independently of the bundled catalog snapshot.
93
+
90
94
  ### Radius
91
95
 
92
96
  Radius is a dynamic `pi-messages` gateway. `/login radius` stores OAuth tokens in `auth.json`; its model catalog refreshes independently and is cached in `models-store.json`. API-key authentication is also available through `/login radius` or `RADIUS_API_KEY`. Custom Radius gateways can be declared in `models.json` with `"oauth": "radius"` and the gateway `baseUrl`.
@@ -151,7 +155,7 @@ Remote pi.dev catalogs persist their ETag and are revalidated with `If-None-Matc
151
155
  | Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` | `xiaomi-token-plan-ams` |
152
156
  | Xiaomi MiMo Token Plan (Singapore) | `XIAOMI_TOKEN_PLAN_SGP_API_KEY` | `xiaomi-token-plan-sgp` |
153
157
 
154
- Baseten's built-in default is `zai-org/GLM-5.2`; its catalog supplies the provider-specific thinking levels. Qwen Token Plan Individual defaults to `qwen3.8-max` and uses the international `QWEN_TOKEN_PLAN_API_KEY` shared with the existing Qwen Token Plan provider.
158
+ Z.AI and Z.AI Coding Plan (China) default to `glm-5.3` (`zai/glm-5.3` and `zai-coding-cn/glm-5.3`); the generated catalogs expose reasoning without a thinking-level map, so built-in chains use the supported `:high` suffix rather than inventing distinct `:xhigh` or `:max` tiers. OpenRouter currently exposes `z-ai/glm-5.2` but not `z-ai/glm-5.3`, so Atomic does not ship an unavailable OpenRouter GLM-5.3 fallback. Baseten also has no GLM-5.3 catalog entry, so its documented default remains `zai-org/GLM-5.2` and its catalog supplies the provider-specific thinking levels. Qwen Token Plan Individual defaults to `qwen3.8-max` and uses the international `QWEN_TOKEN_PLAN_API_KEY` shared with the existing Qwen Token Plan provider.
155
159
 
156
160
  Reference for environment variables and `auth.json` keys: `findEnvKeys()` / `getEnvApiKey()` in the installed `@earendil-works/pi-ai` dependency (`node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts`). The private provider map those functions use is in `node_modules/@earendil-works/pi-ai/dist/env-api-keys.js`; Atomic does not include a separate `packages/ai` source directory in this monorepo.
157
161
 
@@ -319,6 +323,95 @@ AI Gateway authentication uses `CLOUDFLARE_API_KEY` as `cf-aig-authorization`. U
319
323
 
320
324
  For normal Atomic usage, prefer unified billing or stored BYOK. Inline BYOK requires configuring an additional upstream `Authorization` header for the Cloudflare AI Gateway provider, for example via a `models.json` provider/model override.
321
325
 
326
+ #### Workers AI binding (no API token)
327
+
328
+ When Atomic's engine runs inside a Cloudflare Worker in the gateway's own account, requests can route through the [Workers AI binding](https://developers.cloudflare.com/ai-gateway/usage/workers-ai-binding/) (`env.AI`) instead of HTTPS. Binding calls are pre-authenticated in-account, so this path needs **no `CLOUDFLARE_API_KEY` at all**. Atomic re-exports the transport as `createGatewayBindingFetch` from `@bastani/atomic`.
329
+
330
+ Declare the binding and the endpoint vars (the vars also satisfy the account/gateway resolution the gateway prefix needs):
331
+
332
+ ```toml
333
+ # wrangler.toml
334
+ [ai]
335
+ binding = "AI"
336
+
337
+ [vars]
338
+ CLOUDFLARE_ACCOUNT_ID = "your-account-id"
339
+ CLOUDFLARE_GATEWAY_ID = "your-gateway-slug" # dash.cloudflare.com → AI → AI Gateway
340
+ ```
341
+
342
+ Then register a provider override whose `streamSimple` swaps in the binding transport. The extension must be created where `env` is in scope — an inline extension factory passed to the resource loader does that:
343
+
344
+ ```typescript
345
+ import {
346
+ CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL,
347
+ createAgentSession,
348
+ createGatewayBindingFetch,
349
+ DefaultResourceLoader,
350
+ type AiGatewayBinding,
351
+ } from "@bastani/atomic";
352
+ import { streamSimple as anthropicStreamSimple } from "@earendil-works/pi-ai/api/anthropic-messages";
353
+
354
+ // `AI` is the Workers AI binding; `AiGatewayBinding` is the structural type for it,
355
+ // so the snippet needs no `@cloudflare/workers-types` dependency.
356
+ interface Env {
357
+ AI: AiGatewayBinding;
358
+ CLOUDFLARE_ACCOUNT_ID: string;
359
+ CLOUDFLARE_GATEWAY_ID: string;
360
+ }
361
+
362
+ export default {
363
+ async fetch(request: Request, env: Env): Promise<Response> {
364
+ const gatewayPrefix = `https://gateway.ai.cloudflare.com/v1/${env.CLOUDFLARE_ACCOUNT_ID}/${env.CLOUDFLARE_GATEWAY_ID}`;
365
+ const loader = new DefaultResourceLoader({
366
+ cwd: "/workspace",
367
+ agentDir: "/workspace/.atomic/agent",
368
+ extensionFactories: [
369
+ {
370
+ name: "cloudflare-gateway-binding",
371
+ factory: (pi) => {
372
+ pi.registerProvider("cloudflare-ai-gateway", {
373
+ // Placeholder credential: it marks the provider configured and becomes
374
+ // `cf-aig-authorization: Bearer cloudflare-gateway-binding`, which the
375
+ // transport strips before the binding call. Never sent to the gateway.
376
+ apiKey: CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL,
377
+ api: "anthropic-messages",
378
+ streamSimple: (model, context, options) =>
379
+ anthropicStreamSimple(
380
+ {
381
+ ...model,
382
+ baseUrl: (model.baseUrl ?? gatewayPrefix)
383
+ .replaceAll("{CLOUDFLARE_ACCOUNT_ID}", env.CLOUDFLARE_ACCOUNT_ID)
384
+ .replaceAll("{CLOUDFLARE_GATEWAY_ID}", env.CLOUDFLARE_GATEWAY_ID)
385
+ },
386
+ context,
387
+ {
388
+ ...options,
389
+ fetch: createGatewayBindingFetch({
390
+ binding: env.AI,
391
+ gateway: env.CLOUDFLARE_GATEWAY_ID,
392
+ baseUrl: gatewayPrefix
393
+ })
394
+ }
395
+ )
396
+ });
397
+ }
398
+ }
399
+ ]
400
+ });
401
+ await loader.reload();
402
+
403
+ const { session } = await createAgentSession({
404
+ resourceLoader: loader
405
+ // Pass `model:` with a cloudflare-ai-gateway entry (e.g. claude-sonnet-4-5)
406
+ // resolved from your ModelRuntime, or leave it out to use the saved default.
407
+ });
408
+ // ...run the session and return a Response
409
+ }
410
+ };
411
+ ```
412
+
413
+ Every request under the gateway prefix becomes one `env.AI.gateway(id).run({ provider, endpoint, headers, query })` call in the provider's native wire format, so streaming behaves identically to the HTTPS route. The transport serves only its gateway-bound client: URLs outside the prefix, and in-prefix requests the universal endpoint cannot express (non-POST, non-JSON body), reject with a descriptive error rather than being forwarded. Repeat the same pattern with `@earendil-works/pi-ai/api/openai-completions` (or `openai-responses`) to cover the `/openai` and `/compat` passthrough models of the same provider.
414
+
322
415
  ### Cloudflare Workers AI
323
416
 
324
417
  `CLOUDFLARE_API_KEY` can be set via `/login`. `CLOUDFLARE_ACCOUNT_ID` must be set as an environment variable.
@@ -112,7 +112,7 @@ Atomic ships with nine workflows you can run immediately. Use `/workflow list` t
112
112
  | `loop-until-done` | Iterate with a durable ledger until completion or bound exhaustion. | `/workflow loop-until-done prompt="Repair failures until the test suite passes"` |
113
113
  | `goal` | Autonomous work that needs a durable ledger, bounded sub-agent orchestration, receipts, and reviewer-gated completion. | `/workflow goal objective="Update the CLI docs, add one example, and validate the docs build"` |
114
114
  | `ralph` | Research-first autonomous work with prompt refinement, delegated implementation, and iterative multi-model review. | `/workflow ralph prompt="Implement specs/rate-limit.md and validate burst traffic"` |
115
- | `open-claude-design` | UI and design-system work with separate generate and feedback passes and a live `preview.html`. | `/workflow open-claude-design prompt="Refresh the settings page hierarchy as a page"` |
115
+ | `open-claude-design` | UI and design-system work with one generated preview, one live review session, and export. | `/workflow open-claude-design prompt="Refresh the settings page hierarchy as a page"` |
116
116
 
117
117
  <p align="center"><img src="images/workflow-list.png" alt="Workflow List" width="600" /></p>
118
118
 
@@ -168,10 +168,12 @@ Skills are reusable expert instructions. Trigger one with `/skill:<name>` follow
168
168
  | `create-spec` | Turn research into an implementation-ready plan. | `/skill:create-spec from research/docs/2026-03-rate-limit.md` |
169
169
  | `prompt-engineer` | Create, optimize, evaluate, or troubleshoot prompts for GPT-5.6, Claude Opus 5, and Claude Fable 5. | `/skill:prompt-engineer Draft a sharper repo-research prompt for payment retries end to end.` |
170
170
  | `tdd` | Test-first feature or bug work. | `/skill:tdd` |
171
- | `impeccable` | Critique or refine web/native frontend and product UI; includes detector hooks. | `/skill:impeccable` |
171
+ | `impeccable` | Critique or refine web/native frontend and product UI; includes detector hooks, framework-aware live review, and mount-failure recovery. | `/skill:impeccable` |
172
172
  | `playwright-cli` | Drive a real browser for end-to-end UI checks, screenshots, and reviewable proof videos. | `/skill:playwright-cli` |
173
173
  | `liteparse` | Pull text, tables, or values out of PDF, DOCX, PPTX, XLSX, and image files locally. | `/skill:liteparse` |
174
174
 
175
+ Impeccable 4.1.1 resolves Live sessions to the selected app root, supports SvelteKit, Nuxt, TanStack Start, Astro, Next.js, Vite, and static HTML injection, and rejects absolute, traversing, or symlinked configured write targets. Its concept roll may contact `impeccable.style`; set `IMPECCABLE_NO_TELEMETRY=1` or `DO_NOT_TRACK=1` to disable the anonymous choice ping. The image fallback runs only with `OPENAI_API_KEY`, sends prompts and optional reference images to OpenAI, and spends that account's API credit. Generated image prompts are embedded in the image or a sidecar, so do not include secrets.
176
+
175
177
  Use `/skill:research-codebase` for a focused subsystem or question. For repository-wide research, use `fan-out-and-synthesize` with distinct repository partitions and an artifact synthesis barrier. Use Goal for ledger-backed bounded orchestration and Ralph for research-first delegated implementation with iterative review; task size alone does not select either workflow.
176
178
 
177
179
  ### Create your own workflow in natural language
package/docs/rpc.md CHANGED
@@ -954,17 +954,31 @@ Emitted when a message begins and completes. The `message` field contains an `Ag
954
954
 
955
955
  ### message_update (Streaming)
956
956
 
957
- Emitted during streaming of assistant messages. Carries only the streaming delta.
957
+ Emitted during streaming of assistant messages. Carries the streaming delta plus the latest cumulative usage.
958
958
 
959
- `message_update` deliberately omits any cumulative snapshot: there is no `message`
959
+ `message_update` deliberately omits the cumulative message snapshot: there is no `message`
960
960
  field, and `assistantMessageEvent` has no `partial`. `message_start` provides the
961
961
  initial message, the deltas build it, and `message_end` provides the final
962
962
  authoritative message. Repeating a snapshot on every frame would make the bytes
963
963
  written per assistant turn grow with the square of its length.
964
964
 
965
+ The top-level `usage` field carries the latest cumulative provider-reported usage; it may
966
+ remain zero until completion when a provider does not report usage during streaming. When
967
+ the provider reports an explicit end-of-turn signal (pi-ai's `AssistantMessage.endTurn`,
968
+ for example OpenAI Codex `end_turn`), the update carries it as a top-level `endTurn`
969
+ boolean — present only when the provider reported one.
970
+
965
971
  ```json
966
972
  {
967
973
  "type": "message_update",
974
+ "usage": {
975
+ "input": 100,
976
+ "output": 1,
977
+ "cacheRead": 0,
978
+ "cacheWrite": 0,
979
+ "totalTokens": 101,
980
+ "cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0, "total": 0}
981
+ },
968
982
  "assistantMessageEvent": {
969
983
  "type": "text_delta",
970
984
  "contentIndex": 0,
@@ -992,10 +1006,10 @@ The `assistantMessageEvent` field contains one of these delta types:
992
1006
 
993
1007
  Example streaming a text response:
994
1008
  ```json
995
- {"type":"message_update","assistantMessageEvent":{"type":"text_start","contentIndex":0}}
996
- {"type":"message_update","assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":"Hello"}}
997
- {"type":"message_update","assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":" world"}}
998
- {"type":"message_update","assistantMessageEvent":{"type":"text_end","contentIndex":0,"content":"Hello world"}}
1009
+ {"type":"message_update","usage":{...},"assistantMessageEvent":{"type":"text_start","contentIndex":0}}
1010
+ {"type":"message_update","usage":{...},"assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":"Hello"}}
1011
+ {"type":"message_update","usage":{...},"assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":" world"}}
1012
+ {"type":"message_update","usage":{...},"assistantMessageEvent":{"type":"text_end","contentIndex":0,"content":"Hello world"}}
999
1013
  ```
1000
1014
 
1001
1015
  ### tool_execution_start / tool_execution_update / tool_execution_end
@@ -1465,7 +1479,7 @@ The `content` field can be a string or an array of `TextContent`/`ImageContent`
1465
1479
  }
1466
1480
  ```
1467
1481
 
1468
- Stop reasons: `"stop"`, `"length"`, `"toolUse"`, `"error"`, `"aborted"`. A streaming message carries `"pending"` until the terminal event replaces it, so a client that switches on the reason needs that case; a completed message never carries it. On the wire the pending reason appears on the `message_start` message — `message_update` frames carry no message at all — and `message_end` carries the terminal reason.
1482
+ Stop reasons: `"stop"`, `"length"`, `"toolUse"`, `"error"`, `"aborted"`. A streaming message carries `"pending"` until the terminal event replaces it, so a client that switches on the reason needs that case; a completed message never carries it. On the wire the pending reason appears on the `message_start` message — `message_update` frames carry no message at all — and `message_end` carries the terminal reason. A provider that reports an explicit end-of-turn signal (pi-ai's `AssistantMessage.endTurn`, for example OpenAI Codex `end_turn`) sets `endTurn: true` on the assistant message; `message_update` frames echo it as a top-level boolean only when the provider reported one.
1469
1483
 
1470
1484
  ### ToolResultMessage
1471
1485
 
package/docs/sdk.md CHANGED
@@ -46,7 +46,7 @@ const { session } = await createAgentSession({
46
46
  });
47
47
  ```
48
48
 
49
- `ModelRuntime.create()` accepts custom `authPath`, `modelsPath`, credential storage, and runtime auth overrides. `ModelRegistry` and `AuthStorage` remain available as Atomic's synchronous compatibility facades. Use `readStoredCredential(provider, authPath?)` for a lightweight read of one stored provider credential.
49
+ `ModelRuntime.create()` accepts custom `authPath`, `modelsPath`, credential storage, and runtime auth overrides, plus the model-catalog options `allowModelNetwork`, `modelRefreshTimeoutMs`, `modelsStorePath`, and `modelsStore` (see [Model catalog persistence and refresh](#model-catalog-persistence-and-refresh)). `ModelRegistry` and `AuthStorage` remain available as Atomic's synchronous compatibility facades. Use `readStoredCredential(provider, authPath?)` for a lightweight read of one stored provider credential.
50
50
 
51
51
  Extensions supplied directly to SDK sessions can use the exported `InlineExtension` type. Extension APIs and event types include native `registerProvider(Provider)`, `registerEntryRenderer`, `entry_appended`, `before_provider_headers`, and `agent_settled`.
52
52
 
@@ -485,6 +485,31 @@ If no model is provided:
485
485
 
486
486
  > See [examples/sdk/02-custom-model.ts](https://github.com/bastani-inc/atomic/blob/main/packages/coding-agent/examples/sdk/02-custom-model.ts)
487
487
 
488
+ #### Model catalog persistence and refresh
489
+
490
+ `ModelRuntime.create()` restores cached catalogs from local persistence but does not contact
491
+ pi.dev unless you opt in. `allowModelNetwork` (default `false`) enables a create-time network
492
+ refresh, and `modelRefreshTimeoutMs` (default `15_000`) bounds how long that refresh may run
493
+ before it is aborted. Pass `refreshOnCreate: false` to skip the initial catalog and
494
+ availability refresh entirely; built-in models remain available.
495
+
496
+ ```typescript
497
+ const refreshedRuntime = await ModelRuntime.create({
498
+ allowModelNetwork: true,
499
+ modelRefreshTimeoutMs: 15_000,
500
+ });
501
+ ```
502
+
503
+ Remote catalogs are persisted locally so later runtimes can restore them without a network
504
+ request. The default file is `models-store.json` next to `models.json` — with the default
505
+ `modelsPath` that is `~/.atomic/agent/models-store.json`. Set `modelsStorePath` to choose
506
+ another location, or inject `modelsStore` to control persistence entirely; a runtime created
507
+ with `modelsPath: null` keeps its store in memory. Network refreshes are throttled to once
508
+ per provider every four hours unless forced. To force an immediate refresh, call
509
+ `await modelRuntime.refresh({ allowNetwork: true, force: true, signal })`. Setting
510
+ `ATOMIC_OFFLINE` (legacy alias `PI_OFFLINE`) disables model network access, and a
511
+ `refresh()` call that omits `allowNetwork` follows that same runtime network policy.
512
+
488
513
  ### API Keys and OAuth
489
514
 
490
515
  `ModelRuntime` is the asynchronous SDK engine for provider composition, credentials, model catalogs, and requests. `ModelRegistry` remains a thin compatibility facade for extensions; `await modelRegistry.complete(model, context, options)` routes a request through its runtime with the resolved provider and auth. New SDK integrations should pass `modelRuntime` to `createAgentSession` and use `modelRuntime.complete()` directly when they issue standalone requests.
@@ -307,6 +307,8 @@ Session metadata (e.g., user-defined display name). Set via `/name`, `--name` /
307
307
 
308
308
  The session name is displayed in the session selector (`/resume`) instead of the first message when set.
309
309
 
310
+ Appending a `session_info` entry with an empty `name` clears the title. The distinction is durable: a cleared session keeps its trailing empty-name entry, while a never-named session has no `session_info` entry at all. Readers can tell them apart through `getSessionNameState()` (`{ hasName: false }` for never-named, `{ hasName: true }` for cleared) and through the `hasName` flag on listed `SessionInfo` rows; the bare `name` string is `undefined` in both cases.
311
+
310
312
  ### SessionSummaryEntry
311
313
 
312
314
  A generated one-line description of the session, written automatically once the agent goes idle and shown in the session selector. Never sent to the LLM.
@@ -433,7 +435,7 @@ for (const stage of stages.filter((session) => session.internal)) {
433
435
  - `appendModelChange(provider, modelId)` - Record model change
434
436
  - `appendCompaction(compactedText, firstKeptEntryId, tokensBefore, details)` - Add a durable verbatim-line compaction boundary; pass `null` when no pre-boundary message is retained
435
437
  - `appendCustomEntry(customType, data?)` - Extension state (not in context)
436
- - `appendSessionInfo(name)` - Set session display name
438
+ - `appendSessionInfo(name)` - Set session display name; an empty string clears it
437
439
  - `appendSessionSummary(summary, summarizedThroughId, usage?)` - Store a generated resume-picker summary, anchored to the message it describes
438
440
  - `appendCustomMessageEntry(customType, content, display, details?)` - Extension message (in context)
439
441
  - `appendLabelChange(targetId, label)` - Set/clear label
@@ -454,7 +456,8 @@ for (const stage of stages.filter((session) => session.internal)) {
454
456
  - `buildSessionContext()` - Get messages, thinkingLevel, and model for LLM
455
457
  - `getEntries()` - All entries (excluding header)
456
458
  - `getHeader()` - Session header metadata
457
- - `getSessionName()` - Get display name from latest session_info entry
459
+ - `getSessionName()` - Get display name from latest session_info entry (`undefined` when cleared or never named)
460
+ - `getSessionNameState()` - Get the name state: `{ hasName: false }` when never named, `{ hasName: true }` when the latest entry cleared it, `{ hasName: true, name }` when currently named
458
461
  - `getCwd()` - Working directory
459
462
  - `getSessionDir()` - Session storage directory
460
463
  - `getSessionId()` - Session UUID
package/docs/settings.md CHANGED
@@ -86,7 +86,7 @@ Fallback attempts are visible as model changes in the session transcript and as
86
86
 
87
87
  ### Codex Fast Mode
88
88
 
89
- Use `/fast` in interactive mode to edit these settings. Atomic applies fast mode only to supported `openai/*` and `openai-codex/*` providers, not `github-copilot/*` or other OpenAI-compatible providers. Chat and workflow-stage scopes are independent. Workflow stages, nested `ctx.workflow(...)` stages, and subagents launched by those stages use `codexFastMode.workflow`; normal-chat subagents use `codexFastMode.chat`. Fast mode is resolved again for each fallback model, so the marker and priority tier follow the effective provider. When fast mode is active for the current supported model, Atomic shows `fast` after the model name in the chat footer, workflow stage model labels, and subagent results. Enable the workflow scope deliberately for broad fan-outs because each eligible stage can consume priority-tier requests.
89
+ Use `/fast` in interactive mode to edit these settings. Atomic applies fast mode to supported `openai/*` and `openai-codex/*` providers and to provider aliases that use the shared `openai-codex-responses` transport, not `github-copilot/*` or generic OpenAI-compatible providers. Chat and workflow-stage scopes are independent. Workflow stages, nested `ctx.workflow(...)` stages, and subagents launched by those stages use `codexFastMode.workflow`; normal-chat subagents use `codexFastMode.chat`. Fast mode is resolved again for each fallback model, so the marker and priority tier follow the effective provider. When fast mode is active for the current supported model, Atomic shows `fast` after the model name in the chat footer, workflow stage model labels, and subagent results. Enable the workflow scope deliberately for broad fan-outs because each eligible stage can consume priority-tier requests.
90
90
 
91
91
  | Setting | Type | Default | Description |
92
92
  |---------|------|---------|-------------|
@@ -108,6 +108,7 @@ Use `/fast` in interactive mode to edit these settings. Atomic applies fast mode
108
108
  |---------|------|---------|-------------|
109
109
  | `theme` | string | `"dark"` | Theme name (`"dark"`, `"light"`, a Catppuccin built-in, or custom) |
110
110
  | `fullscreenScrollbar` | string | `"auto"` | Fullscreen transcript scrollbar: `"auto"` shows it temporarily while scrolling, `"always"` reserves the rightmost transcript column and keeps it visible, and `"hidden"` hides it. The thumb can be dragged when shown. |
111
+ | `fullscreenExitOutput` | string | `"transcript"` | Fullscreen exit output: `"transcript"` prints the final transcript and session resume hint, while `"resume-hint"` restores the terminal's previous screen and prints only the resume hint. Settable from `/settings` |
111
112
  | `quietStartup` | boolean | `false` | Hide startup header |
112
113
  | `defaultProjectTrust` | string | `"ask"` | Fallback project trust behavior: `"ask"`, `"always"`, or `"never"`. Global setting only |
113
114
  | `collapseChangelog` | boolean | `false` | Show condensed changelog after updates |
@@ -128,7 +129,7 @@ Interactive sessions always use the fullscreen renderer. The transcript scrolls
128
129
 
129
130
  The fullscreen renderer keeps minimum sizes for nested layout stacks during resize, and transient fullscreen notices stack instead of replacing a notice that is still visible.
130
131
 
131
- The alternate screen restores the terminal's prior contents on exit, so an interactive transcript does not remain in terminal scrollback. Use `/export` before exit for an HTML copy, or resume the saved session later to review it in Atomic.
132
+ The alternate screen normally restores the terminal's prior contents on exit, so an interactive transcript does not remain in terminal scrollback. The `fullscreenExitOutput` setting changes what exiting prints: `"transcript"` (the default) paints the final transcript plus a session resume hint on the main screen, while `"resume-hint"` restores the previous screen and prints only the resume hint. Use `/export` before exit for an HTML copy, or resume the saved session later to review it in Atomic.
132
133
 
133
134
  Ctrl+G in main chat, embedded chat, and extension editor dialogs uses one shared asynchronous launcher. Atomic chooses `externalEditor`, then `$VISUAL`, then `$EDITOR`, then Notepad on Windows or `nano` elsewhere. Each edit uses a private `atomic-editor-*` directory containing only `prompt.md`, removes the directory recursively afterward, and never scans the system temporary directory. A successful empty edit is preserved; a failed editor leaves the original text unchanged, and the TUI always restarts and renders after the editor exits.
134
135
 
@@ -305,6 +306,36 @@ When `images.autoResize` is enabled, Atomic normalizes images before sending the
305
306
 
306
307
  Normally the package manager's global modules location is queried using `root -g`. As a special case, if the first element of `npmCommand` is `"bun"`, the modules location will instead be queried with `pm bin -g`.
307
308
 
309
+ On Windows, JSON paths must use forward slashes or escaped backslashes:
310
+
311
+ ```json
312
+ {
313
+ "shellPath": "C:/Program Files/Git/bin/bash.exe"
314
+ }
315
+ ```
316
+
317
+ ```json
318
+ {
319
+ "shellPath": "C:\\Program Files\\Git\\bin\\bash.exe"
320
+ }
321
+ ```
322
+
323
+ ### Tools
324
+
325
+ | Setting | Type | Default | Description |
326
+ |---------|------|---------|-------------|
327
+ | `defaultTools` | string[] | - | Built-in tools enabled at startup. When omitted, Atomic uses its standard defaults |
328
+
329
+ `defaultTools` selects the built-in tools a session starts with. Extension and SDK custom tools stay enabled regardless:
330
+
331
+ ```json
332
+ {
333
+ "defaultTools": ["bash", "edit", "write"]
334
+ }
335
+ ```
336
+
337
+ An empty array starts with no built-in tools while preserving extension and custom tools. `--tools` replaces this behavior with a strict allowlist covering all tools, `--no-tools` disables all tools, and `--no-builtin-tools` disables only the built-in defaults. `--exclude-tools` filters the resulting list. A project `defaultTools` array replaces the global array.
338
+
308
339
  ### Sessions
309
340
 
310
341
  | Setting | Type | Default | Description |
@@ -342,7 +373,7 @@ When multiple sources specify a session directory, precedence is `--session-dir`
342
373
 
343
374
  Mermaid code blocks render as themed Unicode diagrams in interactive transcripts when they fit the available width. `"off"` keeps the Markdown fence, `"final"` renders only finalized responses, and `"streaming"` also renders partial assistant responses. Invalid or too-wide diagrams remain as code, and rendering is display-only: stored messages and model context keep the original Markdown. LaTeX rendering is also display-only and converts supported expressions to terminal-friendly Unicode math; set `markdown.latex` to `false` to keep the source form.
344
375
 
345
- The installed pi-tui 0.84.1 LaTeX renderer also handles whitespace and matrix layouts correctly.
376
+ The installed pi-tui 0.84.2 LaTeX renderer also handles whitespace and matrix layouts correctly.
346
377
 
347
378
  ### Resources
348
379
 
package/docs/skills.md CHANGED
@@ -85,6 +85,21 @@ Skills register as `/skill:name` commands:
85
85
  /skill:pdf-tools extract # Load skill with arguments
86
86
  ```
87
87
 
88
+ When multiple real skill files declare the same name, Atomic keeps the existing precedence winner for the bare command and retains every distinct file as an exact candidate. Use a source-qualified command to select one explicitly:
89
+
90
+ ```bash
91
+ /skill:review # Current precedence winner
92
+ /skill:review@project # Unique project candidate
93
+ /skill:review@user # Unique user candidate
94
+ /skill:review@builtin # Unique bundled candidate
95
+ ```
96
+
97
+ `@project`, `@user`, and `@builtin` are available only when that family has one candidate in the collision. If a family contains multiple package candidates, Atomic advertises package-qualified aliases instead, such as `/skill:review@team-review` and `/skill:review@company-review`; the family selector is ambiguous and reports the exact choices. Autocomplete, `pi.getCommands()`, and RPC `get_commands` return the same advertised names.
98
+
99
+ Qualified selection is exact. An unknown or ambiguous qualified selector reports an error and never falls back to the bare winner. Aliases are recalculated on reload, so a qualified alias disappears when its collision disappears. The model-visible skill list uses the same aliases, while the opaque candidate IDs stored in transcripts and collision diagnostics are internal identity, not command names.
100
+
101
+ Subagent definitions and per-call `skills` overrides accept these same selectors. Live in-process children resolve them from their own loader catalog after resource reload; a missing or ambiguous selector is reported in the child result instead of silently selecting the bare skill. The parent-only `subagent` orchestration skill cannot be injected into a child, including qualified aliases such as `subagent@builtin`. Extensions can read the same catalog through `ctx.getSkillCatalog()`.
102
+
88
103
  Arguments after the command are appended to the skill content as `User: <args>`.
89
104
 
90
105
  Toggle skill commands via `/settings` in interactive mode or in `settings.json`:
@@ -194,7 +209,7 @@ Unknown frontmatter fields are ignored.
194
209
 
195
210
  **Exception:** Skills with missing description are not loaded.
196
211
 
197
- Name collisions (same name from different locations) warn and keep the first skill found.
212
+ Name collisions (the same name from different real files) produce diagnostics and keep the existing first-winner precedence for `/skill:name`. Atomic also retains the other files as source-qualified candidates as described in [Skill Commands](#skill-commands).
198
213
 
199
214
  ## Example
200
215
 
@@ -6,9 +6,20 @@ Atomic uses the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboa
6
6
 
7
7
  On normal interactive TTY startup, Atomic starts a short-lived raw keyboard capture before deferred resources finish loading and keeps it active until the TUI input handler is mounted. Text typed before the prompt box is fully mounted is replayed into the editor. Enter-submitted ordinary prompts are queued for the prompt loop once startup is ready; command-like submissions such as `/settings` or `!pwd` are replayed as standalone editor submissions through normal command routing. If a command-like submission is captured, later captured submissions wait behind it and replay in original input order after that command is routed, so a later ordinary prompt cannot run before the earlier command and commands are not merged with following prompts. Startup work that can affect correctness, such as project trust prompts, resume/session selectors, cross-project session confirmations, explicit resource flags, metadata commands, non-TTY input, or explicit provider/model selection, still stays on the synchronous path instead of using this pre-session capture.
8
8
 
9
- ## Kitty, iTerm2
9
+ ## Kitty
10
10
 
11
- Work out of the box.
11
+ Works out of the box.
12
+
13
+ ## iTerm2
14
+
15
+ Key reporting works out of the box. In the fullscreen TUI, Atomic owns the viewport, so iTerm2 sends mouse-wheel reports instead of scrolling its native scrollback. With iTerm2's default fast-trackpad behavior, those reports can lose most of an accelerated wheel delta, making fullscreen scrolling much slower than iTerm2's native scrolling.
16
+
17
+ If fast mouse-wheel gestures move only about one line at a time in Atomic:
18
+
19
+ 1. Open **iTerm2 → Settings → Advanced**.
20
+ 2. Search for **Trackpad scrolls fast?** and set it to **No**.
21
+
22
+ This is an iTerm2-wide workaround and may also change native trackpad scrolling. The underlying behavior is tracked in [iTerm2 issue 9619](https://gitlab.com/gnachman/iterm2/-/work_items/9619).
12
23
 
13
24
  ## Apple Terminal
14
25
 
@@ -42,6 +53,8 @@ If you want `SHIFT+Enter` to keep working in tmux via that remap, add `ctrl+j` t
42
53
  }
43
54
  ```
44
55
 
56
+ In the fullscreen TUI, links remain clickable, but Ghostty does not show its hover underline or lower-left URL preview while Atomic captures mouse input. Hold `Shift+Command` on macOS or `Shift+Ctrl` on Linux to use Ghostty's native link handling.
57
+
45
58
  ## WezTerm
46
59
 
47
60
  WezTerm usually works out of the box for `SHIFT+Enter` via xterm modifyOtherKeys. To use the Kitty keyboard protocol explicitly, create `~/.wezterm.lua`:
package/docs/themes.md CHANGED
@@ -25,7 +25,7 @@ Atomic loads themes from:
25
25
  - Settings: `themes` array with files or directories
26
26
  - CLI: `--theme <path>` (repeatable)
27
27
 
28
- Disable discovery with `--no-themes`.
28
+ Disable discovery with `--no-themes`. `--theme <path>` loads a theme file; `--use-theme <name>` (see [Initial Theme](#initial-theme)) selects an already-loaded theme for this run without saving it.
29
29
 
30
30
  ## Selecting a Theme
31
31
 
@@ -41,6 +41,22 @@ Use `"theme": "light-theme/dark-theme"` for automatic mode. Atomic chooses the f
41
41
 
42
42
  On first run, Atomic detects your terminal background and defaults to `dark` or `light`.
43
43
 
44
+ ### Initial Theme
45
+
46
+ Start an interactive run with a theme without changing the saved setting:
47
+
48
+ ```bash
49
+ atomic --use-theme light
50
+ ```
51
+
52
+ To follow terminal appearance, use the `lightTheme/darkTheme` form:
53
+
54
+ ```bash
55
+ atomic --use-theme light/dark
56
+ ```
57
+
58
+ The CLI value is the initial theme for that run only. Choosing another theme later in `/settings` applies it immediately and saves it normally; an unknown theme name reports the ordinary theme error.
59
+
44
60
  ## Creating a Custom Theme
45
61
 
46
62
  1. Create a theme file:
@@ -150,14 +166,14 @@ vim ~/.atomic/agent/themes/my-theme.json
150
166
 
151
167
  - `name` is required, must be unique, and must not contain `/`.
152
168
  - `vars` is optional. Define reusable colors here, then reference them in `colors` or `workingIndicator`.
153
- - `colors` must define all 51 required tokens. `scrollbarThumb` is optional and falls back to `selectedBg` when omitted.
169
+ - `colors` must define all 51 required tokens. `scrollbarThumb` is optional and falls back to `selectedBg` when omitted. `searchMatchBg` and `searchMatchText` remain accepted for older theme files but are unused.
154
170
  - `workingIndicator` is optional and may override any subset of the six tones in the outward half of the ordinary `∀` ramp; Atomic derives omitted tones from selected background, accent, and text roles, then mirrors the palette back after `peak`. Explicit numeric values from 0 through 255 remain exact terminal palette indices. When a numeric index from 0 through 15 seeds an omitted tone, Atomic mixes from its built-in approximation of the common ANSI RGB value; the terminal still controls the actual appearance of the explicit index. Both explicit and derived tones update on theme hot reload.
155
171
 
156
172
  The `$schema` field enables editor auto-completion and validation.
157
173
 
158
174
  ## Color Tokens
159
175
 
160
- Every theme must define all 51 required color tokens. `scrollbarThumb` is optional and falls back to `selectedBg` when omitted.
176
+ Every theme must define all 51 required color tokens. The optional tokens preserve compatibility with themes written before they existed: `scrollbarThumb` and unused `searchMatchBg` fall back to `selectedBg`, and unused `searchMatchText` falls back to `text`.
161
177
 
162
178
  ### Core UI (11 colors)
163
179
 
@@ -175,12 +191,14 @@ Every theme must define all 51 required color tokens. `scrollbarThumb` is option
175
191
  | `text` | Default text (usually `""`) |
176
192
  | `thinkingText` | Thinking block text |
177
193
 
178
- ### Backgrounds & Content (11 required, 1 optional)
194
+ ### Backgrounds & Content (11 required, 3 optional)
179
195
 
180
196
  | Token | Purpose |
181
197
  |-------|---------|
182
198
  | `selectedBg` | Selected line background |
183
199
  | `scrollbarThumb` | Fullscreen scrollbar thumb background; optional, falls back to `selectedBg` |
200
+ | `searchMatchBg` | Unused leftover token; optional, falls back to `selectedBg` |
201
+ | `searchMatchText` | Unused leftover token; optional, falls back to `text` |
184
202
  | `userMessageBg` | User message background |
185
203
  | `userMessageText` | User message text |
186
204
  | `customMessageBg` | Extension message background |
package/docs/tools.md CHANGED
@@ -24,7 +24,9 @@ insert tail:
24
24
 
25
25
  Supported hashline operations include `replace N..M:`, `replace block N:`, `delete N..M`, `delete block N`, `insert before N:`, `insert after N:`, `insert after block N:`, `insert head:`, and `insert tail:`. Safe lenient variants such as `replace N`, `replace N-M:`, `replace N M:`, `replace N…M:`, bare body rows, and `*** Begin Patch` envelopes are accepted. Bare body rows are auto-prefixed and reported as warnings. `*** Abort` stops parsing the remaining input, while apply-patch sentinels, `@@` hunk headers, bare numeric hunk headers, `delete` bodies, empty `replace`/`insert` bodies, and `-` diff rows are rejected with guidance instead of silently deleting content. Line numbers refer to the original tagged snapshot and do not shift within a call.
26
26
 
27
- Before writing, Atomic verifies the current file against the tagged snapshot. If the file drifted, `edit` first attempts a snapshot-based recovery for provably non-overlapping external changes and appends a warning when it preserves those changes; unknown tags, overlapping stale edits, and unrecoverable drift fail clearly with the current file hash (and anchor context for drifted files) and leave the file unchanged. Byte-identical no-op edits return a no-op warning without writing, and repeated identical no-ops escalate to an error to stop looped retries. Hashline snapshots are scoped to the active tool/session store, so tags emitted in another session or stale context do not authorize edits. One `edit` input may contain multiple `[PATH#TAG]` sections; Atomic preflights every section before writing, but this is preflight atomicity rather than transactional rollback, so a mid-batch filesystem write failure can leave earlier sections already written. Each successful `write` or `edit` returns a fresh tag for follow-up edits; hashline edit success output is compact and includes the refreshed header plus block-resolution/change metadata while the full diff remains in tool details. Plain `write` success output is likewise compact (`[path#TAG]` plus a byte-count summary), not a full reprint of the file. `write` strips copied hashline headers and `LINE:`/`*LINE:` display prefixes only when the pasted content matches a known current-store snapshot and notes when stripping occurred. Literal or unknown hashline-looking content is preserved instead of being stripped.
27
+ Before writing, Atomic verifies the current file against the tagged snapshot. If the file drifted, `edit` first attempts a snapshot-based recovery for provably non-overlapping external changes and appends a warning when it preserves those changes; unknown tags, overlapping stale edits, and unrecoverable drift fail clearly with the current file hash (and anchor context for drifted files) and leave the file unchanged. Byte-identical no-op edits return a no-op warning without writing, and repeated identical no-ops escalate to an error to stop looped retries. Hashline snapshots are scoped to the active tool/session store, so tags emitted in another session or stale context do not authorize edits. One `edit` input may contain multiple `[PATH#TAG]` sections; Atomic preflights every section before writing, but this is preflight atomicity rather than transactional rollback, so a mid-batch filesystem write failure can leave earlier sections already written. Each successful `write` or `edit` returns a fresh tag for follow-up edits; hashline edit success output is compact and includes the refreshed header plus block-resolution/change metadata while the full diff remains in tool details. Plain `write` success output is likewise compact (`[path#TAG]` plus a byte-count summary), not a full reprint of the file. `write` strips copied hashline headers and `LINE:`/`*LINE:` display prefixes only when the pasted content matches a known current-store snapshot and notes when stripping occurred; complete copied output preserves whether that snapshot had a terminal newline. Literal or unknown hashline-looking content is preserved instead of being stripped.
28
+
29
+ Hashline anchors must be positive safe integers. Inclusive numeric ranges are limited to 100,000 lines before expansion. An explicit `+TEXT` row that looks like a valid hunk header remains literal and emits a warning. Across whole-file, truncated, and range/offset reads of LF or CRLF text, numbered hashline output treats a terminal newline as a separator rather than an additional synthetic row; genuine blank lines, including one immediately before that newline, remain visible. Truncation totals and continuation selectors count real lines. Files using bare CR line endings retain their existing compatibility behavior and are outside this newline guarantee.
28
30
 
29
31
  ## `bash` and `bashInterceptor`
30
32
 
package/docs/tui.md CHANGED
@@ -28,6 +28,8 @@ interface Component {
28
28
 
29
29
  The installed pi-tui type still permits handlers that return `void`; Atomic treats a missing or `undefined` result as unhandled only for a matching fullscreen viewport key or a mouse event deferred to a focused overlay. Components that mutate state for such an input must return `true` so the viewport does not apply it a second time.
30
30
 
31
+ Omitting `handleInput` altogether is the same answer as declining: a focused overlay with no handler still lets fullscreen viewport keys and mouse wheel reports reach the transcript, so a notice or progress panel does not freeze scrolling behind it. An asynchronous handler is judged when it settles — only a promise that resolves `true` consumes the input, while `false`, `undefined`, and a rejection all fall through to the viewport. Input that moved focus while such a promise was pending is left to whatever holds focus when it settles.
32
+
31
33
  The TUI appends a full SGR reset and OSC 8 reset at the end of each rendered line. Styles do not carry across lines. If you emit multi-line text with styling, reapply styles per line or use `wrapTextWithAnsi()` so styles are preserved for each wrapped line.
32
34
 
33
35
  ## Focusable Interface (IME Support)