@bastani/atomic 0.9.11-alpha.1 → 0.9.11-alpha.3

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 (507) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/builtin/cursor/package.json +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 +6 -0
  6. package/dist/builtin/subagents/package.json +4 -4
  7. package/dist/builtin/subagents/src/runs/background/notify.ts +3 -1
  8. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +5 -2
  9. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -1
  10. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +5 -2
  11. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +34 -0
  12. package/dist/builtin/web-access/package.json +2 -2
  13. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  14. package/dist/builtin/workflows/package.json +2 -2
  15. package/dist/builtin/workflows/src/durable/child-primitive.ts +3 -0
  16. package/dist/builtin/workflows/src/durable/completed-catalog.ts +182 -33
  17. package/dist/builtin/workflows/src/durable/completed-inspection.ts +9 -4
  18. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +31 -8
  19. package/dist/builtin/workflows/src/durable/resume-runtime.ts +6 -2
  20. package/dist/builtin/workflows/src/durable/stage-primitive.ts +48 -10
  21. package/dist/builtin/workflows/src/durable/types.ts +11 -0
  22. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +9 -9
  23. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +89 -0
  24. package/dist/builtin/workflows/src/engine/run.ts +18 -16
  25. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +3 -0
  26. package/dist/builtin/workflows/src/extension/ui-surface.ts +4 -0
  27. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +3 -0
  28. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +6 -3
  29. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +2 -2
  30. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +4 -1
  31. package/dist/builtin/workflows/src/tui/host-input-form.ts +1 -1
  32. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +2 -3
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +4 -2
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/config-selector.d.ts +4 -2
  37. package/dist/cli/config-selector.d.ts.map +1 -1
  38. package/dist/cli/config-selector.js +1 -1
  39. package/dist/cli/config-selector.js.map +1 -1
  40. package/dist/cli/startup-ui.d.ts +3 -0
  41. package/dist/cli/startup-ui.d.ts.map +1 -1
  42. package/dist/cli/startup-ui.js +50 -1
  43. package/dist/cli/startup-ui.js.map +1 -1
  44. package/dist/config-command-parser.d.ts +9 -0
  45. package/dist/config-command-parser.d.ts.map +1 -0
  46. package/dist/config-command-parser.js +22 -0
  47. package/dist/config-command-parser.js.map +1 -0
  48. package/dist/config-self-update.d.ts +6 -2
  49. package/dist/config-self-update.d.ts.map +1 -1
  50. package/dist/config-self-update.js +17 -10
  51. package/dist/config-self-update.js.map +1 -1
  52. package/dist/config.d.ts +3 -3
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +4 -4
  55. package/dist/config.js.map +1 -1
  56. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  57. package/dist/core/agent-session-compaction.js +7 -1
  58. package/dist/core/agent-session-compaction.js.map +1 -1
  59. package/dist/core/agent-session-export.d.ts.map +1 -1
  60. package/dist/core/agent-session-export.js +32 -25
  61. package/dist/core/agent-session-export.js.map +1 -1
  62. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  63. package/dist/core/agent-session-extension-bindings.js +9 -3
  64. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  65. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  66. package/dist/core/agent-session-prompt.js +5 -0
  67. package/dist/core/agent-session-prompt.js.map +1 -1
  68. package/dist/core/agent-session-services.d.ts +2 -0
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js +11 -5
  71. package/dist/core/agent-session-services.js.map +1 -1
  72. package/dist/core/agent-session-tree.d.ts.map +1 -1
  73. package/dist/core/agent-session-tree.js +7 -2
  74. package/dist/core/agent-session-tree.js.map +1 -1
  75. package/dist/core/agent-session-types.d.ts +20 -0
  76. package/dist/core/agent-session-types.d.ts.map +1 -1
  77. package/dist/core/agent-session-types.js.map +1 -1
  78. package/dist/core/auth-storage.d.ts +6 -2
  79. package/dist/core/auth-storage.d.ts.map +1 -1
  80. package/dist/core/auth-storage.js +5 -1
  81. package/dist/core/auth-storage.js.map +1 -1
  82. package/dist/core/cache-stats.d.ts +25 -0
  83. package/dist/core/cache-stats.d.ts.map +1 -0
  84. package/dist/core/cache-stats.js +68 -0
  85. package/dist/core/cache-stats.js.map +1 -0
  86. package/dist/core/compaction/branch-summarization.d.ts +7 -2
  87. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  88. package/dist/core/compaction/branch-summarization.js +8 -8
  89. package/dist/core/compaction/branch-summarization.js.map +1 -1
  90. package/dist/core/compaction/compaction-runner.d.ts +3 -1
  91. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  92. package/dist/core/compaction/compaction-runner.js +6 -1
  93. package/dist/core/compaction/compaction-runner.js.map +1 -1
  94. package/dist/core/compaction/range-planner.d.ts +3 -0
  95. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  96. package/dist/core/compaction/range-planner.js +2 -1
  97. package/dist/core/compaction/range-planner.js.map +1 -1
  98. package/dist/core/extensions/agent-events.d.ts +10 -0
  99. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  100. package/dist/core/extensions/agent-events.js.map +1 -1
  101. package/dist/core/extensions/api-types.d.ts +8 -2
  102. package/dist/core/extensions/api-types.d.ts.map +1 -1
  103. package/dist/core/extensions/api-types.js.map +1 -1
  104. package/dist/core/extensions/event-types.d.ts +2 -2
  105. package/dist/core/extensions/event-types.d.ts.map +1 -1
  106. package/dist/core/extensions/event-types.js.map +1 -1
  107. package/dist/core/extensions/index.d.ts +1 -1
  108. package/dist/core/extensions/index.d.ts.map +1 -1
  109. package/dist/core/extensions/index.js.map +1 -1
  110. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  111. package/dist/core/extensions/loader-api.js +13 -2
  112. package/dist/core/extensions/loader-api.js.map +1 -1
  113. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  114. package/dist/core/extensions/loader-core.js +1 -0
  115. package/dist/core/extensions/loader-core.js.map +1 -1
  116. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  117. package/dist/core/extensions/loader-runtime.js +15 -7
  118. package/dist/core/extensions/loader-runtime.js.map +1 -1
  119. package/dist/core/extensions/message-types.d.ts +5 -0
  120. package/dist/core/extensions/message-types.d.ts.map +1 -1
  121. package/dist/core/extensions/message-types.js.map +1 -1
  122. package/dist/core/extensions/provider-types.d.ts +46 -0
  123. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  124. package/dist/core/extensions/provider-types.js.map +1 -1
  125. package/dist/core/extensions/runner-registries.d.ts +2 -1
  126. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  127. package/dist/core/extensions/runner-registries.js +8 -0
  128. package/dist/core/extensions/runner-registries.js.map +1 -1
  129. package/dist/core/extensions/runner.d.ts +5 -2
  130. package/dist/core/extensions/runner.d.ts.map +1 -1
  131. package/dist/core/extensions/runner.js +35 -13
  132. package/dist/core/extensions/runner.js.map +1 -1
  133. package/dist/core/extensions/runtime-types.d.ts +8 -2
  134. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  135. package/dist/core/extensions/runtime-types.js.map +1 -1
  136. package/dist/core/extensions/ui-types.d.ts +4 -0
  137. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  138. package/dist/core/extensions/ui-types.js.map +1 -1
  139. package/dist/core/http-dispatcher.d.ts +1 -0
  140. package/dist/core/http-dispatcher.d.ts.map +1 -1
  141. package/dist/core/http-dispatcher.js +16 -2
  142. package/dist/core/http-dispatcher.js.map +1 -1
  143. package/dist/core/keybindings.d.ts +6 -1
  144. package/dist/core/keybindings.d.ts.map +1 -1
  145. package/dist/core/keybindings.js +3 -1
  146. package/dist/core/keybindings.js.map +1 -1
  147. package/dist/core/model-registry-auth.d.ts +2 -0
  148. package/dist/core/model-registry-auth.d.ts.map +1 -1
  149. package/dist/core/model-registry-auth.js +18 -1
  150. package/dist/core/model-registry-auth.js.map +1 -1
  151. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  152. package/dist/core/model-registry-custom-loader.js +14 -2
  153. package/dist/core/model-registry-custom-loader.js.map +1 -1
  154. package/dist/core/model-registry-dynamic.js +2 -2
  155. package/dist/core/model-registry-dynamic.js.map +1 -1
  156. package/dist/core/model-registry-loader.d.ts.map +1 -1
  157. package/dist/core/model-registry-loader.js +2 -1
  158. package/dist/core/model-registry-loader.js.map +1 -1
  159. package/dist/core/model-registry-schemas.d.ts +17 -0
  160. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  161. package/dist/core/model-registry-schemas.js +2 -0
  162. package/dist/core/model-registry-schemas.js.map +1 -1
  163. package/dist/core/model-registry-types.d.ts +10 -1
  164. package/dist/core/model-registry-types.d.ts.map +1 -1
  165. package/dist/core/model-registry-types.js.map +1 -1
  166. package/dist/core/model-registry.d.ts +26 -36
  167. package/dist/core/model-registry.d.ts.map +1 -1
  168. package/dist/core/model-registry.js +73 -68
  169. package/dist/core/model-registry.js.map +1 -1
  170. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  171. package/dist/core/model-resolver-defaults.js +5 -0
  172. package/dist/core/model-resolver-defaults.js.map +1 -1
  173. package/dist/core/model-runtime.d.ts +52 -0
  174. package/dist/core/model-runtime.d.ts.map +1 -0
  175. package/dist/core/model-runtime.js +120 -0
  176. package/dist/core/model-runtime.js.map +1 -0
  177. package/dist/core/oauth-provider-bridge.d.ts +3 -1
  178. package/dist/core/oauth-provider-bridge.d.ts.map +1 -1
  179. package/dist/core/oauth-provider-bridge.js +6 -4
  180. package/dist/core/oauth-provider-bridge.js.map +1 -1
  181. package/dist/core/package-manager-resolver.js +22 -11
  182. package/dist/core/package-manager-resolver.js.map +1 -1
  183. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  184. package/dist/core/package-manager-resource-collector.js +8 -2
  185. package/dist/core/package-manager-resource-collector.js.map +1 -1
  186. package/dist/core/package-manager-resource-patterns.d.ts +1 -0
  187. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  188. package/dist/core/package-manager-resource-patterns.js +15 -0
  189. package/dist/core/package-manager-resource-patterns.js.map +1 -1
  190. package/dist/core/package-manager-source.d.ts.map +1 -1
  191. package/dist/core/package-manager-source.js +15 -8
  192. package/dist/core/package-manager-source.js.map +1 -1
  193. package/dist/core/package-manager-types.d.ts +1 -0
  194. package/dist/core/package-manager-types.d.ts.map +1 -1
  195. package/dist/core/package-manager-types.js.map +1 -1
  196. package/dist/core/prompt-templates.d.ts +1 -0
  197. package/dist/core/prompt-templates.d.ts.map +1 -1
  198. package/dist/core/prompt-templates.js +6 -4
  199. package/dist/core/prompt-templates.js.map +1 -1
  200. package/dist/core/provider-display-names.d.ts.map +1 -1
  201. package/dist/core/provider-display-names.js +4 -0
  202. package/dist/core/provider-display-names.js.map +1 -1
  203. package/dist/core/remote-catalog-provider.d.ts +1 -1
  204. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  205. package/dist/core/remote-catalog-provider.js +25 -6
  206. package/dist/core/remote-catalog-provider.js.map +1 -1
  207. package/dist/core/resource-loader-core.d.ts.map +1 -1
  208. package/dist/core/resource-loader-core.js.map +1 -1
  209. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  210. package/dist/core/resource-loader-extensions.js +5 -2
  211. package/dist/core/resource-loader-extensions.js.map +1 -1
  212. package/dist/core/resource-loader-helpers.d.ts.map +1 -1
  213. package/dist/core/resource-loader-helpers.js +1 -0
  214. package/dist/core/resource-loader-helpers.js.map +1 -1
  215. package/dist/core/resource-loader-internals.d.ts +2 -2
  216. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  217. package/dist/core/resource-loader-internals.js.map +1 -1
  218. package/dist/core/resource-loader-types.d.ts +3 -3
  219. package/dist/core/resource-loader-types.d.ts.map +1 -1
  220. package/dist/core/resource-loader-types.js.map +1 -1
  221. package/dist/core/sdk-exports.d.ts +1 -1
  222. package/dist/core/sdk-exports.d.ts.map +1 -1
  223. package/dist/core/sdk-exports.js.map +1 -1
  224. package/dist/core/sdk-types.d.ts +3 -0
  225. package/dist/core/sdk-types.d.ts.map +1 -1
  226. package/dist/core/sdk-types.js.map +1 -1
  227. package/dist/core/sdk.d.ts.map +1 -1
  228. package/dist/core/sdk.js +10 -3
  229. package/dist/core/sdk.js.map +1 -1
  230. package/dist/core/session-manager-core.d.ts +2 -1
  231. package/dist/core/session-manager-core.d.ts.map +1 -1
  232. package/dist/core/session-manager-core.js +9 -6
  233. package/dist/core/session-manager-core.js.map +1 -1
  234. package/dist/core/session-manager-entries.d.ts +2 -2
  235. package/dist/core/session-manager-entries.d.ts.map +1 -1
  236. package/dist/core/session-manager-entries.js +2 -1
  237. package/dist/core/session-manager-entries.js.map +1 -1
  238. package/dist/core/session-manager-history.d.ts +5 -0
  239. package/dist/core/session-manager-history.d.ts.map +1 -1
  240. package/dist/core/session-manager-history.js +33 -0
  241. package/dist/core/session-manager-history.js.map +1 -1
  242. package/dist/core/session-manager-types.d.ts +4 -2
  243. package/dist/core/session-manager-types.d.ts.map +1 -1
  244. package/dist/core/session-manager-types.js.map +1 -1
  245. package/dist/core/session-manager-validation.d.ts.map +1 -1
  246. package/dist/core/session-manager-validation.js +3 -16
  247. package/dist/core/session-manager-validation.js.map +1 -1
  248. package/dist/core/session-manager.d.ts +1 -1
  249. package/dist/core/session-manager.d.ts.map +1 -1
  250. package/dist/core/session-manager.js +1 -1
  251. package/dist/core/session-manager.js.map +1 -1
  252. package/dist/core/settings-manager-basic-accessors.d.ts +7 -0
  253. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  254. package/dist/core/settings-manager-basic-accessors.js +35 -0
  255. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  256. package/dist/core/settings-manager-resource-accessors.d.ts +3 -0
  257. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  258. package/dist/core/settings-manager-resource-accessors.js +16 -0
  259. package/dist/core/settings-manager-resource-accessors.js.map +1 -1
  260. package/dist/core/settings-types.d.ts +8 -2
  261. package/dist/core/settings-types.d.ts.map +1 -1
  262. package/dist/core/settings-types.js.map +1 -1
  263. package/dist/core/slash-commands.d.ts +1 -0
  264. package/dist/core/slash-commands.d.ts.map +1 -1
  265. package/dist/core/slash-commands.js +1 -1
  266. package/dist/core/slash-commands.js.map +1 -1
  267. package/dist/core/summarization-retry.d.ts +11 -0
  268. package/dist/core/summarization-retry.d.ts.map +1 -0
  269. package/dist/core/summarization-retry.js +21 -0
  270. package/dist/core/summarization-retry.js.map +1 -0
  271. package/dist/core/tools/read.js +1 -1
  272. package/dist/core/tools/read.js.map +1 -1
  273. package/dist/core/usage-totals.d.ts +18 -0
  274. package/dist/core/usage-totals.d.ts.map +1 -0
  275. package/dist/core/usage-totals.js +40 -0
  276. package/dist/core/usage-totals.js.map +1 -0
  277. package/dist/extensions/index.d.ts +3 -0
  278. package/dist/extensions/index.d.ts.map +1 -0
  279. package/dist/extensions/index.js +5 -0
  280. package/dist/extensions/index.js.map +1 -0
  281. package/dist/extensions/llama/client.d.ts +61 -0
  282. package/dist/extensions/llama/client.d.ts.map +1 -0
  283. package/dist/extensions/llama/client.js +300 -0
  284. package/dist/extensions/llama/client.js.map +1 -0
  285. package/dist/extensions/llama/huggingface-ui.d.ts +33 -0
  286. package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -0
  287. package/dist/extensions/llama/huggingface-ui.js +166 -0
  288. package/dist/extensions/llama/huggingface-ui.js.map +1 -0
  289. package/dist/extensions/llama/huggingface.d.ts +23 -0
  290. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  291. package/dist/extensions/llama/huggingface.js +139 -0
  292. package/dist/extensions/llama/huggingface.js.map +1 -0
  293. package/dist/extensions/llama/index.d.ts +3 -0
  294. package/dist/extensions/llama/index.d.ts.map +1 -0
  295. package/dist/extensions/llama/index.js +208 -0
  296. package/dist/extensions/llama/index.js.map +1 -0
  297. package/dist/extensions/llama/provider.d.ts +11 -0
  298. package/dist/extensions/llama/provider.d.ts.map +1 -0
  299. package/dist/extensions/llama/provider.js +93 -0
  300. package/dist/extensions/llama/provider.js.map +1 -0
  301. package/dist/extensions/llama/ui.d.ts +42 -0
  302. package/dist/extensions/llama/ui.d.ts.map +1 -0
  303. package/dist/extensions/llama/ui.js +237 -0
  304. package/dist/extensions/llama/ui.js.map +1 -0
  305. package/dist/index-extensions.d.ts +1 -1
  306. package/dist/index-extensions.d.ts.map +1 -1
  307. package/dist/index-extensions.js.map +1 -1
  308. package/dist/index.d.ts +5 -4
  309. package/dist/index.d.ts.map +1 -1
  310. package/dist/index.js +4 -3
  311. package/dist/index.js.map +1 -1
  312. package/dist/main-first-time-setup.d.ts +6 -0
  313. package/dist/main-first-time-setup.d.ts.map +1 -0
  314. package/dist/main-first-time-setup.js +10 -0
  315. package/dist/main-first-time-setup.js.map +1 -0
  316. package/dist/main-types.d.ts +2 -2
  317. package/dist/main-types.d.ts.map +1 -1
  318. package/dist/main-types.js.map +1 -1
  319. package/dist/main.d.ts.map +1 -1
  320. package/dist/main.js +19 -7
  321. package/dist/main.js.map +1 -1
  322. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  323. package/dist/modes/interactive/chat-input-actions.js +14 -2
  324. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  325. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  326. package/dist/modes/interactive/components/chat-session-host-events.js +16 -0
  327. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  328. package/dist/modes/interactive/components/config-selector-list.d.ts +6 -6
  329. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  330. package/dist/modes/interactive/components/config-selector-list.js +64 -125
  331. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  332. package/dist/modes/interactive/components/config-selector-project-scope.d.ts +4 -0
  333. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/config-selector-project-scope.js +61 -0
  335. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -0
  336. package/dist/modes/interactive/components/config-selector.d.ts +8 -5
  337. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/config-selector.js +46 -22
  339. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  340. package/dist/modes/interactive/components/custom-entry.d.ts +16 -0
  341. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/custom-entry.js +45 -0
  343. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  344. package/dist/modes/interactive/components/first-time-setup.d.ts +24 -0
  345. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/first-time-setup.js +69 -0
  347. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  348. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  349. package/dist/modes/interactive/components/footer.js +48 -26
  350. package/dist/modes/interactive/components/footer.js.map +1 -1
  351. package/dist/modes/interactive/components/host-input-form.d.ts +2 -0
  352. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/host-input-form.js +6 -3
  354. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  355. package/dist/modes/interactive/components/idle-status.d.ts +8 -0
  356. package/dist/modes/interactive/components/idle-status.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/idle-status.js +13 -0
  358. package/dist/modes/interactive/components/idle-status.js.map +1 -0
  359. package/dist/modes/interactive/components/index.d.ts +3 -0
  360. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/index.js +3 -0
  362. package/dist/modes/interactive/components/index.js.map +1 -1
  363. package/dist/modes/interactive/components/login-dialog.d.ts +5 -5
  364. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  365. package/dist/modes/interactive/components/login-dialog.js +14 -6
  366. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  367. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  368. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  369. package/dist/modes/interactive/components/oauth-selector.js +10 -6
  370. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  371. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  372. package/dist/modes/interactive/components/settings-selector-handlers.js +6 -0
  373. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  374. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  375. package/dist/modes/interactive/components/settings-selector-items.js +14 -0
  376. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  377. package/dist/modes/interactive/components/settings-selector-types.d.ts +4 -0
  378. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  379. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  380. package/dist/modes/interactive/interactive-agent-events.js +27 -0
  381. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  382. package/dist/modes/interactive/interactive-auth-login.js +17 -8
  383. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  384. package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
  385. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  386. package/dist/modes/interactive/interactive-auth-routing.js +88 -40
  387. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  388. package/dist/modes/interactive/interactive-autocomplete.js +6 -0
  389. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  390. package/dist/modes/interactive/interactive-extension-runtime.js +4 -0
  391. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  392. package/dist/modes/interactive/interactive-global-clear.d.ts +10 -2
  393. package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -1
  394. package/dist/modes/interactive/interactive-global-clear.js +3 -1
  395. package/dist/modes/interactive/interactive-global-clear.js.map +1 -1
  396. package/dist/modes/interactive/interactive-input-handling.js +6 -4
  397. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  398. package/dist/modes/interactive/interactive-mode-helpers.d.ts +2 -1
  399. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  400. package/dist/modes/interactive/interactive-mode-helpers.js +6 -10
  401. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  402. package/dist/modes/interactive/interactive-mode-surface.d.ts +11 -2
  403. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  404. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  405. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +13 -0
  406. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -0
  407. package/dist/modes/interactive/interactive-model-catalog-startup.js +24 -0
  408. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -0
  409. package/dist/modes/interactive/interactive-model-routing.js +4 -3
  410. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  411. package/dist/modes/interactive/interactive-queueing.js +3 -2
  412. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  413. package/dist/modes/interactive/interactive-render-chat.js +69 -12
  414. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  415. package/dist/modes/interactive/interactive-resource-rendering.js +1 -1
  416. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  417. package/dist/modes/interactive/interactive-selectors.js +10 -0
  418. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  419. package/dist/modes/interactive/interactive-session-routing.js +3 -0
  420. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  421. package/dist/modes/interactive/interactive-slash-commands.js +14 -0
  422. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  423. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  424. package/dist/modes/interactive/interactive-startup.js +4 -7
  425. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  426. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts +8 -0
  427. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -0
  428. package/dist/modes/interactive/interactive-summarization-retry-events.js +40 -0
  429. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -0
  430. package/dist/modes/interactive/login-provider-options.d.ts +21 -0
  431. package/dist/modes/interactive/login-provider-options.d.ts.map +1 -0
  432. package/dist/modes/interactive/login-provider-options.js +51 -0
  433. package/dist/modes/interactive/login-provider-options.js.map +1 -0
  434. package/dist/modes/interactive-engine/engine-input-form.d.ts +1 -1
  435. package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -1
  436. package/dist/modes/interactive-engine/engine-input-form.js +10 -2
  437. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  438. package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -1
  439. package/dist/modes/interactive-engine/input-form-host.js +7 -2
  440. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  441. package/dist/modes/interactive-engine/isolated-runtime.js +1 -1
  442. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  443. package/dist/modes/interactive-engine/protocol.d.ts +5 -0
  444. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  445. package/dist/modes/interactive-engine/protocol.js +9 -1
  446. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  447. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +2 -0
  448. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  449. package/dist/modes/interactive-engine/remote-model-catalog.js +33 -0
  450. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  451. package/dist/modes/rpc/rpc-client-api.d.ts +4 -1
  452. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  453. package/dist/modes/rpc/rpc-client-api.js +18 -0
  454. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  455. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  456. package/dist/modes/rpc/rpc-client.js +1 -0
  457. package/dist/modes/rpc/rpc-client.js.map +1 -1
  458. package/dist/modes/rpc/rpc-command-handler.d.ts +5 -1
  459. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  460. package/dist/modes/rpc/rpc-command-handler.js +67 -2
  461. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  462. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  463. package/dist/modes/rpc/rpc-input-scheduler.js +1 -0
  464. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  465. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  466. package/dist/modes/rpc/rpc-mode.js +1 -0
  467. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  468. package/dist/modes/rpc/rpc-types.d.ts +42 -0
  469. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  470. package/dist/modes/rpc/rpc-types.js.map +1 -1
  471. package/dist/package-manager-cli.d.ts +3 -3
  472. package/dist/package-manager-cli.d.ts.map +1 -1
  473. package/dist/package-manager-cli.js +55 -51
  474. package/dist/package-manager-cli.js.map +1 -1
  475. package/dist/self-update-plan.d.ts +12 -0
  476. package/dist/self-update-plan.d.ts.map +1 -0
  477. package/dist/self-update-plan.js +42 -0
  478. package/dist/self-update-plan.js.map +1 -0
  479. package/dist/utils/clipboard-native.d.ts +1 -0
  480. package/dist/utils/clipboard-native.d.ts.map +1 -1
  481. package/dist/utils/clipboard-native.js.map +1 -1
  482. package/dist/utils/clipboard.d.ts +3 -0
  483. package/dist/utils/clipboard.d.ts.map +1 -1
  484. package/dist/utils/clipboard.js +10 -0
  485. package/dist/utils/clipboard.js.map +1 -1
  486. package/dist/utils/version-check.d.ts +1 -0
  487. package/dist/utils/version-check.d.ts.map +1 -1
  488. package/dist/utils/version-check.js +3 -3
  489. package/dist/utils/version-check.js.map +1 -1
  490. package/docs/docs.json +2 -1
  491. package/docs/extensions.md +59 -7
  492. package/docs/json.md +7 -1
  493. package/docs/keybindings.md +3 -0
  494. package/docs/llama-cpp.md +70 -0
  495. package/docs/models.md +8 -3
  496. package/docs/packages.md +4 -2
  497. package/docs/prompt-templates.md +1 -0
  498. package/docs/providers.md +41 -3
  499. package/docs/rpc.md +49 -0
  500. package/docs/sdk.md +21 -0
  501. package/docs/settings.md +19 -3
  502. package/docs/tui.md +2 -2
  503. package/docs/workflows.md +6 -6
  504. package/examples/extensions/README.md +1 -1
  505. package/examples/extensions/sandbox/package-lock.json +3 -3
  506. package/npm-shrinkwrap.json +36 -36
  507. package/package.json +5 -5
@@ -573,15 +573,17 @@ The `systemPromptOptions` field gives extensions access to the same structured d
573
573
 
574
574
  Inside `before_agent_start`, `event.systemPrompt` and `ctx.getSystemPrompt()` both reflect the chained system prompt as of the current handler. Later `before_agent_start` handlers can still modify it again.
575
575
 
576
- #### agent_start / agent_end
576
+ #### agent_start / agent_end / agent_settled
577
577
 
578
- Fired once per user prompt.
578
+ `agent_start` begins a low-level run. `agent_end` fires when that run ends, but Atomic may still retry, compact and retry, or deliver queued follow-ups. Use `agent_settled` when a status integration needs to know Atomic has no automatic continuation left.
579
579
 
580
580
  ```typescript
581
581
  pi.on("agent_start", async (_event, ctx) => {});
582
-
583
582
  pi.on("agent_end", async (event, ctx) => {
584
- // event.messages - messages from this prompt
583
+ // event.messages - messages from this low-level run
584
+ });
585
+ pi.on("agent_settled", async (_event, ctx) => {
586
+ // ctx.isIdle() is true unless another extension started a run.
585
587
  });
586
588
  ```
587
589
 
@@ -671,6 +673,17 @@ pi.on("context", async (event, ctx) => {
671
673
  });
672
674
  ```
673
675
 
676
+ #### before_provider_headers
677
+
678
+ Fires after outgoing HTTP headers are assembled. Mutate `event.headers` to add, override, or remove headers. The event also identifies the provider and model.
679
+
680
+ ```typescript
681
+ pi.on("before_provider_headers", (event, ctx) => {
682
+ event.headers["x-session-id"] = ctx.sessionManager.getSessionId();
683
+ delete event.headers["x-remove-me"];
684
+ });
685
+ ```
686
+
674
687
  #### before_provider_request
675
688
 
676
689
  Fired after the provider-specific payload is built, right before the request is sent. Handlers run in extension load order. Returning `undefined` keeps the payload unchanged. Returning any other value replaces the payload for later handlers and for the actual request.
@@ -1471,6 +1484,21 @@ pi.on("session_start", async (_event, ctx) => {
1471
1484
  });
1472
1485
  ```
1473
1486
 
1487
+ Appending emits `entry_appended` with the durable entry. This lets extensions react to session entries without polling.
1488
+
1489
+ ### pi.registerEntryRenderer(customType, renderer)
1490
+
1491
+ Register a TUI renderer for durable custom entries created by `pi.appendEntry()`. These entries render in the transcript but do not enter model context.
1492
+
1493
+ ```typescript
1494
+ import { Text } from "@earendil-works/pi-tui";
1495
+
1496
+ pi.registerEntryRenderer("status-card", (entry, { expanded }, theme) =>
1497
+ new Text(theme.fg("accent", `${expanded ? "Details" : "Status"}: ${JSON.stringify(entry.data)}`), 0, 0)
1498
+ );
1499
+ ```
1500
+
1501
+
1474
1502
  ### pi.setSessionName(name)
1475
1503
 
1476
1504
  Set the session display name (shown in session selector instead of first message).
@@ -1677,6 +1705,10 @@ pi.events.on("my:event", (data) => { ... });
1677
1705
  pi.events.emit("my:event", { ... });
1678
1706
  ```
1679
1707
 
1708
+ ### Native providers
1709
+
1710
+ In addition to `registerProvider(name, config)`, extensions can register a complete native `Provider` from `@earendil-works/pi-ai` with `pi.registerProvider(provider)`. Use the native overload for provider-owned authentication, catalog refresh, and transport behavior; use the config overload for ordinary proxies and custom endpoints.
1711
+
1680
1712
  ### pi.registerProvider(name, config)
1681
1713
 
1682
1714
  Register or override a model provider dynamically. Useful for proxies, custom endpoints, or team-wide model configurations.
@@ -1732,6 +1764,25 @@ pi.registerProvider("corporate-ai", {
1732
1764
  }
1733
1765
  }
1734
1766
  });
1767
+
1768
+ // Register provider-owned API-key setup for /login
1769
+ pi.registerProvider("local-server", {
1770
+ name: "Local Server",
1771
+ auth: {
1772
+ apiKey: {
1773
+ name: "Local server connection",
1774
+ async login({ signal, prompt }) {
1775
+ const baseUrl = await prompt({
1776
+ type: "text",
1777
+ message: "Server URL",
1778
+ placeholder: "http://localhost:8080"
1779
+ });
1780
+ if (signal.aborted) throw new Error("Login cancelled");
1781
+ return { type: "api_key", env: { LOCAL_SERVER_URL: baseUrl } };
1782
+ }
1783
+ }
1784
+ }
1785
+ });
1735
1786
  ```
1736
1787
 
1737
1788
  **Config options:**
@@ -1743,6 +1794,7 @@ pi.registerProvider("corporate-ai", {
1743
1794
  - `authHeader` - If true, adds `Authorization: Bearer` header automatically.
1744
1795
  - `models` - Array of model definitions. If provided, replaces all existing models for this provider. Model definitions can set `baseUrl` to override the provider endpoint for that model.
1745
1796
  - `oauth` - OAuth provider config for `/login` support. When provided, the provider appears in the login menu.
1797
+ - `auth.apiKey` - Provider-owned API-key or connection setup for `/login`. Its `name` appears in the provider list and `login({ signal, prompt })` returns the credential Atomic persists. Extension providers registered only in the isolated interactive engine child are synchronized into the host's `/login` list; their login callback and credential-dependent model refresh still execute in the child, while prompts are rendered by the terminal host.
1746
1798
  - `streamSimple` - Custom streaming implementation for non-standard APIs.
1747
1799
 
1748
1800
  See [Custom providers](/custom-provider) for advanced topics: custom streaming APIs, OAuth details, model definition reference.
@@ -2538,8 +2590,8 @@ class VimEditor extends CustomEditor {
2538
2590
 
2539
2591
  export default function (pi: ExtensionAPI) {
2540
2592
  pi.on("session_start", (_event, ctx) => {
2541
- ctx.ui.setEditorComponent((_tui, theme, keybindings) =>
2542
- new VimEditor(theme, keybindings)
2593
+ ctx.ui.setEditorComponent((tui, theme, keybindings) =>
2594
+ new VimEditor(tui, theme, keybindings)
2543
2595
  );
2544
2596
  });
2545
2597
  }
@@ -2548,7 +2600,7 @@ export default function (pi: ExtensionAPI) {
2548
2600
  **Key points:**
2549
2601
  - Extend `CustomEditor` (not base `Editor`) to get app keybindings (escape to abort, ctrl+d, model switching)
2550
2602
  - Call `super.handleInput(data)` for keys you don't handle
2551
- - Factory receives `theme` and `keybindings` from the app
2603
+ - Factory receives `tui`, `theme`, and `keybindings` from the app
2552
2604
  - Use `ctx.ui.getEditorComponent()` before `setEditorComponent()` to wrap the previously configured custom editor
2553
2605
  - Pass `undefined` to restore default: `ctx.ui.setEditorComponent(undefined)`
2554
2606
 
package/docs/json.md CHANGED
@@ -21,13 +21,19 @@ type AgentSessionEvent =
21
21
  | { type: "context_window_changed"; contextWindow: number }
22
22
  | { type: "compaction_end"; reason: "manual" | "threshold" | "overflow"; result: VerbatimCompactionResult | undefined; aborted: boolean; willRetry: boolean; unresolvedOverflow?: boolean; errorMessage?: string }
23
23
  | { type: "auto_retry_start"; attempt: number; maxAttempts: number; delayMs: number; errorMessage: string }
24
- | { type: "auto_retry_end"; success: boolean; attempt: number; finalError?: string };
24
+ | { type: "auto_retry_end"; success: boolean; attempt: number; finalError?: string }
25
+ | { type: "summarization_retry_scheduled"; attempt: number; maxAttempts: number; delayMs: number; errorMessage: string }
26
+ | { type: "summarization_retry_attempt_start"; source: "branchSummary" }
27
+ | { type: "summarization_retry_attempt_start"; source: "compaction"; reason: "manual" | "threshold" | "overflow" }
28
+ | { type: "summarization_retry_finished" };
25
29
  ```
26
30
 
27
31
  `queue_update` emits the full pending steering and follow-up queues whenever they change. `session_info_changed`, `model_changed`, `thinking_level_changed`, and `context_window_changed` report interactive session metadata changes. `context_window_changed` carries the active token budget after `AgentSession.setContextWindow()` or branch navigation replay applies a branch-scoped `context_window_change`; branch replay does not add another session journal entry or write settings. `compaction_start` and `compaction_end` cover manual and automatic verbatim line compaction: the model emits deleted ranges and Atomic mechanically reconstructs retained text.
28
32
 
29
33
  For automatic compaction, `compaction_end.willRetry === true` means the agent is retrying the interrupted turn after compaction; `AgentSession.prompt()` waits for that continuation before resolving. This includes overflow recovery and live threshold compaction for retry-worthy interrupted work such as output-token truncation or OpenAI Responses output-budget underflow errors. Generic provider `invalid_request_body` failures still compact with `willRetry: false` when threshold compaction is warranted. If the same-model compact-and-retry overflow path is exhausted, `compaction_end` includes `unresolvedOverflow: true` plus an `errorMessage` so orchestration layers can fall back to another model instead of treating the prompt as successful.
30
34
 
35
+ Compaction planning and branch summaries reuse the configured retry policy for transient provider failures. Their `summarization_retry_*` events expose scheduling, each restarted request (including whether it belongs to branch summarization or a compaction reason), and retry-loop completion to JSON, RPC, SDK, and interactive consumers.
36
+
31
37
  Base events come from `AgentEvent` in `@earendil-works/pi-agent-core` (installed as an Atomic dependency):
32
38
 
33
39
  ```typescript
@@ -88,6 +88,9 @@ Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `ctrl+1
88
88
  | `app.suspend` | `ctrl+z` (none on Windows) | Suspend to background |
89
89
  | `app.editor.external` | `ctrl+g` | Open in external editor (`$VISUAL` or `$EDITOR`) |
90
90
  | `app.clipboard.pasteImage` | `ctrl+v` (`alt+v` on Windows) | Paste image from clipboard |
91
+ | `app.message.copy` | `ctrl+x` | Copy the last assistant message (or the selected message in `/tree`) |
92
+
93
+ When `app.clipboard.pasteImage` finds text rather than an image, Atomic inserts that clipboard text into the editor instead of reporting an image-paste failure.
91
94
 
92
95
  ### Sessions
93
96
 
@@ -0,0 +1,70 @@
1
+ # llama.cpp
2
+
3
+ Atomic supports the [llama.cpp](https://github.com/ggml-org/llama.cpp) router server. The router discovers multiple GGUF models and loads or unloads them on demand.
4
+
5
+ Use a current llama.cpp build with router support. Follow its [build instructions](https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md) or install a [prebuilt release](https://github.com/ggml-org/llama.cpp/releases).
6
+
7
+ ## Start the router
8
+
9
+ Start `llama-server` without `--model` or `-m`; those options start single-model mode instead of router mode.
10
+
11
+ ```bash
12
+ llama-server \
13
+ --models-dir ~/models \
14
+ --no-models-autoload \
15
+ --jinja \
16
+ --host 127.0.0.1 \
17
+ --port 8080 \
18
+ -ngl 999 \
19
+ -c 32768
20
+ ```
21
+
22
+ - `--models-dir` discovers local GGUF files.
23
+ - `--no-models-autoload` leaves loading under explicit `/llama` control.
24
+ - `--jinja` enables compatible chat templates and tool calling.
25
+ - `-ngl 999` offloads as many layers as possible to the GPU.
26
+ - `-c 32768` sets each model's context window. Omit it to use the model's native context, which may require substantially more memory.
27
+
28
+ Single-file models can sit directly in the model directory. Put multimodal and multi-shard models in separate subdirectories with their projection or shard files. Restart the router after manually adding files. Per-model context sizes and other options can be set with [model presets](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md#model-presets).
29
+
30
+ ## Configure Atomic
31
+
32
+ Run:
33
+
34
+ ```text
35
+ /login llama.cpp
36
+ ```
37
+
38
+ Enter the router URL and optional API key. The default URL is `http://127.0.0.1:8080`. The same values can be supplied without `/login`:
39
+
40
+ ```bash
41
+ export LLAMA_BASE_URL=http://127.0.0.1:8080
42
+ export LLAMA_API_KEY=optional-secret
43
+ atomic
44
+ ```
45
+
46
+ If the server requires a key, start `llama-server` with the matching `--api-key`. Keep `--host 127.0.0.1` for local-only access.
47
+
48
+ ## Manage models
49
+
50
+ Run `/llama` in interactive mode:
51
+
52
+ - Select an unloaded model to load it, or a loaded model to unload it.
53
+ - Select **Download model…**, search Hugging Face, then choose a repository and quantization. Exact `owner/repository[:quant]` values also work.
54
+ - Press Escape during a load or download to confirm cancellation.
55
+
56
+ Hugging Face search uses `HF_TOKEN` when set, then checks `$HF_TOKEN_PATH`, `$HF_HOME/token`, `$XDG_CACHE_HOME/huggingface/token`, and `~/.cache/huggingface/token`. Unauthenticated search has lower rate limits. Atomic warns before gated downloads and links to the access page. Because llama.cpp performs the download, its process must also have `HF_TOKEN` for gated repositories.
57
+
58
+ Atomic asks before unloading other models, never silently unloads models, and never deletes model files. `/llama` always displays the router's current state because other clients may share it. Only loaded models appear in `/model`; load one first, then select it there. If the router disconnects, choose **Retry** to reconnect and refresh state without replaying the interrupted operation.
59
+
60
+ ## Troubleshooting
61
+
62
+ ```bash
63
+ curl http://127.0.0.1:8080/health
64
+ curl http://127.0.0.1:8080/models
65
+ ```
66
+
67
+ - **No models in `/llama`:** Check `--models-dir`, the directory layout, and restart the router.
68
+ - **Model missing from `/model`:** Load it with `/llama` first.
69
+ - **Load fails or uses too much memory:** Lower `-c` or unload another model.
70
+ - **Server is not in router mode:** Start it without `--model`, `-m`, or `-hf`.
package/docs/models.md CHANGED
@@ -136,18 +136,22 @@ The `baseUrl` is required when adding custom models to the `google-generative-ai
136
136
 
137
137
  Set `api` at provider level (default for all models) or model level (override per model).
138
138
 
139
+ These four values are the generic custom-provider APIs supported by `models.json`. Atomic's installed native provider runtime also implements provider-owned APIs including `mistral-conversations`, `azure-openai-responses`, `openai-codex-responses`, `bedrock-converse-stream`, `google-vertex`, and `pi-messages`; those native APIs are not implied to be stable generic custom-provider contracts.
140
+
139
141
  ## Provider Configuration
140
142
 
141
143
  | Field | Description |
142
144
  | ---------------- | ---------------------------------------------------------------- |
143
- | `baseUrl` | API endpoint URL |
144
- | `api` | API type (see above) |
145
- | `apiKey` | API key (see value resolution below) |
145
+ | `baseUrl` | API endpoint or gateway URL |
146
+ | `api` | Generic custom-provider API type (see above) |
147
+ | `apiKey` | Optional API key (see value resolution below); omit when auth comes from `/login`, `auth.json`, or `--api-key` |
148
+ | `oauth` | Dynamic OAuth provider type. Currently `"radius"`; requires the gateway `baseUrl` |
146
149
  | `headers` | Custom headers (see value resolution below) |
147
150
  | `authHeader` | Set `true` to add `Authorization: Bearer <apiKey>` automatically |
148
151
  | `models` | Array of model configurations |
149
152
  | `modelOverrides` | Per-model overrides for matching built-in or extension-registered models on this provider |
150
153
 
154
+ For a custom Radius gateway, set `"oauth": "radius"` and its `baseUrl`. Atomic uses Radius OAuth credentials and the gateway's dynamic `pi-messages` catalog.
151
155
  ### Value Resolution
152
156
 
153
157
  The `apiKey` and `headers` fields support three formats:
@@ -208,6 +212,7 @@ If your command is slow, expensive, rate-limited, or should keep using a previou
208
212
  | `maxTokens` | No | `16384` | Maximum output tokens |
209
213
  | `cost` | No | all zeros | Complete base rates per million tokens plus optional request-wide `tiers` (see below) |
210
214
  | `compat` | No | provider `compat` | Provider compatibility overrides. Merged with provider-level `compat` when both are set. |
215
+ | `deferredToolsMode` | No | omitted | Deferred tool-loading protocol; set to `"kimi"` for Kimi-compatible deferred tools |
211
216
 
212
217
  Current behavior:
213
218
  - `/model`, `--list-models`, and the interactive footer display entries by model `id`.
package/docs/packages.md CHANGED
@@ -47,6 +47,8 @@ atomic update --extension npm:@foo/bar
47
47
 
48
48
  These commands manage Atomic packages and `atomic update` can update the Atomic CLI installation. To uninstall Atomic itself, see [Quickstart](/quickstart#uninstall).
49
49
 
50
+ Self-update resolves an exact advertised package/version target and installs that pinned spec, so the update cannot drift to a newer registry release during installation. Any release note supplied by the update service is shown before installation. Atomic only updates installations it can verify are writable and managed by the detected global package manager; otherwise it prints a manual command. On Windows, loaded native dependencies are temporarily quarantined during replacement and stale quarantine directories are cleaned on later update attempts.
51
+
50
52
  By default, `install` and `remove` write to user settings (`~/.atomic/agent/settings.json`). Use `-l` to write to project settings (`.atomic/settings.json`; legacy `.pi/settings.json` is also read) instead. Project settings can be shared with your team, and Atomic installs any missing packages automatically on startup after the project is trusted.
51
53
 
52
54
  To try a package without installing it, use `--extension` or `-e`. This installs to a temporary directory for the current run only:
@@ -237,11 +239,11 @@ Filter what a package loads using the object form in settings:
237
239
 
238
240
  ## Enable and Disable Resources
239
241
 
240
- Use `atomic config` to enable or disable extensions, skills, prompt templates, and themes from installed packages and local directories. Works for both global (`~/.atomic/agent`) and project (`.atomic/`) scopes. Workflow package filters can be configured in settings with `workflows` patterns.
242
+ Use `atomic config` to enable or disable extensions, skills, prompt templates, and themes. It starts in global settings (`~/.atomic/agent/settings.json`); press Tab to switch global/project scope. Use `atomic config -l` to start in project overrides (`.atomic/settings.json`) with inherited global resources dimmed. Workflow package filters can be configured with `workflows` patterns.
241
243
 
242
244
  ## Scope and Deduplication
243
245
 
244
- Packages can appear in both global and project settings. If the same package appears in both, the project entry wins. Identity is determined by:
246
+ Packages can appear in both global and project settings. The project entry normally wins. A project entry with `autoload: false` instead acts as a delta over the global entry: it starts with no newly auto-discovered resources while explicit include/exclude patterns adjust the inherited package resources. Identity is determined by:
245
247
 
246
248
  - npm: package name
247
249
  - git: repository URL without ref
@@ -69,6 +69,7 @@ Templates support positional arguments, defaults, and simple slicing:
69
69
  - `$1`, `$2`, ... positional args
70
70
  - `$@` or `$ARGUMENTS` for all args joined
71
71
  - `${1:-default}` uses arg 1 when present/non-empty, otherwise `default`
72
+ - `${@:-default}` or `${ARGUMENTS:-default}` uses all arguments when present/non-empty, otherwise `default`
72
73
  - `${@:N}` for args from the Nth position (1-indexed)
73
74
  - `${@:N:L}` for `L` args starting at N
74
75
 
package/docs/providers.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Providers
2
2
 
3
- Atomic supports subscription-based providers via OAuth and API key providers via environment variables or auth file. Atomic knows the available models for each provider, and the list is updated with every Atomic release.
3
+ Atomic supports subscription-based providers via OAuth and API-key providers via environment variables or the auth file. Built-in catalogs ship with Atomic; configured and native providers may refresh newer catalogs independently and cache them in `~/.atomic/agent/models-store.json` for offline use.
4
4
 
5
5
  ## Table of Contents
6
6
 
@@ -8,8 +8,9 @@ Atomic supports subscription-based providers via OAuth and API key providers via
8
8
  - [API Keys](#api-keys)
9
9
  - [Auth File](#auth-file)
10
10
  - [Cloud Providers](#cloud-providers)
11
- - [Custom Providers](#custom-providers)
11
+ - [llama.cpp](#llamacpp)
12
12
  - [Resolution Order](#resolution-order)
13
+ - [Custom Providers](#custom-providers)
13
14
 
14
15
  ## Subscriptions
15
16
 
@@ -18,8 +19,9 @@ Use `/login` in interactive mode, then select a provider:
18
19
  - ChatGPT Plus/Pro (Codex)
19
20
  - Claude Pro/Max
20
21
  - GitHub Copilot
22
+ - xAI (Grok/X subscription)
23
+ - Radius
21
24
  - Cursor (experimental)
22
-
23
25
  Use `/logout` to clear credentials. Logout immediately invalidates authentication in the active interactive engine and removes the selected provider from both `~/.atomic/agent/auth.json` and any effective legacy `~/.pi/agent/auth.json`, so the provider remains logged out after restart. Environment variables, command-line credentials, and `models.json` configuration cannot be cleared by Atomic; when one of those sources still authenticates the provider, the logout status names the remaining source. Stored tokens auto-refresh when expired.
24
26
 
25
27
  ### OpenAI Codex
@@ -48,6 +50,14 @@ Anthropic subscription auth is active for Claude Pro/Max accounts. Third-party h
48
50
  - **Gemini models** (`github-copilot/gemini-3.1-pro-preview`, `github-copilot/gemini-3.5-flash`, …) are served through Copilot's CAPI gateway, which re-translates the OpenAI request into Google's GenAI format and enforces Gemini's stricter `FunctionDeclaration` schema (it rejects a tool-parameter `anyOf`/`oneOf` whose branch is a complex object, returning `400 invalid request body`). Atomic automatically sanitizes outbound tool/function JSON Schemas for these models into the supported subset — resolving object/array-bearing unions to their most expressive branch, converting `const`/literal unions to `enum`, collapsing nullable unions to `nullable`, and dropping non-portable keywords such as `additionalProperties`, `patternProperties`, `format`, and numeric/length bounds. Gemini also serializes array/object tool-call **arguments** as flattened indexed keys (`keywords[0]`, `keywords[1]`, …); Atomic reconstructs these back into proper arrays/objects before validation so tool calls (including `structured_output` and MCP tools) don't fail and loop. Both transforms are transparent and scoped to GitHub Copilot Gemini models only; no configuration is required and other providers/models are unaffected.
49
51
  - **Claude/Anthropic Messages models** served through GitHub Copilot use Copilot SSE transport. If Copilot cleanly ends a `/v1/messages` stream after Anthropic terminal stop-reason evidence but omits the required `message_stop` event, Atomic adds that one terminal event before provider parsing so the turn can finish normally, including when the final complete SSE frame reaches EOF without a trailing blank-line separator. The repair covers public Copilot hosts and GHE tenant routes such as `copilot-api.<enterprise>.ghe.com`, and is otherwise limited to closed, non-error Copilot Anthropic event streams; malformed, truncated, already well-formed, non-Copilot/look-alike host, non-SSE, Gemini, and OpenAI-style streams continue through the normal parser and retry behavior.
50
52
 
53
+ ### xAI (Grok/X subscription)
54
+
55
+ Run `/login xai`, then select **Use a subscription**. `XAI_API_KEY` remains available through **Use an API key**.
56
+
57
+ ### Radius
58
+
59
+ 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`.
60
+
51
61
  ### Cursor (experimental)
52
62
 
53
63
  Cursor support is bundled as the first-party `@bastani/cursor` extension and appears in `/login` as **Cursor (Experimental)**. It uses Cursor's browser PKCE flow and stores OAuth credentials in `~/.atomic/agent/auth.json`; do not paste Cursor tokens into environment variables, command-line arguments, or custom proxies. Atomic identifies as a Cursor CLI-compatible client against private endpoints; maintainers and users should explicitly accept that this may conflict with Cursor's terms of service, stop working without notice, or affect the Cursor account used to authenticate.
@@ -100,6 +110,7 @@ After a successful API-key or OAuth login, Atomic refreshes provider credentials
100
110
  | ZAI Coding Plan (China) | `ZAI_CODING_CN_API_KEY` | `zai-coding-cn` |
101
111
  | OpenCode Zen | `OPENCODE_API_KEY` | `opencode` |
102
112
  | OpenCode Go | `OPENCODE_API_KEY` | `opencode-go` |
113
+ | Radius | `RADIUS_API_KEY` | `radius` |
103
114
  | Hugging Face | `HF_TOKEN` | `huggingface` |
104
115
  | Fireworks | `FIREWORKS_API_KEY` | `fireworks` |
105
116
  | Together AI | `TOGETHER_API_KEY` | `together` |
@@ -108,6 +119,8 @@ After a successful API-key or OAuth login, Atomic refreshes provider credentials
108
119
  | MiniMax (China) | `MINIMAX_CN_API_KEY` | `minimax-cn` |
109
120
  | Moonshot AI | `MOONSHOT_API_KEY` | `moonshotai` |
110
121
  | Moonshot AI (China) | `MOONSHOT_API_KEY` | `moonshotai-cn` |
122
+ | Qwen Token Plan | `QWEN_TOKEN_PLAN_API_KEY` | `qwen-token-plan` |
123
+ | Qwen Token Plan (China) | `QWEN_TOKEN_PLAN_CN_API_KEY` | `qwen-token-plan-cn` |
111
124
  | Xiaomi MiMo | `XIAOMI_API_KEY` | `xiaomi` |
112
125
  | Xiaomi MiMo Token Plan (China) | `XIAOMI_TOKEN_PLAN_CN_API_KEY` | `xiaomi-token-plan-cn` |
113
126
  | Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` | `xiaomi-token-plan-ams` |
@@ -130,6 +143,8 @@ Store credentials in `~/.atomic/agent/auth.json`:
130
143
  "opencode": { "type": "api_key", "key": "..." },
131
144
  "opencode-go": { "type": "api_key", "key": "..." },
132
145
  "together": { "type": "api_key", "key": "..." },
146
+ "qwen-token-plan": { "type": "api_key", "key": "sk-sp-..." },
147
+ "qwen-token-plan-cn": { "type": "api_key", "key": "sk-sp-..." },
133
148
  "xiaomi": { "type": "api_key", "key": "..." },
134
149
  "xiaomi-token-plan-cn": { "type": "api_key", "key": "..." },
135
150
  "xiaomi-token-plan-ams": { "type": "api_key", "key": "..." },
@@ -139,6 +154,25 @@ Store credentials in `~/.atomic/agent/auth.json`:
139
154
 
140
155
  The file is created with `0600` permissions (user read/write only). Auth file credentials take priority over environment variables.
141
156
 
157
+ API-key credentials may include provider-scoped `env` values. They take precedence over process environment variables while resolving the credential key, provider/model headers, and provider configuration such as Cloudflare account IDs, Azure settings, Vertex project/location, Bedrock settings, cache retention, and `HTTP_PROXY`/`HTTPS_PROXY`:
158
+
159
+ ```json
160
+ {
161
+ "cloudflare-ai-gateway": {
162
+ "type": "api_key",
163
+ "key": "$CLOUDFLARE_API_KEY",
164
+ "env": {
165
+ "CLOUDFLARE_API_KEY": "...",
166
+ "CLOUDFLARE_ACCOUNT_ID": "account-id",
167
+ "CLOUDFLARE_GATEWAY_ID": "gateway-id"
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ Use this when Atomic should use provider settings different from the project shell environment.
174
+
175
+
142
176
  ### Key Resolution
143
177
 
144
178
  The `key` field supports command execution, environment interpolation, and literals:
@@ -275,6 +309,10 @@ export GOOGLE_CLOUD_LOCATION=us-central1
275
309
 
276
310
  Or set `GOOGLE_APPLICATION_CREDENTIALS` to a service account key file.
277
311
 
312
+ ## llama.cpp
313
+
314
+ For router-mode discovery, load/unload management, and Hugging Face downloads with a local llama.cpp server, see [llama.cpp](/llama-cpp). Configure it with `/login llama.cpp` or `LLAMA_BASE_URL` and manage models with `/llama`.
315
+
278
316
  ## Custom Providers
279
317
 
280
318
  **Via models.json:** Add Ollama, LM Studio, vLLM, or any provider that speaks a supported API (OpenAI Completions, OpenAI Responses, Anthropic Messages, Google Generative AI). See [Custom models](/models).
package/docs/rpc.md CHANGED
@@ -401,6 +401,24 @@ Response:
401
401
  }
402
402
  ```
403
403
 
404
+ #### get_available_thinking_levels
405
+
406
+ Return the thinking levels supported by the current model, in cycle order.
407
+
408
+ ```json
409
+ {"type": "get_available_thinking_levels"}
410
+ ```
411
+
412
+ Response:
413
+ ```json
414
+ {
415
+ "type": "response",
416
+ "command": "get_available_thinking_levels",
417
+ "success": true,
418
+ "data": {"levels": ["off", "low", "medium", "high"]}
419
+ }
420
+ ```
421
+
404
422
  ### Queue Modes
405
423
 
406
424
  #### set_steering_mode
@@ -921,6 +939,9 @@ Events are streamed to stdout as JSON lines during agent operation. Events do NO
921
939
  | `compaction_end` | Verbatim line compaction completes |
922
940
  | `auto_retry_start` | Auto-retry begins (after transient error) |
923
941
  | `auto_retry_end` | Auto-retry completes (success or final failure) |
942
+ | `summarization_retry_scheduled` | Retry scheduled for a transient compaction or branch-summary provider error |
943
+ | `summarization_retry_attempt_start` | Retried summarization request starts |
944
+ | `summarization_retry_finished` | Summarization retry loop completes |
924
945
  | `extension_error` | Extension threw an error |
925
946
 
926
947
  ### agent_start
@@ -1157,6 +1178,34 @@ On final failure (max retries exceeded):
1157
1178
  }
1158
1179
  ```
1159
1180
 
1181
+
1182
+ ### summarization_retry_scheduled / summarization_retry_attempt_start / summarization_retry_finished
1183
+
1184
+ Emitted when compaction planning or branch summarization retries after a transient provider error. These events use the same retry settings as automatic assistant-turn retries.
1185
+
1186
+ ```json
1187
+ {
1188
+ "type": "summarization_retry_scheduled",
1189
+ "attempt": 1,
1190
+ "maxAttempts": 3,
1191
+ "delayMs": 2000,
1192
+ "errorMessage": "terminated"
1193
+ }
1194
+ ```
1195
+
1196
+ ```json
1197
+ {
1198
+ "type": "summarization_retry_attempt_start",
1199
+ "source": "compaction",
1200
+ "reason": "threshold"
1201
+ }
1202
+ ```
1203
+
1204
+ For branch summaries, `source` is `"branchSummary"` and no `reason` is present. The loop then emits:
1205
+
1206
+ ```json
1207
+ {"type": "summarization_retry_finished"}
1208
+ ```
1160
1209
  ### extension_error
1161
1210
 
1162
1211
  Emitted when an extension throws an error.
package/docs/sdk.md CHANGED
@@ -37,6 +37,24 @@ session.subscribe((event) => {
37
37
  await session.prompt("What files are in the current directory?");
38
38
  ```
39
39
 
40
+ `ModelRuntime` is the canonical asynchronous provider runtime when an integration wants provider-owned credentials, dynamic catalogs, and native providers in one object:
41
+
42
+ ```typescript
43
+ import { createAgentSession, ModelRuntime, SessionManager } from "@bastani/atomic";
44
+
45
+ const modelRuntime = await ModelRuntime.create();
46
+ const { session } = await createAgentSession({
47
+ sessionManager: SessionManager.inMemory(),
48
+ modelRuntime,
49
+ });
50
+ ```
51
+
52
+ `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.
53
+
54
+ 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`.
55
+
56
+ The package root also exports `buildContextEntries`, `sessionEntryToContextMessages`, and `CompactionEntry` for converting durable session branches into model context. The equivalent active-session operation is `sessionManager.buildContextEntries()`.
57
+
40
58
  ## Installation
41
59
 
42
60
  Install `@bastani/atomic` as a project dependency with npm, pnpm, or Bun:
@@ -351,6 +369,9 @@ session.subscribe((event) => {
351
369
  case "compaction_end":
352
370
  case "auto_retry_start":
353
371
  case "auto_retry_end":
372
+ case "summarization_retry_scheduled":
373
+ case "summarization_retry_attempt_start":
374
+ case "summarization_retry_finished":
354
375
  break;
355
376
  }
356
377
  });
package/docs/settings.md CHANGED
@@ -36,6 +36,7 @@ Settings and trust JSON files may start with a UTF-8 BOM, as commonly written by
36
36
  | `defaultThinkingLevel` | string | - | `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`; the active model must support the selected level |
37
37
  | `hideThinkingBlock` | boolean | `false` | Hide thinking blocks in output |
38
38
  | `thinkingBudgets` | object | - | Custom token budgets per thinking level |
39
+ | `showCacheMissNotices` | boolean | `false` | Show transcript notices for significant prompt-cache misses and their attributed wasted tokens |
39
40
  | `fallbackModels` | string[] | - | Ordered main-chat fallback models, written as `"provider/model"` with optional model-supported reasoning suffixes such as `:high`, `:xhigh`, or `:max` |
40
41
 
41
42
  #### thinkingBudgets
@@ -102,6 +103,8 @@ Use `/fast` in interactive mode to edit these settings. Atomic applies fast mode
102
103
  | `enableInstallTelemetry` | boolean | `true` | Send an anonymous install/update version ping after first install or changelog-detected updates. This does not control update checks |
103
104
  | `firstRunOnboardingStartedVersion` | string | - | Internal first-run onboarding start marker used when no prior Atomic startup state identifies the user as returning |
104
105
  | `onboardedVersion` | string | - | Internal one-time first-run onboarding completion marker. Returning-user detection from prior startup state or displaying the first-run workflow-engine explanation sets it |
106
+ | `enableAnalytics` | boolean | `false` | Opt in to analytics during first-run setup |
107
+ | `trackingId` | string | - | Locally generated analytics identifier when analytics is enabled |
105
108
  | `doubleEscapeAction` | string | `"tree"` | Action for double-escape: `"tree"`, `"fork"`, or `"none"` |
106
109
  | `treeFilterMode` | string | `"default"` | Default filter for `/tree`: `"default"`, `"no-tools"`, `"user-only"`, `"labeled-only"`, `"all"` |
107
110
  | `editorPaddingX` | number | `0` | Horizontal padding for input editor (0-3) |
@@ -116,6 +119,19 @@ Use `/fast` in interactive mode to edit these settings. Atomic applies fast mode
116
119
 
117
120
  Set `ATOMIC_SKIP_VERSION_CHECK=1` to disable the Atomic version update check. Use `--offline` or `ATOMIC_OFFLINE=1` to disable all startup network operations described here, including update checks, package update checks, and install/update telemetry. Legacy `PI_*` aliases are also supported for app-specific environment variables.
118
121
 
122
+
123
+ On a genuine first run, Atomic previews available themes and asks whether to opt into analytics. The choice and locally generated identifier are stored as `enableAnalytics` and `trackingId`; analytics remains off unless explicitly enabled.
124
+
125
+ ### Network proxy
126
+
127
+ | Setting | Type | Default | Description |
128
+ |---------|------|---------|-------------|
129
+ | `httpProxy` | string | - | HTTP proxy URL applied as `HTTP_PROXY` and `HTTPS_PROXY`. Global setting only. |
130
+
131
+ ```json
132
+ { "httpProxy": "http://127.0.0.1:7890" }
133
+ ```
134
+
119
135
  ### Warnings
120
136
 
121
137
  | Setting | Type | Default | Description |
@@ -195,7 +211,7 @@ When a provider requests a retry delay longer than `retry.provider.maxRetryDelay
195
211
 
196
212
  | Setting | Type | Default | Description |
197
213
  |---------|------|---------|-------------|
198
- | `httpIdleTimeoutMs` | number | `600000` | HTTP header/body idle timeout in milliseconds. Must be a non-negative finite number; decimals are rounded down. Set to `0` to disable the idle timeout. |
214
+ | `httpIdleTimeoutMs` | number or string | `600000` | HTTP idle timeout as milliseconds, a duration such as `"30s"`, `"5m"`, or `"1h"`, or `"disabled"`. `0` also disables it. |
199
215
 
200
216
  Atomic applies this timeout to the global HTTP dispatcher used by `fetch` and provider SDK HTTP clients. The default is 600,000 ms (10 minutes), which keeps slow long-context requests working while reclaiming stale idle connections. Atomic does not impose a separate fixed connect-phase timeout; connection failures surface through the provider and agent retry/error paths.
201
217
 
@@ -208,7 +224,7 @@ The `/settings` picker offers these presets:
208
224
  | `5 min` | `300000` |
209
225
  | `10 min` | `600000` |
210
226
  | `30 min` | `1800000` |
211
- | `Disabled` | `0` |
227
+ | `Disabled` | `"disabled"` (or `0`) |
212
228
 
213
229
  ```json
214
230
  {
@@ -223,7 +239,7 @@ The `/settings` picker offers these presets:
223
239
  | `steeringMode` | string | `"one-at-a-time"` | How steering messages are sent: `"all"` or `"one-at-a-time"` |
224
240
  | `followUpMode` | string | `"one-at-a-time"` | How follow-up messages are sent: `"all"` or `"one-at-a-time"` |
225
241
  | `transport` | string | `"auto"` | Preferred transport for providers that support multiple transports: `"sse"`, `"websocket"`, `"websocket-cached"`, or `"auto"` |
226
- | `httpIdleTimeoutMs` | number | `600000` | HTTP header/body idle timeout in milliseconds, also used by providers with explicit stream idle timeouts. Set to `0` to disable. |
242
+ | `httpIdleTimeoutMs` | number or string | `600000` | HTTP idle timeout in milliseconds, a duration string, or `"disabled"`; also used by providers with explicit stream idle timeouts. |
227
243
  | `websocketConnectTimeoutMs` | number | `15000` | WebSocket connect/open handshake timeout in milliseconds for providers that support WebSocket transports. Set to `0` to disable. |
228
244
 
229
245
  ### Terminal & Images
package/docs/tui.md CHANGED
@@ -934,9 +934,9 @@ class VimEditor extends CustomEditor {
934
934
 
935
935
  export default function (pi: ExtensionAPI) {
936
936
  pi.on("session_start", (_event, ctx) => {
937
- // Factory receives theme and keybindings from the app
937
+ // Factory receives the TUI, theme, and keybindings from the app
938
938
  ctx.ui.setEditorComponent((tui, theme, keybindings) =>
939
- new VimEditor(theme, keybindings)
939
+ new VimEditor(tui, theme, keybindings)
940
940
  );
941
941
  });
942
942
  }