@astralyn/pi 1.0.5 → 1.2.0

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 (436) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/bundle/chunks/anthropic-messages-NVP5OPIM.js +6 -0
  3. package/dist/bundle/chunks/anthropic.js +1 -1
  4. package/dist/bundle/chunks/{azure-openai-responses-LDW4FGAQ.js → azure-openai-responses-IBTOZ5MH.js} +1 -1
  5. package/dist/bundle/chunks/bedrock-converse-stream.js +2 -2
  6. package/dist/bundle/chunks/chunk-4XZYHGVN.js +11 -0
  7. package/dist/bundle/chunks/{chunk-GIG5IHES.js → chunk-5KJH3GGH.js} +1 -1
  8. package/dist/bundle/chunks/chunk-6VYRLG5F.js +2 -0
  9. package/dist/bundle/chunks/{chunk-UCXU7KLO.js → chunk-7HJ6CHUB.js} +1 -1
  10. package/dist/bundle/chunks/chunk-7UBIBLPN.js +2 -0
  11. package/dist/bundle/chunks/{chunk-IE3Z7ESB.js → chunk-A5HU4TE6.js} +418 -362
  12. package/dist/bundle/chunks/{chunk-HDHRZ7GT.js → chunk-B2UOWO4A.js} +1 -1
  13. package/dist/bundle/chunks/chunk-J75WV3FL.js +2 -0
  14. package/dist/bundle/chunks/{chunk-A6ALEEY5.js → chunk-LHSPN2IO.js} +1 -1
  15. package/dist/bundle/chunks/chunk-Q74S7ILH.js +2 -0
  16. package/dist/bundle/chunks/chunk-QDDSFJ35.js +2 -0
  17. package/dist/bundle/chunks/{chunk-IFELM7MW.js → chunk-UQECUCUH.js} +1 -1
  18. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-HGOVFZDC.js +2 -0
  19. package/dist/bundle/chunks/codemode-worker.js +18 -10
  20. package/dist/bundle/chunks/github-copilot.js +1 -1
  21. package/dist/bundle/chunks/{google-generative-ai-S5A5IBU4.js → google-generative-ai-M44TSMAN.js} +1 -1
  22. package/dist/bundle/chunks/{google-vertex-UBRQFDB4.js → google-vertex-3C4OWLFX.js} +1 -1
  23. package/dist/bundle/chunks/image-resize-worker.js +1 -1
  24. package/dist/bundle/chunks/{llama-cpp-classify-R7DQLTQN.js → llama-cpp-classify-H3IZDR5O.js} +2 -2
  25. package/dist/bundle/chunks/mistral-conversations-I5PL4VCZ.js +5 -0
  26. package/dist/bundle/chunks/openai-chatgpt.js +1 -1
  27. package/dist/bundle/chunks/openai-codex-responses-O5EUDL54.js +10 -0
  28. package/dist/bundle/chunks/openai-codex.js +1 -1
  29. package/dist/bundle/chunks/{openai-completions-H4VMO7AU.js → openai-completions-X3SSG5BQ.js} +1 -1
  30. package/dist/bundle/chunks/openai-decisions-TVCDIPZX.js +5 -0
  31. package/dist/bundle/chunks/{openai-responses-G4PGNM2H.js → openai-responses-NYPNKVDV.js} +1 -1
  32. package/dist/bundle/chunks/{openrouter-images-YP3YVB54.js → openrouter-images-TDLJV5N4.js} +1 -1
  33. package/dist/bundle/chunks/{pi-messages-HZZ7GEEW.js → pi-messages-ZXNERWJG.js} +1 -1
  34. package/dist/bundle/chunks/typesafe-system-one-LWPJYTJP.js +2 -0
  35. package/dist/bundle/chunks/{virtual-modules-46MSJGKO.js → virtual-modules-OZTPKGU7.js} +1 -1
  36. package/dist/bundle/cli.js +1 -1
  37. package/dist/bundle/index.js +1 -1
  38. package/dist/bundle/rpc-entry.js +1 -1
  39. package/dist/cli/args.d.ts +1 -1
  40. package/dist/cli/args.d.ts.map +1 -1
  41. package/dist/cli/args.js +13 -1
  42. package/dist/cli/args.js.map +1 -1
  43. package/dist/core/agent-session.d.ts +26 -7
  44. package/dist/core/agent-session.d.ts.map +1 -1
  45. package/dist/core/agent-session.js +190 -183
  46. package/dist/core/agent-session.js.map +1 -1
  47. package/dist/core/auth-storage.d.ts.map +1 -1
  48. package/dist/core/auth-storage.js +20 -13
  49. package/dist/core/auth-storage.js.map +1 -1
  50. package/dist/core/bash-executor.d.ts.map +1 -1
  51. package/dist/core/bash-executor.js +40 -45
  52. package/dist/core/bash-executor.js.map +1 -1
  53. package/dist/core/bug-report.d.ts +9 -1
  54. package/dist/core/bug-report.d.ts.map +1 -1
  55. package/dist/core/compaction/utils.d.ts +6 -0
  56. package/dist/core/compaction/utils.d.ts.map +1 -1
  57. package/dist/core/compaction/utils.js +7 -8
  58. package/dist/core/compaction/utils.js.map +1 -1
  59. package/dist/core/context-snapshot.d.ts +4 -1
  60. package/dist/core/context-snapshot.d.ts.map +1 -1
  61. package/dist/core/context-snapshot.js +45 -0
  62. package/dist/core/context-snapshot.js.map +1 -1
  63. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  64. package/dist/core/export-html/tool-renderer.js +2 -0
  65. package/dist/core/export-html/tool-renderer.js.map +1 -1
  66. package/dist/core/extensions/index.d.ts +1 -1
  67. package/dist/core/extensions/index.d.ts.map +1 -1
  68. package/dist/core/extensions/index.js.map +1 -1
  69. package/dist/core/extensions/runner.d.ts +4 -2
  70. package/dist/core/extensions/runner.d.ts.map +1 -1
  71. package/dist/core/extensions/runner.js +2 -3
  72. package/dist/core/extensions/runner.js.map +1 -1
  73. package/dist/core/extensions/types.d.ts +42 -7
  74. package/dist/core/extensions/types.d.ts.map +1 -1
  75. package/dist/core/extensions/types.js.map +1 -1
  76. package/dist/core/key-id-schema.d.ts +6 -0
  77. package/dist/core/key-id-schema.d.ts.map +1 -0
  78. package/dist/core/key-id-schema.js +16 -0
  79. package/dist/core/key-id-schema.js.map +1 -0
  80. package/dist/core/keybinding-registry.d.ts +4 -3
  81. package/dist/core/keybinding-registry.d.ts.map +1 -1
  82. package/dist/core/keybinding-registry.js +4 -3
  83. package/dist/core/keybinding-registry.js.map +1 -1
  84. package/dist/core/keybindings-schema.d.ts +4 -0
  85. package/dist/core/keybindings-schema.d.ts.map +1 -0
  86. package/dist/core/keybindings-schema.js +16 -0
  87. package/dist/core/keybindings-schema.js.map +1 -0
  88. package/dist/core/keybindings.d.ts +258 -81
  89. package/dist/core/keybindings.d.ts.map +1 -1
  90. package/dist/core/keybindings.js +27 -24
  91. package/dist/core/keybindings.js.map +1 -1
  92. package/dist/core/model-config.d.ts +713 -180
  93. package/dist/core/model-config.d.ts.map +1 -1
  94. package/dist/core/model-config.js +18 -179
  95. package/dist/core/model-config.js.map +1 -1
  96. package/dist/core/model-runtime.d.ts.map +1 -1
  97. package/dist/core/model-runtime.js +13 -7
  98. package/dist/core/model-runtime.js.map +1 -1
  99. package/dist/core/nested-tool-calls.d.ts +1 -0
  100. package/dist/core/nested-tool-calls.d.ts.map +1 -1
  101. package/dist/core/nested-tool-calls.js +1 -0
  102. package/dist/core/nested-tool-calls.js.map +1 -1
  103. package/dist/core/package-manager.d.ts.map +1 -1
  104. package/dist/core/package-manager.js +3 -3
  105. package/dist/core/package-manager.js.map +1 -1
  106. package/dist/core/project-trust.d.ts.map +1 -1
  107. package/dist/core/project-trust.js +2 -1
  108. package/dist/core/project-trust.js.map +1 -1
  109. package/dist/core/remote-catalog-provider.d.ts +12 -1
  110. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  111. package/dist/core/remote-catalog-provider.js +82 -24
  112. package/dist/core/remote-catalog-provider.js.map +1 -1
  113. package/dist/core/resource-loader.d.ts.map +1 -1
  114. package/dist/core/resource-loader.js +7 -2
  115. package/dist/core/resource-loader.js.map +1 -1
  116. package/dist/core/sdk.d.ts +4 -0
  117. package/dist/core/sdk.d.ts.map +1 -1
  118. package/dist/core/sdk.js +17 -5
  119. package/dist/core/sdk.js.map +1 -1
  120. package/dist/core/settings-defaults.d.ts +65 -0
  121. package/dist/core/settings-defaults.d.ts.map +1 -0
  122. package/dist/core/settings-defaults.js +66 -0
  123. package/dist/core/settings-defaults.js.map +1 -0
  124. package/dist/core/settings-manager.d.ts +15 -147
  125. package/dist/core/settings-manager.d.ts.map +1 -1
  126. package/dist/core/settings-manager.js +85 -57
  127. package/dist/core/settings-manager.js.map +1 -1
  128. package/dist/core/settings-schema.d.ts +231 -0
  129. package/dist/core/settings-schema.d.ts.map +1 -0
  130. package/dist/core/settings-schema.js +294 -0
  131. package/dist/core/settings-schema.js.map +1 -0
  132. package/dist/core/tasks/session.d.ts +9 -0
  133. package/dist/core/tasks/session.d.ts.map +1 -1
  134. package/dist/core/tasks/session.js +21 -0
  135. package/dist/core/tasks/session.js.map +1 -1
  136. package/dist/core/tools/render-utils.d.ts +18 -0
  137. package/dist/core/tools/render-utils.d.ts.map +1 -1
  138. package/dist/core/tools/render-utils.js +46 -0
  139. package/dist/core/tools/render-utils.js.map +1 -1
  140. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  141. package/dist/core/tools/renderers/bash.js +21 -45
  142. package/dist/core/tools/renderers/bash.js.map +1 -1
  143. package/dist/core/tools/renderers/edit.js +1 -1
  144. package/dist/core/tools/renderers/edit.js.map +1 -1
  145. package/dist/extensions/btw/keybindings.d.ts +2 -2
  146. package/dist/extensions/btw/keybindings.d.ts.map +1 -1
  147. package/dist/extensions/btw/keybindings.js.map +1 -1
  148. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  149. package/dist/extensions/codemode/execute.js +115 -40
  150. package/dist/extensions/codemode/execute.js.map +1 -1
  151. package/dist/extensions/codemode/index.d.ts.map +1 -1
  152. package/dist/extensions/codemode/index.js +3 -7
  153. package/dist/extensions/codemode/index.js.map +1 -1
  154. package/dist/extensions/codemode/renderer.d.ts +2 -2
  155. package/dist/extensions/codemode/renderer.d.ts.map +1 -1
  156. package/dist/extensions/codemode/renderer.js +9 -3
  157. package/dist/extensions/codemode/renderer.js.map +1 -1
  158. package/dist/extensions/codemode/tool.d.ts +6 -12
  159. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  160. package/dist/extensions/codemode/tool.js +46 -34
  161. package/dist/extensions/codemode/tool.js.map +1 -1
  162. package/dist/extensions/index.js +2 -2
  163. package/dist/extensions/index.js.map +1 -1
  164. package/dist/extensions/list-keybindings.d.ts +2 -2
  165. package/dist/extensions/list-keybindings.d.ts.map +1 -1
  166. package/dist/extensions/list-keybindings.js.map +1 -1
  167. package/dist/extensions/llama/provider.d.ts.map +1 -1
  168. package/dist/extensions/llama/provider.js +34 -11
  169. package/dist/extensions/llama/provider.js.map +1 -1
  170. package/dist/extensions/mcp/cli.js +22 -31
  171. package/dist/extensions/mcp/cli.js.map +1 -1
  172. package/dist/extensions/mcp/index.d.ts.map +1 -1
  173. package/dist/extensions/mcp/index.js +187 -95
  174. package/dist/extensions/mcp/index.js.map +1 -1
  175. package/dist/extensions/mcp/oauth.d.ts +5 -3
  176. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  177. package/dist/extensions/mcp/oauth.js +36 -10
  178. package/dist/extensions/mcp/oauth.js.map +1 -1
  179. package/dist/extensions/mcp/resources.d.ts +0 -6
  180. package/dist/extensions/mcp/resources.d.ts.map +1 -1
  181. package/dist/extensions/mcp/resources.js +1 -1
  182. package/dist/extensions/mcp/resources.js.map +1 -1
  183. package/dist/extensions/mcp/runtime.d.ts +3 -6
  184. package/dist/extensions/mcp/runtime.d.ts.map +1 -1
  185. package/dist/extensions/mcp/runtime.js +4 -39
  186. package/dist/extensions/mcp/runtime.js.map +1 -1
  187. package/dist/extensions/mcp/tools.d.ts +2 -3
  188. package/dist/extensions/mcp/tools.d.ts.map +1 -1
  189. package/dist/extensions/mcp/tools.js +62 -6
  190. package/dist/extensions/mcp/tools.js.map +1 -1
  191. package/dist/extensions/mcp/ui.d.ts +3 -3
  192. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  193. package/dist/extensions/mcp/ui.js +10 -2
  194. package/dist/extensions/mcp/ui.js.map +1 -1
  195. package/dist/extensions/provider/keybindings.d.ts +2 -2
  196. package/dist/extensions/provider/keybindings.d.ts.map +1 -1
  197. package/dist/extensions/provider/keybindings.js.map +1 -1
  198. package/dist/extensions/search/code-search.d.ts +27 -0
  199. package/dist/extensions/search/code-search.d.ts.map +1 -0
  200. package/dist/extensions/search/code-search.js +120 -0
  201. package/dist/extensions/search/code-search.js.map +1 -0
  202. package/dist/extensions/search/command.d.ts +5 -0
  203. package/dist/extensions/search/command.d.ts.map +1 -0
  204. package/dist/extensions/search/command.js +69 -0
  205. package/dist/extensions/search/command.js.map +1 -0
  206. package/dist/extensions/search/credential.d.ts +25 -0
  207. package/dist/extensions/search/credential.d.ts.map +1 -0
  208. package/dist/extensions/search/credential.js +117 -0
  209. package/dist/extensions/search/credential.js.map +1 -0
  210. package/dist/extensions/search/devin.d.ts +34 -0
  211. package/dist/extensions/search/devin.d.ts.map +1 -0
  212. package/dist/extensions/search/devin.js +210 -0
  213. package/dist/extensions/search/devin.js.map +1 -0
  214. package/dist/extensions/search/index.d.ts +5 -0
  215. package/dist/extensions/search/index.d.ts.map +1 -0
  216. package/dist/extensions/search/index.js +113 -0
  217. package/dist/extensions/search/index.js.map +1 -0
  218. package/dist/extensions/search/panel.d.ts +53 -0
  219. package/dist/extensions/search/panel.d.ts.map +1 -0
  220. package/dist/extensions/search/panel.js +157 -0
  221. package/dist/extensions/search/panel.js.map +1 -0
  222. package/dist/extensions/search/prompt.d.ts +14 -0
  223. package/dist/extensions/search/prompt.d.ts.map +1 -0
  224. package/dist/extensions/search/prompt.js +221 -0
  225. package/dist/extensions/search/prompt.js.map +1 -0
  226. package/dist/extensions/search/render.d.ts +28 -0
  227. package/dist/extensions/search/render.d.ts.map +1 -0
  228. package/dist/extensions/search/render.js +86 -0
  229. package/dist/extensions/search/render.js.map +1 -0
  230. package/dist/extensions/search/workspace.d.ts +39 -0
  231. package/dist/extensions/search/workspace.d.ts.map +1 -0
  232. package/dist/extensions/search/workspace.js +363 -0
  233. package/dist/extensions/search/workspace.js.map +1 -0
  234. package/dist/extensions/tool-search/index.d.ts.map +1 -1
  235. package/dist/extensions/tool-search/index.js +1 -6
  236. package/dist/extensions/tool-search/index.js.map +1 -1
  237. package/dist/extensions/tool-search/tool.d.ts +0 -2
  238. package/dist/extensions/tool-search/tool.d.ts.map +1 -1
  239. package/dist/extensions/tool-search/tool.js +2 -4
  240. package/dist/extensions/tool-search/tool.js.map +1 -1
  241. package/dist/index.d.ts +1 -1
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js.map +1 -1
  244. package/dist/main.js +3 -3
  245. package/dist/main.js.map +1 -1
  246. package/dist/modes/interactive/components/bash-execution.d.ts +5 -1
  247. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  248. package/dist/modes/interactive/components/bash-execution.js +14 -14
  249. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  250. package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
  251. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  252. package/dist/modes/interactive/components/branch-summary-message.js +5 -2
  253. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  254. package/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -1
  255. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  256. package/dist/modes/interactive/components/compaction-summary-message.js +5 -2
  257. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  258. package/dist/modes/interactive/components/custom-entry.d.ts +3 -1
  259. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  260. package/dist/modes/interactive/components/custom-entry.js +7 -2
  261. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  262. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  263. package/dist/modes/interactive/components/custom-message.js +1 -0
  264. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  265. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  266. package/dist/modes/interactive/components/settings-selector.js +4 -3
  267. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  268. package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
  269. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  270. package/dist/modes/interactive/components/skill-invocation-message.js +5 -2
  271. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  272. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  273. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  274. package/dist/modes/interactive/components/status-indicator.js +2 -2
  275. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  276. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  277. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  278. package/dist/modes/interactive/interactive-mode.js +63 -64
  279. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  280. package/dist/modes/interactive/program-status-reporter.d.ts +34 -0
  281. package/dist/modes/interactive/program-status-reporter.d.ts.map +1 -0
  282. package/dist/modes/interactive/program-status-reporter.js +107 -0
  283. package/dist/modes/interactive/program-status-reporter.js.map +1 -0
  284. package/dist/modes/interactive/tasks/host-hooks.d.ts +14 -0
  285. package/dist/modes/interactive/tasks/host-hooks.d.ts.map +1 -0
  286. package/dist/modes/interactive/tasks/host-hooks.js +31 -0
  287. package/dist/modes/interactive/tasks/host-hooks.js.map +1 -0
  288. package/dist/modes/interactive/theme/dark.json +1 -1
  289. package/dist/modes/interactive/theme/light.json +1 -1
  290. package/dist/modes/interactive/theme/theme-schema.d.ts +28 -0
  291. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  292. package/dist/modes/interactive/theme/theme-schema.js +105 -0
  293. package/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  294. package/dist/modes/interactive/theme/theme-tokens.d.ts +257 -0
  295. package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -0
  296. package/dist/modes/interactive/theme/theme-tokens.js +94 -0
  297. package/dist/modes/interactive/theme/theme-tokens.js.map +1 -0
  298. package/dist/modes/interactive/theme/theme.d.ts +13 -16
  299. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  300. package/dist/modes/interactive/theme/theme.js +23 -31
  301. package/dist/modes/interactive/theme/theme.js.map +1 -1
  302. package/dist/modes/interactive/tool-view/tool-execution.d.ts +5 -0
  303. package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -1
  304. package/dist/modes/interactive/tool-view/tool-execution.js +7 -0
  305. package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -1
  306. package/dist/modes/print-mode.d.ts.map +1 -1
  307. package/dist/modes/print-mode.js +4 -0
  308. package/dist/modes/print-mode.js.map +1 -1
  309. package/dist/package-manager-cli.d.ts.map +1 -1
  310. package/dist/package-manager-cli.js +24 -0
  311. package/dist/package-manager-cli.js.map +1 -1
  312. package/dist/utils/ansi.d.ts +8 -0
  313. package/dist/utils/ansi.d.ts.map +1 -1
  314. package/dist/utils/ansi.js +30 -11
  315. package/dist/utils/ansi.js.map +1 -1
  316. package/dist/utils/clipboard.d.ts.map +1 -1
  317. package/dist/utils/clipboard.js +18 -12
  318. package/dist/utils/clipboard.js.map +1 -1
  319. package/dist/utils/image-resize-core.d.ts +12 -0
  320. package/dist/utils/image-resize-core.d.ts.map +1 -1
  321. package/dist/utils/image-resize-core.js +5 -0
  322. package/dist/utils/image-resize-core.js.map +1 -1
  323. package/dist/utils/image-resize-worker.js +3 -2
  324. package/dist/utils/image-resize-worker.js.map +1 -1
  325. package/dist/utils/image-resize.d.ts.map +1 -1
  326. package/dist/utils/image-resize.js +9 -10
  327. package/dist/utils/image-resize.js.map +1 -1
  328. package/docs/bundled/README.md +1 -1
  329. package/docs/bundled/extensions/provider.md +1 -1
  330. package/docs/bundled/extensions/question.md +1 -1
  331. package/docs/bundled/extensions/search.md +51 -0
  332. package/docs/bundled/extensions/statusline.md +15 -41
  333. package/docs/codemode.md +24 -4
  334. package/docs/compaction.md +2 -2
  335. package/docs/docs.json +0 -4
  336. package/docs/environment-variables.md +3 -1
  337. package/docs/extensions.md +15 -5
  338. package/docs/json.md +2 -2
  339. package/docs/keybindings.md +1 -0
  340. package/docs/llama-cpp.md +8 -1
  341. package/docs/mcp.md +1 -1
  342. package/docs/models.md +5 -1
  343. package/docs/providers.md +33 -0
  344. package/docs/rpc.md +6 -3
  345. package/docs/session-format.md +1 -0
  346. package/docs/settings.md +5 -5
  347. package/docs/terminal-setup.md +14 -0
  348. package/docs/themes.md +4 -2
  349. package/docs/tui.md +1 -1
  350. package/docs/usage.md +7 -3
  351. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  352. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  353. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  354. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  355. package/examples/extensions/gondolin/package-lock.json +2 -2
  356. package/examples/extensions/gondolin/package.json +1 -1
  357. package/examples/extensions/overlay-test.ts +2 -2
  358. package/examples/extensions/plan-mode/index.ts +6 -2
  359. package/examples/extensions/sandbox/package-lock.json +2 -2
  360. package/examples/extensions/sandbox/package.json +1 -1
  361. package/examples/extensions/with-deps/package-lock.json +2 -2
  362. package/examples/extensions/with-deps/package.json +1 -1
  363. package/npm-shrinkwrap.json +54 -102
  364. package/package.json +10 -20
  365. package/schemas/keybindings.schema.json +453 -0
  366. package/schemas/models.schema.json +1157 -0
  367. package/schemas/settings.schema.json +782 -0
  368. package/schemas/theme.schema.json +365 -0
  369. package/dist/bundle/chunks/anthropic-messages-YIOJIMVL.js +0 -6
  370. package/dist/bundle/chunks/chunk-57XI7YJH.js +0 -2
  371. package/dist/bundle/chunks/chunk-JI4WGISU.js +0 -2
  372. package/dist/bundle/chunks/chunk-TCQ4HHQD.js +0 -2
  373. package/dist/bundle/chunks/chunk-TXJO4AJ7.js +0 -11
  374. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-OWU5SM6J.js +0 -2
  375. package/dist/bundle/chunks/mistral-conversations-A2N5FSOV.js +0 -5
  376. package/dist/bundle/chunks/openai-codex-responses-Q6JHCWLE.js +0 -10
  377. package/dist/bundle/chunks/typesafe-system-one-KYKKNU3E.js +0 -2
  378. package/dist/extensions/web-search/auth.d.ts +0 -12
  379. package/dist/extensions/web-search/auth.d.ts.map +0 -1
  380. package/dist/extensions/web-search/auth.js +0 -90
  381. package/dist/extensions/web-search/auth.js.map +0 -1
  382. package/dist/extensions/web-search/constants.d.ts +0 -13
  383. package/dist/extensions/web-search/constants.d.ts.map +0 -1
  384. package/dist/extensions/web-search/constants.js +0 -26
  385. package/dist/extensions/web-search/constants.js.map +0 -1
  386. package/dist/extensions/web-search/execute.d.ts +0 -9
  387. package/dist/extensions/web-search/execute.d.ts.map +0 -1
  388. package/dist/extensions/web-search/execute.js +0 -96
  389. package/dist/extensions/web-search/execute.js.map +0 -1
  390. package/dist/extensions/web-search/format.d.ts +0 -21
  391. package/dist/extensions/web-search/format.d.ts.map +0 -1
  392. package/dist/extensions/web-search/format.js +0 -117
  393. package/dist/extensions/web-search/format.js.map +0 -1
  394. package/dist/extensions/web-search/index.d.ts +0 -6
  395. package/dist/extensions/web-search/index.d.ts.map +0 -1
  396. package/dist/extensions/web-search/index.js +0 -50
  397. package/dist/extensions/web-search/index.js.map +0 -1
  398. package/dist/extensions/web-search/providers/deepseek.d.ts +0 -13
  399. package/dist/extensions/web-search/providers/deepseek.d.ts.map +0 -1
  400. package/dist/extensions/web-search/providers/deepseek.js +0 -110
  401. package/dist/extensions/web-search/providers/deepseek.js.map +0 -1
  402. package/dist/extensions/web-search/providers/http.d.ts +0 -4
  403. package/dist/extensions/web-search/providers/http.d.ts.map +0 -1
  404. package/dist/extensions/web-search/providers/http.js +0 -42
  405. package/dist/extensions/web-search/providers/http.js.map +0 -1
  406. package/dist/extensions/web-search/providers/minimax.d.ts +0 -12
  407. package/dist/extensions/web-search/providers/minimax.d.ts.map +0 -1
  408. package/dist/extensions/web-search/providers/minimax.js +0 -61
  409. package/dist/extensions/web-search/providers/minimax.js.map +0 -1
  410. package/dist/extensions/web-search/render.d.ts +0 -15
  411. package/dist/extensions/web-search/render.d.ts.map +0 -1
  412. package/dist/extensions/web-search/render.js +0 -142
  413. package/dist/extensions/web-search/render.js.map +0 -1
  414. package/dist/extensions/web-search/results.d.ts +0 -35
  415. package/dist/extensions/web-search/results.d.ts.map +0 -1
  416. package/dist/extensions/web-search/results.js +0 -167
  417. package/dist/extensions/web-search/results.js.map +0 -1
  418. package/dist/extensions/web-search/schema.d.ts +0 -10
  419. package/dist/extensions/web-search/schema.d.ts.map +0 -1
  420. package/dist/extensions/web-search/schema.js +0 -36
  421. package/dist/extensions/web-search/schema.js.map +0 -1
  422. package/dist/extensions/web-search/types.d.ts +0 -51
  423. package/dist/extensions/web-search/types.d.ts.map +0 -1
  424. package/dist/extensions/web-search/types.js +0 -5
  425. package/dist/extensions/web-search/types.js.map +0 -1
  426. package/dist/modes/interactive/theme/theme-json.d.ts +0 -85
  427. package/dist/modes/interactive/theme/theme-json.d.ts.map +0 -1
  428. package/dist/modes/interactive/theme/theme-json.js +0 -132
  429. package/dist/modes/interactive/theme/theme-json.js.map +0 -1
  430. package/dist/modes/interactive/theme/theme-schema.json +0 -361
  431. package/docs/bundled/extensions/web-search.md +0 -46
  432. package/examples/plugins/pi-example-plugin/README.md +0 -38
  433. package/examples/plugins/pi-example-plugin/package.json +0 -10
  434. package/examples/plugins/pi-example-plugin/src/contract.ts +0 -13
  435. package/examples/plugins/pi-example-plugin/src/session.ts +0 -24
  436. package/examples/plugins/pi-example-plugin/src/tui.ts +0 -31
@@ -1,4 +1,3 @@
1
- import { DEFAULT_MAX_AGENT_RETRY_DELAY_MS } from "@earendil-works/pi-ai";
2
1
  import { randomUUID } from "crypto";
3
2
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
4
3
  import { dirname, join } from "path";
@@ -8,12 +7,13 @@ import { normalizePath, resolvePath } from "../utils/paths.js";
8
7
  import { stripBom } from "../utils/text.js";
9
8
  import { clampTriggerPercent, DEFAULT_TRIGGER_PERCENT, triggerPercentBudget } from "./compaction/settings.js";
10
9
  import { DEFAULT_HTTP_IDLE_TIMEOUT_MS, parseHttpIdleTimeoutMs } from "./http-dispatcher.js";
11
- const DEFAULT_COMPACTION_TOKEN_SETTINGS = {
12
- reserveTokens: 16384,
13
- keepRecentTokens: 20000,
14
- };
10
+ import { SETTINGS_DEFAULTS } from "./settings-defaults.js";
15
11
  /** Cache-warming profile. "idle" also warms between agent runs. */
16
12
  export const CACHE_WARMING_MODES = ["off", "streaming", "idle"];
13
+ const DEFAULT_COMPACTION_TOKEN_SETTINGS = {
14
+ reserveTokens: SETTINGS_DEFAULTS.compaction.reserveTokens,
15
+ keepRecentTokens: SETTINGS_DEFAULTS.compaction.keepRecentTokens,
16
+ };
17
17
  function isMergeableObject(value) {
18
18
  return typeof value === "object" && value !== null && !Array.isArray(value);
19
19
  }
@@ -34,9 +34,44 @@ function deepMergeObjects(base, overrides) {
34
34
  }
35
35
  /** Tools enabled at startup when `defaultTools` does not change them. */
36
36
  export const DEFAULT_TOOL_NAMES = ["read", "bash", "edit", "write"];
37
- function isToolModifier(entry) {
37
+ /** Whether a tool selection entry is a `+name` or `-name` modifier. */
38
+ export function isToolModifier(entry) {
38
39
  return typeof entry === "string" && (entry.startsWith("+") || entry.startsWith("-"));
39
40
  }
41
+ /**
42
+ * Validate a tool list from `--tools` or the SDK `tools` option. It is either an allowlist of plain
43
+ * names and patterns or a list of only `+name`/`-name` entries with exact names. Returns the
44
+ * problem, or undefined when the list is valid.
45
+ */
46
+ export function getToolListError(entries) {
47
+ const modifiers = entries.filter(isToolModifier);
48
+ if (modifiers.length === 0)
49
+ return undefined;
50
+ if (modifiers.length < entries.length)
51
+ return "tool names cannot be mixed with +name or -name entries";
52
+ const pattern = modifiers.find((entry) => entry.includes("*"));
53
+ if (pattern)
54
+ return `+name and -name entries take exact tool names, not patterns: ${pattern}`;
55
+ return undefined;
56
+ }
57
+ /**
58
+ * Apply the `+name` and `-name` entries of `entries` to `base` in order: `+name` adds a tool and
59
+ * `-name` removes one. Other entries are ignored.
60
+ */
61
+ export function applyToolModifiers(base, entries) {
62
+ const tools = [...base];
63
+ for (const entry of entries) {
64
+ if (!isToolModifier(entry))
65
+ continue;
66
+ const name = entry.slice(1);
67
+ const index = tools.indexOf(name);
68
+ if (entry.startsWith("+") && index === -1 && name)
69
+ tools.push(name);
70
+ else if (entry.startsWith("-") && index !== -1)
71
+ tools.splice(index, 1);
72
+ }
73
+ return tools;
74
+ }
40
75
  /**
41
76
  * Merge `defaultTools` of two settings layers. A list with plain tool names replaces the inherited
42
77
  * one; a list of only `+name`/`-name` entries is appended, so it modifies the inherited selection.
@@ -55,18 +90,7 @@ function mergeDefaultTools(base, overrides) {
55
90
  */
56
91
  function resolveDefaultTools(entries) {
57
92
  const plain = entries.filter((entry) => !isToolModifier(entry));
58
- const tools = plain.length > 0 || entries.length === 0 ? plain : [...DEFAULT_TOOL_NAMES];
59
- for (const entry of entries) {
60
- if (!isToolModifier(entry))
61
- continue;
62
- const name = entry.slice(1);
63
- const index = tools.indexOf(name);
64
- if (entry.startsWith("+") && index === -1 && name)
65
- tools.push(name);
66
- else if (entry.startsWith("-") && index !== -1)
67
- tools.splice(index, 1);
68
- }
69
- return tools;
93
+ return applyToolModifiers(plain.length > 0 || entries.length === 0 ? plain : DEFAULT_TOOL_NAMES, entries);
70
94
  }
71
95
  /** Deep merge settings: project/overrides take precedence, nested objects merge recursively */
72
96
  function deepMergeSettings(base, overrides) {
@@ -550,7 +574,7 @@ export class SettingsManager {
550
574
  this.save();
551
575
  }
552
576
  getSteeringMode() {
553
- return this.settings.steeringMode || "one-at-a-time";
577
+ return this.settings.steeringMode || SETTINGS_DEFAULTS.steeringMode;
554
578
  }
555
579
  setSteeringMode(mode) {
556
580
  this.globalSettings.steeringMode = mode;
@@ -558,7 +582,7 @@ export class SettingsManager {
558
582
  this.save();
559
583
  }
560
584
  getFollowUpMode() {
561
- return this.settings.followUpMode || "one-at-a-time";
585
+ return this.settings.followUpMode || SETTINGS_DEFAULTS.followUpMode;
562
586
  }
563
587
  setFollowUpMode(mode) {
564
588
  this.globalSettings.followUpMode = mode;
@@ -613,7 +637,7 @@ export class SettingsManager {
613
637
  this.save();
614
638
  }
615
639
  getTransport() {
616
- return this.settings.transport ?? "auto";
640
+ return this.settings.transport ?? SETTINGS_DEFAULTS.transport;
617
641
  }
618
642
  setTransport(transport) {
619
643
  this.globalSettings.transport = transport;
@@ -621,7 +645,7 @@ export class SettingsManager {
621
645
  this.save();
622
646
  }
623
647
  getCompactionEnabled() {
624
- return this.settings.compaction?.enabled ?? true;
648
+ return this.settings.compaction?.enabled ?? SETTINGS_DEFAULTS.compaction.enabled;
625
649
  }
626
650
  setCompactionEnabled(enabled) {
627
651
  if (!this.globalSettings.compaction) {
@@ -685,15 +709,15 @@ export class SettingsManager {
685
709
  }
686
710
  getBranchSummarySettings() {
687
711
  return {
688
- reserveTokens: this.settings.branchSummary?.reserveTokens ?? 16384,
689
- skipPrompt: this.settings.branchSummary?.skipPrompt ?? false,
712
+ reserveTokens: this.settings.branchSummary?.reserveTokens ?? SETTINGS_DEFAULTS.branchSummary.reserveTokens,
713
+ skipPrompt: this.settings.branchSummary?.skipPrompt ?? SETTINGS_DEFAULTS.branchSummary.skipPrompt,
690
714
  };
691
715
  }
692
716
  getBranchSummarySkipPrompt() {
693
- return this.settings.branchSummary?.skipPrompt ?? false;
717
+ return this.settings.branchSummary?.skipPrompt ?? SETTINGS_DEFAULTS.branchSummary.skipPrompt;
694
718
  }
695
719
  getRetryEnabled() {
696
- return this.settings.retry?.enabled ?? true;
720
+ return this.settings.retry?.enabled ?? SETTINGS_DEFAULTS.retry.enabled;
697
721
  }
698
722
  setRetryEnabled(enabled) {
699
723
  if (!this.globalSettings.retry) {
@@ -706,9 +730,9 @@ export class SettingsManager {
706
730
  getRetrySettings() {
707
731
  return {
708
732
  enabled: this.getRetryEnabled(),
709
- maxRetries: this.settings.retry?.maxRetries ?? 3,
710
- baseDelayMs: this.settings.retry?.baseDelayMs ?? 2000,
711
- maxAgentDelayMs: this.settings.retry?.maxAgentDelayMs ?? DEFAULT_MAX_AGENT_RETRY_DELAY_MS,
733
+ maxRetries: this.settings.retry?.maxRetries ?? SETTINGS_DEFAULTS.retry.maxRetries,
734
+ baseDelayMs: this.settings.retry?.baseDelayMs ?? SETTINGS_DEFAULTS.retry.baseDelayMs,
735
+ maxAgentDelayMs: this.settings.retry?.maxAgentDelayMs ?? SETTINGS_DEFAULTS.retry.maxAgentDelayMs,
712
736
  };
713
737
  }
714
738
  getHttpIdleTimeoutMs() {
@@ -725,7 +749,7 @@ export class SettingsManager {
725
749
  /** Read from global settings only because warming costs money. */
726
750
  getCacheWarmingMode() {
727
751
  const mode = this.globalSettings.cacheWarming;
728
- return mode !== undefined && CACHE_WARMING_MODES.includes(mode) ? mode : "streaming";
752
+ return mode !== undefined && CACHE_WARMING_MODES.includes(mode) ? mode : SETTINGS_DEFAULTS.cacheWarming;
729
753
  }
730
754
  setCacheWarmingMode(mode) {
731
755
  this.globalSettings.cacheWarming = mode;
@@ -736,17 +760,17 @@ export class SettingsManager {
736
760
  return {
737
761
  timeoutMs: this.settings.retry?.provider?.timeoutMs,
738
762
  maxRetries: this.settings.retry?.provider?.maxRetries,
739
- maxRetryDelayMs: this.settings.retry?.provider?.maxRetryDelayMs ?? 60000,
763
+ maxRetryDelayMs: this.settings.retry?.provider?.maxRetryDelayMs ?? SETTINGS_DEFAULTS.retry.provider.maxRetryDelayMs,
740
764
  };
741
765
  }
742
766
  getWebSocketConnectTimeoutMs() {
743
767
  return parseTimeoutSetting(this.settings.websocketConnectTimeoutMs, "websocketConnectTimeoutMs");
744
768
  }
745
769
  getHideThinkingBlock() {
746
- return this.settings.hideThinkingBlock ?? false;
770
+ return this.settings.hideThinkingBlock ?? SETTINGS_DEFAULTS.hideThinkingBlock;
747
771
  }
748
772
  getShowCacheMissNotices() {
749
- return this.settings.showCacheMissNotices ?? false;
773
+ return this.settings.showCacheMissNotices ?? SETTINGS_DEFAULTS.showCacheMissNotices;
750
774
  }
751
775
  getExternalEditorCommand() {
752
776
  const configuredEditor = this.settings.externalEditor;
@@ -780,7 +804,7 @@ export class SettingsManager {
780
804
  }
781
805
  getQuietStartup() {
782
806
  const value = this.settings.quietStartup;
783
- return value === true || value === "header" ? value : false;
807
+ return value === true || value === "header" ? value : SETTINGS_DEFAULTS.quietStartup;
784
808
  }
785
809
  setQuietStartup(quiet) {
786
810
  this.globalSettings.quietStartup = quiet;
@@ -789,7 +813,7 @@ export class SettingsManager {
789
813
  }
790
814
  getDefaultProjectTrust() {
791
815
  const value = this.globalSettings.defaultProjectTrust;
792
- return value === "always" || value === "never" ? value : "ask";
816
+ return value === "always" || value === "never" ? value : SETTINGS_DEFAULTS.defaultProjectTrust;
793
817
  }
794
818
  setDefaultProjectTrust(defaultProjectTrust) {
795
819
  this.globalSettings.defaultProjectTrust = defaultProjectTrust;
@@ -813,7 +837,7 @@ export class SettingsManager {
813
837
  this.save();
814
838
  }
815
839
  getCollapseChangelog() {
816
- return this.settings.collapseChangelog ?? false;
840
+ return this.settings.collapseChangelog ?? SETTINGS_DEFAULTS.collapseChangelog;
817
841
  }
818
842
  setCollapseChangelog(collapse) {
819
843
  this.globalSettings.collapseChangelog = collapse;
@@ -821,7 +845,7 @@ export class SettingsManager {
821
845
  this.save();
822
846
  }
823
847
  getEnableInstallTelemetry() {
824
- return this.settings.enableInstallTelemetry ?? true;
848
+ return this.settings.enableInstallTelemetry ?? SETTINGS_DEFAULTS.enableInstallTelemetry;
825
849
  }
826
850
  setEnableInstallTelemetry(enabled) {
827
851
  this.globalSettings.enableInstallTelemetry = enabled;
@@ -829,7 +853,7 @@ export class SettingsManager {
829
853
  this.save();
830
854
  }
831
855
  getEnableAnalytics() {
832
- return this.settings.enableAnalytics ?? false;
856
+ return this.settings.enableAnalytics ?? SETTINGS_DEFAULTS.enableAnalytics;
833
857
  }
834
858
  getTrackingId() {
835
859
  return this.settings.trackingId;
@@ -923,7 +947,7 @@ export class SettingsManager {
923
947
  });
924
948
  }
925
949
  getEnableSkillCommands() {
926
- return this.settings.enableSkillCommands ?? true;
950
+ return this.settings.enableSkillCommands ?? SETTINGS_DEFAULTS.enableSkillCommands;
927
951
  }
928
952
  setEnableSkillCommands(enabled) {
929
953
  this.globalSettings.enableSkillCommands = enabled;
@@ -943,7 +967,7 @@ export class SettingsManager {
943
967
  };
944
968
  }
945
969
  getShowImages() {
946
- return this.settings.terminal?.showImages ?? true;
970
+ return this.settings.terminal?.showImages ?? SETTINGS_DEFAULTS.terminal.showImages;
947
971
  }
948
972
  setShowImages(show) {
949
973
  if (!this.globalSettings.terminal) {
@@ -956,7 +980,7 @@ export class SettingsManager {
956
980
  getImageWidthCells() {
957
981
  const width = this.settings.terminal?.imageWidthCells;
958
982
  if (typeof width !== "number" || !Number.isFinite(width)) {
959
- return 60;
983
+ return SETTINGS_DEFAULTS.terminal.imageWidthCells;
960
984
  }
961
985
  return Math.max(1, Math.floor(width));
962
986
  }
@@ -973,7 +997,9 @@ export class SettingsManager {
973
997
  if (this.settings.terminal?.clearOnShrink !== undefined) {
974
998
  return this.settings.terminal.clearOnShrink;
975
999
  }
976
- return process.env.PI_CLEAR_ON_SHRINK === "1";
1000
+ if (process.env.PI_CLEAR_ON_SHRINK === "1")
1001
+ return true;
1002
+ return SETTINGS_DEFAULTS.terminal.clearOnShrink;
977
1003
  }
978
1004
  setClearOnShrink(enabled) {
979
1005
  if (!this.globalSettings.terminal) {
@@ -984,7 +1010,7 @@ export class SettingsManager {
984
1010
  this.save();
985
1011
  }
986
1012
  getShowTerminalProgress() {
987
- return this.settings.terminal?.showTerminalProgress ?? false;
1013
+ return this.settings.terminal?.showTerminalProgress ?? SETTINGS_DEFAULTS.terminal.showTerminalProgress;
988
1014
  }
989
1015
  setShowTerminalProgress(enabled) {
990
1016
  if (!this.globalSettings.terminal) {
@@ -995,7 +1021,7 @@ export class SettingsManager {
995
1021
  this.save();
996
1022
  }
997
1023
  getTuiMode() {
998
- return this.settings.tuiMode === "regular" ? "regular" : "fullscreen";
1024
+ return this.settings.tuiMode === "regular" ? "regular" : SETTINGS_DEFAULTS.tuiMode;
999
1025
  }
1000
1026
  setTuiMode(mode) {
1001
1027
  this.globalSettings.tuiMode = mode;
@@ -1003,7 +1029,9 @@ export class SettingsManager {
1003
1029
  this.save();
1004
1030
  }
1005
1031
  getFullscreenExitOutput() {
1006
- return this.settings.fullscreenExitOutput === "resume-hint" ? "resume-hint" : "transcript";
1032
+ return this.settings.fullscreenExitOutput === "resume-hint"
1033
+ ? "resume-hint"
1034
+ : SETTINGS_DEFAULTS.fullscreenExitOutput;
1007
1035
  }
1008
1036
  setFullscreenExitOutput(output) {
1009
1037
  this.globalSettings.fullscreenExitOutput = output;
@@ -1012,7 +1040,7 @@ export class SettingsManager {
1012
1040
  }
1013
1041
  getFullscreenScrollbar() {
1014
1042
  const mode = this.settings.fullscreenScrollbar;
1015
- return mode === "always" || mode === "hidden" ? mode : "auto";
1043
+ return mode === "always" || mode === "hidden" ? mode : SETTINGS_DEFAULTS.fullscreenScrollbar;
1016
1044
  }
1017
1045
  setFullscreenScrollbar(mode) {
1018
1046
  this.globalSettings.fullscreenScrollbar = mode;
@@ -1020,7 +1048,7 @@ export class SettingsManager {
1020
1048
  this.save();
1021
1049
  }
1022
1050
  getFullscreenCopyOnSelect() {
1023
- return this.settings.fullscreenCopyOnSelect ?? true;
1051
+ return this.settings.fullscreenCopyOnSelect ?? SETTINGS_DEFAULTS.fullscreenCopyOnSelect;
1024
1052
  }
1025
1053
  setFullscreenCopyOnSelect(enabled) {
1026
1054
  this.globalSettings.fullscreenCopyOnSelect = enabled;
@@ -1031,7 +1059,7 @@ export class SettingsManager {
1031
1059
  const lines = this.settings.fullscreenWheelScrollLines;
1032
1060
  return typeof lines === "number" && Number.isFinite(lines)
1033
1061
  ? Math.max(1, Math.min(100, Math.floor(lines)))
1034
- : "auto";
1062
+ : SETTINGS_DEFAULTS.fullscreenWheelScrollLines;
1035
1063
  }
1036
1064
  setFullscreenWheelScrollLines(lines) {
1037
1065
  this.globalSettings.fullscreenWheelScrollLines =
@@ -1040,7 +1068,7 @@ export class SettingsManager {
1040
1068
  this.save();
1041
1069
  }
1042
1070
  getImageAutoResize() {
1043
- return this.settings.images?.autoResize ?? true;
1071
+ return this.settings.images?.autoResize ?? SETTINGS_DEFAULTS.images.autoResize;
1044
1072
  }
1045
1073
  setImageAutoResize(enabled) {
1046
1074
  if (!this.globalSettings.images) {
@@ -1051,7 +1079,7 @@ export class SettingsManager {
1051
1079
  this.save();
1052
1080
  }
1053
1081
  getBlockImages() {
1054
- return this.settings.images?.blockImages ?? false;
1082
+ return this.settings.images?.blockImages ?? SETTINGS_DEFAULTS.images.blockImages;
1055
1083
  }
1056
1084
  setBlockImages(blocked) {
1057
1085
  if (!this.globalSettings.images) {
@@ -1077,7 +1105,7 @@ export class SettingsManager {
1077
1105
  this.save();
1078
1106
  }
1079
1107
  getDoubleEscapeAction() {
1080
- return this.settings.doubleEscapeAction ?? "tree";
1108
+ return this.settings.doubleEscapeAction ?? SETTINGS_DEFAULTS.doubleEscapeAction;
1081
1109
  }
1082
1110
  setDoubleEscapeAction(action) {
1083
1111
  this.globalSettings.doubleEscapeAction = action;
@@ -1087,7 +1115,7 @@ export class SettingsManager {
1087
1115
  getTreeFilterMode() {
1088
1116
  const mode = this.settings.treeFilterMode;
1089
1117
  const valid = ["default", "no-tools", "user-only", "labeled-only", "all"];
1090
- return mode && valid.includes(mode) ? mode : "default";
1118
+ return mode && valid.includes(mode) ? mode : SETTINGS_DEFAULTS.treeFilterMode;
1091
1119
  }
1092
1120
  setTreeFilterMode(mode) {
1093
1121
  this.globalSettings.treeFilterMode = mode;
@@ -1103,7 +1131,7 @@ export class SettingsManager {
1103
1131
  this.save();
1104
1132
  }
1105
1133
  getEditorPaddingX() {
1106
- return this.settings.editorPaddingX ?? 0;
1134
+ return this.settings.editorPaddingX ?? SETTINGS_DEFAULTS.editorPaddingX;
1107
1135
  }
1108
1136
  setEditorPaddingX(padding) {
1109
1137
  this.globalSettings.editorPaddingX = Math.max(0, Math.min(3, Math.floor(padding)));
@@ -1111,7 +1139,7 @@ export class SettingsManager {
1111
1139
  this.save();
1112
1140
  }
1113
1141
  getOutputPad() {
1114
- return this.settings.outputPad === 0 ? 0 : 1;
1142
+ return this.settings.outputPad === 0 ? 0 : SETTINGS_DEFAULTS.outputPad;
1115
1143
  }
1116
1144
  setOutputPad(padding) {
1117
1145
  this.globalSettings.outputPad = padding;
@@ -1119,7 +1147,7 @@ export class SettingsManager {
1119
1147
  this.save();
1120
1148
  }
1121
1149
  getAutocompleteMaxVisible() {
1122
- return this.settings.autocompleteMaxVisible ?? 5;
1150
+ return this.settings.autocompleteMaxVisible ?? SETTINGS_DEFAULTS.autocompleteMaxVisible;
1123
1151
  }
1124
1152
  setAutocompleteMaxVisible(maxVisible) {
1125
1153
  this.globalSettings.autocompleteMaxVisible = Math.max(3, Math.min(20, Math.floor(maxVisible)));
@@ -1127,11 +1155,11 @@ export class SettingsManager {
1127
1155
  this.save();
1128
1156
  }
1129
1157
  getCodeBlockIndent() {
1130
- return this.settings.markdown?.codeBlockIndent ?? " ";
1158
+ return this.settings.markdown?.codeBlockIndent ?? SETTINGS_DEFAULTS.markdown.codeBlockIndent;
1131
1159
  }
1132
1160
  getMermaidRenderingMode() {
1133
1161
  const mode = this.settings.markdown?.mermaid;
1134
- return mode === "off" || mode === "final" ? mode : "streaming";
1162
+ return mode === "off" || mode === "final" ? mode : SETTINGS_DEFAULTS.markdown.mermaid;
1135
1163
  }
1136
1164
  setMermaidRenderingMode(mode) {
1137
1165
  this.globalSettings.markdown ??= {};