@bastani/atomic 0.8.28-alpha.1 → 0.8.28-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 (428) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +120 -118
  3. package/dist/builtin/intercom/package.json +1 -1
  4. package/dist/builtin/mcp/package.json +1 -1
  5. package/dist/builtin/subagents/package.json +1 -1
  6. package/dist/builtin/web-access/package.json +1 -1
  7. package/dist/builtin/workflows/CHANGELOG.md +26 -0
  8. package/dist/builtin/workflows/README.md +1 -1
  9. package/dist/builtin/workflows/builtin/open-claude-design.ts +150 -13
  10. package/dist/builtin/workflows/package.json +1 -1
  11. package/dist/builtin/workflows/src/authoring.d.ts +5 -2
  12. package/dist/builtin/workflows/src/extension/dispatcher.ts +2 -0
  13. package/dist/builtin/workflows/src/extension/index.ts +8 -0
  14. package/dist/builtin/workflows/src/extension/render-result.ts +5 -2
  15. package/dist/builtin/workflows/src/extension/workflow-schema.ts +18 -0
  16. package/dist/builtin/workflows/src/runs/background/status.ts +4 -0
  17. package/dist/builtin/workflows/src/runs/foreground/executor.ts +1251 -110
  18. package/dist/builtin/workflows/src/shared/authoring-contract.d.ts +34 -10
  19. package/dist/builtin/workflows/src/shared/expanded-workflow-graph.ts +10 -2
  20. package/dist/builtin/workflows/src/shared/persistence-restore.ts +28 -9
  21. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +9 -3
  22. package/dist/builtin/workflows/src/shared/store-types.ts +10 -3
  23. package/dist/builtin/workflows/src/shared/store.ts +29 -7
  24. package/dist/builtin/workflows/src/shared/types.ts +12 -10
  25. package/dist/builtin/workflows/src/tui/chat-surface.ts +32 -33
  26. package/dist/builtin/workflows/src/tui/run-detail.ts +23 -4
  27. package/dist/builtin/workflows/src/tui/status-helpers.ts +4 -0
  28. package/dist/builtin/workflows/src/tui/status-list.ts +47 -3
  29. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +1 -1
  30. package/dist/builtin/workflows/src/tui/widget.ts +12 -3
  31. package/dist/builtin/workflows/src/workflows/define-workflow.ts +3 -3
  32. package/dist/cli/args.d.ts +4 -0
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +35 -0
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/project-trust.d.ts +10 -0
  37. package/dist/cli/project-trust.d.ts.map +1 -0
  38. package/dist/cli/project-trust.js +36 -0
  39. package/dist/cli/project-trust.js.map +1 -0
  40. package/dist/cli/startup-ui.d.ts +7 -0
  41. package/dist/cli/startup-ui.d.ts.map +1 -0
  42. package/dist/cli/startup-ui.js +57 -0
  43. package/dist/cli/startup-ui.js.map +1 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +24 -3
  46. package/dist/config.js.map +1 -1
  47. package/dist/core/agent-session-runtime.d.ts +3 -1
  48. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  49. package/dist/core/agent-session-runtime.js +1 -0
  50. package/dist/core/agent-session-runtime.js.map +1 -1
  51. package/dist/core/agent-session-services.d.ts +3 -1
  52. package/dist/core/agent-session-services.d.ts.map +1 -1
  53. package/dist/core/agent-session-services.js +3 -2
  54. package/dist/core/agent-session-services.js.map +1 -1
  55. package/dist/core/agent-session.d.ts +9 -1
  56. package/dist/core/agent-session.d.ts.map +1 -1
  57. package/dist/core/agent-session.js +70 -21
  58. package/dist/core/agent-session.js.map +1 -1
  59. package/dist/core/auth-storage.d.ts.map +1 -1
  60. package/dist/core/auth-storage.js +4 -3
  61. package/dist/core/auth-storage.js.map +1 -1
  62. package/dist/core/compaction/branch-summarization.d.ts +3 -1
  63. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  64. package/dist/core/compaction/branch-summarization.js +9 -3
  65. package/dist/core/compaction/branch-summarization.js.map +1 -1
  66. package/dist/core/compaction/compaction.d.ts.map +1 -1
  67. package/dist/core/compaction/compaction.js +18 -24
  68. package/dist/core/compaction/compaction.js.map +1 -1
  69. package/dist/core/compaction/utils.d.ts +1 -1
  70. package/dist/core/compaction/utils.d.ts.map +1 -1
  71. package/dist/core/compaction/utils.js +1 -1
  72. package/dist/core/compaction/utils.js.map +1 -1
  73. package/dist/core/experimental.d.ts +2 -0
  74. package/dist/core/experimental.d.ts.map +1 -0
  75. package/dist/core/experimental.js +5 -0
  76. package/dist/core/experimental.js.map +1 -0
  77. package/dist/core/export-html/template.js +19 -6
  78. package/dist/core/extensions/index.d.ts +1 -1
  79. package/dist/core/extensions/index.d.ts.map +1 -1
  80. package/dist/core/extensions/index.js.map +1 -1
  81. package/dist/core/extensions/loader.d.ts +1 -1
  82. package/dist/core/extensions/loader.d.ts.map +1 -1
  83. package/dist/core/extensions/loader.js +6 -4
  84. package/dist/core/extensions/loader.js.map +1 -1
  85. package/dist/core/extensions/runner.d.ts +11 -4
  86. package/dist/core/extensions/runner.d.ts.map +1 -1
  87. package/dist/core/extensions/runner.js +53 -3
  88. package/dist/core/extensions/runner.js.map +1 -1
  89. package/dist/core/extensions/types.d.ts +34 -4
  90. package/dist/core/extensions/types.d.ts.map +1 -1
  91. package/dist/core/extensions/types.js.map +1 -1
  92. package/dist/core/footer-data-provider.d.ts +2 -0
  93. package/dist/core/footer-data-provider.d.ts.map +1 -1
  94. package/dist/core/footer-data-provider.js +27 -1
  95. package/dist/core/footer-data-provider.js.map +1 -1
  96. package/dist/core/index.d.ts +2 -0
  97. package/dist/core/index.d.ts.map +1 -1
  98. package/dist/core/index.js +2 -0
  99. package/dist/core/index.js.map +1 -1
  100. package/dist/core/model-registry.d.ts.map +1 -1
  101. package/dist/core/model-registry.js +64 -7
  102. package/dist/core/model-registry.js.map +1 -1
  103. package/dist/core/model-resolver.d.ts.map +1 -1
  104. package/dist/core/model-resolver.js +1 -0
  105. package/dist/core/model-resolver.js.map +1 -1
  106. package/dist/core/output-guard.d.ts +1 -0
  107. package/dist/core/output-guard.d.ts.map +1 -1
  108. package/dist/core/output-guard.js +52 -22
  109. package/dist/core/output-guard.js.map +1 -1
  110. package/dist/core/package-manager.d.ts +1 -0
  111. package/dist/core/package-manager.d.ts.map +1 -1
  112. package/dist/core/package-manager.js +20 -8
  113. package/dist/core/package-manager.js.map +1 -1
  114. package/dist/core/project-trust.d.ts +15 -0
  115. package/dist/core/project-trust.d.ts.map +1 -0
  116. package/dist/core/project-trust.js +58 -0
  117. package/dist/core/project-trust.js.map +1 -0
  118. package/dist/core/prompt-templates.d.ts +5 -4
  119. package/dist/core/prompt-templates.d.ts.map +1 -1
  120. package/dist/core/prompt-templates.js +30 -29
  121. package/dist/core/prompt-templates.js.map +1 -1
  122. package/dist/core/provider-attribution.d.ts +4 -0
  123. package/dist/core/provider-attribution.d.ts.map +1 -0
  124. package/dist/core/provider-attribution.js +73 -0
  125. package/dist/core/provider-attribution.js.map +1 -0
  126. package/dist/core/provider-display-names.d.ts.map +1 -1
  127. package/dist/core/provider-display-names.js +3 -0
  128. package/dist/core/provider-display-names.js.map +1 -1
  129. package/dist/core/resolve-config-value.d.ts +9 -1
  130. package/dist/core/resolve-config-value.d.ts.map +1 -1
  131. package/dist/core/resolve-config-value.js +134 -11
  132. package/dist/core/resolve-config-value.js.map +1 -1
  133. package/dist/core/resource-loader.d.ts +12 -2
  134. package/dist/core/resource-loader.d.ts.map +1 -1
  135. package/dist/core/resource-loader.js +108 -18
  136. package/dist/core/resource-loader.js.map +1 -1
  137. package/dist/core/sdk.d.ts +4 -2
  138. package/dist/core/sdk.d.ts.map +1 -1
  139. package/dist/core/sdk.js +13 -42
  140. package/dist/core/sdk.js.map +1 -1
  141. package/dist/core/session-manager.d.ts +6 -7
  142. package/dist/core/session-manager.d.ts.map +1 -1
  143. package/dist/core/session-manager.js +99 -35
  144. package/dist/core/session-manager.js.map +1 -1
  145. package/dist/core/settings-manager.d.ts +15 -2
  146. package/dist/core/settings-manager.d.ts.map +1 -1
  147. package/dist/core/settings-manager.js +69 -10
  148. package/dist/core/settings-manager.js.map +1 -1
  149. package/dist/core/slash-commands.d.ts.map +1 -1
  150. package/dist/core/slash-commands.js +1 -0
  151. package/dist/core/slash-commands.js.map +1 -1
  152. package/dist/core/system-prompt.d.ts.map +1 -1
  153. package/dist/core/system-prompt.js +0 -3
  154. package/dist/core/system-prompt.js.map +1 -1
  155. package/dist/core/tools/ask-user-question/state/inline-input.d.ts +28 -0
  156. package/dist/core/tools/ask-user-question/state/inline-input.d.ts.map +1 -0
  157. package/dist/core/tools/ask-user-question/state/inline-input.js +56 -0
  158. package/dist/core/tools/ask-user-question/state/inline-input.js.map +1 -0
  159. package/dist/core/tools/ask-user-question/state/key-router.d.ts.map +1 -1
  160. package/dist/core/tools/ask-user-question/state/key-router.js +30 -4
  161. package/dist/core/tools/ask-user-question/state/key-router.js.map +1 -1
  162. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  163. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +9 -8
  164. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  165. package/dist/core/tools/ask-user-question/state/row-intent.d.ts +3 -2
  166. package/dist/core/tools/ask-user-question/state/row-intent.d.ts.map +1 -1
  167. package/dist/core/tools/ask-user-question/state/row-intent.js +1 -1
  168. package/dist/core/tools/ask-user-question/state/row-intent.js.map +1 -1
  169. package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts +2 -0
  170. package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts.map +1 -1
  171. package/dist/core/tools/ask-user-question/state/selectors/contract.js.map +1 -1
  172. package/dist/core/tools/ask-user-question/state/selectors/projections.d.ts.map +1 -1
  173. package/dist/core/tools/ask-user-question/state/selectors/projections.js +2 -0
  174. package/dist/core/tools/ask-user-question/state/selectors/projections.js.map +1 -1
  175. package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
  176. package/dist/core/tools/ask-user-question/state/state-reducer.js +36 -24
  177. package/dist/core/tools/ask-user-question/state/state-reducer.js.map +1 -1
  178. package/dist/core/tools/ask-user-question/state/state.d.ts +8 -0
  179. package/dist/core/tools/ask-user-question/state/state.d.ts.map +1 -1
  180. package/dist/core/tools/ask-user-question/state/state.js.map +1 -1
  181. package/dist/core/tools/ask-user-question/tool/format-answer.d.ts +6 -0
  182. package/dist/core/tools/ask-user-question/tool/format-answer.d.ts.map +1 -1
  183. package/dist/core/tools/ask-user-question/tool/format-answer.js +19 -1
  184. package/dist/core/tools/ask-user-question/tool/format-answer.js.map +1 -1
  185. package/dist/core/tools/ask-user-question/tool/response-envelope.d.ts +3 -2
  186. package/dist/core/tools/ask-user-question/tool/response-envelope.d.ts.map +1 -1
  187. package/dist/core/tools/ask-user-question/tool/response-envelope.js +15 -3
  188. package/dist/core/tools/ask-user-question/tool/response-envelope.js.map +1 -1
  189. package/dist/core/tools/ask-user-question/tool/types.d.ts +2 -1
  190. package/dist/core/tools/ask-user-question/tool/types.d.ts.map +1 -1
  191. package/dist/core/tools/ask-user-question/tool/types.js.map +1 -1
  192. package/dist/core/tools/ask-user-question/view/components/chat-row-view.d.ts +5 -2
  193. package/dist/core/tools/ask-user-question/view/components/chat-row-view.d.ts.map +1 -1
  194. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js +2 -0
  195. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js.map +1 -1
  196. package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts +1 -0
  197. package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
  198. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +2 -1
  199. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
  200. package/dist/core/tools/ask-user-question/view/props-adapter.d.ts +3 -3
  201. package/dist/core/tools/ask-user-question/view/props-adapter.d.ts.map +1 -1
  202. package/dist/core/tools/ask-user-question/view/props-adapter.js +11 -4
  203. package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
  204. package/dist/core/tools/bash-policy.d.ts +62 -0
  205. package/dist/core/tools/bash-policy.d.ts.map +1 -0
  206. package/dist/core/tools/bash-policy.js +1069 -0
  207. package/dist/core/tools/bash-policy.js.map +1 -0
  208. package/dist/core/tools/bash.d.ts +5 -0
  209. package/dist/core/tools/bash.d.ts.map +1 -1
  210. package/dist/core/tools/bash.js +9 -1
  211. package/dist/core/tools/bash.js.map +1 -1
  212. package/dist/core/tools/edit.d.ts.map +1 -1
  213. package/dist/core/tools/edit.js +7 -10
  214. package/dist/core/tools/edit.js.map +1 -1
  215. package/dist/core/tools/find.d.ts.map +1 -1
  216. package/dist/core/tools/find.js +1 -1
  217. package/dist/core/tools/find.js.map +1 -1
  218. package/dist/core/tools/grep.d.ts.map +1 -1
  219. package/dist/core/tools/grep.js +1 -1
  220. package/dist/core/tools/grep.js.map +1 -1
  221. package/dist/core/tools/index.d.ts +1 -0
  222. package/dist/core/tools/index.d.ts.map +1 -1
  223. package/dist/core/tools/index.js +1 -0
  224. package/dist/core/tools/index.js.map +1 -1
  225. package/dist/core/tools/ls.d.ts.map +1 -1
  226. package/dist/core/tools/ls.js +1 -1
  227. package/dist/core/tools/ls.js.map +1 -1
  228. package/dist/core/tools/oversized-tool-result.d.ts +53 -0
  229. package/dist/core/tools/oversized-tool-result.d.ts.map +1 -0
  230. package/dist/core/tools/oversized-tool-result.js +206 -0
  231. package/dist/core/tools/oversized-tool-result.js.map +1 -0
  232. package/dist/core/tools/read.d.ts +12 -0
  233. package/dist/core/tools/read.d.ts.map +1 -1
  234. package/dist/core/tools/read.js +99 -34
  235. package/dist/core/tools/read.js.map +1 -1
  236. package/dist/core/tools/render-utils.d.ts +6 -0
  237. package/dist/core/tools/render-utils.d.ts.map +1 -1
  238. package/dist/core/tools/render-utils.js +17 -1
  239. package/dist/core/tools/render-utils.js.map +1 -1
  240. package/dist/core/tools/tool-definition-wrapper.d.ts +6 -0
  241. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  242. package/dist/core/tools/tool-definition-wrapper.js +2 -0
  243. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  244. package/dist/core/tools/tool-limits.d.ts +25 -0
  245. package/dist/core/tools/tool-limits.d.ts.map +1 -0
  246. package/dist/core/tools/tool-limits.js +25 -0
  247. package/dist/core/tools/tool-limits.js.map +1 -0
  248. package/dist/core/tools/write.d.ts.map +1 -1
  249. package/dist/core/tools/write.js +1 -1
  250. package/dist/core/tools/write.js.map +1 -1
  251. package/dist/core/trust-manager.d.ts +31 -0
  252. package/dist/core/trust-manager.d.ts.map +1 -0
  253. package/dist/core/trust-manager.js +196 -0
  254. package/dist/core/trust-manager.js.map +1 -0
  255. package/dist/index.d.ts +11 -6
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +6 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/main.d.ts.map +1 -1
  260. package/dist/main.js +142 -30
  261. package/dist/main.js.map +1 -1
  262. package/dist/migrations.d.ts +3 -1
  263. package/dist/migrations.d.ts.map +1 -1
  264. package/dist/migrations.js +325 -7
  265. package/dist/migrations.js.map +1 -1
  266. package/dist/modes/index.d.ts +1 -1
  267. package/dist/modes/index.d.ts.map +1 -1
  268. package/dist/modes/index.js.map +1 -1
  269. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  270. package/dist/modes/interactive/components/bash-execution.js +2 -2
  271. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  272. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  273. package/dist/modes/interactive/components/footer.js +6 -0
  274. package/dist/modes/interactive/components/footer.js.map +1 -1
  275. package/dist/modes/interactive/components/index.d.ts +1 -0
  276. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  277. package/dist/modes/interactive/components/index.js +1 -0
  278. package/dist/modes/interactive/components/index.js.map +1 -1
  279. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  280. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  281. package/dist/modes/interactive/components/login-dialog.js +9 -16
  282. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  283. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  284. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  285. package/dist/modes/interactive/components/settings-selector.js +20 -0
  286. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  287. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  288. package/dist/modes/interactive/components/tool-execution.js +22 -0
  289. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  290. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  291. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  292. package/dist/modes/interactive/components/trust-selector.js +85 -0
  293. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  294. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  295. package/dist/modes/interactive/components/user-message.js +1 -1
  296. package/dist/modes/interactive/components/user-message.js.map +1 -1
  297. package/dist/modes/interactive/interactive-mode.d.ts +9 -0
  298. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  299. package/dist/modes/interactive/interactive-mode.js +130 -9
  300. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  301. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  302. package/dist/modes/interactive/theme/theme.js +10 -0
  303. package/dist/modes/interactive/theme/theme.js.map +1 -1
  304. package/dist/modes/print-mode.d.ts.map +1 -1
  305. package/dist/modes/print-mode.js +1 -0
  306. package/dist/modes/print-mode.js.map +1 -1
  307. package/dist/modes/rpc/rpc-client.d.ts +3 -0
  308. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  309. package/dist/modes/rpc/rpc-client.js +50 -6
  310. package/dist/modes/rpc/rpc-client.js.map +1 -1
  311. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  312. package/dist/modes/rpc/rpc-mode.js +23 -4
  313. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  314. package/dist/modes/rpc/rpc-types.d.ts +1 -0
  315. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  316. package/dist/modes/rpc/rpc-types.js.map +1 -1
  317. package/dist/package-manager-cli.d.ts +6 -2
  318. package/dist/package-manager-cli.d.ts.map +1 -1
  319. package/dist/package-manager-cli.js +104 -10
  320. package/dist/package-manager-cli.js.map +1 -1
  321. package/dist/utils/changelog.d.ts +1 -0
  322. package/dist/utils/changelog.d.ts.map +1 -1
  323. package/dist/utils/changelog.js +72 -0
  324. package/dist/utils/changelog.js.map +1 -1
  325. package/dist/utils/deprecation.d.ts +4 -0
  326. package/dist/utils/deprecation.d.ts.map +1 -0
  327. package/dist/utils/deprecation.js +13 -0
  328. package/dist/utils/deprecation.js.map +1 -0
  329. package/dist/utils/git.d.ts.map +1 -1
  330. package/dist/utils/git.js +54 -22
  331. package/dist/utils/git.js.map +1 -1
  332. package/dist/utils/json.d.ts +3 -0
  333. package/dist/utils/json.d.ts.map +1 -0
  334. package/dist/utils/json.js +7 -0
  335. package/dist/utils/json.js.map +1 -0
  336. package/dist/utils/open-browser.d.ts +9 -0
  337. package/dist/utils/open-browser.d.ts.map +1 -0
  338. package/dist/utils/open-browser.js +22 -0
  339. package/dist/utils/open-browser.js.map +1 -0
  340. package/docs/containerization.md +111 -0
  341. package/docs/custom-provider.md +9 -9
  342. package/docs/development.md +1 -1
  343. package/docs/docs.json +2 -0
  344. package/docs/extensions.md +40 -4
  345. package/docs/index.md +2 -0
  346. package/docs/models.md +10 -10
  347. package/docs/packages.md +1 -1
  348. package/docs/prompt-templates.md +9 -2
  349. package/docs/providers.md +18 -5
  350. package/docs/quickstart.md +1 -0
  351. package/docs/rpc.md +3 -2
  352. package/docs/sdk.md +47 -0
  353. package/docs/security.md +58 -0
  354. package/docs/session-format.md +2 -2
  355. package/docs/sessions.md +8 -0
  356. package/docs/settings.md +21 -4
  357. package/docs/skills.md +1 -1
  358. package/docs/terminal-setup.md +44 -2
  359. package/docs/themes.md +1 -1
  360. package/docs/tmux.md +4 -2
  361. package/docs/tui.md +14 -5
  362. package/docs/usage.md +17 -3
  363. package/docs/workflows.md +127 -15
  364. package/examples/README.md +1 -1
  365. package/examples/extensions/README.md +8 -5
  366. package/examples/extensions/bash-spawn-hook.ts +1 -1
  367. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  368. package/examples/extensions/claude-rules.ts +1 -1
  369. package/examples/extensions/commands.ts +1 -1
  370. package/examples/extensions/custom-header.ts +1 -1
  371. package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
  372. package/examples/extensions/custom-provider-anthropic/package-lock.json +4 -4
  373. package/examples/extensions/custom-provider-anthropic/package.json +6 -6
  374. package/examples/extensions/custom-provider-gitlab-duo/index.ts +55 -4
  375. package/examples/extensions/custom-provider-gitlab-duo/package.json +3 -3
  376. package/examples/extensions/doom-overlay/README.md +1 -1
  377. package/examples/extensions/doom-overlay/index.ts +2 -2
  378. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  379. package/examples/extensions/gondolin/index.ts +523 -0
  380. package/examples/extensions/gondolin/package-lock.json +185 -0
  381. package/examples/extensions/gondolin/package.json +19 -0
  382. package/examples/extensions/handoff.ts +1 -1
  383. package/examples/extensions/hidden-thinking-label.ts +1 -1
  384. package/examples/extensions/inline-bash.ts +2 -2
  385. package/examples/extensions/input-transform-streaming.ts +39 -0
  386. package/examples/extensions/input-transform.ts +3 -3
  387. package/examples/extensions/interactive-shell.ts +2 -2
  388. package/examples/extensions/mac-system-theme.ts +2 -2
  389. package/examples/extensions/minimal-mode.ts +1 -1
  390. package/examples/extensions/modal-editor.ts +1 -1
  391. package/examples/extensions/model-status.ts +1 -1
  392. package/examples/extensions/overlay-qa-tests.ts +198 -179
  393. package/examples/extensions/overlay-test.ts +1 -1
  394. package/examples/extensions/pirate.ts +1 -1
  395. package/examples/extensions/preset.ts +14 -12
  396. package/examples/extensions/project-trust.ts +64 -0
  397. package/examples/extensions/prompt-customizer.ts +1 -1
  398. package/examples/extensions/qna.ts +1 -1
  399. package/examples/extensions/question.ts +1 -1
  400. package/examples/extensions/questionnaire.ts +1 -1
  401. package/examples/extensions/rainbow-editor.ts +1 -1
  402. package/examples/extensions/sandbox/index.ts +16 -14
  403. package/examples/extensions/sandbox/package-lock.json +90 -90
  404. package/examples/extensions/sandbox/package.json +17 -17
  405. package/examples/extensions/snake.ts +1 -1
  406. package/examples/extensions/space-invaders.ts +1 -1
  407. package/examples/extensions/ssh.ts +2 -2
  408. package/examples/extensions/subagent/README.md +13 -13
  409. package/examples/extensions/subagent/agents.ts +4 -2
  410. package/examples/extensions/subagent/index.ts +6 -6
  411. package/examples/extensions/summarize.ts +1 -1
  412. package/examples/extensions/tic-tac-toe.ts +1 -1
  413. package/examples/extensions/titlebar-spinner.ts +1 -1
  414. package/examples/extensions/todo.ts +1 -1
  415. package/examples/extensions/tool-override.ts +1 -1
  416. package/examples/extensions/tools.ts +6 -1
  417. package/examples/extensions/with-deps/package-lock.json +4 -4
  418. package/examples/extensions/with-deps/package.json +7 -7
  419. package/examples/extensions/working-indicator.ts +4 -4
  420. package/examples/extensions/working-message-test.ts +1 -1
  421. package/examples/sdk/01-minimal.ts +1 -1
  422. package/examples/sdk/03-custom-prompt.ts +1 -1
  423. package/examples/sdk/04-skills.ts +1 -1
  424. package/examples/sdk/06-extensions.ts +2 -2
  425. package/examples/sdk/08-prompt-templates.ts +1 -1
  426. package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
  427. package/examples/sdk/README.md +2 -2
  428. package/package.json +4 -4
@@ -5,6 +5,7 @@
5
5
  import * as fs from "node:fs";
6
6
  import * as os from "node:os";
7
7
  import * as path from "node:path";
8
+ import chalk from "chalk";
8
9
  import { getProviders, } from "@earendil-works/pi-ai";
9
10
  import { CombinedAutocompleteProvider, Container, fuzzyFilter, getCapabilities, hyperlink, Loader, Markdown, matchesKey, ProcessTerminal, Spacer, setKeybindings, Text, TruncatedText, TUI, visibleWidth, } from "@earendil-works/pi-tui";
10
11
  import { spawn, spawnSync } from "child_process";
@@ -23,7 +24,7 @@ import { formatMissingSessionCwdPrompt, MissingSessionCwdError, } from "../../co
23
24
  import { SessionManager, } from "../../core/session-manager.js";
24
25
  import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
25
26
  import { isInstallTelemetryEnabled } from "../../core/telemetry.js";
26
- import { getChangelogPath, getEntriesForVersion, getNewEntries, parseChangelog, } from "../../utils/changelog.js";
27
+ import { getChangelogPath, getEntriesForVersion, getNewEntries, normalizeChangelogLinks, parseChangelog, } from "../../utils/changelog.js";
27
28
  import { copyToClipboard } from "../../utils/clipboard.js";
28
29
  import { combineQueuedMessagesForEditor, openExternalEditorForText, pasteClipboardImageToEditor, } from "./chat-input-actions.js";
29
30
  import { parseGitUrl } from "../../utils/git.js";
@@ -63,6 +64,8 @@ import { SettingsSelectorComponent } from "./components/settings-selector.js";
63
64
  import { SkillInvocationMessageComponent } from "./components/skill-invocation-message.js";
64
65
  import { ToolExecutionComponent } from "./components/tool-execution.js";
65
66
  import { TreeSelectorComponent } from "./components/tree-selector.js";
67
+ import { TrustSelectorComponent } from "./components/trust-selector.js";
68
+ import { hasProjectConfigDir, ProjectTrustStore } from "../../core/trust-manager.js";
66
69
  import { UserMessageComponent } from "./components/user-message.js";
67
70
  import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
68
71
  import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, initTheme, onThemeChange, setRegisteredThemes, setTheme, setThemeInstance, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
@@ -106,6 +109,27 @@ function isUnknownModel(model) {
106
109
  model.id === "unknown" &&
107
110
  model.api === "unknown");
108
111
  }
112
+ function quoteIfNeeded(value) {
113
+ if (value.length > 0 && !/[^a-zA-Z0-9_\-./~:@]/.test(value)) {
114
+ return value;
115
+ }
116
+ return `'${value.replace(/'/g, `'\\''`)}'`;
117
+ }
118
+ export function formatResumeCommand(sessionManager) {
119
+ if (!process.stdout.isTTY)
120
+ return undefined;
121
+ if (!sessionManager.isPersisted())
122
+ return undefined;
123
+ const sessionFile = sessionManager.getSessionFile();
124
+ if (!sessionFile || !fs.existsSync(sessionFile))
125
+ return undefined;
126
+ const args = [APP_NAME];
127
+ if (!sessionManager.usesDefaultSessionDir()) {
128
+ args.push("--session-dir", quoteIfNeeded(sessionManager.getSessionDir()));
129
+ }
130
+ args.push("--session", sessionManager.getSessionId());
131
+ return args.join(" ");
132
+ }
109
133
  function hasDefaultModelProvider(providerId) {
110
134
  return providerId in defaultModelPerProvider;
111
135
  }
@@ -137,6 +161,7 @@ export class InteractiveMode {
137
161
  constructor(runtimeHost, options = {}) {
138
162
  this.autocompleteProviderWrappers = [];
139
163
  this.isInitialized = false;
164
+ this.pendingUserInputs = [];
140
165
  this.loadingAnimation = undefined;
141
166
  this.workingMessage = undefined;
142
167
  this.workingVisible = true;
@@ -200,6 +225,7 @@ export class InteractiveMode {
200
225
  */
201
226
  this.isShuttingDown = false;
202
227
  this.options = options;
228
+ this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd;
203
229
  this.runtimeHost = runtimeHost;
204
230
  this.runtimeHost.setBeforeSessionInvalidate(() => {
205
231
  this.resetExtensionUI();
@@ -639,7 +665,7 @@ export class InteractiveMode {
639
665
  if (currentEntries.length > 0) {
640
666
  this.settingsManager.setLastChangelogVersion(VERSION);
641
667
  this.reportInstallTelemetry(VERSION);
642
- return currentEntries.map((e) => e.content).join("\n\n");
668
+ return currentEntries.map((e) => normalizeChangelogLinks(e.content, e)).join("\n\n");
643
669
  }
644
670
  return undefined;
645
671
  }
@@ -1236,6 +1262,7 @@ export class InteractiveMode {
1236
1262
  const uiContext = this.createExtensionUIContext();
1237
1263
  await this.session.bindExtensions({
1238
1264
  uiContext,
1265
+ mode: "tui",
1239
1266
  commandContextActions: {
1240
1267
  waitForIdle: () => this.session.agent.waitForIdle(),
1241
1268
  newSession: async (options) => {
@@ -1372,12 +1399,14 @@ export class InteractiveMode {
1372
1399
  // Create a context for shortcut handlers
1373
1400
  const createContext = () => ({
1374
1401
  ui: this.createExtensionUIContext(),
1402
+ mode: "tui",
1375
1403
  hasUI: true,
1376
1404
  cwd: this.sessionManager.getCwd(),
1377
1405
  sessionManager: this.sessionManager,
1378
1406
  modelRegistry: this.session.modelRegistry,
1379
1407
  model: this.session.model,
1380
1408
  isIdle: () => !this.session.isStreaming,
1409
+ isProjectTrusted: () => this.session.settingsManager.isProjectTrusted(),
1381
1410
  signal: this.session.agent.signal,
1382
1411
  abort: () => this.session.abort(),
1383
1412
  hasPendingMessages: () => this.session.pendingMessageCount > 0,
@@ -1679,6 +1708,20 @@ export class InteractiveMode {
1679
1708
  }
1680
1709
  this.extensionTerminalInputUnsubscribers.clear();
1681
1710
  }
1711
+ createProjectTrustContext(cwd) {
1712
+ const ui = this.createExtensionUIContext();
1713
+ return {
1714
+ cwd,
1715
+ mode: "tui",
1716
+ hasUI: true,
1717
+ ui: {
1718
+ select: ui.select,
1719
+ confirm: ui.confirm,
1720
+ input: ui.input,
1721
+ notify: ui.notify,
1722
+ },
1723
+ };
1724
+ }
1682
1725
  /**
1683
1726
  * Create the ExtensionUIContext for extensions.
1684
1727
  */
@@ -2233,6 +2276,11 @@ export class InteractiveMode {
2233
2276
  this.editor.setText("");
2234
2277
  return;
2235
2278
  }
2279
+ if (text === "/trust") {
2280
+ this.showTrustSelector();
2281
+ this.editor.setText("");
2282
+ return;
2283
+ }
2236
2284
  if (text === "/login") {
2237
2285
  this.showOAuthSelector("login");
2238
2286
  this.editor.setText("");
@@ -2334,6 +2382,9 @@ export class InteractiveMode {
2334
2382
  if (this.onInputCallback) {
2335
2383
  this.onInputCallback(text);
2336
2384
  }
2385
+ else {
2386
+ this.pendingUserInputs.push(text);
2387
+ }
2337
2388
  this.editor.addToHistory?.(text);
2338
2389
  };
2339
2390
  }
@@ -2863,6 +2914,10 @@ export class InteractiveMode {
2863
2914
  }
2864
2915
  }
2865
2916
  async getUserInput() {
2917
+ const queuedInput = this.pendingUserInputs.shift();
2918
+ if (queuedInput !== undefined) {
2919
+ return queuedInput;
2920
+ }
2866
2921
  return new Promise((resolve) => {
2867
2922
  this.onInputCallback = (text) => {
2868
2923
  this.onInputCallback = undefined;
@@ -2892,16 +2947,28 @@ export class InteractiveMode {
2892
2947
  // Only called when editor is empty (enforced by CustomEditor)
2893
2948
  void this.shutdown();
2894
2949
  }
2895
- async shutdown() {
2950
+ async shutdown(options) {
2896
2951
  if (this.isShuttingDown)
2897
2952
  return;
2898
2953
  this.isShuttingDown = true;
2899
2954
  this.unregisterSignalHandlers();
2955
+ if (options?.fromSignal) {
2956
+ await this.runtimeHost.dispose();
2957
+ // Drain any in-flight Kitty key release events before stopping.
2958
+ // This prevents escape sequences from leaking to the parent shell over slow SSH.
2959
+ await this.ui.terminal.drainInput(1000);
2960
+ this.stop();
2961
+ process.exit(0);
2962
+ }
2900
2963
  // Drain any in-flight Kitty key release events before stopping.
2901
2964
  // This prevents escape sequences from leaking to the parent shell over slow SSH.
2902
2965
  await this.ui.terminal.drainInput(1000);
2903
2966
  this.stop();
2904
2967
  await this.runtimeHost.dispose();
2968
+ const resumeCommand = formatResumeCommand(this.sessionManager);
2969
+ if (resumeCommand) {
2970
+ process.stdout.write(`${chalk.dim("To resume this session:")} ${resumeCommand}\n`);
2971
+ }
2905
2972
  process.exit(0);
2906
2973
  }
2907
2974
  emergencyTerminalExit() {
@@ -2960,11 +3027,8 @@ export class InteractiveMode {
2960
3027
  }
2961
3028
  for (const signal of signals) {
2962
3029
  const handler = () => {
2963
- if (signal === "SIGHUP") {
2964
- this.emergencyTerminalExit();
2965
- }
2966
3030
  killTrackedDetachedChildren();
2967
- void this.shutdown();
3031
+ void this.shutdown({ fromSignal: true });
2968
3032
  };
2969
3033
  process.prependListener(signal, handler);
2970
3034
  this.signalCleanupHandlers.push(() => process.off(signal, handler));
@@ -3438,6 +3502,7 @@ export class InteractiveMode {
3438
3502
  editorPaddingX: this.settingsManager.getEditorPaddingX(),
3439
3503
  autocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),
3440
3504
  quietStartup: this.settingsManager.getQuietStartup(),
3505
+ defaultProjectTrust: this.settingsManager.getDefaultProjectTrust(),
3441
3506
  clearOnShrink: this.settingsManager.getClearOnShrink(),
3442
3507
  showTerminalProgress: this.settingsManager.getShowTerminalProgress(),
3443
3508
  warnings: this.settingsManager.getWarnings(),
@@ -3526,6 +3591,9 @@ export class InteractiveMode {
3526
3591
  onQuietStartupChange: (enabled) => {
3527
3592
  this.settingsManager.setQuietStartup(enabled);
3528
3593
  },
3594
+ onDefaultProjectTrustChange: (defaultProjectTrust) => {
3595
+ this.settingsManager.setDefaultProjectTrust(defaultProjectTrust);
3596
+ },
3529
3597
  onDoubleEscapeActionChange: (action) => {
3530
3598
  this.settingsManager.setDoubleEscapeAction(action);
3531
3599
  },
@@ -3786,6 +3854,51 @@ export class InteractiveMode {
3786
3854
  this.showError(error instanceof Error ? error.message : String(error));
3787
3855
  }
3788
3856
  }
3857
+ maybeSaveImplicitProjectTrustAfterReload() {
3858
+ const cwd = this.sessionManager.getCwd();
3859
+ if (this.autoTrustOnReloadCwd !== cwd) {
3860
+ return false;
3861
+ }
3862
+ if (!this.settingsManager.isProjectTrusted() || !hasProjectConfigDir(cwd)) {
3863
+ return false;
3864
+ }
3865
+ const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);
3866
+ try {
3867
+ if (trustStore.get(cwd) !== null) {
3868
+ this.autoTrustOnReloadCwd = undefined;
3869
+ return false;
3870
+ }
3871
+ trustStore.set(cwd, true);
3872
+ this.autoTrustOnReloadCwd = undefined;
3873
+ return true;
3874
+ }
3875
+ catch (error) {
3876
+ this.showWarning(`Could not save project trust after reload: ${error instanceof Error ? error.message : String(error)}`);
3877
+ return false;
3878
+ }
3879
+ }
3880
+ showTrustSelector() {
3881
+ const cwd = this.sessionManager.getCwd();
3882
+ const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);
3883
+ const savedDecision = trustStore.getEntry(cwd);
3884
+ this.showSelector((done) => {
3885
+ const selector = new TrustSelectorComponent({
3886
+ cwd,
3887
+ savedDecision,
3888
+ projectTrusted: this.settingsManager.isProjectTrusted(),
3889
+ onSelect: (selection) => {
3890
+ trustStore.setMany(selection.updates);
3891
+ done();
3892
+ this.showStatus(`Saved trust decision: ${selection.trusted ? "trusted" : "untrusted"}. Restart ${APP_NAME} for this to take effect.`);
3893
+ },
3894
+ onCancel: () => {
3895
+ done();
3896
+ this.ui.requestRender();
3897
+ },
3898
+ });
3899
+ return { component: selector, focus: selector };
3900
+ });
3901
+ }
3789
3902
  showTreeSelector(initialSelectedId) {
3790
3903
  const tree = this.sessionManager.getTree();
3791
3904
  const realLeafId = this.sessionManager.getLeafId();
@@ -3886,7 +3999,9 @@ export class InteractiveMode {
3886
3999
  }
3887
4000
  showSessionSelector() {
3888
4001
  this.showSelector((done) => {
3889
- const selector = new SessionSelectorComponent((onProgress) => SessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress), SessionManager.listAll, async (sessionPath) => {
4002
+ const selector = new SessionSelectorComponent((onProgress) => SessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress), (onProgress) => this.sessionManager.usesDefaultSessionDir()
4003
+ ? SessionManager.listAll(onProgress)
4004
+ : SessionManager.listAll(this.sessionManager.getSessionDir(), onProgress), async (sessionPath) => {
3890
4005
  done();
3891
4006
  await this.handleResumeSession(sessionPath);
3892
4007
  }, () => {
@@ -3917,6 +4032,7 @@ export class InteractiveMode {
3917
4032
  try {
3918
4033
  const result = await this.runtimeHost.switchSession(sessionPath, {
3919
4034
  withSession: options?.withSession,
4035
+ projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),
3920
4036
  });
3921
4037
  if (result.cancelled) {
3922
4038
  return result;
@@ -3935,6 +4051,7 @@ export class InteractiveMode {
3935
4051
  const result = await this.runtimeHost.switchSession(sessionPath, {
3936
4052
  cwdOverride: selectedCwd,
3937
4053
  withSession: options?.withSession,
4054
+ projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),
3938
4055
  });
3939
4056
  if (result.cancelled) {
3940
4057
  return result;
@@ -4341,10 +4458,14 @@ export class InteractiveMode {
4341
4458
  this.setupExtensionShortcuts(runner);
4342
4459
  this.rebuildChatFromMessages();
4343
4460
  dismissReloadBox(this.editor);
4461
+ const savedImplicitProjectTrust = this.maybeSaveImplicitProjectTrustAfterReload();
4344
4462
  this.showLoadedResources({
4345
4463
  force: false,
4346
4464
  showDiagnosticsWhenQuiet: true,
4347
4465
  });
4466
+ if (savedImplicitProjectTrust) {
4467
+ this.showStatus("Saved project trust for future sessions");
4468
+ }
4348
4469
  const modelsJsonError = this.session.modelRegistry.getError();
4349
4470
  if (modelsJsonError) {
4350
4471
  this.showError(`models.json error: ${modelsJsonError}`);
@@ -4606,7 +4727,7 @@ export class InteractiveMode {
4606
4727
  const changelogMarkdown = allEntries.length > 0
4607
4728
  ? allEntries
4608
4729
  .reverse()
4609
- .map((e) => e.content)
4730
+ .map((e) => normalizeChangelogLinks(e.content, e))
4610
4731
  .join("\n\n")
4611
4732
  : "No changelog entries found.";
4612
4733
  this.chatContainer.addChild(new Spacer(1));