@oh-my-pi/pi-coding-agent 8.1.0 → 8.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 (402) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/docs/session.md +111 -46
  3. package/examples/custom-tools/hello/index.ts +1 -1
  4. package/examples/custom-tools/todo/index.ts +3 -4
  5. package/examples/extensions/api-demo.ts +0 -1
  6. package/examples/extensions/chalk-logger.ts +2 -3
  7. package/examples/extensions/hello.ts +0 -1
  8. package/examples/extensions/pirate.ts +0 -1
  9. package/examples/extensions/plan-mode.ts +15 -16
  10. package/examples/extensions/todo.ts +3 -4
  11. package/examples/extensions/tools.ts +1 -2
  12. package/examples/extensions/with-deps/index.ts +0 -1
  13. package/examples/hooks/auto-commit-on-exit.ts +1 -2
  14. package/examples/hooks/confirm-destructive.ts +0 -1
  15. package/examples/hooks/custom-compaction.ts +1 -2
  16. package/examples/hooks/dirty-repo-guard.ts +0 -1
  17. package/examples/hooks/file-trigger.ts +3 -4
  18. package/examples/hooks/git-checkpoint.ts +0 -1
  19. package/examples/hooks/handoff.ts +3 -4
  20. package/examples/hooks/permission-gate.ts +1 -2
  21. package/examples/hooks/protected-paths.ts +1 -2
  22. package/examples/hooks/qna.ts +2 -3
  23. package/examples/hooks/snake.ts +4 -5
  24. package/examples/hooks/status-line.ts +0 -1
  25. package/examples/sdk/01-minimal.ts +2 -3
  26. package/examples/sdk/02-custom-model.ts +2 -3
  27. package/examples/sdk/03-custom-prompt.ts +3 -4
  28. package/examples/sdk/04-skills.ts +2 -3
  29. package/examples/sdk/06-extensions.ts +1 -2
  30. package/examples/sdk/06-hooks.ts +6 -7
  31. package/examples/sdk/07-context-files.ts +0 -1
  32. package/examples/sdk/08-prompt-templates.ts +0 -1
  33. package/examples/sdk/08-slash-commands.ts +0 -1
  34. package/examples/sdk/09-api-keys-and-oauth.ts +0 -1
  35. package/examples/sdk/10-settings.ts +0 -1
  36. package/examples/sdk/11-sessions.ts +0 -1
  37. package/package.json +51 -23
  38. package/scripts/format-prompts.ts +0 -1
  39. package/src/capability/context-file.ts +2 -3
  40. package/src/capability/extension-module.ts +2 -3
  41. package/src/capability/extension.ts +2 -3
  42. package/src/capability/fs.ts +20 -21
  43. package/src/capability/hook.ts +2 -3
  44. package/src/capability/index.ts +15 -16
  45. package/src/capability/instruction.ts +2 -3
  46. package/src/capability/mcp.ts +2 -3
  47. package/src/capability/prompt.ts +2 -3
  48. package/src/capability/rule.ts +2 -3
  49. package/src/capability/settings.ts +1 -2
  50. package/src/capability/skill.ts +2 -3
  51. package/src/capability/slash-command.ts +2 -3
  52. package/src/capability/ssh.ts +2 -3
  53. package/src/capability/system-prompt.ts +2 -3
  54. package/src/capability/tool.ts +2 -3
  55. package/src/cli/args.ts +5 -6
  56. package/src/cli/config-cli.ts +6 -7
  57. package/src/cli/file-processor.ts +19 -17
  58. package/src/cli/jupyter-cli.ts +105 -0
  59. package/src/cli/list-models.ts +10 -11
  60. package/src/cli/plugin-cli.ts +20 -21
  61. package/src/cli/session-picker.ts +2 -3
  62. package/src/cli/setup-cli.ts +2 -3
  63. package/src/cli/stats-cli.ts +2 -3
  64. package/src/cli/update-cli.ts +25 -22
  65. package/src/commit/agentic/agent.ts +21 -23
  66. package/src/commit/agentic/fallback.ts +9 -9
  67. package/src/commit/agentic/index.ts +30 -38
  68. package/src/commit/agentic/state.ts +1 -6
  69. package/src/commit/agentic/tools/analyze-file.ts +15 -15
  70. package/src/commit/agentic/tools/git-file-diff.ts +3 -3
  71. package/src/commit/agentic/tools/git-hunk.ts +7 -7
  72. package/src/commit/agentic/tools/git-overview.ts +5 -5
  73. package/src/commit/agentic/tools/index.ts +14 -14
  74. package/src/commit/agentic/tools/propose-changelog.ts +6 -6
  75. package/src/commit/agentic/tools/propose-commit.ts +8 -8
  76. package/src/commit/agentic/tools/recent-commits.ts +2 -2
  77. package/src/commit/agentic/tools/split-commit.ts +19 -23
  78. package/src/commit/agentic/topo-sort.ts +1 -1
  79. package/src/commit/agentic/trivial.ts +3 -3
  80. package/src/commit/agentic/validation.ts +12 -12
  81. package/src/commit/analysis/conventional.ts +7 -11
  82. package/src/commit/analysis/index.ts +4 -4
  83. package/src/commit/analysis/scope.ts +4 -4
  84. package/src/commit/analysis/summary.ts +7 -9
  85. package/src/commit/analysis/validation.ts +1 -1
  86. package/src/commit/changelog/detect.ts +6 -6
  87. package/src/commit/changelog/generate.ts +7 -9
  88. package/src/commit/changelog/index.ts +13 -13
  89. package/src/commit/changelog/parse.ts +2 -2
  90. package/src/commit/cli.ts +1 -1
  91. package/src/commit/git/diff.ts +3 -3
  92. package/src/commit/git/index.ts +19 -24
  93. package/src/commit/index.ts +1 -1
  94. package/src/commit/map-reduce/index.ts +9 -9
  95. package/src/commit/map-reduce/map-phase.ts +19 -34
  96. package/src/commit/map-reduce/reduce-phase.ts +9 -11
  97. package/src/commit/message.ts +2 -2
  98. package/src/commit/model-selection.ts +3 -7
  99. package/src/commit/pipeline.ts +20 -22
  100. package/src/commit/utils/exclusions.ts +3 -3
  101. package/src/config/file-lock.ts +17 -7
  102. package/src/config/keybindings.ts +6 -8
  103. package/src/config/model-registry.ts +55 -37
  104. package/src/config/model-resolver.ts +18 -19
  105. package/src/config/prompt-templates.ts +11 -11
  106. package/src/config/settings-manager.ts +50 -34
  107. package/src/config.ts +60 -62
  108. package/src/cursor.ts +11 -9
  109. package/src/discovery/agents-md.ts +11 -12
  110. package/src/discovery/builtin.ts +68 -73
  111. package/src/discovery/claude.ts +41 -42
  112. package/src/discovery/cline.ts +11 -12
  113. package/src/discovery/codex.ts +52 -53
  114. package/src/discovery/cursor.ts +9 -10
  115. package/src/discovery/gemini.ts +17 -22
  116. package/src/discovery/github.ts +13 -14
  117. package/src/discovery/helpers.ts +35 -34
  118. package/src/discovery/index.ts +16 -18
  119. package/src/discovery/mcp-json.ts +8 -9
  120. package/src/discovery/ssh.ts +8 -9
  121. package/src/discovery/vscode.ts +4 -5
  122. package/src/discovery/windsurf.ts +6 -7
  123. package/src/exa/company.ts +1 -2
  124. package/src/exa/index.ts +2 -3
  125. package/src/exa/linkedin.ts +1 -2
  126. package/src/exa/mcp-client.ts +14 -16
  127. package/src/exa/render.ts +10 -11
  128. package/src/exa/researcher.ts +1 -2
  129. package/src/exa/search.ts +1 -2
  130. package/src/exa/types.ts +0 -1
  131. package/src/exa/websets.ts +1 -2
  132. package/src/exec/bash-executor.ts +3 -4
  133. package/src/exec/exec.ts +0 -1
  134. package/src/export/custom-share.ts +5 -6
  135. package/src/export/html/index.ts +24 -21
  136. package/src/export/ttsr.ts +2 -3
  137. package/src/extensibility/custom-commands/bundled/review/index.ts +7 -8
  138. package/src/extensibility/custom-commands/loader.ts +17 -14
  139. package/src/extensibility/custom-commands/types.ts +1 -2
  140. package/src/extensibility/custom-tools/loader.ts +10 -11
  141. package/src/extensibility/custom-tools/types.ts +6 -7
  142. package/src/extensibility/custom-tools/wrapper.ts +2 -3
  143. package/src/extensibility/extensions/loader.ts +75 -53
  144. package/src/extensibility/extensions/runner.ts +11 -12
  145. package/src/extensibility/extensions/types.ts +19 -26
  146. package/src/extensibility/extensions/wrapper.ts +3 -4
  147. package/src/extensibility/hooks/index.ts +1 -1
  148. package/src/extensibility/hooks/loader.ts +8 -9
  149. package/src/extensibility/hooks/runner.ts +7 -8
  150. package/src/extensibility/hooks/tool-wrapper.ts +0 -1
  151. package/src/extensibility/hooks/types.ts +10 -17
  152. package/src/extensibility/plugins/doctor.ts +3 -3
  153. package/src/extensibility/plugins/installer.ts +27 -27
  154. package/src/extensibility/plugins/loader.ts +59 -56
  155. package/src/extensibility/plugins/manager.ts +211 -171
  156. package/src/extensibility/plugins/parser.ts +1 -1
  157. package/src/extensibility/plugins/paths.ts +8 -8
  158. package/src/extensibility/skills.ts +63 -60
  159. package/src/extensibility/slash-commands.ts +10 -10
  160. package/src/index.ts +46 -46
  161. package/src/internal-urls/agent-protocol.ts +21 -11
  162. package/src/internal-urls/artifact-protocol.ts +17 -13
  163. package/src/internal-urls/router.ts +1 -2
  164. package/src/internal-urls/rule-protocol.ts +3 -4
  165. package/src/internal-urls/skill-protocol.ts +3 -4
  166. package/src/ipy/executor.ts +14 -10
  167. package/src/ipy/gateway-coordinator.ts +79 -90
  168. package/src/ipy/kernel.ts +32 -30
  169. package/src/ipy/modules.ts +13 -13
  170. package/src/lsp/client.ts +21 -10
  171. package/src/lsp/clients/biome-client.ts +1 -2
  172. package/src/lsp/clients/index.ts +3 -3
  173. package/src/lsp/clients/lsp-linter-client.ts +4 -5
  174. package/src/lsp/config.ts +15 -15
  175. package/src/lsp/edits.ts +4 -5
  176. package/src/lsp/index.ts +43 -44
  177. package/src/lsp/lspmux.ts +8 -8
  178. package/src/lsp/render.ts +10 -16
  179. package/src/lsp/utils.ts +3 -3
  180. package/src/main.ts +55 -34
  181. package/src/mcp/client.ts +2 -3
  182. package/src/mcp/config.ts +5 -6
  183. package/src/mcp/json-rpc.ts +0 -1
  184. package/src/mcp/loader.ts +3 -4
  185. package/src/mcp/manager.ts +17 -18
  186. package/src/mcp/tool-bridge.ts +4 -9
  187. package/src/mcp/tool-cache.ts +2 -3
  188. package/src/mcp/transports/http.ts +2 -4
  189. package/src/mcp/transports/stdio.ts +1 -2
  190. package/src/migrations.ts +60 -49
  191. package/src/modes/components/armin.ts +4 -5
  192. package/src/modes/components/assistant-message.ts +6 -6
  193. package/src/modes/components/bash-execution.ts +7 -8
  194. package/src/modes/components/bordered-loader.ts +3 -3
  195. package/src/modes/components/branch-summary-message.ts +3 -3
  196. package/src/modes/components/compaction-summary-message.ts +3 -3
  197. package/src/modes/components/countdown-timer.ts +0 -1
  198. package/src/modes/components/custom-message.ts +5 -5
  199. package/src/modes/components/diff.ts +1 -1
  200. package/src/modes/components/dynamic-border.ts +2 -2
  201. package/src/modes/components/extensions/extension-dashboard.ts +6 -7
  202. package/src/modes/components/extensions/extension-list.ts +2 -3
  203. package/src/modes/components/extensions/inspector-panel.ts +3 -4
  204. package/src/modes/components/extensions/state-manager.ts +25 -26
  205. package/src/modes/components/extensions/types.ts +1 -2
  206. package/src/modes/components/footer.ts +47 -43
  207. package/src/modes/components/history-search.ts +2 -2
  208. package/src/modes/components/hook-editor.ts +3 -4
  209. package/src/modes/components/hook-input.ts +2 -3
  210. package/src/modes/components/hook-message.ts +5 -5
  211. package/src/modes/components/hook-selector.ts +2 -3
  212. package/src/modes/components/keybinding-hints.ts +2 -3
  213. package/src/modes/components/login-dialog.ts +2 -2
  214. package/src/modes/components/model-selector.ts +12 -12
  215. package/src/modes/components/oauth-selector.ts +2 -2
  216. package/src/modes/components/plugin-settings.ts +20 -20
  217. package/src/modes/components/python-execution.ts +7 -8
  218. package/src/modes/components/queue-mode-selector.ts +3 -3
  219. package/src/modes/components/read-tool-group.ts +2 -2
  220. package/src/modes/components/session-selector.ts +4 -4
  221. package/src/modes/components/settings-defs.ts +77 -69
  222. package/src/modes/components/settings-selector.ts +16 -16
  223. package/src/modes/components/show-images-selector.ts +2 -2
  224. package/src/modes/components/status-line/segments.ts +4 -4
  225. package/src/modes/components/status-line/separators.ts +1 -1
  226. package/src/modes/components/status-line/types.ts +2 -2
  227. package/src/modes/components/status-line-segment-editor.ts +7 -8
  228. package/src/modes/components/status-line.ts +12 -12
  229. package/src/modes/components/theme-selector.ts +8 -7
  230. package/src/modes/components/thinking-selector.ts +4 -4
  231. package/src/modes/components/todo-display.ts +2 -2
  232. package/src/modes/components/todo-reminder.ts +4 -4
  233. package/src/modes/components/tool-execution.ts +11 -16
  234. package/src/modes/components/tree-selector.ts +11 -11
  235. package/src/modes/components/ttsr-notification.ts +5 -5
  236. package/src/modes/components/user-message-selector.ts +1 -1
  237. package/src/modes/components/user-message.ts +1 -1
  238. package/src/modes/components/visual-truncate.ts +0 -1
  239. package/src/modes/components/welcome.ts +4 -4
  240. package/src/modes/controllers/command-controller.ts +46 -47
  241. package/src/modes/controllers/event-controller.ts +16 -20
  242. package/src/modes/controllers/extension-ui-controller.ts +40 -46
  243. package/src/modes/controllers/input-controller.ts +17 -18
  244. package/src/modes/controllers/selector-controller.ts +103 -91
  245. package/src/modes/index.ts +3 -3
  246. package/src/modes/interactive-mode.ts +27 -29
  247. package/src/modes/print-mode.ts +12 -13
  248. package/src/modes/rpc/rpc-client.ts +7 -8
  249. package/src/modes/rpc/rpc-mode.ts +24 -25
  250. package/src/modes/rpc/rpc-types.ts +3 -4
  251. package/src/modes/theme/mermaid-cache.ts +2 -2
  252. package/src/modes/theme/theme.ts +128 -53
  253. package/src/modes/types.ts +10 -10
  254. package/src/modes/utils/ui-helpers.ts +17 -17
  255. package/src/patch/applicator.ts +18 -19
  256. package/src/patch/diff.ts +1 -2
  257. package/src/patch/fuzzy.ts +1 -2
  258. package/src/patch/index.ts +10 -11
  259. package/src/patch/normalize.ts +4 -4
  260. package/src/patch/normative.ts +1 -2
  261. package/src/patch/parser.ts +8 -9
  262. package/src/patch/shared.ts +12 -13
  263. package/src/sdk.ts +60 -63
  264. package/src/session/agent-session.ts +83 -84
  265. package/src/session/agent-storage.ts +11 -11
  266. package/src/session/artifacts.ts +8 -9
  267. package/src/session/auth-storage.ts +25 -29
  268. package/src/session/compaction/branch-summarization.ts +7 -10
  269. package/src/session/compaction/compaction.ts +8 -19
  270. package/src/session/compaction/utils.ts +6 -9
  271. package/src/session/history-storage.ts +10 -10
  272. package/src/session/messages.ts +4 -5
  273. package/src/session/session-manager.ts +76 -65
  274. package/src/session/session-storage.ts +57 -69
  275. package/src/session/storage-migration.ts +2 -3
  276. package/src/session/streaming-output.ts +2 -2
  277. package/src/ssh/connection-manager.ts +43 -50
  278. package/src/ssh/ssh-executor.ts +2 -2
  279. package/src/ssh/sshfs-mount.ts +11 -18
  280. package/src/system-prompt.ts +27 -34
  281. package/src/task/agents.ts +45 -30
  282. package/src/task/commands.ts +6 -7
  283. package/src/task/discovery.ts +39 -76
  284. package/src/task/executor.ts +14 -15
  285. package/src/task/index.ts +33 -36
  286. package/src/task/output-manager.ts +3 -4
  287. package/src/task/parallel.ts +0 -1
  288. package/src/task/render.ts +19 -20
  289. package/src/task/subprocess-tool-registry.ts +1 -2
  290. package/src/task/worker-protocol.ts +3 -3
  291. package/src/task/worker.ts +32 -38
  292. package/src/task/worktree.ts +19 -19
  293. package/src/tools/ask.ts +8 -9
  294. package/src/tools/bash-interceptor.ts +1 -5
  295. package/src/tools/bash.ts +19 -18
  296. package/src/tools/calculator.ts +12 -12
  297. package/src/tools/complete.ts +3 -4
  298. package/src/tools/context.ts +2 -2
  299. package/src/tools/fetch.ts +23 -26
  300. package/src/tools/find.ts +15 -16
  301. package/src/tools/gemini-image.ts +14 -14
  302. package/src/tools/grep.ts +27 -27
  303. package/src/tools/index.ts +78 -56
  304. package/src/tools/list-limit.ts +1 -1
  305. package/src/tools/ls.ts +7 -7
  306. package/src/tools/notebook.ts +5 -5
  307. package/src/tools/output-meta.ts +3 -4
  308. package/src/tools/output-utils.ts +1 -1
  309. package/src/tools/path-utils.ts +5 -5
  310. package/src/tools/python.ts +36 -37
  311. package/src/tools/read.ts +23 -23
  312. package/src/tools/render-utils.ts +8 -9
  313. package/src/tools/renderers.ts +6 -7
  314. package/src/tools/review.ts +8 -11
  315. package/src/tools/ssh.ts +31 -30
  316. package/src/tools/todo-write.ts +13 -13
  317. package/src/tools/tool-errors.ts +3 -3
  318. package/src/tools/tool-result.ts +3 -8
  319. package/src/tools/write.ts +11 -16
  320. package/src/tui/code-cell.ts +3 -9
  321. package/src/tui/file-list.ts +3 -4
  322. package/src/tui/output-block.ts +1 -2
  323. package/src/tui/status-line.ts +2 -3
  324. package/src/tui/tree-list.ts +2 -3
  325. package/src/tui/types.ts +1 -2
  326. package/src/tui/utils.ts +2 -3
  327. package/src/utils/changelog.ts +9 -10
  328. package/src/utils/clipboard.ts +11 -11
  329. package/src/utils/file-mentions.ts +4 -10
  330. package/src/utils/frontmatter.ts +6 -3
  331. package/src/utils/fuzzy.ts +2 -2
  332. package/src/utils/image-convert.ts +1 -1
  333. package/src/utils/image-resize.ts +1 -1
  334. package/src/utils/mime.ts +2 -2
  335. package/src/utils/shell-snapshot.ts +11 -13
  336. package/src/utils/shell.ts +4 -5
  337. package/src/utils/title-generator.ts +8 -9
  338. package/src/utils/tools-manager.ts +23 -23
  339. package/src/vendor/photon/index.js +1099 -1059
  340. package/src/vendor/photon/photon_rs_bg.wasm +0 -0
  341. package/src/web/scrapers/artifacthub.ts +1 -1
  342. package/src/web/scrapers/arxiv.ts +2 -2
  343. package/src/web/scrapers/bluesky.ts +2 -2
  344. package/src/web/scrapers/cheatsh.ts +1 -1
  345. package/src/web/scrapers/chocolatey.ts +2 -2
  346. package/src/web/scrapers/choosealicense.ts +5 -5
  347. package/src/web/scrapers/cisa-kev.ts +1 -1
  348. package/src/web/scrapers/crossref.ts +2 -2
  349. package/src/web/scrapers/devto.ts +3 -3
  350. package/src/web/scrapers/discogs.ts +3 -4
  351. package/src/web/scrapers/discourse.ts +1 -1
  352. package/src/web/scrapers/dockerhub.ts +1 -1
  353. package/src/web/scrapers/fdroid.ts +2 -2
  354. package/src/web/scrapers/firefox-addons.ts +3 -3
  355. package/src/web/scrapers/flathub.ts +1 -1
  356. package/src/web/scrapers/github.ts +3 -3
  357. package/src/web/scrapers/gitlab.ts +4 -4
  358. package/src/web/scrapers/hackernews.ts +2 -2
  359. package/src/web/scrapers/huggingface.ts +1 -1
  360. package/src/web/scrapers/iacr.ts +2 -2
  361. package/src/web/scrapers/index.ts +0 -1
  362. package/src/web/scrapers/jetbrains-marketplace.ts +1 -1
  363. package/src/web/scrapers/lemmy.ts +2 -2
  364. package/src/web/scrapers/maven.ts +2 -2
  365. package/src/web/scrapers/mdn.ts +2 -4
  366. package/src/web/scrapers/metacpan.ts +2 -2
  367. package/src/web/scrapers/musicbrainz.ts +1 -2
  368. package/src/web/scrapers/npm.ts +1 -1
  369. package/src/web/scrapers/nuget.ts +2 -2
  370. package/src/web/scrapers/nvd.ts +3 -3
  371. package/src/web/scrapers/ollama.ts +7 -9
  372. package/src/web/scrapers/opencorporates.ts +2 -2
  373. package/src/web/scrapers/openlibrary.ts +6 -6
  374. package/src/web/scrapers/orcid.ts +0 -1
  375. package/src/web/scrapers/osv.ts +2 -2
  376. package/src/web/scrapers/packagist.ts +1 -1
  377. package/src/web/scrapers/pubmed.ts +1 -2
  378. package/src/web/scrapers/rawg.ts +2 -2
  379. package/src/web/scrapers/readthedocs.ts +1 -2
  380. package/src/web/scrapers/repology.ts +2 -2
  381. package/src/web/scrapers/rfc.ts +1 -1
  382. package/src/web/scrapers/searchcode.ts +2 -2
  383. package/src/web/scrapers/semantic-scholar.ts +1 -1
  384. package/src/web/scrapers/snapcraft.ts +2 -2
  385. package/src/web/scrapers/sourcegraph.ts +1 -1
  386. package/src/web/scrapers/spdx.ts +3 -3
  387. package/src/web/scrapers/spotify.ts +0 -1
  388. package/src/web/scrapers/twitter.ts +1 -1
  389. package/src/web/scrapers/types.ts +1 -2
  390. package/src/web/scrapers/utils.ts +5 -5
  391. package/src/web/scrapers/wikidata.ts +3 -3
  392. package/src/web/scrapers/youtube.ts +9 -14
  393. package/src/web/search/auth.ts +4 -9
  394. package/src/web/search/index.ts +11 -21
  395. package/src/web/search/providers/anthropic.ts +3 -9
  396. package/src/web/search/providers/exa.ts +6 -10
  397. package/src/web/search/providers/perplexity.ts +5 -5
  398. package/src/web/search/render.ts +16 -18
  399. package/scripts/generate-wasm-b64.ts +0 -24
  400. package/src/commit/map-reduce/.map-phase.ts.kate-swp +0 -0
  401. package/src/task/.executor.ts.kate-swp +0 -0
  402. package/src/vendor/photon/photon_rs_bg.wasm.b64.js +0 -1
@@ -7,8 +7,8 @@
7
7
  * 2. Add the definition here
8
8
  * 3. Add the handler in interactive-mode.ts settingsHandlers
9
9
  */
10
-
11
10
  import type { ThinkingLevel } from "@oh-my-pi/pi-agent-core";
11
+ import { getCapabilities } from "@oh-my-pi/pi-tui";
12
12
  import type {
13
13
  ImageProviderOption,
14
14
  NotificationMethod,
@@ -19,8 +19,7 @@ import type {
19
19
  StatusLineSeparatorStyle,
20
20
  SymbolPreset,
21
21
  WebSearchProviderOption,
22
- } from "@oh-my-pi/pi-coding-agent/config/settings-manager";
23
- import { getCapabilities } from "@oh-my-pi/pi-tui";
22
+ } from "../../config/settings-manager";
24
23
  import { getPreset } from "./status-line/presets";
25
24
 
26
25
  // Setting value types
@@ -98,7 +97,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
98
97
  type: "boolean",
99
98
  label: "Auto-compact",
100
99
  description: "Automatically compact context when it gets too large",
101
- get: (sm) => sm.getCompactionEnabled(),
100
+ get: sm => sm.getCompactionEnabled(),
102
101
  set: (sm, v) => sm.setCompactionEnabled(v),
103
102
  },
104
103
  {
@@ -107,7 +106,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
107
106
  type: "boolean",
108
107
  label: "Branch summaries",
109
108
  description: "Prompt to summarize when leaving a branch",
110
- get: (sm) => sm.getBranchSummaryEnabled(),
109
+ get: sm => sm.getBranchSummaryEnabled(),
111
110
  set: (sm, v) => sm.setBranchSummaryEnabled(v),
112
111
  },
113
112
  {
@@ -116,7 +115,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
116
115
  type: "boolean",
117
116
  label: "Todo completion",
118
117
  description: "Remind agent to complete todos before stopping",
119
- get: (sm) => sm.getTodoCompletionEnabled(),
118
+ get: sm => sm.getTodoCompletionEnabled(),
120
119
  set: (sm, v) => sm.setTodoCompletionEnabled(v),
121
120
  },
122
121
  {
@@ -125,7 +124,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
125
124
  type: "submenu",
126
125
  label: "Todo max reminders",
127
126
  description: "Maximum reminders to complete todos before giving up",
128
- get: (sm) => String(sm.getTodoCompletionMaxReminders()),
127
+ get: sm => String(sm.getTodoCompletionMaxReminders()),
129
128
  set: (sm, v) => sm.setTodoCompletionMaxReminders(Number.parseInt(v, 10)),
130
129
  getOptions: () => [
131
130
  { value: "1", label: "1 reminder" },
@@ -141,7 +140,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
141
140
  label: "Steering mode",
142
141
  description: "How to process queued messages while agent is working",
143
142
  values: ["one-at-a-time", "all"],
144
- get: (sm) => sm.getSteeringMode(),
143
+ get: sm => sm.getSteeringMode(),
145
144
  set: (sm, v) => sm.setSteeringMode(v as "all" | "one-at-a-time"),
146
145
  },
147
146
  {
@@ -151,7 +150,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
151
150
  label: "Follow-up mode",
152
151
  description: "How to drain follow-up messages after a turn completes",
153
152
  values: ["one-at-a-time", "all"],
154
- get: (sm) => sm.getFollowUpMode(),
153
+ get: sm => sm.getFollowUpMode(),
155
154
  set: (sm, v) => sm.setFollowUpMode(v as "one-at-a-time" | "all"),
156
155
  },
157
156
  {
@@ -161,7 +160,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
161
160
  label: "Interrupt mode",
162
161
  description: "When steering messages interrupt tool execution",
163
162
  values: ["immediate", "wait"],
164
- get: (sm) => sm.getInterruptMode(),
163
+ get: sm => sm.getInterruptMode(),
165
164
  set: (sm, v) => sm.setInterruptMode(v as "immediate" | "wait"),
166
165
  },
167
166
  {
@@ -170,7 +169,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
170
169
  type: "submenu",
171
170
  label: "Retry max attempts",
172
171
  description: "Maximum retry attempts on API errors",
173
- get: (sm) => String(sm.getRetryMaxRetries()),
172
+ get: sm => String(sm.getRetryMaxRetries()),
174
173
  set: (sm, v) => sm.setRetryMaxRetries(Number.parseInt(v, 10)),
175
174
  getOptions: () => [
176
175
  { value: "1", label: "1 retry" },
@@ -187,7 +186,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
187
186
  label: "Completion notification",
188
187
  description: "Notify when the agent completes",
189
188
  values: ["auto", "bell", "osc99", "osc9", "off"],
190
- get: (sm) => sm.getNotificationOnComplete(),
189
+ get: sm => sm.getNotificationOnComplete(),
191
190
  set: (sm, v) => sm.setNotificationOnComplete(v as NotificationMethod),
192
191
  },
193
192
  {
@@ -196,7 +195,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
196
195
  type: "boolean",
197
196
  label: "Startup quiet",
198
197
  description: "Skip welcome screen and startup status messages",
199
- get: (sm) => sm.getStartupQuiet(),
198
+ get: sm => sm.getStartupQuiet(),
200
199
  set: (sm, v) => sm.setStartupQuiet(v),
201
200
  },
202
201
  {
@@ -205,7 +204,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
205
204
  type: "boolean",
206
205
  label: "Collapse changelog",
207
206
  description: "Show condensed changelog after updates",
208
- get: (sm) => sm.getCollapseChangelog(),
207
+ get: sm => sm.getCollapseChangelog(),
209
208
  set: (sm, v) => sm.setCollapseChangelog(v),
210
209
  },
211
210
  {
@@ -214,7 +213,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
214
213
  type: "boolean",
215
214
  label: "Normative rewrite",
216
215
  description: "Rewrite tool call arguments to normalized format in session history",
217
- get: (sm) => sm.getNormativeRewrite(),
216
+ get: sm => sm.getNormativeRewrite(),
218
217
  set: (sm, v) => sm.setNormativeRewrite(v),
219
218
  },
220
219
  {
@@ -224,7 +223,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
224
223
  label: "Double-escape action",
225
224
  description: "Action when pressing Escape twice with empty editor",
226
225
  values: ["tree", "branch"],
227
- get: (sm) => sm.getDoubleEscapeAction(),
226
+ get: sm => sm.getDoubleEscapeAction(),
228
227
  set: (sm, v) => sm.setDoubleEscapeAction(v as "branch" | "tree"),
229
228
  },
230
229
 
@@ -237,7 +236,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
237
236
  type: "boolean",
238
237
  label: "Bash interceptor",
239
238
  description: "Block shell commands that have dedicated tools (grep, cat, etc.)",
240
- get: (sm) => sm.getBashInterceptorEnabled(),
239
+ get: sm => sm.getBashInterceptorEnabled(),
241
240
  set: (sm, v) => sm.setBashInterceptorEnabled(v),
242
241
  },
243
242
  {
@@ -246,7 +245,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
246
245
  type: "boolean",
247
246
  label: "Intercept simple ls",
248
247
  description: "Intercept bare ls commands (when bash interceptor is enabled)",
249
- get: (sm) => sm.getBashInterceptorSimpleLsEnabled(),
248
+ get: sm => sm.getBashInterceptorSimpleLsEnabled(),
250
249
  set: (sm, v) => sm.setBashInterceptorSimpleLsEnabled(v),
251
250
  },
252
251
  {
@@ -256,7 +255,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
256
255
  label: "Python tool mode",
257
256
  description: "How Python code is executed",
258
257
  values: ["ipy-only", "bash-only", "both"],
259
- get: (sm) => sm.getPythonToolMode(),
258
+ get: sm => sm.getPythonToolMode(),
260
259
  set: (sm, v) => sm.setPythonToolMode(v as PythonToolMode),
261
260
  },
262
261
  {
@@ -266,7 +265,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
266
265
  label: "Python kernel mode",
267
266
  description: "Whether to keep IPython kernel alive across calls",
268
267
  values: ["session", "per-call"],
269
- get: (sm) => sm.getPythonKernelMode(),
268
+ get: sm => sm.getPythonKernelMode(),
270
269
  set: (sm, v) => sm.setPythonKernelMode(v as PythonKernelMode),
271
270
  },
272
271
  {
@@ -275,7 +274,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
275
274
  type: "boolean",
276
275
  label: "Python shared gateway",
277
276
  description: "Share IPython kernel gateway across pi instances",
278
- get: (sm) => sm.getPythonSharedGateway(),
277
+ get: sm => sm.getPythonSharedGateway(),
279
278
  set: (sm, v) => sm.setPythonSharedGateway(v),
280
279
  },
281
280
  {
@@ -284,7 +283,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
284
283
  type: "boolean",
285
284
  label: "Edit fuzzy match",
286
285
  description: "Accept high-confidence fuzzy matches for whitespace/indentation differences",
287
- get: (sm) => sm.getEditFuzzyMatch(),
286
+ get: sm => sm.getEditFuzzyMatch(),
288
287
  set: (sm, v) => sm.setEditFuzzyMatch(v),
289
288
  },
290
289
  {
@@ -293,7 +292,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
293
292
  type: "submenu",
294
293
  label: "Edit fuzzy threshold",
295
294
  description: "Similarity threshold for fuzzy matches (higher = stricter)",
296
- get: (sm) => sm.getEditFuzzyThreshold().toFixed(2),
295
+ get: sm => sm.getEditFuzzyThreshold().toFixed(2),
297
296
  set: (sm, v) => sm.setEditFuzzyThreshold(Number(v)),
298
297
  getOptions: () => [
299
298
  { value: "0.85", label: "0.85", description: "Lenient" },
@@ -308,7 +307,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
308
307
  type: "boolean",
309
308
  label: "Edit patch mode",
310
309
  description: "Use codex-style apply-patch format instead of old_text/new_text for edits",
311
- get: (sm) => sm.getEditPatchMode(),
310
+ get: sm => sm.getEditPatchMode(),
312
311
  set: (sm, v) => sm.setEditPatchMode(v),
313
312
  },
314
313
  {
@@ -317,7 +316,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
317
316
  type: "boolean",
318
317
  label: "Edit streaming abort",
319
318
  description: "Abort streaming edit tool calls when patch preview fails",
320
- get: (sm) => sm.getEditStreamingAbort(),
319
+ get: sm => sm.getEditStreamingAbort(),
321
320
  set: (sm, v) => sm.setEditStreamingAbort(v),
322
321
  },
323
322
  {
@@ -326,7 +325,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
326
325
  type: "boolean",
327
326
  label: "Read line numbers",
328
327
  description: "Prepend line numbers to read tool output by default",
329
- get: (sm) => sm.getReadLineNumbers(),
328
+ get: sm => sm.getReadLineNumbers(),
330
329
  set: (sm, v) => sm.setReadLineNumbers(v),
331
330
  },
332
331
  {
@@ -335,7 +334,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
335
334
  type: "boolean",
336
335
  label: "MCP project config",
337
336
  description: "Load .mcp.json/mcp.json from project root",
338
- get: (sm) => sm.getMCPProjectConfigEnabled(),
337
+ get: sm => sm.getMCPProjectConfigEnabled(),
339
338
  set: (sm, v) => sm.setMCPProjectConfigEnabled(v),
340
339
  },
341
340
  {
@@ -344,7 +343,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
344
343
  type: "boolean",
345
344
  label: "Skill commands",
346
345
  description: "Register skills as /skill:name commands",
347
- get: (sm) => sm.getEnableSkillCommands(),
346
+ get: sm => sm.getEnableSkillCommands(),
348
347
  set: (sm, v) => sm.setEnableSkillCommands(v),
349
348
  },
350
349
  {
@@ -353,7 +352,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
353
352
  type: "boolean",
354
353
  label: "Claude user commands",
355
354
  description: "Load commands from ~/.claude/commands/",
356
- get: (sm) => sm.getCommandsEnableClaudeUser(),
355
+ get: sm => sm.getCommandsEnableClaudeUser(),
357
356
  set: (sm, v) => sm.setCommandsEnableClaudeUser(v),
358
357
  },
359
358
  {
@@ -362,7 +361,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
362
361
  type: "boolean",
363
362
  label: "Claude project commands",
364
363
  description: "Load commands from .claude/commands/",
365
- get: (sm) => sm.getCommandsEnableClaudeProject(),
364
+ get: sm => sm.getCommandsEnableClaudeProject(),
366
365
  set: (sm, v) => sm.setCommandsEnableClaudeProject(v),
367
366
  },
368
367
  {
@@ -371,7 +370,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
371
370
  type: "submenu",
372
371
  label: "Web search provider",
373
372
  description: "Provider for web search tool",
374
- get: (sm) => sm.getWebSearchProvider(),
373
+ get: sm => sm.getWebSearchProvider(),
375
374
  set: (sm, v) => sm.setWebSearchProvider(v as WebSearchProviderOption),
376
375
  getOptions: () => [
377
376
  { value: "auto", label: "Auto", description: "Priority: Exa > Perplexity > Anthropic" },
@@ -386,7 +385,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
386
385
  type: "submenu",
387
386
  label: "Image provider",
388
387
  description: "Provider for image generation tool",
389
- get: (sm) => sm.getImageProvider(),
388
+ get: sm => sm.getImageProvider(),
390
389
  set: (sm, v) => sm.setImageProvider(v as ImageProviderOption),
391
390
  getOptions: () => [
392
391
  { value: "auto", label: "Auto", description: "Priority: OpenRouter > Gemini" },
@@ -404,7 +403,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
404
403
  type: "submenu",
405
404
  label: "Theme",
406
405
  description: "Color theme for the interface",
407
- get: (sm) => sm.getTheme() ?? "dark",
406
+ get: sm => sm.getTheme() ?? "dark",
408
407
  set: (sm, v) => sm.setTheme(v),
409
408
  getOptions: () => [], // Filled dynamically from context
410
409
  },
@@ -414,7 +413,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
414
413
  type: "submenu",
415
414
  label: "Symbol preset",
416
415
  description: "Icon/symbol style (overrides theme default)",
417
- get: (sm) => sm.getSymbolPreset() ?? "unicode",
416
+ get: sm => sm.getSymbolPreset() ?? "unicode",
418
417
  set: (sm, v) => sm.setSymbolPreset(v as SymbolPreset),
419
418
  getOptions: () => [
420
419
  { value: "unicode", label: "Unicode", description: "Standard Unicode symbols (default)" },
@@ -422,16 +421,25 @@ export const SETTINGS_DEFS: SettingDef[] = [
422
421
  { value: "ascii", label: "ASCII", description: "ASCII-only characters (maximum compatibility)" },
423
422
  ],
424
423
  },
424
+ {
425
+ id: "colorBlindMode",
426
+ tab: "display",
427
+ type: "boolean",
428
+ label: "Color blind mode",
429
+ description: "Use blue instead of green for diff additions (red-green color blindness)",
430
+ get: sm => sm.getColorBlindMode(),
431
+ set: (sm, v) => sm.setColorBlindMode(v),
432
+ },
425
433
  {
426
434
  id: "thinkingLevel",
427
435
  tab: "display",
428
436
  type: "submenu",
429
437
  label: "Thinking level",
430
438
  description: "Reasoning depth for thinking-capable models",
431
- get: (sm) => sm.getDefaultThinkingLevel() ?? "off",
439
+ get: sm => sm.getDefaultThinkingLevel() ?? "off",
432
440
  set: (sm, v) => sm.setDefaultThinkingLevel(v as ThinkingLevel),
433
441
  getOptions: () =>
434
- (["off", "minimal", "low", "medium", "high", "xhigh"] as ThinkingLevel[]).map((level) => ({
442
+ (["off", "minimal", "low", "medium", "high", "xhigh"] as ThinkingLevel[]).map(level => ({
435
443
  value: level,
436
444
  label: level,
437
445
  description: THINKING_DESCRIPTIONS[level],
@@ -443,7 +451,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
443
451
  type: "boolean",
444
452
  label: "Hide thinking",
445
453
  description: "Hide thinking blocks in assistant responses",
446
- get: (sm) => sm.getHideThinkingBlock(),
454
+ get: sm => sm.getHideThinkingBlock(),
447
455
  set: (sm, v) => sm.setHideThinkingBlock(v),
448
456
  },
449
457
  {
@@ -452,7 +460,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
452
460
  type: "boolean",
453
461
  label: "Show images",
454
462
  description: "Render images inline in terminal",
455
- get: (sm) => sm.getShowImages(),
463
+ get: sm => sm.getShowImages(),
456
464
  set: (sm, v) => sm.setShowImages(v),
457
465
  condition: () => !!getCapabilities().images,
458
466
  },
@@ -462,7 +470,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
462
470
  type: "boolean",
463
471
  label: "Auto-resize images",
464
472
  description: "Resize large images to 2000x2000 max for better model compatibility",
465
- get: (sm) => sm.getImageAutoResize(),
473
+ get: sm => sm.getImageAutoResize(),
466
474
  set: (sm, v) => sm.setImageAutoResize(v),
467
475
  },
468
476
  {
@@ -471,7 +479,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
471
479
  type: "boolean",
472
480
  label: "Block images",
473
481
  description: "Prevent images from being sent to LLM providers",
474
- get: (sm) => sm.getBlockImages(),
482
+ get: sm => sm.getBlockImages(),
475
483
  set: (sm, v) => sm.setBlockImages(v),
476
484
  },
477
485
  {
@@ -480,7 +488,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
480
488
  type: "boolean",
481
489
  label: "Hardware cursor",
482
490
  description: "Show terminal cursor for IME support (default: on for Linux/macOS)",
483
- get: (sm) => sm.getShowHardwareCursor(),
491
+ get: sm => sm.getShowHardwareCursor(),
484
492
  set: (sm, v) => sm.setShowHardwareCursor(v),
485
493
  },
486
494
 
@@ -493,7 +501,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
493
501
  type: "boolean",
494
502
  label: "TTSR enabled",
495
503
  description: "Time Traveling Stream Rules: interrupt agent when output matches patterns",
496
- get: (sm) => sm.getTtsrEnabled(),
504
+ get: sm => sm.getTtsrEnabled(),
497
505
  set: (sm, v) => sm.setTtsrEnabled(v),
498
506
  },
499
507
  {
@@ -503,7 +511,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
503
511
  label: "TTSR context mode",
504
512
  description: "What to do with partial output when TTSR triggers",
505
513
  values: ["discard", "keep"],
506
- get: (sm) => sm.getTtsrContextMode(),
514
+ get: sm => sm.getTtsrContextMode(),
507
515
  set: (sm, v) => sm.setTtsrContextMode(v as "keep" | "discard"),
508
516
  },
509
517
  {
@@ -513,7 +521,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
513
521
  label: "TTSR repeat mode",
514
522
  description: "How rules can repeat: once per session or after a message gap",
515
523
  values: ["once", "after-gap"],
516
- get: (sm) => sm.getTtsrRepeatMode(),
524
+ get: sm => sm.getTtsrRepeatMode(),
517
525
  set: (sm, v) => sm.setTtsrRepeatMode(v as "once" | "after-gap"),
518
526
  },
519
527
  {
@@ -522,7 +530,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
522
530
  type: "submenu",
523
531
  label: "TTSR repeat gap",
524
532
  description: "Messages before a rule can trigger again (when repeat mode is after-gap)",
525
- get: (sm) => String(sm.getTtsrRepeatGap()),
533
+ get: sm => String(sm.getTtsrRepeatGap()),
526
534
  set: (sm, v) => sm.setTtsrRepeatGap(Number.parseInt(v, 10)),
527
535
  getOptions: () => [
528
536
  { value: "5", label: "5 messages" },
@@ -542,7 +550,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
542
550
  type: "submenu",
543
551
  label: "Preset",
544
552
  description: "Pre-built status line configurations",
545
- get: (sm) => sm.getStatusLinePreset(),
553
+ get: sm => sm.getStatusLinePreset(),
546
554
  set: (sm, v) => sm.setStatusLinePreset(v as StatusLinePreset),
547
555
  getOptions: () => [
548
556
  { value: "default", label: "Default", description: "Model, path, git, context, tokens, cost" },
@@ -560,7 +568,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
560
568
  type: "submenu",
561
569
  label: "Separator style",
562
570
  description: "Style of separators between segments",
563
- get: (sm) => {
571
+ get: sm => {
564
572
  const settings = sm.getStatusLineSettings();
565
573
  if (settings.separator) return settings.separator;
566
574
  return getPreset(sm.getStatusLinePreset()).separator;
@@ -582,7 +590,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
582
590
  type: "boolean",
583
591
  label: "Show extension status",
584
592
  description: "Display hook status messages below status line",
585
- get: (sm) => sm.getStatusLineShowHookStatus(),
593
+ get: sm => sm.getStatusLineShowHookStatus(),
586
594
  set: (sm, v) => sm.setStatusLineShowHookStatus(v),
587
595
  },
588
596
  {
@@ -602,7 +610,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
602
610
  label: "Model thinking level",
603
611
  description: "Show thinking level in the model segment",
604
612
  values: ["default", "on", "off"],
605
- get: (sm) => {
613
+ get: sm => {
606
614
  const value = sm.getStatusLineSegmentOptions().model?.showThinkingLevel;
607
615
  if (value === undefined) return "default";
608
616
  return value ? "on" : "off";
@@ -622,7 +630,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
622
630
  label: "Path abbreviate",
623
631
  description: "Use ~ and strip home prefix in path segment",
624
632
  values: ["default", "on", "off"],
625
- get: (sm) => {
633
+ get: sm => {
626
634
  const value = sm.getStatusLineSegmentOptions().path?.abbreviate;
627
635
  if (value === undefined) return "default";
628
636
  return value ? "on" : "off";
@@ -641,7 +649,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
641
649
  type: "submenu",
642
650
  label: "Path max length",
643
651
  description: "Maximum length for displayed path",
644
- get: (sm) => {
652
+ get: sm => {
645
653
  const value = sm.getStatusLineSegmentOptions().path?.maxLength;
646
654
  return typeof value === "number" ? String(value) : "default";
647
655
  },
@@ -669,7 +677,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
669
677
  label: "Path strip /work",
670
678
  description: "Strip /work prefix in path segment",
671
679
  values: ["default", "on", "off"],
672
- get: (sm) => {
680
+ get: sm => {
673
681
  const value = sm.getStatusLineSegmentOptions().path?.stripWorkPrefix;
674
682
  if (value === undefined) return "default";
675
683
  return value ? "on" : "off";
@@ -689,7 +697,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
689
697
  label: "Git show branch",
690
698
  description: "Show branch name in git segment",
691
699
  values: ["default", "on", "off"],
692
- get: (sm) => {
700
+ get: sm => {
693
701
  const value = sm.getStatusLineSegmentOptions().git?.showBranch;
694
702
  if (value === undefined) return "default";
695
703
  return value ? "on" : "off";
@@ -709,7 +717,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
709
717
  label: "Git show staged",
710
718
  description: "Show staged file count in git segment",
711
719
  values: ["default", "on", "off"],
712
- get: (sm) => {
720
+ get: sm => {
713
721
  const value = sm.getStatusLineSegmentOptions().git?.showStaged;
714
722
  if (value === undefined) return "default";
715
723
  return value ? "on" : "off";
@@ -729,7 +737,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
729
737
  label: "Git show unstaged",
730
738
  description: "Show unstaged file count in git segment",
731
739
  values: ["default", "on", "off"],
732
- get: (sm) => {
740
+ get: sm => {
733
741
  const value = sm.getStatusLineSegmentOptions().git?.showUnstaged;
734
742
  if (value === undefined) return "default";
735
743
  return value ? "on" : "off";
@@ -749,7 +757,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
749
757
  label: "Git show untracked",
750
758
  description: "Show untracked file count in git segment",
751
759
  values: ["default", "on", "off"],
752
- get: (sm) => {
760
+ get: sm => {
753
761
  const value = sm.getStatusLineSegmentOptions().git?.showUntracked;
754
762
  if (value === undefined) return "default";
755
763
  return value ? "on" : "off";
@@ -769,7 +777,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
769
777
  label: "Time format",
770
778
  description: "Clock segment time format",
771
779
  values: ["default", "12h", "24h"],
772
- get: (sm) => sm.getStatusLineSegmentOptions().time?.format ?? "default",
780
+ get: sm => sm.getStatusLineSegmentOptions().time?.format ?? "default",
773
781
  set: (sm, v) => {
774
782
  if (v === "default") {
775
783
  sm.clearStatusLineSegmentOption("time", "format");
@@ -785,7 +793,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
785
793
  label: "Time show seconds",
786
794
  description: "Include seconds in clock segment",
787
795
  values: ["default", "on", "off"],
788
- get: (sm) => {
796
+ get: sm => {
789
797
  const value = sm.getStatusLineSegmentOptions().time?.showSeconds;
790
798
  if (value === undefined) return "default";
791
799
  return value ? "on" : "off";
@@ -808,7 +816,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
808
816
  type: "boolean",
809
817
  label: "Format on write",
810
818
  description: "Automatically format code files using LSP after writing",
811
- get: (sm) => sm.getLspFormatOnWrite(),
819
+ get: sm => sm.getLspFormatOnWrite(),
812
820
  set: (sm, v) => sm.setLspFormatOnWrite(v),
813
821
  },
814
822
  {
@@ -817,7 +825,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
817
825
  type: "boolean",
818
826
  label: "Diagnostics on write",
819
827
  description: "Return LSP diagnostics (errors/warnings) after writing code files",
820
- get: (sm) => sm.getLspDiagnosticsOnWrite(),
828
+ get: sm => sm.getLspDiagnosticsOnWrite(),
821
829
  set: (sm, v) => sm.setLspDiagnosticsOnWrite(v),
822
830
  },
823
831
  {
@@ -826,7 +834,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
826
834
  type: "boolean",
827
835
  label: "Diagnostics on edit",
828
836
  description: "Return LSP diagnostics (errors/warnings) after editing code files",
829
- get: (sm) => sm.getLspDiagnosticsOnEdit(),
837
+ get: sm => sm.getLspDiagnosticsOnEdit(),
830
838
  set: (sm, v) => sm.setLspDiagnosticsOnEdit(v),
831
839
  },
832
840
 
@@ -839,7 +847,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
839
847
  type: "boolean",
840
848
  label: "Exa enabled",
841
849
  description: "Master toggle for all Exa search tools",
842
- get: (sm) => sm.getExaSettings().enabled,
850
+ get: sm => sm.getExaSettings().enabled,
843
851
  set: (sm, v) => sm.setExaEnabled(v),
844
852
  },
845
853
  {
@@ -848,7 +856,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
848
856
  type: "boolean",
849
857
  label: "Exa search",
850
858
  description: "Basic search, deep search, code search, crawl",
851
- get: (sm) => sm.getExaSettings().enableSearch,
859
+ get: sm => sm.getExaSettings().enableSearch,
852
860
  set: (sm, v) => sm.setExaSearchEnabled(v),
853
861
  },
854
862
  {
@@ -857,7 +865,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
857
865
  type: "boolean",
858
866
  label: "Exa LinkedIn",
859
867
  description: "Search LinkedIn for people and companies",
860
- get: (sm) => sm.getExaSettings().enableLinkedin,
868
+ get: sm => sm.getExaSettings().enableLinkedin,
861
869
  set: (sm, v) => sm.setExaLinkedinEnabled(v),
862
870
  },
863
871
  {
@@ -866,7 +874,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
866
874
  type: "boolean",
867
875
  label: "Exa company",
868
876
  description: "Comprehensive company research tool",
869
- get: (sm) => sm.getExaSettings().enableCompany,
877
+ get: sm => sm.getExaSettings().enableCompany,
870
878
  set: (sm, v) => sm.setExaCompanyEnabled(v),
871
879
  },
872
880
  {
@@ -875,7 +883,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
875
883
  type: "boolean",
876
884
  label: "Exa researcher",
877
885
  description: "AI-powered deep research tasks",
878
- get: (sm) => sm.getExaSettings().enableResearcher,
886
+ get: sm => sm.getExaSettings().enableResearcher,
879
887
  set: (sm, v) => sm.setExaResearcherEnabled(v),
880
888
  },
881
889
  {
@@ -884,7 +892,7 @@ export const SETTINGS_DEFS: SettingDef[] = [
884
892
  type: "boolean",
885
893
  label: "Exa websets",
886
894
  description: "Webset management and enrichment tools",
887
- get: (sm) => sm.getExaSettings().enableWebsets,
895
+ get: sm => sm.getExaSettings().enableWebsets,
888
896
  set: (sm, v) => sm.setExaWebsetsEnabled(v),
889
897
  },
890
898
  ];
@@ -898,10 +906,10 @@ function getAllSettings(): SettingDef[] {
898
906
 
899
907
  /** Get settings for a specific tab */
900
908
  export function getSettingsForTab(tab: string): SettingDef[] {
901
- return getAllSettings().filter((def) => def.tab === tab);
909
+ return getAllSettings().filter(def => def.tab === tab);
902
910
  }
903
911
 
904
912
  /** Get a setting definition by id */
905
913
  export function getSettingDef(id: string): SettingDef | undefined {
906
- return getAllSettings().find((def) => def.id === id);
914
+ return getAllSettings().find(def => def.id === id);
907
915
  }