@bastani/atomic 0.9.24 → 0.9.25-alpha.1

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 (416) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/builtin/intercom/index.bundle.mjs +5 -0
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/CHANGELOG.md +11 -0
  5. package/dist/builtin/mcp/index.bundle.mjs +219 -71
  6. package/dist/builtin/mcp/package.json +6 -2
  7. package/dist/builtin/subagents/package.json +3 -3
  8. package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
  9. package/dist/builtin/web-access/index.bundle.mjs +7 -6
  10. package/dist/builtin/web-access/package.json +2 -2
  11. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  12. package/dist/builtin/workflows/package.json +2 -2
  13. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
  14. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +66 -0
  15. package/dist/builtin/workflows/src/extension/index.bundle.mjs +1 -0
  16. package/dist/cli/startup-ui.d.ts +3 -4
  17. package/dist/cli/startup-ui.d.ts.map +1 -1
  18. package/dist/cli/startup-ui.js +3 -4
  19. package/dist/cli/startup-ui.js.map +1 -1
  20. package/dist/config.d.ts +3 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +17 -0
  23. package/dist/config.js.map +1 -1
  24. package/dist/core/agent-session-events.d.ts.map +1 -1
  25. package/dist/core/agent-session-events.js +5 -0
  26. package/dist/core/agent-session-events.js.map +1 -1
  27. package/dist/core/agent-session-export.d.ts.map +1 -1
  28. package/dist/core/agent-session-export.js +3 -0
  29. package/dist/core/agent-session-export.js.map +1 -1
  30. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  31. package/dist/core/agent-session-extension-bindings.js +4 -0
  32. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  33. package/dist/core/agent-session-methods.d.ts +2 -1
  34. package/dist/core/agent-session-methods.d.ts.map +1 -1
  35. package/dist/core/agent-session-methods.js.map +1 -1
  36. package/dist/core/agent-session-nested-tools.d.ts +10 -0
  37. package/dist/core/agent-session-nested-tools.d.ts.map +1 -0
  38. package/dist/core/agent-session-nested-tools.js +76 -0
  39. package/dist/core/agent-session-nested-tools.js.map +1 -0
  40. package/dist/core/agent-session-runtime-auth.js +3 -1
  41. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  42. package/dist/core/agent-session-state.d.ts +2 -0
  43. package/dist/core/agent-session-state.d.ts.map +1 -1
  44. package/dist/core/agent-session-state.js +11 -11
  45. package/dist/core/agent-session-state.js.map +1 -1
  46. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  47. package/dist/core/agent-session-tool-hooks.js +18 -3
  48. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  49. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  50. package/dist/core/agent-session-tool-registry.js +15 -3
  51. package/dist/core/agent-session-tool-registry.js.map +1 -1
  52. package/dist/core/agent-session-types.d.ts +6 -2
  53. package/dist/core/agent-session-types.d.ts.map +1 -1
  54. package/dist/core/agent-session-types.js.map +1 -1
  55. package/dist/core/compaction/utils.d.ts +1 -1
  56. package/dist/core/compaction/utils.d.ts.map +1 -1
  57. package/dist/core/compaction/utils.js +18 -18
  58. package/dist/core/compaction/utils.js.map +1 -1
  59. package/dist/core/execution-model-router.d.ts.map +1 -1
  60. package/dist/core/execution-model-router.js +24 -8
  61. package/dist/core/execution-model-router.js.map +1 -1
  62. package/dist/core/export-html/template.js +12 -0
  63. package/dist/core/extensions/agent-events.d.ts +3 -0
  64. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  65. package/dist/core/extensions/agent-events.js.map +1 -1
  66. package/dist/core/extensions/api-types.d.ts +2 -0
  67. package/dist/core/extensions/api-types.d.ts.map +1 -1
  68. package/dist/core/extensions/api-types.js.map +1 -1
  69. package/dist/core/extensions/context-types.d.ts +9 -0
  70. package/dist/core/extensions/context-types.d.ts.map +1 -1
  71. package/dist/core/extensions/context-types.js.map +1 -1
  72. package/dist/core/extensions/event-results.d.ts +3 -0
  73. package/dist/core/extensions/event-results.d.ts.map +1 -1
  74. package/dist/core/extensions/event-results.js.map +1 -1
  75. package/dist/core/extensions/index.d.ts +2 -0
  76. package/dist/core/extensions/index.d.ts.map +1 -1
  77. package/dist/core/extensions/index.js.map +1 -1
  78. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  79. package/dist/core/extensions/loader-api.js +4 -0
  80. package/dist/core/extensions/loader-api.js.map +1 -1
  81. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  82. package/dist/core/extensions/loader-core.js +3 -5
  83. package/dist/core/extensions/loader-core.js.map +1 -1
  84. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
  85. package/dist/core/extensions/loader-host-modules.js +7 -1
  86. package/dist/core/extensions/loader-host-modules.js.map +1 -1
  87. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  88. package/dist/core/extensions/loader-runtime.js +3 -0
  89. package/dist/core/extensions/loader-runtime.js.map +1 -1
  90. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  91. package/dist/core/extensions/loader-virtual-modules.js +4 -0
  92. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  93. package/dist/core/extensions/provider-types.d.ts +2 -0
  94. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  95. package/dist/core/extensions/provider-types.js.map +1 -1
  96. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  97. package/dist/core/extensions/runner-events.js +16 -1
  98. package/dist/core/extensions/runner-events.js.map +1 -1
  99. package/dist/core/extensions/runner.d.ts +5 -0
  100. package/dist/core/extensions/runner.d.ts.map +1 -1
  101. package/dist/core/extensions/runner.js +34 -0
  102. package/dist/core/extensions/runner.js.map +1 -1
  103. package/dist/core/extensions/runtime-types.d.ts +5 -0
  104. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  105. package/dist/core/extensions/runtime-types.js.map +1 -1
  106. package/dist/core/extensions/tool-events.d.ts +4 -0
  107. package/dist/core/extensions/tool-events.d.ts.map +1 -1
  108. package/dist/core/extensions/tool-events.js.map +1 -1
  109. package/dist/core/extensions/tool-types.d.ts +34 -3
  110. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  111. package/dist/core/extensions/tool-types.js.map +1 -1
  112. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  113. package/dist/core/extensions/wrapper.js +14 -2
  114. package/dist/core/extensions/wrapper.js.map +1 -1
  115. package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
  116. package/dist/core/fast-model-routing-transport.js +2 -1
  117. package/dist/core/fast-model-routing-transport.js.map +1 -1
  118. package/dist/core/fast-model-routing.d.ts +1 -2
  119. package/dist/core/fast-model-routing.d.ts.map +1 -1
  120. package/dist/core/fast-model-routing.js +13 -11
  121. package/dist/core/fast-model-routing.js.map +1 -1
  122. package/dist/core/fast-model-variants.d.ts +4 -1
  123. package/dist/core/fast-model-variants.d.ts.map +1 -1
  124. package/dist/core/fast-model-variants.js +42 -17
  125. package/dist/core/fast-model-variants.js.map +1 -1
  126. package/dist/core/model-registry.d.ts +4 -1
  127. package/dist/core/model-registry.d.ts.map +1 -1
  128. package/dist/core/model-registry.js +9 -0
  129. package/dist/core/model-registry.js.map +1 -1
  130. package/dist/core/model-resolver-defaults.js +1 -1
  131. package/dist/core/model-resolver-defaults.js.map +1 -1
  132. package/dist/core/model-routing-candidates.d.ts +4 -0
  133. package/dist/core/model-routing-candidates.d.ts.map +1 -1
  134. package/dist/core/model-routing-candidates.js +8 -3
  135. package/dist/core/model-routing-candidates.js.map +1 -1
  136. package/dist/core/model-routing-evals.d.ts.map +1 -1
  137. package/dist/core/model-routing-evals.js +4 -5
  138. package/dist/core/model-routing-evals.js.map +1 -1
  139. package/dist/core/model-runtime.d.ts +3 -2
  140. package/dist/core/model-runtime.d.ts.map +1 -1
  141. package/dist/core/model-runtime.js +19 -25
  142. package/dist/core/model-runtime.js.map +1 -1
  143. package/dist/core/nested-tool-calls.d.ts +64 -0
  144. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  145. package/dist/core/nested-tool-calls.js +132 -0
  146. package/dist/core/nested-tool-calls.js.map +1 -0
  147. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  148. package/dist/core/package-manager-resolver.js +21 -3
  149. package/dist/core/package-manager-resolver.js.map +1 -1
  150. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
  151. package/dist/core/package-manager-resource-accumulator.js +2 -0
  152. package/dist/core/package-manager-resource-accumulator.js.map +1 -1
  153. package/dist/core/package-manager-types.d.ts +2 -0
  154. package/dist/core/package-manager-types.d.ts.map +1 -1
  155. package/dist/core/package-manager-types.js.map +1 -1
  156. package/dist/core/package-manager.d.ts.map +1 -1
  157. package/dist/core/package-manager.js +1 -0
  158. package/dist/core/package-manager.js.map +1 -1
  159. package/dist/core/resource-loader-core.d.ts.map +1 -1
  160. package/dist/core/resource-loader-core.js +12 -6
  161. package/dist/core/resource-loader-core.js.map +1 -1
  162. package/dist/core/resource-loader-extensions.d.ts +1 -0
  163. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  164. package/dist/core/resource-loader-extensions.js +64 -4
  165. package/dist/core/resource-loader-extensions.js.map +1 -1
  166. package/dist/core/resource-loader-paths.d.ts.map +1 -1
  167. package/dist/core/resource-loader-paths.js +2 -1
  168. package/dist/core/resource-loader-paths.js.map +1 -1
  169. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  170. package/dist/core/resource-loader-reload.js +5 -4
  171. package/dist/core/resource-loader-reload.js.map +1 -1
  172. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  173. package/dist/core/resource-loader-source-info.js +7 -5
  174. package/dist/core/resource-loader-source-info.js.map +1 -1
  175. package/dist/core/sdk-types.d.ts +1 -1
  176. package/dist/core/sdk-types.js.map +1 -1
  177. package/dist/core/session-manager-core.d.ts +2 -0
  178. package/dist/core/session-manager-core.d.ts.map +1 -1
  179. package/dist/core/session-manager-core.js +5 -1
  180. package/dist/core/session-manager-core.js.map +1 -1
  181. package/dist/core/session-manager-entries.d.ts +1 -1
  182. package/dist/core/session-manager-entries.d.ts.map +1 -1
  183. package/dist/core/session-manager-entries.js.map +1 -1
  184. package/dist/core/settings-manager-basic-accessors.d.ts +4 -0
  185. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  186. package/dist/core/settings-manager-basic-accessors.js +27 -1
  187. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  188. package/dist/core/settings-manager-core.d.ts +2 -0
  189. package/dist/core/settings-manager-core.d.ts.map +1 -1
  190. package/dist/core/settings-manager-core.js +4 -0
  191. package/dist/core/settings-manager-core.js.map +1 -1
  192. package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
  193. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  194. package/dist/core/settings-manager-ui-accessors.js +13 -0
  195. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  196. package/dist/core/settings-manager.d.ts +1 -1
  197. package/dist/core/settings-manager.d.ts.map +1 -1
  198. package/dist/core/settings-manager.js.map +1 -1
  199. package/dist/core/settings-merge.d.ts +1 -0
  200. package/dist/core/settings-merge.d.ts.map +1 -1
  201. package/dist/core/settings-merge.js +30 -1
  202. package/dist/core/settings-merge.js.map +1 -1
  203. package/dist/core/settings-types.d.ts +8 -1
  204. package/dist/core/settings-types.d.ts.map +1 -1
  205. package/dist/core/settings-types.js.map +1 -1
  206. package/dist/core/source-info.d.ts +3 -0
  207. package/dist/core/source-info.d.ts.map +1 -1
  208. package/dist/core/source-info.js +11 -0
  209. package/dist/core/source-info.js.map +1 -1
  210. package/dist/core/tool-loadout.d.ts +6 -0
  211. package/dist/core/tool-loadout.d.ts.map +1 -0
  212. package/dist/core/tool-loadout.js +63 -0
  213. package/dist/core/tool-loadout.js.map +1 -0
  214. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  215. package/dist/core/tools/ask-user-question/ask-user-question.js +1 -0
  216. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  217. package/dist/core/tools/bash.d.ts.map +1 -1
  218. package/dist/core/tools/bash.js +31 -11
  219. package/dist/core/tools/bash.js.map +1 -1
  220. package/dist/core/tools/output-accumulator.d.ts +4 -0
  221. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  222. package/dist/core/tools/output-accumulator.js +32 -0
  223. package/dist/core/tools/output-accumulator.js.map +1 -1
  224. package/dist/core/tools/powershell.d.ts +27 -21
  225. package/dist/core/tools/powershell.d.ts.map +1 -1
  226. package/dist/core/tools/render-utils.d.ts +4 -0
  227. package/dist/core/tools/render-utils.d.ts.map +1 -1
  228. package/dist/core/tools/render-utils.js +19 -0
  229. package/dist/core/tools/render-utils.js.map +1 -1
  230. package/dist/core/tools/tool-concurrency.d.ts +1 -1
  231. package/dist/core/tools/tool-concurrency.d.ts.map +1 -1
  232. package/dist/core/tools/tool-concurrency.js +28 -3
  233. package/dist/core/tools/tool-concurrency.js.map +1 -1
  234. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  235. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  236. package/dist/core/tools/tool-definition-wrapper.js +4 -1
  237. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  238. package/dist/core/usage-totals.d.ts +2 -0
  239. package/dist/core/usage-totals.d.ts.map +1 -1
  240. package/dist/core/usage-totals.js +23 -0
  241. package/dist/core/usage-totals.js.map +1 -1
  242. package/dist/extensions/codemode/execute.d.ts +10 -0
  243. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  244. package/dist/extensions/codemode/execute.js +313 -0
  245. package/dist/extensions/codemode/execute.js.map +1 -0
  246. package/dist/extensions/codemode/index.d.ts +11 -0
  247. package/dist/extensions/codemode/index.d.ts.map +1 -0
  248. package/dist/extensions/codemode/index.js +14 -0
  249. package/dist/extensions/codemode/index.js.map +1 -0
  250. package/dist/extensions/codemode/renderer.d.ts +4 -0
  251. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  252. package/dist/extensions/codemode/renderer.js +78 -0
  253. package/dist/extensions/codemode/renderer.js.map +1 -0
  254. package/dist/extensions/codemode/tool.d.ts +51 -0
  255. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  256. package/dist/extensions/codemode/tool.js +134 -0
  257. package/dist/extensions/codemode/tool.js.map +1 -0
  258. package/dist/extensions/codemode/worker.d.ts +2 -0
  259. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  260. package/dist/extensions/codemode/worker.js +2 -0
  261. package/dist/extensions/codemode/worker.js.map +1 -0
  262. package/dist/extensions/index.d.ts.map +1 -1
  263. package/dist/extensions/index.js +5 -1
  264. package/dist/extensions/index.js.map +1 -1
  265. package/dist/extensions/llama/provider.d.ts.map +1 -1
  266. package/dist/extensions/llama/provider.js +31 -10
  267. package/dist/extensions/llama/provider.js.map +1 -1
  268. package/dist/extensions/tool-search/index.d.ts +5 -0
  269. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  270. package/dist/extensions/tool-search/index.js +6 -0
  271. package/dist/extensions/tool-search/index.js.map +1 -0
  272. package/dist/extensions/tool-search/tool.d.ts +41 -0
  273. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  274. package/dist/extensions/tool-search/tool.js +161 -0
  275. package/dist/extensions/tool-search/tool.js.map +1 -0
  276. package/dist/index.d.ts +7 -0
  277. package/dist/index.d.ts.map +1 -1
  278. package/dist/index.js +5 -0
  279. package/dist/index.js.map +1 -1
  280. package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
  281. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  282. package/dist/modes/interactive/components/chat-message-renderer.js +2 -0
  283. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  284. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  285. package/dist/modes/interactive/components/config-selector-list.js +9 -1
  286. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  287. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -1
  288. package/dist/modes/interactive/components/config-selector-project-scope.js +4 -1
  289. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
  290. package/dist/modes/interactive/components/first-time-setup.d.ts +2 -2
  291. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  292. package/dist/modes/interactive/components/first-time-setup.js +1 -0
  293. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  294. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  295. package/dist/modes/interactive/components/footer.js +42 -7
  296. package/dist/modes/interactive/components/footer.js.map +1 -1
  297. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  298. package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
  299. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  300. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  301. package/dist/modes/interactive/components/settings-selector-items.js +13 -0
  302. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  303. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  304. package/dist/modes/interactive/components/settings-selector-submenus.js +3 -1
  305. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  306. package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
  307. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  308. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  309. package/dist/modes/interactive/components/themed-text.d.ts +8 -0
  310. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  311. package/dist/modes/interactive/components/themed-text.js +14 -0
  312. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  313. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  314. package/dist/modes/interactive/components/tool-execution.js +5 -3
  315. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  316. package/dist/modes/interactive/interactive-agent-events.js +2 -0
  317. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  318. package/dist/modes/interactive/interactive-mode-base.d.ts +2 -1
  319. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  320. package/dist/modes/interactive/interactive-mode-base.js +5 -0
  321. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  322. package/dist/modes/interactive/interactive-resource-rendering.js +7 -10
  323. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  324. package/dist/modes/interactive/interactive-selectors.js +5 -0
  325. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  326. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  327. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  328. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  329. package/dist/modes/interactive/interactive-startup.js +8 -3
  330. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  331. package/dist/modes/interactive/interactive-tui.d.ts +2 -1
  332. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  333. package/dist/modes/interactive/interactive-tui.js +1 -0
  334. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  335. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  336. package/dist/modes/interactive/theme/color-utils.js +3 -0
  337. package/dist/modes/interactive/theme/color-utils.js.map +1 -1
  338. package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -1
  339. package/dist/modes/interactive/theme/export-colors.js +4 -1
  340. package/dist/modes/interactive/theme/export-colors.js.map +1 -1
  341. package/dist/modes/interactive/theme/system-theme.d.ts +23 -0
  342. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  343. package/dist/modes/interactive/theme/system-theme.js +462 -0
  344. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  345. package/dist/modes/interactive/theme/terminal-colors.d.ts +10 -0
  346. package/dist/modes/interactive/theme/terminal-colors.d.ts.map +1 -0
  347. package/dist/modes/interactive/theme/terminal-colors.js +36 -0
  348. package/dist/modes/interactive/theme/terminal-colors.js.map +1 -0
  349. package/dist/modes/interactive/theme/terminal-detection.d.ts +4 -6
  350. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
  351. package/dist/modes/interactive/theme/terminal-detection.js +12 -46
  352. package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
  353. package/dist/modes/interactive/theme/theme-class.d.ts +1 -0
  354. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  355. package/dist/modes/interactive/theme/theme-class.js +2 -2
  356. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  357. package/dist/modes/interactive/theme/theme-controller.d.ts +16 -8
  358. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  359. package/dist/modes/interactive/theme/theme-controller.js +106 -64
  360. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  361. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  362. package/dist/modes/interactive/theme/theme-loading.js +23 -2
  363. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  364. package/dist/modes/interactive/theme/theme-schema.js +1 -1
  365. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  366. package/dist/modes/interactive/theme/theme-schema.json +2 -2
  367. package/dist/modes/interactive/theme/theme.d.ts +2 -0
  368. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  369. package/dist/modes/interactive/theme/theme.js +2 -0
  370. package/dist/modes/interactive/theme/theme.js.map +1 -1
  371. package/dist/modes/interactive-engine/engine-session-stats.d.ts +26 -0
  372. package/dist/modes/interactive-engine/engine-session-stats.d.ts.map +1 -0
  373. package/dist/modes/interactive-engine/engine-session-stats.js +71 -0
  374. package/dist/modes/interactive-engine/engine-session-stats.js.map +1 -0
  375. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -0
  376. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  377. package/dist/modes/interactive-engine/extension-ui-bridge.js +4 -0
  378. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  379. package/dist/modes/interactive-engine/isolated-runtime.d.ts +3 -0
  380. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  381. package/dist/modes/interactive-engine/isolated-runtime.js +27 -5
  382. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  383. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  384. package/dist/modes/rpc/rpc-provider-auth.js +3 -1
  385. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  386. package/dist/package-manager-cli.d.ts.map +1 -1
  387. package/dist/package-manager-cli.js +8 -2
  388. package/dist/package-manager-cli.js.map +1 -1
  389. package/dist/utils/paths.d.ts.map +1 -1
  390. package/dist/utils/paths.js +2 -1
  391. package/dist/utils/paths.js.map +1 -1
  392. package/dist/utils/shell.d.ts +1 -3
  393. package/dist/utils/shell.d.ts.map +1 -1
  394. package/dist/utils/shell.js +3 -30
  395. package/dist/utils/shell.js.map +1 -1
  396. package/docs/extensions/api-reference.md +5 -1
  397. package/docs/extensions/authoring.md +31 -1
  398. package/docs/extensions/events.md +3 -1
  399. package/docs/extensions.md +14 -0
  400. package/docs/models/evals.md +45 -2
  401. package/docs/models/reference.md +33 -2
  402. package/docs/models.md +1 -0
  403. package/docs/packages.md +2 -0
  404. package/docs/providers.md +34 -7
  405. package/docs/reference/cli.md +4 -0
  406. package/docs/rpc/protocol.md +10 -0
  407. package/docs/sdk/reference.md +5 -1
  408. package/docs/sdk/structured-decisions.md +2 -2
  409. package/docs/session-format.md +5 -0
  410. package/docs/settings.md +19 -5
  411. package/docs/skills.md +1 -1
  412. package/docs/themes/reference.md +2 -1
  413. package/docs/themes.md +4 -2
  414. package/docs/tools.md +39 -0
  415. package/npm-shrinkwrap.json +115 -113
  416. package/package.json +12 -9
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager-core.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager-core.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,QAAQ,EACR,aAAa,EACb,4BAA4B,EAC5B,aAAa,EACb,eAAe,EACf,MAAM,qBAAqB,CAAC;AAG7B,qBAAa,eAAe;IAC3B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAAW;IACjC,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,2BAA2B,CAA0C;IAC7E,OAAO,CAAC,uBAAuB,CAAsB;IACrD,OAAO,CAAC,wBAAwB,CAAsB;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,eAkBN;IAED,OAAO,CAAC,sBAAsB;IAI9B,qDAAqD;IACrD,MAAM,CAAC,MAAM,CACZ,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,OAAO,GAAE,4BAAiC,GACxC,eAAe,CAOjB;IAED,iEAAiE;IACjE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,4BAAiC,GAAG,eAAe,CAiCxG;IAED,wDAAwD;IACxD,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,eAAe,CAKjE;IAED,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAYjC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAIrC,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,eAAe;IA6D9B,iBAAiB,IAAI,QAAQ,CAE5B;IAED,kBAAkB,IAAI,QAAQ,CAE7B;IAED,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,QAAQ,GAAG,OAAO,CAErE;IAED,gBAAgB,IAAI,OAAO,CAE1B;IAED,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BxC;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC5B;IACD,+EAA+E;IACzE,aAAa,IAAI,OAAO,CAAC;QAAE,eAAe,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAgBvF;IAED,OAAO,CAAC,aAAa;IAcrB,4DAA4D;IAC5D,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAEjD;IAED,0DAA0D;IAC1D,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,4BAA4B;IAMpC,2DAA2D;IAC3D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,mBAAmB;IAiBrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,WAAW,IAAI,aAAa,EAAE,CAI7B;IAED,OAAO,CAAC,yBAAyB;CAMjC"}
1
+ {"version":3,"file":"settings-manager-core.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager-core.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,QAAQ,EACR,aAAa,EACb,4BAA4B,EAC5B,aAAa,EACb,eAAe,EACf,MAAM,qBAAqB,CAAC;AAG7B,qBAAa,eAAe;IAC3B,6DAA6D;IAC7D,WAAW,IAAI,QAAQ,CAEtB;IAED,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAAW;IACjC,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,2BAA2B,CAA0C;IAC7E,OAAO,CAAC,uBAAuB,CAAsB;IACrD,OAAO,CAAC,wBAAwB,CAAsB;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,eAkBN;IAED,OAAO,CAAC,sBAAsB;IAI9B,qDAAqD;IACrD,MAAM,CAAC,MAAM,CACZ,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,OAAO,GAAE,4BAAiC,GACxC,eAAe,CAOjB;IAED,iEAAiE;IACjE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,4BAAiC,GAAG,eAAe,CAiCxG;IAED,wDAAwD;IACxD,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,eAAe,CAKjE;IAED,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAYjC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAIrC,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,eAAe;IA6D9B,iBAAiB,IAAI,QAAQ,CAE5B;IAED,kBAAkB,IAAI,QAAQ,CAE7B;IAED,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,QAAQ,GAAG,OAAO,CAErE;IAED,gBAAgB,IAAI,OAAO,CAE1B;IAED,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BxC;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC5B;IACD,+EAA+E;IACzE,aAAa,IAAI,OAAO,CAAC;QAAE,eAAe,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAgBvF;IAED,OAAO,CAAC,aAAa;IAcrB,4DAA4D;IAC5D,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAEjD;IAED,0DAA0D;IAC1D,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,4BAA4B;IAMpC,2DAA2D;IAC3D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,mBAAmB;IAiBrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,WAAW,IAAI,aAAa,EAAE,CAI7B;IAED,OAAO,CAAC,yBAAyB;CAMjC"}
@@ -5,6 +5,10 @@ import { deepMergeSettings } from "./settings-merge.js";
5
5
  import { FileSettingsStorage, InMemorySettingsStorage } from "./settings-storage.js";
6
6
  import { ownedSettingsManagers, recordSettingsWrite, settingsWriteOwner } from "./settings-write-ownership.js";
7
7
  export class SettingsManager {
8
+ /** A defensive snapshot of the effective merged settings. */
9
+ getSettings() {
10
+ return structuredClone(this.settings);
11
+ }
8
12
  storage;
9
13
  globalSettings;
10
14
  projectSettings;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager-core.js","sourceRoot":"","sources":["../../src/core/settings-manager-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"path\";\nimport { getAgentConfigPaths, getAgentDir, getProjectConfigPaths } from \"../config.js\";\nimport { parseJsonFileContent } from \"../utils/json.ts\";\nimport { deepMergeSettings } from \"./settings-merge.ts\";\nimport { FileSettingsStorage, InMemorySettingsStorage } from \"./settings-storage.ts\";\nimport type {\n\tSettings,\n\tSettingsError,\n\tSettingsManagerCreateOptions,\n\tSettingsScope,\n\tSettingsStorage,\n} from \"./settings-types.ts\";\nimport { ownedSettingsManagers, recordSettingsWrite, settingsWriteOwner } from \"./settings-write-ownership.ts\";\n\nexport class SettingsManager {\n\tprivate storage: SettingsStorage;\n\tprivate globalSettings: Settings;\n\tprivate projectSettings: Settings;\n\tprivate settings: Settings;\n\tprivate projectTrusted: boolean;\n\tprivate modifiedFields = new Set<keyof Settings>(); // Track global fields modified during session\n\tprivate modifiedNestedFields = new Map<keyof Settings, Set<string>>(); // Track global nested field modifications\n\tprivate modifiedProjectFields = new Set<keyof Settings>(); // Track project fields modified during session\n\tprivate modifiedProjectNestedFields = new Map<keyof Settings, Set<string>>(); // Track project nested field modifications\n\tprivate globalSettingsLoadError: Error | null = null; // Track if global settings file had parse errors\n\tprivate projectSettingsLoadError: Error | null = null; // Track if project settings file had parse errors\n\tprivate writeQueue: Promise<void> = Promise.resolve();\n\tprivate errors: SettingsError[];\n\n\tprivate constructor(\n\t\tstorage: SettingsStorage,\n\t\tinitialGlobal: Settings,\n\t\tinitialProject: Settings,\n\t\tglobalLoadError: Error | null = null,\n\t\tprojectLoadError: Error | null = null,\n\t\tinitialErrors: SettingsError[] = [],\n\t\tprojectTrusted = true,\n\t) {\n\t\tthis.storage = storage;\n\t\tthis.globalSettings = initialGlobal;\n\t\tthis.projectSettings = initialProject;\n\t\tthis.projectTrusted = projectTrusted;\n\t\tthis.globalSettingsLoadError = globalLoadError;\n\t\tthis.projectSettingsLoadError = projectLoadError;\n\t\tthis.errors = [...initialErrors];\n\t\tthis.settings = this.mergeEffectiveSettings();\n\t\tthis.touchSplitAccessorMethods();\n\t}\n\n\tprivate mergeEffectiveSettings(): Settings {\n\t\treturn deepMergeSettings(this.globalSettings, this.projectSettings);\n\t}\n\n\t/** Create a SettingsManager that loads from files */\n\tstatic create(\n\t\tcwd: string,\n\t\tagentDir: string = getAgentDir(),\n\t\toptions: SettingsManagerCreateOptions = {},\n\t): SettingsManager {\n\t\tconst storage = new FileSettingsStorage(cwd, agentDir, {\n\t\t\tglobalReadPaths:\n\t\t\t\tagentDir === getAgentDir() ? getAgentConfigPaths(\"settings.json\") : [join(agentDir, \"settings.json\")],\n\t\t\tprojectReadPaths: getProjectConfigPaths(cwd, \"settings.json\"),\n\t\t});\n\t\treturn SettingsManager.fromStorage(storage, options);\n\t}\n\n\t/** Create a SettingsManager from an arbitrary storage backend */\n\tstatic fromStorage(storage: SettingsStorage, options: SettingsManagerCreateOptions = {}): SettingsManager {\n\t\tconst projectTrusted = options.projectTrusted ?? true;\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(storage, \"global\");\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(storage, \"project\", projectTrusted);\n\t\tconst initialErrors: SettingsError[] = [];\n\t\tif (globalLoad.error) {\n\t\t\tinitialErrors.push({\n\t\t\t\tscope: \"global\",\n\t\t\t\tpath: (globalLoad.error as Error & { path?: string }).path,\n\t\t\t\terror: globalLoad.error,\n\t\t\t});\n\t\t} else {\n\t\t\tinitialErrors.push(...SettingsManager.validateLoadedSettings(\"global\", globalLoad.settings));\n\t\t}\n\t\tif (projectLoad.error) {\n\t\t\tinitialErrors.push({\n\t\t\t\tscope: \"project\",\n\t\t\t\tpath: (projectLoad.error as Error & { path?: string }).path,\n\t\t\t\terror: projectLoad.error,\n\t\t\t});\n\t\t} else {\n\t\t\tinitialErrors.push(...SettingsManager.validateLoadedSettings(\"project\", projectLoad.settings));\n\t\t}\n\n\t\treturn new SettingsManager(\n\t\t\tstorage,\n\t\t\tglobalLoad.settings,\n\t\t\tprojectLoad.settings,\n\t\t\tglobalLoad.error,\n\t\t\tprojectLoad.error,\n\t\t\tinitialErrors,\n\t\t\tprojectTrusted,\n\t\t);\n\t}\n\n\t/** Create an in-memory SettingsManager (no file I/O) */\n\tstatic inMemory(settings: Partial<Settings> = {}): SettingsManager {\n\t\tconst storage = new InMemorySettingsStorage();\n\t\tconst initialSettings = SettingsManager.migrateSettings(structuredClone(settings) as Record<string, unknown>);\n\t\tstorage.withLock(\"global\", () => JSON.stringify(initialSettings, null, 2));\n\t\treturn SettingsManager.fromStorage(storage);\n\t}\n\n\tprivate static loadFromStorage(storage: SettingsStorage, scope: SettingsScope, projectTrusted = true): Settings {\n\t\tif (scope === \"project\" && !projectTrusted) {\n\t\t\treturn {};\n\t\t}\n\n\t\tlet content: string | undefined;\n\t\tstorage.withLock(scope, (current) => {\n\t\t\tcontent = current;\n\t\t\treturn undefined;\n\t\t});\n\n\t\tif (!content) {\n\t\t\treturn {};\n\t\t}\n\t\tconst settings = parseJsonFileContent(content) as Record<string, unknown>;\n\t\treturn SettingsManager.migrateSettings(settings);\n\t}\n\n\tprivate static tryLoadFromStorage(\n\t\tstorage: SettingsStorage,\n\t\tscope: SettingsScope,\n\t\tprojectTrusted = true,\n\t): { settings: Settings; error: Error | null } {\n\t\ttry {\n\t\t\treturn { settings: SettingsManager.loadFromStorage(storage, scope, projectTrusted), error: null };\n\t\t} catch (error) {\n\t\t\treturn { settings: {}, error: error as Error };\n\t\t}\n\t}\n\n\tprivate static validateLoadedSettings(_scope: SettingsScope, _settings: Settings): SettingsError[] {\n\t\treturn [];\n\t}\n\n\t/** Migrate old settings format to new format */\n\tprivate static migrateSettings(settings: Record<string, unknown>): Settings {\n\t\t// Migrate queueMode -> steeringMode\n\t\tif (\"queueMode\" in settings && !(\"steeringMode\" in settings)) {\n\t\t\tsettings.steeringMode = settings.queueMode;\n\t\t\tdelete settings.queueMode;\n\t\t}\n\n\t\t// Migrate legacy websockets boolean -> transport enum\n\t\tif (!(\"transport\" in settings) && typeof settings.websockets === \"boolean\") {\n\t\t\tsettings.transport = settings.websockets ? \"websocket\" : \"sse\";\n\t\t\tdelete settings.websockets;\n\t\t}\n\n\t\t// Migrate old skills object format to new array format\n\t\tif (\n\t\t\t\"skills\" in settings &&\n\t\t\ttypeof settings.skills === \"object\" &&\n\t\t\tsettings.skills !== null &&\n\t\t\t!Array.isArray(settings.skills)\n\t\t) {\n\t\t\tconst skillsSettings = settings.skills as {\n\t\t\t\tenableSkillCommands?: boolean;\n\t\t\t\tcustomDirectories?: unknown;\n\t\t\t};\n\t\t\tif (skillsSettings.enableSkillCommands !== undefined && settings.enableSkillCommands === undefined) {\n\t\t\t\tsettings.enableSkillCommands = skillsSettings.enableSkillCommands;\n\t\t\t}\n\t\t\tif (Array.isArray(skillsSettings.customDirectories) && skillsSettings.customDirectories.length > 0) {\n\t\t\t\tsettings.skills = skillsSettings.customDirectories;\n\t\t\t} else {\n\t\t\t\tdelete settings.skills;\n\t\t\t}\n\t\t}\n\n\t\t// Migrate retry.maxDelayMs -> retry.provider.maxRetryDelayMs\n\t\tif (\n\t\t\t\"retry\" in settings &&\n\t\t\ttypeof settings.retry === \"object\" &&\n\t\t\tsettings.retry !== null &&\n\t\t\t!Array.isArray(settings.retry)\n\t\t) {\n\t\t\tconst retrySettings = settings.retry as Record<string, unknown>;\n\t\t\tconst providerSettings =\n\t\t\t\ttypeof retrySettings.provider === \"object\" && retrySettings.provider !== null\n\t\t\t\t\t? (retrySettings.provider as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\t\t\tif (\n\t\t\t\ttypeof retrySettings.maxDelayMs === \"number\" &&\n\t\t\t\t(providerSettings?.maxRetryDelayMs === undefined || providerSettings?.maxRetryDelayMs === null)\n\t\t\t) {\n\t\t\t\tretrySettings.provider = {\n\t\t\t\t\t...(providerSettings ?? {}),\n\t\t\t\t\tmaxRetryDelayMs: retrySettings.maxDelayMs,\n\t\t\t\t};\n\t\t\t}\n\t\t\tdelete retrySettings.maxDelayMs;\n\t\t}\n\n\t\treturn settings as Settings;\n\t}\n\n\tgetGlobalSettings(): Settings {\n\t\treturn structuredClone(this.globalSettings);\n\t}\n\n\tgetProjectSettings(): Settings {\n\t\treturn structuredClone(this.projectSettings);\n\t}\n\n\tisFieldInherited(scope: SettingsScope, field: keyof Settings): boolean {\n\t\treturn this.storage.getFieldOrigin?.(scope, field) === \"legacy\";\n\t}\n\n\tisProjectTrusted(): boolean {\n\t\treturn this.projectTrusted;\n\t}\n\n\tsetProjectTrusted(trusted: boolean): void {\n\t\tif (this.projectTrusted === trusted) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.projectTrusted = trusted;\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\n\t\tif (!trusted) {\n\t\t\tthis.projectSettings = {};\n\t\t\tthis.projectSettingsLoadError = null;\n\t\t\tthis.settings = this.mergeEffectiveSettings();\n\t\t\treturn;\n\t\t}\n\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(this.storage, \"project\", trusted);\n\t\tthis.projectSettings = projectLoad.settings;\n\t\tthis.projectSettingsLoadError = projectLoad.error;\n\t\tif (projectLoad.error) {\n\t\t\tthis.recordError(\"project\", projectLoad.error);\n\t\t} else {\n\t\t\tfor (const { error } of SettingsManager.validateLoadedSettings(\"project\", projectLoad.settings)) {\n\t\t\t\tthis.recordError(\"project\", error);\n\t\t\t}\n\t\t}\n\t\tthis.settings = this.mergeEffectiveSettings();\n\t}\n\n\tasync reload(): Promise<void> {\n\t\tawait this.writeQueue;\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(this.storage, \"global\");\n\t\tif (!globalLoad.error) {\n\t\t\tthis.globalSettings = globalLoad.settings;\n\t\t\tthis.globalSettingsLoadError = null;\n\t\t\tfor (const { error } of SettingsManager.validateLoadedSettings(\"global\", globalLoad.settings)) {\n\t\t\t\tthis.recordError(\"global\", error);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.globalSettingsLoadError = globalLoad.error;\n\t\t\tthis.recordError(\"global\", globalLoad.error);\n\t\t}\n\n\t\tthis.modifiedFields.clear();\n\t\tthis.modifiedNestedFields.clear();\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(this.storage, \"project\", this.projectTrusted);\n\t\tif (!projectLoad.error) {\n\t\t\tthis.projectSettings = projectLoad.settings;\n\t\t\tthis.projectSettingsLoadError = null;\n\t\t\tfor (const { error } of SettingsManager.validateLoadedSettings(\"project\", projectLoad.settings)) {\n\t\t\t\tthis.recordError(\"project\", error);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.projectSettingsLoadError = projectLoad.error;\n\t\t\tthis.recordError(\"project\", projectLoad.error);\n\t\t}\n\n\t\tthis.settings = this.mergeEffectiveSettings();\n\t}\n\t/** Load a reload candidate without publishing any settings to live readers. */\n\tasync prepareReload(): Promise<{ settingsManager: SettingsManager; commit: () => void }> {\n\t\tawait this.writeQueue;\n\t\tconst candidate = new SettingsManager(\n\t\t\tthis.storage,\n\t\t\tstructuredClone(this.globalSettings),\n\t\t\tstructuredClone(this.projectSettings),\n\t\t\tthis.globalSettingsLoadError,\n\t\t\tthis.projectSettingsLoadError,\n\t\t\t[...this.errors],\n\t\t\tthis.projectTrusted,\n\t\t);\n\t\tawait candidate.reload();\n\t\treturn {\n\t\t\tsettingsManager: candidate,\n\t\t\tcommit: () => this.publishReload(candidate),\n\t\t};\n\t}\n\n\tprivate publishReload(candidate: SettingsManager): void {\n\t\tthis.globalSettings = candidate.globalSettings;\n\t\tthis.projectSettings = candidate.projectSettings;\n\t\tthis.settings = candidate.settings;\n\t\tthis.projectTrusted = candidate.projectTrusted;\n\t\tthis.modifiedFields = candidate.modifiedFields;\n\t\tthis.modifiedNestedFields = candidate.modifiedNestedFields;\n\t\tthis.modifiedProjectFields = candidate.modifiedProjectFields;\n\t\tthis.modifiedProjectNestedFields = candidate.modifiedProjectNestedFields;\n\t\tthis.globalSettingsLoadError = candidate.globalSettingsLoadError;\n\t\tthis.projectSettingsLoadError = candidate.projectSettingsLoadError;\n\t\tthis.errors = candidate.errors;\n\t}\n\n\t/** Apply additional overrides on top of current settings */\n\tapplyOverrides(overrides: Partial<Settings>): void {\n\t\tthis.settings = deepMergeSettings(this.settings, overrides);\n\t}\n\n\t/** Mark a global field as modified during this session */\n\tprivate markModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.modifiedFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedNestedFields.has(field)) {\n\t\t\t\tthis.modifiedNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\tprivate assertProjectTrustedForWrite(): void {\n\t\tif (!this.projectTrusted) {\n\t\t\tthrow new Error(\"Project is not trusted; refusing to write project settings\");\n\t\t}\n\t}\n\n\t/** Mark a project field as modified during this session */\n\tprivate markProjectModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.assertProjectTrustedForWrite();\n\t\tthis.modifiedProjectFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedProjectNestedFields.has(field)) {\n\t\t\t\tthis.modifiedProjectNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedProjectNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\tprivate recordError(scope: SettingsScope, error: unknown): void {\n\t\tconst normalizedError = error instanceof Error ? error : new Error(String(error));\n\t\tthis.errors.push({ scope, error: normalizedError });\n\t}\n\n\tprivate clearModifiedScope(scope: SettingsScope): void {\n\t\tif (scope === \"global\") {\n\t\t\tthis.modifiedFields.clear();\n\t\t\tthis.modifiedNestedFields.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\t}\n\n\tprivate enqueueWrite(scope: SettingsScope, task: () => void): void {\n\t\tconst owner = settingsWriteOwner.getStore() ?? ownedSettingsManagers.get(this);\n\t\tthis.writeQueue = this.writeQueue\n\t\t\t.then(() => {\n\t\t\t\tif (scope === \"project\") {\n\t\t\t\t\tthis.assertProjectTrustedForWrite();\n\t\t\t\t}\n\t\t\t\ttask();\n\t\t\t\tthis.clearModifiedScope(scope);\n\t\t\t\trecordSettingsWrite(owner, scope);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.recordError(scope, error);\n\t\t\t\trecordSettingsWrite(owner, scope, error);\n\t\t\t});\n\t}\n\n\tprivate cloneModifiedNestedFields(source: Map<keyof Settings, Set<string>>): Map<keyof Settings, Set<string>> {\n\t\tconst snapshot = new Map<keyof Settings, Set<string>>();\n\t\tfor (const [key, value] of source.entries()) {\n\t\t\tsnapshot.set(key, new Set(value));\n\t\t}\n\t\treturn snapshot;\n\t}\n\n\tprivate persistScopedSettings(\n\t\tscope: SettingsScope,\n\t\tsnapshotSettings: Settings,\n\t\tmodifiedFields: Set<keyof Settings>,\n\t\tmodifiedNestedFields: Map<keyof Settings, Set<string>>,\n\t): void {\n\t\tconst persist = (currentPrimary: string | undefined): string => {\n\t\t\tconst currentFileSettings = currentPrimary\n\t\t\t\t? SettingsManager.migrateSettings(parseJsonFileContent(currentPrimary) as Record<string, unknown>)\n\t\t\t\t: {};\n\t\t\tconst mergedSettings: Settings = { ...currentFileSettings };\n\t\t\tfor (const field of modifiedFields) {\n\t\t\t\tconst value = snapshotSettings[field];\n\t\t\t\tif (modifiedNestedFields.has(field) && typeof value === \"object\" && value !== null) {\n\t\t\t\t\tconst nestedModified = modifiedNestedFields.get(field)!;\n\t\t\t\t\tconst baseNested = (currentFileSettings[field] as Record<string, unknown>) ?? {};\n\t\t\t\t\tconst inMemoryNested = value as Record<string, unknown>;\n\t\t\t\t\tconst mergedNested = { ...baseNested };\n\t\t\t\t\tfor (const nestedKey of nestedModified) {\n\t\t\t\t\t\tmergedNested[nestedKey] = inMemoryNested[nestedKey];\n\t\t\t\t\t}\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = mergedNested;\n\t\t\t\t} else {\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn JSON.stringify(mergedSettings, null, 2);\n\t\t};\n\n\t\tif (this.storage.withPrimaryWriteLock) {\n\t\t\tthis.storage.withPrimaryWriteLock(scope, persist);\n\t\t} else {\n\t\t\tthis.storage.withLock(scope, persist);\n\t\t}\n\t}\n\n\tprivate save(): void {\n\t\tthis.settings = this.mergeEffectiveSettings();\n\n\t\tif (this.globalSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotGlobalSettings = structuredClone(this.globalSettings);\n\t\tconst modifiedFields = new Set(this.modifiedFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedNestedFields);\n\n\t\tthis.enqueueWrite(\"global\", () => {\n\t\t\tthis.persistScopedSettings(\"global\", snapshotGlobalSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tprivate saveProjectSettings(settings: Settings): void {\n\t\tthis.assertProjectTrustedForWrite();\n\t\tthis.projectSettings = structuredClone(settings);\n\t\tthis.settings = this.mergeEffectiveSettings();\n\n\t\tif (this.projectSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotProjectSettings = structuredClone(this.projectSettings);\n\t\tconst modifiedFields = new Set(this.modifiedProjectFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedProjectNestedFields);\n\t\tthis.enqueueWrite(\"project\", () => {\n\t\t\tthis.persistScopedSettings(\"project\", snapshotProjectSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tawait this.writeQueue;\n\t}\n\n\tdrainErrors(): SettingsError[] {\n\t\tconst drained = [...this.errors];\n\t\tthis.errors = [];\n\t\treturn drained;\n\t}\n\n\tprivate touchSplitAccessorMethods(): void {\n\t\tvoid this.markModified;\n\t\tvoid this.markProjectModified;\n\t\tvoid this.save;\n\t\tvoid this.saveProjectSettings;\n\t}\n}\n"]}
1
+ {"version":3,"file":"settings-manager-core.js","sourceRoot":"","sources":["../../src/core/settings-manager-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"path\";\nimport { getAgentConfigPaths, getAgentDir, getProjectConfigPaths } from \"../config.js\";\nimport { parseJsonFileContent } from \"../utils/json.ts\";\nimport { deepMergeSettings } from \"./settings-merge.ts\";\nimport { FileSettingsStorage, InMemorySettingsStorage } from \"./settings-storage.ts\";\nimport type {\n\tSettings,\n\tSettingsError,\n\tSettingsManagerCreateOptions,\n\tSettingsScope,\n\tSettingsStorage,\n} from \"./settings-types.ts\";\nimport { ownedSettingsManagers, recordSettingsWrite, settingsWriteOwner } from \"./settings-write-ownership.ts\";\n\nexport class SettingsManager {\n\t/** A defensive snapshot of the effective merged settings. */\n\tgetSettings(): Settings {\n\t\treturn structuredClone(this.settings);\n\t}\n\n\tprivate storage: SettingsStorage;\n\tprivate globalSettings: Settings;\n\tprivate projectSettings: Settings;\n\tprivate settings: Settings;\n\tprivate projectTrusted: boolean;\n\tprivate modifiedFields = new Set<keyof Settings>(); // Track global fields modified during session\n\tprivate modifiedNestedFields = new Map<keyof Settings, Set<string>>(); // Track global nested field modifications\n\tprivate modifiedProjectFields = new Set<keyof Settings>(); // Track project fields modified during session\n\tprivate modifiedProjectNestedFields = new Map<keyof Settings, Set<string>>(); // Track project nested field modifications\n\tprivate globalSettingsLoadError: Error | null = null; // Track if global settings file had parse errors\n\tprivate projectSettingsLoadError: Error | null = null; // Track if project settings file had parse errors\n\tprivate writeQueue: Promise<void> = Promise.resolve();\n\tprivate errors: SettingsError[];\n\n\tprivate constructor(\n\t\tstorage: SettingsStorage,\n\t\tinitialGlobal: Settings,\n\t\tinitialProject: Settings,\n\t\tglobalLoadError: Error | null = null,\n\t\tprojectLoadError: Error | null = null,\n\t\tinitialErrors: SettingsError[] = [],\n\t\tprojectTrusted = true,\n\t) {\n\t\tthis.storage = storage;\n\t\tthis.globalSettings = initialGlobal;\n\t\tthis.projectSettings = initialProject;\n\t\tthis.projectTrusted = projectTrusted;\n\t\tthis.globalSettingsLoadError = globalLoadError;\n\t\tthis.projectSettingsLoadError = projectLoadError;\n\t\tthis.errors = [...initialErrors];\n\t\tthis.settings = this.mergeEffectiveSettings();\n\t\tthis.touchSplitAccessorMethods();\n\t}\n\n\tprivate mergeEffectiveSettings(): Settings {\n\t\treturn deepMergeSettings(this.globalSettings, this.projectSettings);\n\t}\n\n\t/** Create a SettingsManager that loads from files */\n\tstatic create(\n\t\tcwd: string,\n\t\tagentDir: string = getAgentDir(),\n\t\toptions: SettingsManagerCreateOptions = {},\n\t): SettingsManager {\n\t\tconst storage = new FileSettingsStorage(cwd, agentDir, {\n\t\t\tglobalReadPaths:\n\t\t\t\tagentDir === getAgentDir() ? getAgentConfigPaths(\"settings.json\") : [join(agentDir, \"settings.json\")],\n\t\t\tprojectReadPaths: getProjectConfigPaths(cwd, \"settings.json\"),\n\t\t});\n\t\treturn SettingsManager.fromStorage(storage, options);\n\t}\n\n\t/** Create a SettingsManager from an arbitrary storage backend */\n\tstatic fromStorage(storage: SettingsStorage, options: SettingsManagerCreateOptions = {}): SettingsManager {\n\t\tconst projectTrusted = options.projectTrusted ?? true;\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(storage, \"global\");\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(storage, \"project\", projectTrusted);\n\t\tconst initialErrors: SettingsError[] = [];\n\t\tif (globalLoad.error) {\n\t\t\tinitialErrors.push({\n\t\t\t\tscope: \"global\",\n\t\t\t\tpath: (globalLoad.error as Error & { path?: string }).path,\n\t\t\t\terror: globalLoad.error,\n\t\t\t});\n\t\t} else {\n\t\t\tinitialErrors.push(...SettingsManager.validateLoadedSettings(\"global\", globalLoad.settings));\n\t\t}\n\t\tif (projectLoad.error) {\n\t\t\tinitialErrors.push({\n\t\t\t\tscope: \"project\",\n\t\t\t\tpath: (projectLoad.error as Error & { path?: string }).path,\n\t\t\t\terror: projectLoad.error,\n\t\t\t});\n\t\t} else {\n\t\t\tinitialErrors.push(...SettingsManager.validateLoadedSettings(\"project\", projectLoad.settings));\n\t\t}\n\n\t\treturn new SettingsManager(\n\t\t\tstorage,\n\t\t\tglobalLoad.settings,\n\t\t\tprojectLoad.settings,\n\t\t\tglobalLoad.error,\n\t\t\tprojectLoad.error,\n\t\t\tinitialErrors,\n\t\t\tprojectTrusted,\n\t\t);\n\t}\n\n\t/** Create an in-memory SettingsManager (no file I/O) */\n\tstatic inMemory(settings: Partial<Settings> = {}): SettingsManager {\n\t\tconst storage = new InMemorySettingsStorage();\n\t\tconst initialSettings = SettingsManager.migrateSettings(structuredClone(settings) as Record<string, unknown>);\n\t\tstorage.withLock(\"global\", () => JSON.stringify(initialSettings, null, 2));\n\t\treturn SettingsManager.fromStorage(storage);\n\t}\n\n\tprivate static loadFromStorage(storage: SettingsStorage, scope: SettingsScope, projectTrusted = true): Settings {\n\t\tif (scope === \"project\" && !projectTrusted) {\n\t\t\treturn {};\n\t\t}\n\n\t\tlet content: string | undefined;\n\t\tstorage.withLock(scope, (current) => {\n\t\t\tcontent = current;\n\t\t\treturn undefined;\n\t\t});\n\n\t\tif (!content) {\n\t\t\treturn {};\n\t\t}\n\t\tconst settings = parseJsonFileContent(content) as Record<string, unknown>;\n\t\treturn SettingsManager.migrateSettings(settings);\n\t}\n\n\tprivate static tryLoadFromStorage(\n\t\tstorage: SettingsStorage,\n\t\tscope: SettingsScope,\n\t\tprojectTrusted = true,\n\t): { settings: Settings; error: Error | null } {\n\t\ttry {\n\t\t\treturn { settings: SettingsManager.loadFromStorage(storage, scope, projectTrusted), error: null };\n\t\t} catch (error) {\n\t\t\treturn { settings: {}, error: error as Error };\n\t\t}\n\t}\n\n\tprivate static validateLoadedSettings(_scope: SettingsScope, _settings: Settings): SettingsError[] {\n\t\treturn [];\n\t}\n\n\t/** Migrate old settings format to new format */\n\tprivate static migrateSettings(settings: Record<string, unknown>): Settings {\n\t\t// Migrate queueMode -> steeringMode\n\t\tif (\"queueMode\" in settings && !(\"steeringMode\" in settings)) {\n\t\t\tsettings.steeringMode = settings.queueMode;\n\t\t\tdelete settings.queueMode;\n\t\t}\n\n\t\t// Migrate legacy websockets boolean -> transport enum\n\t\tif (!(\"transport\" in settings) && typeof settings.websockets === \"boolean\") {\n\t\t\tsettings.transport = settings.websockets ? \"websocket\" : \"sse\";\n\t\t\tdelete settings.websockets;\n\t\t}\n\n\t\t// Migrate old skills object format to new array format\n\t\tif (\n\t\t\t\"skills\" in settings &&\n\t\t\ttypeof settings.skills === \"object\" &&\n\t\t\tsettings.skills !== null &&\n\t\t\t!Array.isArray(settings.skills)\n\t\t) {\n\t\t\tconst skillsSettings = settings.skills as {\n\t\t\t\tenableSkillCommands?: boolean;\n\t\t\t\tcustomDirectories?: unknown;\n\t\t\t};\n\t\t\tif (skillsSettings.enableSkillCommands !== undefined && settings.enableSkillCommands === undefined) {\n\t\t\t\tsettings.enableSkillCommands = skillsSettings.enableSkillCommands;\n\t\t\t}\n\t\t\tif (Array.isArray(skillsSettings.customDirectories) && skillsSettings.customDirectories.length > 0) {\n\t\t\t\tsettings.skills = skillsSettings.customDirectories;\n\t\t\t} else {\n\t\t\t\tdelete settings.skills;\n\t\t\t}\n\t\t}\n\n\t\t// Migrate retry.maxDelayMs -> retry.provider.maxRetryDelayMs\n\t\tif (\n\t\t\t\"retry\" in settings &&\n\t\t\ttypeof settings.retry === \"object\" &&\n\t\t\tsettings.retry !== null &&\n\t\t\t!Array.isArray(settings.retry)\n\t\t) {\n\t\t\tconst retrySettings = settings.retry as Record<string, unknown>;\n\t\t\tconst providerSettings =\n\t\t\t\ttypeof retrySettings.provider === \"object\" && retrySettings.provider !== null\n\t\t\t\t\t? (retrySettings.provider as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\t\t\tif (\n\t\t\t\ttypeof retrySettings.maxDelayMs === \"number\" &&\n\t\t\t\t(providerSettings?.maxRetryDelayMs === undefined || providerSettings?.maxRetryDelayMs === null)\n\t\t\t) {\n\t\t\t\tretrySettings.provider = {\n\t\t\t\t\t...(providerSettings ?? {}),\n\t\t\t\t\tmaxRetryDelayMs: retrySettings.maxDelayMs,\n\t\t\t\t};\n\t\t\t}\n\t\t\tdelete retrySettings.maxDelayMs;\n\t\t}\n\n\t\treturn settings as Settings;\n\t}\n\n\tgetGlobalSettings(): Settings {\n\t\treturn structuredClone(this.globalSettings);\n\t}\n\n\tgetProjectSettings(): Settings {\n\t\treturn structuredClone(this.projectSettings);\n\t}\n\n\tisFieldInherited(scope: SettingsScope, field: keyof Settings): boolean {\n\t\treturn this.storage.getFieldOrigin?.(scope, field) === \"legacy\";\n\t}\n\n\tisProjectTrusted(): boolean {\n\t\treturn this.projectTrusted;\n\t}\n\n\tsetProjectTrusted(trusted: boolean): void {\n\t\tif (this.projectTrusted === trusted) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.projectTrusted = trusted;\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\n\t\tif (!trusted) {\n\t\t\tthis.projectSettings = {};\n\t\t\tthis.projectSettingsLoadError = null;\n\t\t\tthis.settings = this.mergeEffectiveSettings();\n\t\t\treturn;\n\t\t}\n\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(this.storage, \"project\", trusted);\n\t\tthis.projectSettings = projectLoad.settings;\n\t\tthis.projectSettingsLoadError = projectLoad.error;\n\t\tif (projectLoad.error) {\n\t\t\tthis.recordError(\"project\", projectLoad.error);\n\t\t} else {\n\t\t\tfor (const { error } of SettingsManager.validateLoadedSettings(\"project\", projectLoad.settings)) {\n\t\t\t\tthis.recordError(\"project\", error);\n\t\t\t}\n\t\t}\n\t\tthis.settings = this.mergeEffectiveSettings();\n\t}\n\n\tasync reload(): Promise<void> {\n\t\tawait this.writeQueue;\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(this.storage, \"global\");\n\t\tif (!globalLoad.error) {\n\t\t\tthis.globalSettings = globalLoad.settings;\n\t\t\tthis.globalSettingsLoadError = null;\n\t\t\tfor (const { error } of SettingsManager.validateLoadedSettings(\"global\", globalLoad.settings)) {\n\t\t\t\tthis.recordError(\"global\", error);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.globalSettingsLoadError = globalLoad.error;\n\t\t\tthis.recordError(\"global\", globalLoad.error);\n\t\t}\n\n\t\tthis.modifiedFields.clear();\n\t\tthis.modifiedNestedFields.clear();\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(this.storage, \"project\", this.projectTrusted);\n\t\tif (!projectLoad.error) {\n\t\t\tthis.projectSettings = projectLoad.settings;\n\t\t\tthis.projectSettingsLoadError = null;\n\t\t\tfor (const { error } of SettingsManager.validateLoadedSettings(\"project\", projectLoad.settings)) {\n\t\t\t\tthis.recordError(\"project\", error);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.projectSettingsLoadError = projectLoad.error;\n\t\t\tthis.recordError(\"project\", projectLoad.error);\n\t\t}\n\n\t\tthis.settings = this.mergeEffectiveSettings();\n\t}\n\t/** Load a reload candidate without publishing any settings to live readers. */\n\tasync prepareReload(): Promise<{ settingsManager: SettingsManager; commit: () => void }> {\n\t\tawait this.writeQueue;\n\t\tconst candidate = new SettingsManager(\n\t\t\tthis.storage,\n\t\t\tstructuredClone(this.globalSettings),\n\t\t\tstructuredClone(this.projectSettings),\n\t\t\tthis.globalSettingsLoadError,\n\t\t\tthis.projectSettingsLoadError,\n\t\t\t[...this.errors],\n\t\t\tthis.projectTrusted,\n\t\t);\n\t\tawait candidate.reload();\n\t\treturn {\n\t\t\tsettingsManager: candidate,\n\t\t\tcommit: () => this.publishReload(candidate),\n\t\t};\n\t}\n\n\tprivate publishReload(candidate: SettingsManager): void {\n\t\tthis.globalSettings = candidate.globalSettings;\n\t\tthis.projectSettings = candidate.projectSettings;\n\t\tthis.settings = candidate.settings;\n\t\tthis.projectTrusted = candidate.projectTrusted;\n\t\tthis.modifiedFields = candidate.modifiedFields;\n\t\tthis.modifiedNestedFields = candidate.modifiedNestedFields;\n\t\tthis.modifiedProjectFields = candidate.modifiedProjectFields;\n\t\tthis.modifiedProjectNestedFields = candidate.modifiedProjectNestedFields;\n\t\tthis.globalSettingsLoadError = candidate.globalSettingsLoadError;\n\t\tthis.projectSettingsLoadError = candidate.projectSettingsLoadError;\n\t\tthis.errors = candidate.errors;\n\t}\n\n\t/** Apply additional overrides on top of current settings */\n\tapplyOverrides(overrides: Partial<Settings>): void {\n\t\tthis.settings = deepMergeSettings(this.settings, overrides);\n\t}\n\n\t/** Mark a global field as modified during this session */\n\tprivate markModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.modifiedFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedNestedFields.has(field)) {\n\t\t\t\tthis.modifiedNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\tprivate assertProjectTrustedForWrite(): void {\n\t\tif (!this.projectTrusted) {\n\t\t\tthrow new Error(\"Project is not trusted; refusing to write project settings\");\n\t\t}\n\t}\n\n\t/** Mark a project field as modified during this session */\n\tprivate markProjectModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.assertProjectTrustedForWrite();\n\t\tthis.modifiedProjectFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedProjectNestedFields.has(field)) {\n\t\t\t\tthis.modifiedProjectNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedProjectNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\tprivate recordError(scope: SettingsScope, error: unknown): void {\n\t\tconst normalizedError = error instanceof Error ? error : new Error(String(error));\n\t\tthis.errors.push({ scope, error: normalizedError });\n\t}\n\n\tprivate clearModifiedScope(scope: SettingsScope): void {\n\t\tif (scope === \"global\") {\n\t\t\tthis.modifiedFields.clear();\n\t\t\tthis.modifiedNestedFields.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\t}\n\n\tprivate enqueueWrite(scope: SettingsScope, task: () => void): void {\n\t\tconst owner = settingsWriteOwner.getStore() ?? ownedSettingsManagers.get(this);\n\t\tthis.writeQueue = this.writeQueue\n\t\t\t.then(() => {\n\t\t\t\tif (scope === \"project\") {\n\t\t\t\t\tthis.assertProjectTrustedForWrite();\n\t\t\t\t}\n\t\t\t\ttask();\n\t\t\t\tthis.clearModifiedScope(scope);\n\t\t\t\trecordSettingsWrite(owner, scope);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.recordError(scope, error);\n\t\t\t\trecordSettingsWrite(owner, scope, error);\n\t\t\t});\n\t}\n\n\tprivate cloneModifiedNestedFields(source: Map<keyof Settings, Set<string>>): Map<keyof Settings, Set<string>> {\n\t\tconst snapshot = new Map<keyof Settings, Set<string>>();\n\t\tfor (const [key, value] of source.entries()) {\n\t\t\tsnapshot.set(key, new Set(value));\n\t\t}\n\t\treturn snapshot;\n\t}\n\n\tprivate persistScopedSettings(\n\t\tscope: SettingsScope,\n\t\tsnapshotSettings: Settings,\n\t\tmodifiedFields: Set<keyof Settings>,\n\t\tmodifiedNestedFields: Map<keyof Settings, Set<string>>,\n\t): void {\n\t\tconst persist = (currentPrimary: string | undefined): string => {\n\t\t\tconst currentFileSettings = currentPrimary\n\t\t\t\t? SettingsManager.migrateSettings(parseJsonFileContent(currentPrimary) as Record<string, unknown>)\n\t\t\t\t: {};\n\t\t\tconst mergedSettings: Settings = { ...currentFileSettings };\n\t\t\tfor (const field of modifiedFields) {\n\t\t\t\tconst value = snapshotSettings[field];\n\t\t\t\tif (modifiedNestedFields.has(field) && typeof value === \"object\" && value !== null) {\n\t\t\t\t\tconst nestedModified = modifiedNestedFields.get(field)!;\n\t\t\t\t\tconst baseNested = (currentFileSettings[field] as Record<string, unknown>) ?? {};\n\t\t\t\t\tconst inMemoryNested = value as Record<string, unknown>;\n\t\t\t\t\tconst mergedNested = { ...baseNested };\n\t\t\t\t\tfor (const nestedKey of nestedModified) {\n\t\t\t\t\t\tmergedNested[nestedKey] = inMemoryNested[nestedKey];\n\t\t\t\t\t}\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = mergedNested;\n\t\t\t\t} else {\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn JSON.stringify(mergedSettings, null, 2);\n\t\t};\n\n\t\tif (this.storage.withPrimaryWriteLock) {\n\t\t\tthis.storage.withPrimaryWriteLock(scope, persist);\n\t\t} else {\n\t\t\tthis.storage.withLock(scope, persist);\n\t\t}\n\t}\n\n\tprivate save(): void {\n\t\tthis.settings = this.mergeEffectiveSettings();\n\n\t\tif (this.globalSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotGlobalSettings = structuredClone(this.globalSettings);\n\t\tconst modifiedFields = new Set(this.modifiedFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedNestedFields);\n\n\t\tthis.enqueueWrite(\"global\", () => {\n\t\t\tthis.persistScopedSettings(\"global\", snapshotGlobalSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tprivate saveProjectSettings(settings: Settings): void {\n\t\tthis.assertProjectTrustedForWrite();\n\t\tthis.projectSettings = structuredClone(settings);\n\t\tthis.settings = this.mergeEffectiveSettings();\n\n\t\tif (this.projectSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotProjectSettings = structuredClone(this.projectSettings);\n\t\tconst modifiedFields = new Set(this.modifiedProjectFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedProjectNestedFields);\n\t\tthis.enqueueWrite(\"project\", () => {\n\t\t\tthis.persistScopedSettings(\"project\", snapshotProjectSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tawait this.writeQueue;\n\t}\n\n\tdrainErrors(): SettingsError[] {\n\t\tconst drained = [...this.errors];\n\t\tthis.errors = [];\n\t\treturn drained;\n\t}\n\n\tprivate touchSplitAccessorMethods(): void {\n\t\tvoid this.markModified;\n\t\tvoid this.markProjectModified;\n\t\tvoid this.save;\n\t\tvoid this.saveProjectSettings;\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { ScrollViewScrollbar, TerminalCapabilities } from "@earendil-works/pi-tui";
1
+ import type { ScrollViewScrollbar, TerminalCapabilities, WheelScrollLines } from "@earendil-works/pi-tui";
2
2
  import type { FullscreenExitOutput, MermaidRenderingMode, WarningSettings } from "./settings-types.ts";
3
3
  interface SettingsManagerUiAccessors {
4
4
  getShowImages(): boolean;
@@ -40,6 +40,8 @@ interface SettingsManagerUiAccessors {
40
40
  setFullscreenExitOutput(output: FullscreenExitOutput): void;
41
41
  getFullscreenCopyOnSelect(): boolean;
42
42
  setFullscreenCopyOnSelect(enabled: boolean): void;
43
+ getFullscreenWheelScrollLines(): WheelScrollLines;
44
+ setFullscreenWheelScrollLines(lines: WheelScrollLines): void;
43
45
  getTerminalCapabilityOverrides(): Partial<TerminalCapabilities>;
44
46
  }
45
47
  declare module "./settings-manager-core.ts" {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager-ui-accessors.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager-ui-accessors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAIxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEvG,UAAU,0BAA0B;IACnC,aAAa,IAAI,OAAO,CAAC;IACzB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,gBAAgB,IAAI,OAAO,CAAC;IAC5B,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,uBAAuB,IAAI,OAAO,CAAC;IACnC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAChD,kBAAkB,IAAI,OAAO,CAAC;IAC9B,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3C,cAAc,IAAI,OAAO,CAAC;IAC1B,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,gBAAgB,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IACvD,qBAAqB,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClD,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9D,iBAAiB,IAAI,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,KAAK,CAAC;IACnF,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7F,qBAAqB,IAAI,OAAO,CAAC;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,iBAAiB,IAAI,MAAM,CAAC;IAC5B,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACnC,yBAAyB,IAAI,MAAM,CAAC;IACpC,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,kBAAkB,IAAI,MAAM,CAAC;IAC7B,uBAAuB,IAAI,oBAAoB,CAAC;IAChD,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1D,wBAAwB,IAAI,OAAO,CAAC;IACpC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD,WAAW,IAAI,eAAe,CAAC;IAC/B,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,sBAAsB,IAAI,mBAAmB,CAAC;IAC9C,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxD,uBAAuB,IAAI,oBAAoB,CAAC;IAChD,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5D,yBAAyB,IAAI,OAAO,CAAC;IACrC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,8BAA8B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAChE;AAED,OAAO,QAAQ,4BAA4B,CAAC;IAC3C,UAAU,eAAgB,SAAQ,0BAA0B;KAAG;CAC/D"}
1
+ {"version":3,"file":"settings-manager-ui-accessors.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager-ui-accessors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1G,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEvG,UAAU,0BAA0B;IACnC,aAAa,IAAI,OAAO,CAAC;IACzB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,gBAAgB,IAAI,OAAO,CAAC;IAC5B,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,uBAAuB,IAAI,OAAO,CAAC;IACnC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAChD,kBAAkB,IAAI,OAAO,CAAC;IAC9B,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3C,cAAc,IAAI,OAAO,CAAC;IAC1B,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,gBAAgB,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IACvD,qBAAqB,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClD,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9D,iBAAiB,IAAI,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,KAAK,CAAC;IACnF,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7F,qBAAqB,IAAI,OAAO,CAAC;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,iBAAiB,IAAI,MAAM,CAAC;IAC5B,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACnC,yBAAyB,IAAI,MAAM,CAAC;IACpC,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,kBAAkB,IAAI,MAAM,CAAC;IAC7B,uBAAuB,IAAI,oBAAoB,CAAC;IAChD,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1D,wBAAwB,IAAI,OAAO,CAAC;IACpC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD,WAAW,IAAI,eAAe,CAAC;IAC/B,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,sBAAsB,IAAI,mBAAmB,CAAC;IAC9C,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxD,uBAAuB,IAAI,oBAAoB,CAAC;IAChD,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5D,yBAAyB,IAAI,OAAO,CAAC;IACrC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,6BAA6B,IAAI,gBAAgB,CAAC;IAClD,6BAA6B,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC7D,8BAA8B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAChE;AAED,OAAO,QAAQ,4BAA4B,CAAC;IAC3C,UAAU,eAAgB,SAAQ,0BAA0B;KAAG;CAC/D"}
@@ -149,6 +149,19 @@ const uiAccessors = {
149
149
  state.markModified("fullscreenCopyOnSelect");
150
150
  state.save();
151
151
  },
152
+ getFullscreenWheelScrollLines() {
153
+ const lines = settingsInternals(this).settings.fullscreenWheelScrollLines;
154
+ return typeof lines === "number" && Number.isFinite(lines)
155
+ ? Math.max(1, Math.min(100, Math.floor(lines)))
156
+ : "auto";
157
+ },
158
+ setFullscreenWheelScrollLines(lines) {
159
+ const state = settingsInternals(this);
160
+ state.globalSettings.fullscreenWheelScrollLines =
161
+ lines === "auto" ? lines : Math.max(1, Math.min(100, Math.floor(lines)));
162
+ state.markModified("fullscreenWheelScrollLines");
163
+ state.save();
164
+ },
152
165
  getTerminalCapabilityOverrides() {
153
166
  const terminal = settingsInternals(this).settings.terminal;
154
167
  const overrides = {};
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager-ui-accessors.js","sourceRoot":"","sources":["../../src/core/settings-manager-ui-accessors.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ScrollViewScrollbar, TerminalCapabilities } from \"@earendil-works/pi-tui\";\nimport { ENV_CLEAR_ON_SHRINK, ENV_HARDWARE_CURSOR, getEnvValue } from \"../config.js\";\nimport { SettingsManager } from \"./settings-manager-core.ts\";\nimport { settingsInternals } from \"./settings-manager-internals.ts\";\nimport type { FullscreenExitOutput, MermaidRenderingMode, WarningSettings } from \"./settings-types.ts\";\n\ninterface SettingsManagerUiAccessors {\n\tgetShowImages(): boolean;\n\tsetShowImages(show: boolean): void;\n\tgetImageWidthCells(): number;\n\tsetImageWidthCells(width: number): void;\n\tgetClearOnShrink(): boolean;\n\tsetClearOnShrink(enabled: boolean): void;\n\tgetShowTerminalProgress(): boolean;\n\tsetShowTerminalProgress(enabled: boolean): void;\n\tgetImageAutoResize(): boolean;\n\tsetImageAutoResize(enabled: boolean): void;\n\tgetBlockImages(): boolean;\n\tsetBlockImages(blocked: boolean): void;\n\tgetEnabledModels(): string[] | undefined;\n\tsetEnabledModels(patterns: string[] | undefined): void;\n\tgetDoubleEscapeAction(): \"fork\" | \"tree\" | \"none\";\n\tsetDoubleEscapeAction(action: \"fork\" | \"tree\" | \"none\"): void;\n\tgetTreeFilterMode(): \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\tsetTreeFilterMode(mode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"): void;\n\tgetShowHardwareCursor(): boolean;\n\tsetShowHardwareCursor(enabled: boolean): void;\n\tgetEditorPaddingX(): number;\n\tsetEditorPaddingX(padding: number): void;\n\tgetOutputPad(): 0 | 1;\n\tsetOutputPad(padding: 0 | 1): void;\n\tgetAutocompleteMaxVisible(): number;\n\tsetAutocompleteMaxVisible(maxVisible: number): void;\n\tgetCodeBlockIndent(): string;\n\tgetMermaidRenderingMode(): MermaidRenderingMode;\n\tsetMermaidRenderingMode(mode: MermaidRenderingMode): void;\n\tgetLatexRenderingEnabled(): boolean;\n\tsetLatexRenderingEnabled(enabled: boolean): void;\n\tgetWarnings(): WarningSettings;\n\tsetWarnings(warnings: WarningSettings): void;\n\tgetFullscreenScrollbar(): ScrollViewScrollbar;\n\tsetFullscreenScrollbar(mode: ScrollViewScrollbar): void;\n\tgetFullscreenExitOutput(): FullscreenExitOutput;\n\tsetFullscreenExitOutput(output: FullscreenExitOutput): void;\n\tgetFullscreenCopyOnSelect(): boolean;\n\tsetFullscreenCopyOnSelect(enabled: boolean): void;\n\tgetTerminalCapabilityOverrides(): Partial<TerminalCapabilities>;\n}\n\ndeclare module \"./settings-manager-core.ts\" {\n\tinterface SettingsManager extends SettingsManagerUiAccessors {}\n}\n\nconst uiAccessors: SettingsManagerUiAccessors = {\n\tgetShowImages() {\n\t\treturn settingsInternals(this).settings.terminal?.showImages ?? true;\n\t},\n\n\tsetShowImages(show) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.showImages = show;\n\t\tstate.markModified(\"terminal\", \"showImages\");\n\t\tstate.save();\n\t},\n\n\tgetImageWidthCells() {\n\t\tconst width = settingsInternals(this).settings.terminal?.imageWidthCells;\n\t\tif (typeof width !== \"number\" || !Number.isFinite(width)) {\n\t\t\treturn 60;\n\t\t}\n\t\treturn Math.max(1, Math.floor(width));\n\t},\n\n\tsetImageWidthCells(width) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.imageWidthCells = Math.max(1, Math.floor(width));\n\t\tstate.markModified(\"terminal\", \"imageWidthCells\");\n\t\tstate.save();\n\t},\n\n\tgetClearOnShrink() {\n\t\t// Settings takes precedence, then env var, then default false\n\t\tconst terminal = settingsInternals(this).settings.terminal;\n\t\tif (terminal?.clearOnShrink !== undefined) {\n\t\t\treturn terminal.clearOnShrink;\n\t\t}\n\t\treturn getEnvValue(ENV_CLEAR_ON_SHRINK) === \"1\";\n\t},\n\n\tsetClearOnShrink(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.clearOnShrink = enabled;\n\t\tstate.markModified(\"terminal\", \"clearOnShrink\");\n\t\tstate.save();\n\t},\n\n\tgetShowTerminalProgress() {\n\t\treturn settingsInternals(this).settings.terminal?.showTerminalProgress ?? false;\n\t},\n\n\tsetShowTerminalProgress(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.showTerminalProgress = enabled;\n\t\tstate.markModified(\"terminal\", \"showTerminalProgress\");\n\t\tstate.save();\n\t},\n\n\tgetImageAutoResize() {\n\t\treturn settingsInternals(this).settings.images?.autoResize ?? true;\n\t},\n\n\tsetImageAutoResize(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.images) {\n\t\t\tstate.globalSettings.images = {};\n\t\t}\n\t\tstate.globalSettings.images.autoResize = enabled;\n\t\tstate.markModified(\"images\", \"autoResize\");\n\t\tstate.save();\n\t},\n\n\tgetBlockImages() {\n\t\treturn settingsInternals(this).settings.images?.blockImages ?? false;\n\t},\n\n\tsetBlockImages(blocked) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.images) {\n\t\t\tstate.globalSettings.images = {};\n\t\t}\n\t\tstate.globalSettings.images.blockImages = blocked;\n\t\tstate.markModified(\"images\", \"blockImages\");\n\t\tstate.save();\n\t},\n\n\tgetEnabledModels() {\n\t\treturn settingsInternals(this).settings.enabledModels;\n\t},\n\n\tsetEnabledModels(patterns) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.enabledModels = patterns;\n\t\tstate.markModified(\"enabledModels\");\n\t\tstate.save();\n\t},\n\n\tgetDoubleEscapeAction() {\n\t\treturn settingsInternals(this).settings.doubleEscapeAction ?? \"tree\";\n\t},\n\n\tsetDoubleEscapeAction(action) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.doubleEscapeAction = action;\n\t\tstate.markModified(\"doubleEscapeAction\");\n\t\tstate.save();\n\t},\n\n\tgetTreeFilterMode() {\n\t\tconst mode = settingsInternals(this).settings.treeFilterMode;\n\t\tconst valid = [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"];\n\t\treturn mode && valid.includes(mode) ? mode : \"default\";\n\t},\n\n\tsetTreeFilterMode(mode) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.treeFilterMode = mode;\n\t\tstate.markModified(\"treeFilterMode\");\n\t\tstate.save();\n\t},\n\n\tgetShowHardwareCursor() {\n\t\treturn settingsInternals(this).settings.showHardwareCursor ?? getEnvValue(ENV_HARDWARE_CURSOR) === \"1\";\n\t},\n\n\tsetShowHardwareCursor(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.showHardwareCursor = enabled;\n\t\tstate.markModified(\"showHardwareCursor\");\n\t\tstate.save();\n\t},\n\n\tgetFullscreenScrollbar() {\n\t\tconst mode = settingsInternals(this).settings.fullscreenScrollbar;\n\t\treturn mode === \"always\" || mode === \"hidden\" ? mode : \"auto\";\n\t},\n\n\tsetFullscreenScrollbar(mode) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.fullscreenScrollbar = mode;\n\t\tstate.markModified(\"fullscreenScrollbar\");\n\t\tstate.save();\n\t},\n\n\tgetFullscreenExitOutput() {\n\t\treturn settingsInternals(this).settings.fullscreenExitOutput === \"resume-hint\" ? \"resume-hint\" : \"transcript\";\n\t},\n\n\tsetFullscreenExitOutput(output) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.fullscreenExitOutput = output;\n\t\tstate.markModified(\"fullscreenExitOutput\");\n\t\tstate.save();\n\t},\n\n\tgetFullscreenCopyOnSelect() {\n\t\treturn settingsInternals(this).settings.fullscreenCopyOnSelect !== false;\n\t},\n\n\tsetFullscreenCopyOnSelect(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.fullscreenCopyOnSelect = enabled;\n\t\tstate.markModified(\"fullscreenCopyOnSelect\");\n\t\tstate.save();\n\t},\n\n\tgetTerminalCapabilityOverrides() {\n\t\tconst terminal = settingsInternals(this).settings.terminal;\n\t\tconst overrides: Partial<TerminalCapabilities> = {};\n\t\tif (typeof terminal?.hyperlinks === \"boolean\") overrides.hyperlinks = terminal.hyperlinks;\n\t\tif (terminal?.images === \"kitty\" || terminal?.images === \"iterm2\") overrides.images = terminal.images;\n\t\telse if (terminal?.images === false) overrides.images = null;\n\t\tif (typeof terminal?.trueColor === \"boolean\") overrides.trueColor = terminal.trueColor;\n\t\treturn overrides;\n\t},\n\n\tgetEditorPaddingX() {\n\t\treturn settingsInternals(this).settings.editorPaddingX ?? 0;\n\t},\n\n\tsetEditorPaddingX(padding) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.editorPaddingX = Math.max(0, Math.min(3, Math.floor(padding)));\n\t\tstate.markModified(\"editorPaddingX\");\n\t\tstate.save();\n\t},\n\n\tgetOutputPad() {\n\t\treturn settingsInternals(this).settings.outputPad === 0 ? 0 : 1;\n\t},\n\n\tsetOutputPad(padding) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.outputPad = padding;\n\t\tstate.markModified(\"outputPad\");\n\t\tstate.save();\n\t},\n\n\tgetAutocompleteMaxVisible() {\n\t\treturn settingsInternals(this).settings.autocompleteMaxVisible ?? 5;\n\t},\n\n\tsetAutocompleteMaxVisible(maxVisible) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.autocompleteMaxVisible = Math.max(3, Math.min(20, Math.floor(maxVisible)));\n\t\tstate.markModified(\"autocompleteMaxVisible\");\n\t\tstate.save();\n\t},\n\n\tgetCodeBlockIndent() {\n\t\treturn settingsInternals(this).settings.markdown?.codeBlockIndent ?? \" \";\n\t},\n\n\tgetMermaidRenderingMode() {\n\t\tconst mode = settingsInternals(this).settings.markdown?.mermaid;\n\t\treturn mode === \"off\" || mode === \"final\" ? mode : \"streaming\";\n\t},\n\n\tsetMermaidRenderingMode(mode) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.markdown ??= {};\n\t\tstate.globalSettings.markdown.mermaid = mode;\n\t\tstate.markModified(\"markdown\", \"mermaid\");\n\t\tstate.save();\n\t},\n\n\tgetLatexRenderingEnabled() {\n\t\treturn settingsInternals(this).settings.markdown?.latex !== false;\n\t},\n\n\tsetLatexRenderingEnabled(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.markdown ??= {};\n\t\tstate.globalSettings.markdown.latex = enabled;\n\t\tstate.markModified(\"markdown\", \"latex\");\n\t\tstate.save();\n\t},\n\n\tgetWarnings() {\n\t\treturn { ...(settingsInternals(this).settings.warnings ?? {}) };\n\t},\n\n\tsetWarnings(warnings) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.warnings = { ...warnings };\n\t\tstate.markModified(\"warnings\");\n\t\tstate.save();\n\t},\n};\n\nObject.assign(SettingsManager.prototype, uiAccessors);\n"]}
1
+ {"version":3,"file":"settings-manager-ui-accessors.js","sourceRoot":"","sources":["../../src/core/settings-manager-ui-accessors.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ScrollViewScrollbar, TerminalCapabilities, WheelScrollLines } from \"@earendil-works/pi-tui\";\nimport { ENV_CLEAR_ON_SHRINK, ENV_HARDWARE_CURSOR, getEnvValue } from \"../config.js\";\nimport { SettingsManager } from \"./settings-manager-core.ts\";\nimport { settingsInternals } from \"./settings-manager-internals.ts\";\nimport type { FullscreenExitOutput, MermaidRenderingMode, WarningSettings } from \"./settings-types.ts\";\n\ninterface SettingsManagerUiAccessors {\n\tgetShowImages(): boolean;\n\tsetShowImages(show: boolean): void;\n\tgetImageWidthCells(): number;\n\tsetImageWidthCells(width: number): void;\n\tgetClearOnShrink(): boolean;\n\tsetClearOnShrink(enabled: boolean): void;\n\tgetShowTerminalProgress(): boolean;\n\tsetShowTerminalProgress(enabled: boolean): void;\n\tgetImageAutoResize(): boolean;\n\tsetImageAutoResize(enabled: boolean): void;\n\tgetBlockImages(): boolean;\n\tsetBlockImages(blocked: boolean): void;\n\tgetEnabledModels(): string[] | undefined;\n\tsetEnabledModels(patterns: string[] | undefined): void;\n\tgetDoubleEscapeAction(): \"fork\" | \"tree\" | \"none\";\n\tsetDoubleEscapeAction(action: \"fork\" | \"tree\" | \"none\"): void;\n\tgetTreeFilterMode(): \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\tsetTreeFilterMode(mode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"): void;\n\tgetShowHardwareCursor(): boolean;\n\tsetShowHardwareCursor(enabled: boolean): void;\n\tgetEditorPaddingX(): number;\n\tsetEditorPaddingX(padding: number): void;\n\tgetOutputPad(): 0 | 1;\n\tsetOutputPad(padding: 0 | 1): void;\n\tgetAutocompleteMaxVisible(): number;\n\tsetAutocompleteMaxVisible(maxVisible: number): void;\n\tgetCodeBlockIndent(): string;\n\tgetMermaidRenderingMode(): MermaidRenderingMode;\n\tsetMermaidRenderingMode(mode: MermaidRenderingMode): void;\n\tgetLatexRenderingEnabled(): boolean;\n\tsetLatexRenderingEnabled(enabled: boolean): void;\n\tgetWarnings(): WarningSettings;\n\tsetWarnings(warnings: WarningSettings): void;\n\tgetFullscreenScrollbar(): ScrollViewScrollbar;\n\tsetFullscreenScrollbar(mode: ScrollViewScrollbar): void;\n\tgetFullscreenExitOutput(): FullscreenExitOutput;\n\tsetFullscreenExitOutput(output: FullscreenExitOutput): void;\n\tgetFullscreenCopyOnSelect(): boolean;\n\tsetFullscreenCopyOnSelect(enabled: boolean): void;\n\tgetFullscreenWheelScrollLines(): WheelScrollLines;\n\tsetFullscreenWheelScrollLines(lines: WheelScrollLines): void;\n\tgetTerminalCapabilityOverrides(): Partial<TerminalCapabilities>;\n}\n\ndeclare module \"./settings-manager-core.ts\" {\n\tinterface SettingsManager extends SettingsManagerUiAccessors {}\n}\n\nconst uiAccessors: SettingsManagerUiAccessors = {\n\tgetShowImages() {\n\t\treturn settingsInternals(this).settings.terminal?.showImages ?? true;\n\t},\n\n\tsetShowImages(show) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.showImages = show;\n\t\tstate.markModified(\"terminal\", \"showImages\");\n\t\tstate.save();\n\t},\n\n\tgetImageWidthCells() {\n\t\tconst width = settingsInternals(this).settings.terminal?.imageWidthCells;\n\t\tif (typeof width !== \"number\" || !Number.isFinite(width)) {\n\t\t\treturn 60;\n\t\t}\n\t\treturn Math.max(1, Math.floor(width));\n\t},\n\n\tsetImageWidthCells(width) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.imageWidthCells = Math.max(1, Math.floor(width));\n\t\tstate.markModified(\"terminal\", \"imageWidthCells\");\n\t\tstate.save();\n\t},\n\n\tgetClearOnShrink() {\n\t\t// Settings takes precedence, then env var, then default false\n\t\tconst terminal = settingsInternals(this).settings.terminal;\n\t\tif (terminal?.clearOnShrink !== undefined) {\n\t\t\treturn terminal.clearOnShrink;\n\t\t}\n\t\treturn getEnvValue(ENV_CLEAR_ON_SHRINK) === \"1\";\n\t},\n\n\tsetClearOnShrink(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.clearOnShrink = enabled;\n\t\tstate.markModified(\"terminal\", \"clearOnShrink\");\n\t\tstate.save();\n\t},\n\n\tgetShowTerminalProgress() {\n\t\treturn settingsInternals(this).settings.terminal?.showTerminalProgress ?? false;\n\t},\n\n\tsetShowTerminalProgress(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.terminal) {\n\t\t\tstate.globalSettings.terminal = {};\n\t\t}\n\t\tstate.globalSettings.terminal.showTerminalProgress = enabled;\n\t\tstate.markModified(\"terminal\", \"showTerminalProgress\");\n\t\tstate.save();\n\t},\n\n\tgetImageAutoResize() {\n\t\treturn settingsInternals(this).settings.images?.autoResize ?? true;\n\t},\n\n\tsetImageAutoResize(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.images) {\n\t\t\tstate.globalSettings.images = {};\n\t\t}\n\t\tstate.globalSettings.images.autoResize = enabled;\n\t\tstate.markModified(\"images\", \"autoResize\");\n\t\tstate.save();\n\t},\n\n\tgetBlockImages() {\n\t\treturn settingsInternals(this).settings.images?.blockImages ?? false;\n\t},\n\n\tsetBlockImages(blocked) {\n\t\tconst state = settingsInternals(this);\n\t\tif (!state.globalSettings.images) {\n\t\t\tstate.globalSettings.images = {};\n\t\t}\n\t\tstate.globalSettings.images.blockImages = blocked;\n\t\tstate.markModified(\"images\", \"blockImages\");\n\t\tstate.save();\n\t},\n\n\tgetEnabledModels() {\n\t\treturn settingsInternals(this).settings.enabledModels;\n\t},\n\n\tsetEnabledModels(patterns) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.enabledModels = patterns;\n\t\tstate.markModified(\"enabledModels\");\n\t\tstate.save();\n\t},\n\n\tgetDoubleEscapeAction() {\n\t\treturn settingsInternals(this).settings.doubleEscapeAction ?? \"tree\";\n\t},\n\n\tsetDoubleEscapeAction(action) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.doubleEscapeAction = action;\n\t\tstate.markModified(\"doubleEscapeAction\");\n\t\tstate.save();\n\t},\n\n\tgetTreeFilterMode() {\n\t\tconst mode = settingsInternals(this).settings.treeFilterMode;\n\t\tconst valid = [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"];\n\t\treturn mode && valid.includes(mode) ? mode : \"default\";\n\t},\n\n\tsetTreeFilterMode(mode) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.treeFilterMode = mode;\n\t\tstate.markModified(\"treeFilterMode\");\n\t\tstate.save();\n\t},\n\n\tgetShowHardwareCursor() {\n\t\treturn settingsInternals(this).settings.showHardwareCursor ?? getEnvValue(ENV_HARDWARE_CURSOR) === \"1\";\n\t},\n\n\tsetShowHardwareCursor(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.showHardwareCursor = enabled;\n\t\tstate.markModified(\"showHardwareCursor\");\n\t\tstate.save();\n\t},\n\n\tgetFullscreenScrollbar() {\n\t\tconst mode = settingsInternals(this).settings.fullscreenScrollbar;\n\t\treturn mode === \"always\" || mode === \"hidden\" ? mode : \"auto\";\n\t},\n\n\tsetFullscreenScrollbar(mode) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.fullscreenScrollbar = mode;\n\t\tstate.markModified(\"fullscreenScrollbar\");\n\t\tstate.save();\n\t},\n\n\tgetFullscreenExitOutput() {\n\t\treturn settingsInternals(this).settings.fullscreenExitOutput === \"resume-hint\" ? \"resume-hint\" : \"transcript\";\n\t},\n\n\tsetFullscreenExitOutput(output) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.fullscreenExitOutput = output;\n\t\tstate.markModified(\"fullscreenExitOutput\");\n\t\tstate.save();\n\t},\n\n\tgetFullscreenCopyOnSelect() {\n\t\treturn settingsInternals(this).settings.fullscreenCopyOnSelect !== false;\n\t},\n\n\tsetFullscreenCopyOnSelect(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.fullscreenCopyOnSelect = enabled;\n\t\tstate.markModified(\"fullscreenCopyOnSelect\");\n\t\tstate.save();\n\t},\n\n\tgetFullscreenWheelScrollLines() {\n\t\tconst lines = settingsInternals(this).settings.fullscreenWheelScrollLines;\n\t\treturn typeof lines === \"number\" && Number.isFinite(lines)\n\t\t\t? Math.max(1, Math.min(100, Math.floor(lines)))\n\t\t\t: \"auto\";\n\t},\n\tsetFullscreenWheelScrollLines(lines) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.fullscreenWheelScrollLines =\n\t\t\tlines === \"auto\" ? lines : Math.max(1, Math.min(100, Math.floor(lines)));\n\t\tstate.markModified(\"fullscreenWheelScrollLines\");\n\t\tstate.save();\n\t},\n\n\tgetTerminalCapabilityOverrides() {\n\t\tconst terminal = settingsInternals(this).settings.terminal;\n\t\tconst overrides: Partial<TerminalCapabilities> = {};\n\t\tif (typeof terminal?.hyperlinks === \"boolean\") overrides.hyperlinks = terminal.hyperlinks;\n\t\tif (terminal?.images === \"kitty\" || terminal?.images === \"iterm2\") overrides.images = terminal.images;\n\t\telse if (terminal?.images === false) overrides.images = null;\n\t\tif (typeof terminal?.trueColor === \"boolean\") overrides.trueColor = terminal.trueColor;\n\t\treturn overrides;\n\t},\n\n\tgetEditorPaddingX() {\n\t\treturn settingsInternals(this).settings.editorPaddingX ?? 0;\n\t},\n\n\tsetEditorPaddingX(padding) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.editorPaddingX = Math.max(0, Math.min(3, Math.floor(padding)));\n\t\tstate.markModified(\"editorPaddingX\");\n\t\tstate.save();\n\t},\n\n\tgetOutputPad() {\n\t\treturn settingsInternals(this).settings.outputPad === 0 ? 0 : 1;\n\t},\n\n\tsetOutputPad(padding) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.outputPad = padding;\n\t\tstate.markModified(\"outputPad\");\n\t\tstate.save();\n\t},\n\n\tgetAutocompleteMaxVisible() {\n\t\treturn settingsInternals(this).settings.autocompleteMaxVisible ?? 5;\n\t},\n\n\tsetAutocompleteMaxVisible(maxVisible) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.autocompleteMaxVisible = Math.max(3, Math.min(20, Math.floor(maxVisible)));\n\t\tstate.markModified(\"autocompleteMaxVisible\");\n\t\tstate.save();\n\t},\n\n\tgetCodeBlockIndent() {\n\t\treturn settingsInternals(this).settings.markdown?.codeBlockIndent ?? \" \";\n\t},\n\n\tgetMermaidRenderingMode() {\n\t\tconst mode = settingsInternals(this).settings.markdown?.mermaid;\n\t\treturn mode === \"off\" || mode === \"final\" ? mode : \"streaming\";\n\t},\n\n\tsetMermaidRenderingMode(mode) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.markdown ??= {};\n\t\tstate.globalSettings.markdown.mermaid = mode;\n\t\tstate.markModified(\"markdown\", \"mermaid\");\n\t\tstate.save();\n\t},\n\n\tgetLatexRenderingEnabled() {\n\t\treturn settingsInternals(this).settings.markdown?.latex !== false;\n\t},\n\n\tsetLatexRenderingEnabled(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.markdown ??= {};\n\t\tstate.globalSettings.markdown.latex = enabled;\n\t\tstate.markModified(\"markdown\", \"latex\");\n\t\tstate.save();\n\t},\n\n\tgetWarnings() {\n\t\treturn { ...(settingsInternals(this).settings.warnings ?? {}) };\n\t},\n\n\tsetWarnings(warnings) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.warnings = { ...warnings };\n\t\tstate.markModified(\"warnings\");\n\t\tstate.save();\n\t},\n};\n\nObject.assign(SettingsManager.prototype, uiAccessors);\n"]}
@@ -5,5 +5,5 @@ import "./settings-manager-ui-accessors.ts";
5
5
  export type { ScrollViewScrollbar } from "@earendil-works/pi-tui";
6
6
  export { SettingsManager } from "./settings-manager-core.ts";
7
7
  export { FileSettingsStorage, InMemorySettingsStorage } from "./settings-storage.ts";
8
- export type { BranchSummarySettings, CompactionModelOverride, CompactionSettings, DefaultProjectTrust, FullscreenExitOutput, ImageSettings, MarkdownSettings, MermaidRenderingMode, ModelRoutingSettings, PackageSource, ProviderRetrySettings, RetrySettings, SessionSummarySettings, Settings, SettingsError, SettingsManagerCreateOptions, SettingsScope, SettingsStorage, TerminalSettings, ThinkingBudgetsSettings, TransportSetting, WarningSettings, } from "./settings-types.ts";
8
+ export type { BranchSummarySettings, CodemodeMode, CompactionModelOverride, CompactionSettings, DefaultProjectTrust, FullscreenExitOutput, ImageSettings, MarkdownSettings, MermaidRenderingMode, ModelRoutingSettings, PackageSource, ProviderRetrySettings, RetrySettings, SessionSummarySettings, Settings, SettingsError, SettingsManagerCreateOptions, SettingsScope, SettingsStorage, TerminalSettings, ThinkingBudgetsSettings, TransportSetting, WarningSettings, } from "./settings-types.ts";
9
9
  //# sourceMappingURL=settings-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,uCAAuC,CAAC;AAC/C,OAAO,0CAA0C,CAAC;AAClD,OAAO,oCAAoC,CAAC;AAE5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrF,YAAY,EACX,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,4BAA4B,EAC5B,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,GACf,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,uCAAuC,CAAC;AAC/C,OAAO,0CAA0C,CAAC;AAClD,OAAO,oCAAoC,CAAC;AAE5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrF,YAAY,EACX,qBAAqB,EACrB,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,4BAA4B,EAC5B,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,GACf,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAyB,MAAM,qBAAqB,CAAC;AAEjF,OAAO,uCAAuC,CAAC;AAC/C,OAAO,0CAA0C,CAAC;AAClD,OAAO,oCAAoC,CAAC;AAI5C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { CACHE_WARMING_MODES, type CacheWarmingMode } from \"./settings-types.ts\";\n\nimport \"./settings-manager-basic-accessors.ts\";\nimport \"./settings-manager-resource-accessors.ts\";\nimport \"./settings-manager-ui-accessors.ts\";\n\nexport type { ScrollViewScrollbar } from \"@earendil-works/pi-tui\";\n\nexport { SettingsManager } from \"./settings-manager-core.ts\";\nexport { FileSettingsStorage, InMemorySettingsStorage } from \"./settings-storage.ts\";\nexport type {\n\tBranchSummarySettings,\n\tCompactionModelOverride,\n\tCompactionSettings,\n\tDefaultProjectTrust,\n\tFullscreenExitOutput,\n\tImageSettings,\n\tMarkdownSettings,\n\tMermaidRenderingMode,\n\tModelRoutingSettings,\n\tPackageSource,\n\tProviderRetrySettings,\n\tRetrySettings,\n\tSessionSummarySettings,\n\tSettings,\n\tSettingsError,\n\tSettingsManagerCreateOptions,\n\tSettingsScope,\n\tSettingsStorage,\n\tTerminalSettings,\n\tThinkingBudgetsSettings,\n\tTransportSetting,\n\tWarningSettings,\n} from \"./settings-types.ts\";\n"]}
1
+ {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAyB,MAAM,qBAAqB,CAAC;AAEjF,OAAO,uCAAuC,CAAC;AAC/C,OAAO,0CAA0C,CAAC;AAClD,OAAO,oCAAoC,CAAC;AAI5C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { CACHE_WARMING_MODES, type CacheWarmingMode } from \"./settings-types.ts\";\n\nimport \"./settings-manager-basic-accessors.ts\";\nimport \"./settings-manager-resource-accessors.ts\";\nimport \"./settings-manager-ui-accessors.ts\";\n\nexport type { ScrollViewScrollbar } from \"@earendil-works/pi-tui\";\n\nexport { SettingsManager } from \"./settings-manager-core.ts\";\nexport { FileSettingsStorage, InMemorySettingsStorage } from \"./settings-storage.ts\";\nexport type {\n\tBranchSummarySettings,\n\tCodemodeMode,\n\tCompactionModelOverride,\n\tCompactionSettings,\n\tDefaultProjectTrust,\n\tFullscreenExitOutput,\n\tImageSettings,\n\tMarkdownSettings,\n\tMermaidRenderingMode,\n\tModelRoutingSettings,\n\tPackageSource,\n\tProviderRetrySettings,\n\tRetrySettings,\n\tSessionSummarySettings,\n\tSettings,\n\tSettingsError,\n\tSettingsManagerCreateOptions,\n\tSettingsScope,\n\tSettingsStorage,\n\tTerminalSettings,\n\tThinkingBudgetsSettings,\n\tTransportSetting,\n\tWarningSettings,\n} from \"./settings-types.ts\";\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { Settings } from "./settings-types.ts";
2
+ export declare function resolveDefaultTools(entries: string[], inherited?: readonly string[]): string[];
2
3
  /** Deep merge settings: project/overrides take precedence, nested objects merge recursively */
3
4
  export declare function deepMergeSettings(base: Settings, overrides: Settings): Settings;
4
5
  //# sourceMappingURL=settings-merge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-merge.d.ts","sourceRoot":"","sources":["../../src/core/settings-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAyBpD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAE/E"}
1
+ {"version":3,"file":"settings-merge.d.ts","sourceRoot":"","sources":["../../src/core/settings-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAOpD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,SAAS,MAAM,EAA0B,GAAG,MAAM,EAAE,CAWrH;AAyBD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAiB/E"}
@@ -1,3 +1,22 @@
1
+ import { getDefaultToolNames } from "./tools/index.js";
2
+ function isToolModifier(entry) {
3
+ return entry.startsWith("+") || entry.startsWith("-");
4
+ }
5
+ export function resolveDefaultTools(entries, inherited = getDefaultToolNames()) {
6
+ const plain = entries.filter((entry) => !isToolModifier(entry));
7
+ const tools = plain.length > 0 || entries.length === 0 ? plain : [...inherited];
8
+ for (const entry of entries) {
9
+ if (!isToolModifier(entry))
10
+ continue;
11
+ const name = entry.slice(1);
12
+ const index = tools.indexOf(name);
13
+ if (entry.startsWith("+") && index === -1 && name)
14
+ tools.push(name);
15
+ else if (entry.startsWith("-") && index !== -1)
16
+ tools.splice(index, 1);
17
+ }
18
+ return tools;
19
+ }
1
20
  function isMergeableObject(value) {
2
21
  return typeof value === "object" && value !== null && !Array.isArray(value);
3
22
  }
@@ -18,6 +37,16 @@ function deepMergeObjects(base, overrides) {
18
37
  }
19
38
  /** Deep merge settings: project/overrides take precedence, nested objects merge recursively */
20
39
  export function deepMergeSettings(base, overrides) {
21
- return deepMergeObjects(base, overrides);
40
+ const merged = deepMergeObjects(base, overrides);
41
+ const overrideTools = Array.isArray(overrides.defaultTools)
42
+ ? overrides.defaultTools.filter((entry) => typeof entry === "string")
43
+ : undefined;
44
+ if (Array.isArray(base.defaultTools) &&
45
+ overrideTools !== undefined &&
46
+ overrideTools.length > 0 &&
47
+ overrideTools.every(isToolModifier)) {
48
+ merged.defaultTools = resolveDefaultTools(overrideTools, resolveDefaultTools(base.defaultTools.filter((entry) => typeof entry === "string")));
49
+ }
50
+ return merged;
22
51
  }
23
52
  //# sourceMappingURL=settings-merge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../src/core/settings-merge.ts"],"names":[],"mappings":"AAEA,SAAS,iBAAiB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA6B,EAAE,SAAkC;IAC1F,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS;QACV,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC;YACV,iBAAiB,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,aAAa,CAAC;gBAC/D,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;gBAC5C,CAAC,CAAC,aAAa,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,SAAmB;IACpE,OAAO,gBAAgB,CAAC,IAA+B,EAAE,SAAoC,CAAa,CAAC;AAC5G,CAAC","sourcesContent":["import type { Settings } from \"./settings-types.ts\";\n\nfunction isMergeableObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepMergeObjects(base: Record<string, unknown>, overrides: Record<string, unknown>): Record<string, unknown> {\n\tconst result = { ...base };\n\n\tfor (const key of Object.keys(overrides)) {\n\t\tconst overrideValue = overrides[key];\n\t\tif (overrideValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst baseValue = base[key];\n\t\tresult[key] =\n\t\t\tisMergeableObject(baseValue) && isMergeableObject(overrideValue)\n\t\t\t\t? deepMergeObjects(baseValue, overrideValue)\n\t\t\t\t: overrideValue;\n\t}\n\n\treturn result;\n}\n\n/** Deep merge settings: project/overrides take precedence, nested objects merge recursively */\nexport function deepMergeSettings(base: Settings, overrides: Settings): Settings {\n\treturn deepMergeObjects(base as Record<string, unknown>, overrides as Record<string, unknown>) as Settings;\n}\n"]}
1
+ {"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../src/core/settings-merge.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Settings } from \"./settings-types.ts\";\nimport { getDefaultToolNames } from \"./tools/index.ts\";\n\nfunction isToolModifier(entry: string): boolean {\n\treturn entry.startsWith(\"+\") || entry.startsWith(\"-\");\n}\n\nexport function resolveDefaultTools(entries: string[], inherited: readonly string[] = getDefaultToolNames()): string[] {\n\tconst plain = entries.filter((entry) => !isToolModifier(entry));\n\tconst tools = plain.length > 0 || entries.length === 0 ? plain : [...inherited];\n\tfor (const entry of entries) {\n\t\tif (!isToolModifier(entry)) continue;\n\t\tconst name = entry.slice(1);\n\t\tconst index = tools.indexOf(name);\n\t\tif (entry.startsWith(\"+\") && index === -1 && name) tools.push(name);\n\t\telse if (entry.startsWith(\"-\") && index !== -1) tools.splice(index, 1);\n\t}\n\treturn tools;\n}\n\nfunction isMergeableObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepMergeObjects(base: Record<string, unknown>, overrides: Record<string, unknown>): Record<string, unknown> {\n\tconst result = { ...base };\n\n\tfor (const key of Object.keys(overrides)) {\n\t\tconst overrideValue = overrides[key];\n\t\tif (overrideValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst baseValue = base[key];\n\t\tresult[key] =\n\t\t\tisMergeableObject(baseValue) && isMergeableObject(overrideValue)\n\t\t\t\t? deepMergeObjects(baseValue, overrideValue)\n\t\t\t\t: overrideValue;\n\t}\n\n\treturn result;\n}\n\n/** Deep merge settings: project/overrides take precedence, nested objects merge recursively */\nexport function deepMergeSettings(base: Settings, overrides: Settings): Settings {\n\tconst merged = deepMergeObjects(base as Record<string, unknown>, overrides as Record<string, unknown>) as Settings;\n\tconst overrideTools = Array.isArray(overrides.defaultTools)\n\t\t? overrides.defaultTools.filter((entry) => typeof entry === \"string\")\n\t\t: undefined;\n\tif (\n\t\tArray.isArray(base.defaultTools) &&\n\t\toverrideTools !== undefined &&\n\t\toverrideTools.length > 0 &&\n\t\toverrideTools.every(isToolModifier)\n\t) {\n\t\tmerged.defaultTools = resolveDefaultTools(\n\t\t\toverrideTools,\n\t\t\tresolveDefaultTools(base.defaultTools.filter((entry) => typeof entry === \"string\")),\n\t\t);\n\t}\n\treturn merged;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  export declare const CACHE_WARMING_MODES: readonly ["off", "streaming", "idle"];
2
2
  export type CacheWarmingMode = (typeof CACHE_WARMING_MODES)[number];
3
3
  import type { Transport } from "@bastani/pi-ai/compat";
4
- import type { ScrollViewScrollbar } from "@earendil-works/pi-tui";
4
+ import type { ScrollViewScrollbar, WheelScrollLines } from "@earendil-works/pi-tui";
5
5
  export interface CompactionModelOverride {
6
6
  reserveTokens?: number;
7
7
  preserve_recent?: number;
@@ -69,6 +69,7 @@ export type DefaultProjectTrust = "ask" | "always" | "never";
69
69
  export type TransportSetting = Transport;
70
70
  /** What the terminal keeps when Atomic's fullscreen session exits. */
71
71
  export type FullscreenExitOutput = "transcript" | "resume-hint";
72
+ export type CodemodeMode = "on" | "only";
72
73
  /**
73
74
  * Package source for npm/git packages.
74
75
  * - String form: load all resources from the package
@@ -112,6 +113,7 @@ export interface Settings {
112
113
  theme?: string;
113
114
  enableAnalytics?: boolean;
114
115
  trackingId?: string;
116
+ deviceId?: string;
115
117
  showCacheMissNotices?: boolean;
116
118
  compaction?: CompactionSettings;
117
119
  branchSummary?: BranchSummarySettings;
@@ -152,6 +154,11 @@ export interface Settings {
152
154
  fullscreenScrollbar?: ScrollViewScrollbar;
153
155
  fullscreenExitOutput?: FullscreenExitOutput;
154
156
  fullscreenCopyOnSelect?: boolean;
157
+ fullscreenWheelScrollLines?: WheelScrollLines;
158
+ codemode?: {
159
+ mode?: CodemodeMode;
160
+ inlineBudget?: number;
161
+ };
155
162
  markdown?: MarkdownSettings;
156
163
  warnings?: WarningSettings;
157
164
  sessionDir?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-types.d.ts","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-types.d.ts","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC","sourcesContent":["export const CACHE_WARMING_MODES = [\"off\", \"streaming\", \"idle\"] as const;\nexport type CacheWarmingMode = (typeof CACHE_WARMING_MODES)[number];\n\nimport type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar } from \"@earendil-works/pi-tui\";\n\nexport interface CompactionModelOverride {\n\treserveTokens?: number;\n\tpreserve_recent?: number;\n}\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tcompression_ratio?: number; // default: 0.5 (fraction of compactable context to keep)\n\tpreserve_recent?: number; // default: 2 (recent context-eligible messages to keep)\n\tquery?: string; // default: auto-detected from session context\n\tmodelOverrides?: Record<string, CompactionModelOverride>; // exact \"provider/modelId\" keys\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface SessionSummarySettings {\n\tenabled?: boolean; // default: true - generate a one-line resume-picker summary once the agent goes idle\n}\n\nexport interface ProviderRetrySettings {\n\ttimeoutMs?: number; // SDK/provider request timeout in milliseconds\n\tmaxRetries?: number; // SDK/provider retry attempts\n\tmaxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxAgentDelayMs?: number; // default: 60000\n\tprovider?: ProviderRetrySettings;\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\timageWidthCells?: number; // default: 60 (preferred inline image width in terminal cells)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n\tshowTerminalProgress?: boolean; // default: false (OSC 9;4 terminal progress indicators)\n\thyperlinks?: boolean | \"auto\";\n\timages?: \"kitty\" | \"iterm2\" | \"auto\" | false;\n\ttrueColor?: boolean | \"auto\";\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface SearchSettings {\n\tcontextBefore?: number;\n\tcontextAfter?: number;\n}\nexport interface ThinkingBudgetsSettings {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport type MermaidRenderingMode = \"off\" | \"final\" | \"streaming\";\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n\tmermaid?: MermaidRenderingMode; // default: \"streaming\"\n\tlatex?: boolean; // default: true\n}\n\nexport interface WarningSettings {\n\tanthropicExtraUsage?: boolean; // default: true\n}\n\nexport type DefaultProjectTrust = \"ask\" | \"always\" | \"never\";\n\nexport type TransportSetting = Transport;\n\n/** What the terminal keeps when Atomic's fullscreen session exits. */\nexport type FullscreenExitOutput = \"transcript\" | \"resume-hint\";\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n * - autoload=false: start empty and apply only explicit resource patterns\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\tautoload?: boolean;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t\t\tworkflows?: string[];\n\t\t\tmcpServers?: string[];\n\t };\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: false\n}\n\n/** Provider filters for the candidates `model: \"auto\"` may route to. Does not affect `routerModel`. */\nexport interface ModelRoutingSettings {\n\t/** When nonempty, only these provider IDs are routing candidates. */\n\tallowedProviders?: string[];\n\t/** Provider IDs that are never routing candidates; applied after `allowedProviders`. */\n\texcludedProviders?: string[];\n}\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tfirstRunOnboardingStartedVersion?: string;\n\tonboardedVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\trouterModel?: string; // default: \"\"; workflow-stage/subagent auto-model router inference only, never \"auto\"\n\tmodelRouting?: ModelRoutingSettings;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\tmodelThinkingLevels?: Record<string, \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">;\n\tfallbackModels?: string[]; // Ordered main-chat fallback models, optionally suffixed with :thinkingLevel\n\ttransport?: TransportSetting; // default: \"auto\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tenableAnalytics?: boolean; // storage only; no analytics transmission is performed\n\ttrackingId?: string; // stable UUID generated on first analytics opt-in\n\tshowCacheMissNotices?: boolean; // default: false - show cache costs and provider recovery diagnostics\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tsessionSummary?: SessionSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\texternalEditor?: string; // Command for Ctrl+G external editor; takes precedence over VISUAL/EDITOR\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: boolean;\n\tdefaultProjectTrust?: DefaultProjectTrust; // default: \"ask\"; global setting only\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tbashInterceptor?: BashInterceptorSettings; // default: disabled; when enabled, user_bash handlers can intercept bash tool execution\n\tsearch?: SearchSettings; // Context lines for search results; defaults: before=1, after=3\n\tnpmCommand?: string[]; // Command used for npm package lookup/install operations, argv-style (e.g., [\"mise\", \"exec\", \"node@20\", \"--\", \"npm\"])\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tenableInstallTelemetry?: boolean; // default: true - version-adoption ping on first interactive launch with fresh settings or after an update with changelog entries\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tworkflows?: string[]; // Array of local workflow file paths or directories\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\tterminal?: TerminalSettings;\n\therdr?: { enabled?: boolean }; // default: true, only inside an interactive Herdr pane\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tdefaultTools?: string[]; // Initial built-in tool selection; extension and SDK custom tools stay enabled\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\toutputPad?: 0 | 1; // Horizontal padding for chat message output (default: 1)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tfullscreenScrollbar?: ScrollViewScrollbar; // default: \"auto\"\n\tfullscreenExitOutput?: FullscreenExitOutput; // default: \"transcript\"\n\tfullscreenCopyOnSelect?: boolean; // default: true\n\tmarkdown?: MarkdownSettings;\n\twarnings?: WarningSettings;\n\tsessionDir?: string; // Custom session storage directory (same format as --session-dir CLI flag)\n\thttpProxy?: string; // Proxy URL applied as HTTP_PROXY and HTTPS_PROXY; global setting only\n\thttpIdleTimeoutMs?: number | string; // HTTP idle timeout; 0 or \"disabled\" disables it\n\tcacheWarming?: CacheWarmingMode; // Global only; each refresh costs money. Default: streaming.\n\twebsocketConnectTimeoutMs?: number | string; // WebSocket connect timeout; 0 or \"disabled\" disables it\n\tstreamDeadlineMs?: number | string; // Max idle gap between provider stream events; 0 or \"disabled\" disables it\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsManagerCreateOptions {\n\tprojectTrusted?: boolean;\n}\n\nexport type SettingsFieldOrigin = \"primary\" | \"legacy\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n\t/**\n\t * Optional write-specific lock whose callback receives the current primary\n\t * document rather than a layered effective view. Storage implementations\n\t * without a distinct primary document can omit this method; layered storage\n\t * implementations must provide it to keep fallback fields out of the primary\n\t * document.\n\t */\n\twithPrimaryWriteLock?(scope: SettingsScope, fn: (currentPrimary: string | undefined) => string | undefined): void;\n\tgetFieldOrigin?(scope: SettingsScope, field: keyof Settings): SettingsFieldOrigin | undefined;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\tpath?: string;\n\terror: Error;\n}\n"]}
1
+ {"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC","sourcesContent":["export const CACHE_WARMING_MODES = [\"off\", \"streaming\", \"idle\"] as const;\nexport type CacheWarmingMode = (typeof CACHE_WARMING_MODES)[number];\n\nimport type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar, WheelScrollLines } from \"@earendil-works/pi-tui\";\n\nexport interface CompactionModelOverride {\n\treserveTokens?: number;\n\tpreserve_recent?: number;\n}\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tcompression_ratio?: number; // default: 0.5 (fraction of compactable context to keep)\n\tpreserve_recent?: number; // default: 2 (recent context-eligible messages to keep)\n\tquery?: string; // default: auto-detected from session context\n\tmodelOverrides?: Record<string, CompactionModelOverride>; // exact \"provider/modelId\" keys\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface SessionSummarySettings {\n\tenabled?: boolean; // default: true - generate a one-line resume-picker summary once the agent goes idle\n}\n\nexport interface ProviderRetrySettings {\n\ttimeoutMs?: number; // SDK/provider request timeout in milliseconds\n\tmaxRetries?: number; // SDK/provider retry attempts\n\tmaxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxAgentDelayMs?: number; // default: 60000\n\tprovider?: ProviderRetrySettings;\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\timageWidthCells?: number; // default: 60 (preferred inline image width in terminal cells)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n\tshowTerminalProgress?: boolean; // default: false (OSC 9;4 terminal progress indicators)\n\thyperlinks?: boolean | \"auto\";\n\timages?: \"kitty\" | \"iterm2\" | \"auto\" | false;\n\ttrueColor?: boolean | \"auto\";\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface SearchSettings {\n\tcontextBefore?: number;\n\tcontextAfter?: number;\n}\nexport interface ThinkingBudgetsSettings {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport type MermaidRenderingMode = \"off\" | \"final\" | \"streaming\";\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n\tmermaid?: MermaidRenderingMode; // default: \"streaming\"\n\tlatex?: boolean; // default: true\n}\n\nexport interface WarningSettings {\n\tanthropicExtraUsage?: boolean; // default: true\n}\n\nexport type DefaultProjectTrust = \"ask\" | \"always\" | \"never\";\n\nexport type TransportSetting = Transport;\n\n/** What the terminal keeps when Atomic's fullscreen session exits. */\nexport type FullscreenExitOutput = \"transcript\" | \"resume-hint\";\n\nexport type CodemodeMode = \"on\" | \"only\";\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n * - autoload=false: start empty and apply only explicit resource patterns\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\tautoload?: boolean;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t\t\tworkflows?: string[];\n\t\t\tmcpServers?: string[];\n\t };\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: false\n}\n\n/** Provider filters for the candidates `model: \"auto\"` may route to. Does not affect `routerModel`. */\nexport interface ModelRoutingSettings {\n\t/** When nonempty, only these provider IDs are routing candidates. */\n\tallowedProviders?: string[];\n\t/** Provider IDs that are never routing candidates; applied after `allowedProviders`. */\n\texcludedProviders?: string[];\n}\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tfirstRunOnboardingStartedVersion?: string;\n\tonboardedVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\trouterModel?: string; // default: \"\"; workflow-stage/subagent auto-model router inference only, never \"auto\"\n\tmodelRouting?: ModelRoutingSettings;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\tmodelThinkingLevels?: Record<string, \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">;\n\tfallbackModels?: string[]; // Ordered main-chat fallback models, optionally suffixed with :thinkingLevel\n\ttransport?: TransportSetting; // default: \"auto\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tenableAnalytics?: boolean; // storage only; no analytics transmission is performed\n\ttrackingId?: string; // stable UUID generated on first analytics opt-in\n\tdeviceId?: string; // global installation ID, created only when a login needs it\n\tshowCacheMissNotices?: boolean; // default: false - show cache costs and provider recovery diagnostics\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tsessionSummary?: SessionSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\texternalEditor?: string; // Command for Ctrl+G external editor; takes precedence over VISUAL/EDITOR\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: boolean;\n\tdefaultProjectTrust?: DefaultProjectTrust; // default: \"ask\"; global setting only\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tbashInterceptor?: BashInterceptorSettings; // default: disabled; when enabled, user_bash handlers can intercept bash tool execution\n\tsearch?: SearchSettings; // Context lines for search results; defaults: before=1, after=3\n\tnpmCommand?: string[]; // Command used for npm package lookup/install operations, argv-style (e.g., [\"mise\", \"exec\", \"node@20\", \"--\", \"npm\"])\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tenableInstallTelemetry?: boolean; // default: true - version-adoption ping on first interactive launch with fresh settings or after an update with changelog entries\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tworkflows?: string[]; // Array of local workflow file paths or directories\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\tterminal?: TerminalSettings;\n\therdr?: { enabled?: boolean }; // default: true, only inside an interactive Herdr pane\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tdefaultTools?: string[]; // Initial tool selection; +name/-name modify inherited selection\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\toutputPad?: 0 | 1; // Horizontal padding for chat message output (default: 1)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tfullscreenScrollbar?: ScrollViewScrollbar; // default: \"auto\"\n\tfullscreenExitOutput?: FullscreenExitOutput; // default: \"transcript\"\n\tfullscreenCopyOnSelect?: boolean; // default: true\n\tfullscreenWheelScrollLines?: WheelScrollLines; // default: \"auto\", numeric values 1-100\n\tcodemode?: { mode?: CodemodeMode; inlineBudget?: number };\n\tmarkdown?: MarkdownSettings;\n\twarnings?: WarningSettings;\n\tsessionDir?: string; // Custom session storage directory (same format as --session-dir CLI flag)\n\thttpProxy?: string; // Proxy URL applied as HTTP_PROXY and HTTPS_PROXY; global setting only\n\thttpIdleTimeoutMs?: number | string; // HTTP idle timeout; 0 or \"disabled\" disables it\n\tcacheWarming?: CacheWarmingMode; // Global only; each refresh costs money. Default: streaming.\n\twebsocketConnectTimeoutMs?: number | string; // WebSocket connect timeout; 0 or \"disabled\" disables it\n\tstreamDeadlineMs?: number | string; // Max idle gap between provider stream events; 0 or \"disabled\" disables it\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsManagerCreateOptions {\n\tprojectTrusted?: boolean;\n}\n\nexport type SettingsFieldOrigin = \"primary\" | \"legacy\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n\t/**\n\t * Optional write-specific lock whose callback receives the current primary\n\t * document rather than a layered effective view. Storage implementations\n\t * without a distinct primary document can omit this method; layered storage\n\t * implementations must provide it to keep fallback fields out of the primary\n\t * document.\n\t */\n\twithPrimaryWriteLock?(scope: SettingsScope, fn: (currentPrimary: string | undefined) => string | undefined): void;\n\tgetFieldOrigin?(scope: SettingsScope, field: keyof Settings): SettingsFieldOrigin | undefined;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\tpath?: string;\n\terror: Error;\n}\n"]}
@@ -9,6 +9,9 @@ export interface SourceInfo {
9
9
  baseDir?: string;
10
10
  configurationOrigin?: ResourceConfigurationOrigin;
11
11
  }
12
+ export declare const BUILTIN_PATH_PREFIX = "builtin:";
13
+ export declare function getSyntheticPathSource(path: string): string | undefined;
14
+ export declare function isSyntheticPath(path: string): boolean;
12
15
  export declare function createSourceInfo(path: string, metadata: PathMetadata): SourceInfo;
13
16
  export declare function createSyntheticSourceInfo(path: string, options: {
14
17
  source: string;
@@ -1 +1 @@
1
- {"version":3,"file":"source-info.d.ts","sourceRoot":"","sources":["../../src/core/source-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEtF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;AAC3D,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,CAAC;AAEnD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CAClD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,UAAU,CASjF;AAED,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACR,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CAClD,GACC,UAAU,CASZ"}
1
+ {"version":3,"file":"source-info.d.ts","sourceRoot":"","sources":["../../src/core/source-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEtF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;AAC3D,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,CAAC;AAEnD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CAClD;AAED,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,UAAU,CASjF;AAED,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACR,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CAClD,GACC,UAAU,CASZ"}
@@ -1,3 +1,14 @@
1
+ export const BUILTIN_PATH_PREFIX = "builtin:";
2
+ export function getSyntheticPathSource(path) {
3
+ if (path.startsWith(BUILTIN_PATH_PREFIX))
4
+ return "builtin";
5
+ if (path.startsWith("<") && path.endsWith(">"))
6
+ return path.slice(1, -1).split(":")[0] || "temporary";
7
+ return undefined;
8
+ }
9
+ export function isSyntheticPath(path) {
10
+ return path.startsWith(BUILTIN_PATH_PREFIX) || path.startsWith("<");
11
+ }
1
12
  export function createSourceInfo(path, metadata) {
2
13
  return {
3
14
  path,