meetsoma 0.1.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 (460) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +100 -0
  4. package/dist/cli/args.d.ts +48 -0
  5. package/dist/cli/args.d.ts.map +1 -0
  6. package/dist/cli/args.js +299 -0
  7. package/dist/cli/args.js.map +1 -0
  8. package/dist/cli/config-selector.d.ts +14 -0
  9. package/dist/cli/config-selector.d.ts.map +1 -0
  10. package/dist/cli/config-selector.js +31 -0
  11. package/dist/cli/config-selector.js.map +1 -0
  12. package/dist/cli/file-processor.d.ts +15 -0
  13. package/dist/cli/file-processor.d.ts.map +1 -0
  14. package/dist/cli/file-processor.js +79 -0
  15. package/dist/cli/file-processor.js.map +1 -0
  16. package/dist/cli/list-models.d.ts +9 -0
  17. package/dist/cli/list-models.d.ts.map +1 -0
  18. package/dist/cli/list-models.js +92 -0
  19. package/dist/cli/list-models.js.map +1 -0
  20. package/dist/cli/session-picker.d.ts +9 -0
  21. package/dist/cli/session-picker.d.ts.map +1 -0
  22. package/dist/cli/session-picker.js +34 -0
  23. package/dist/cli/session-picker.js.map +1 -0
  24. package/dist/cli.d.ts +3 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +19 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config.d.ts +68 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +203 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/core/agent-session.d.ts +581 -0
  33. package/dist/core/agent-session.d.ts.map +1 -0
  34. package/dist/core/agent-session.js +2461 -0
  35. package/dist/core/agent-session.js.map +1 -0
  36. package/dist/core/auth-storage.d.ts +129 -0
  37. package/dist/core/auth-storage.d.ts.map +1 -0
  38. package/dist/core/auth-storage.js +395 -0
  39. package/dist/core/auth-storage.js.map +1 -0
  40. package/dist/core/bash-executor.d.ts +47 -0
  41. package/dist/core/bash-executor.d.ts.map +1 -0
  42. package/dist/core/bash-executor.js +212 -0
  43. package/dist/core/bash-executor.js.map +1 -0
  44. package/dist/core/compaction/branch-summarization.d.ts +86 -0
  45. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  46. package/dist/core/compaction/branch-summarization.js +242 -0
  47. package/dist/core/compaction/branch-summarization.js.map +1 -0
  48. package/dist/core/compaction/compaction.d.ts +121 -0
  49. package/dist/core/compaction/compaction.d.ts.map +1 -0
  50. package/dist/core/compaction/compaction.js +610 -0
  51. package/dist/core/compaction/compaction.js.map +1 -0
  52. package/dist/core/compaction/index.d.ts +7 -0
  53. package/dist/core/compaction/index.d.ts.map +1 -0
  54. package/dist/core/compaction/index.js +7 -0
  55. package/dist/core/compaction/index.js.map +1 -0
  56. package/dist/core/compaction/utils.d.ts +35 -0
  57. package/dist/core/compaction/utils.d.ts.map +1 -0
  58. package/dist/core/compaction/utils.js +138 -0
  59. package/dist/core/compaction/utils.js.map +1 -0
  60. package/dist/core/defaults.d.ts +3 -0
  61. package/dist/core/defaults.d.ts.map +1 -0
  62. package/dist/core/defaults.js +2 -0
  63. package/dist/core/defaults.js.map +1 -0
  64. package/dist/core/diagnostics.d.ts +15 -0
  65. package/dist/core/diagnostics.d.ts.map +1 -0
  66. package/dist/core/diagnostics.js +2 -0
  67. package/dist/core/diagnostics.js.map +1 -0
  68. package/dist/core/event-bus.d.ts +9 -0
  69. package/dist/core/event-bus.d.ts.map +1 -0
  70. package/dist/core/event-bus.js +25 -0
  71. package/dist/core/event-bus.js.map +1 -0
  72. package/dist/core/exec.d.ts +29 -0
  73. package/dist/core/exec.d.ts.map +1 -0
  74. package/dist/core/exec.js +71 -0
  75. package/dist/core/exec.js.map +1 -0
  76. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  77. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  78. package/dist/core/export-html/ansi-to-html.js +249 -0
  79. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  80. package/dist/core/export-html/index.d.ts +34 -0
  81. package/dist/core/export-html/index.d.ts.map +1 -0
  82. package/dist/core/export-html/index.js +222 -0
  83. package/dist/core/export-html/index.js.map +1 -0
  84. package/dist/core/export-html/template.css +971 -0
  85. package/dist/core/export-html/template.html +54 -0
  86. package/dist/core/export-html/template.js +1586 -0
  87. package/dist/core/export-html/tool-renderer.d.ts +35 -0
  88. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  89. package/dist/core/export-html/tool-renderer.js +63 -0
  90. package/dist/core/export-html/tool-renderer.js.map +1 -0
  91. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  92. package/dist/core/export-html/vendor/marked.min.js +6 -0
  93. package/dist/core/extensions/index.d.ts +11 -0
  94. package/dist/core/extensions/index.d.ts.map +1 -0
  95. package/dist/core/extensions/index.js +9 -0
  96. package/dist/core/extensions/index.js.map +1 -0
  97. package/dist/core/extensions/loader.d.ts +25 -0
  98. package/dist/core/extensions/loader.d.ts.map +1 -0
  99. package/dist/core/extensions/loader.js +426 -0
  100. package/dist/core/extensions/loader.js.map +1 -0
  101. package/dist/core/extensions/runner.d.ts +146 -0
  102. package/dist/core/extensions/runner.d.ts.map +1 -0
  103. package/dist/core/extensions/runner.js +646 -0
  104. package/dist/core/extensions/runner.js.map +1 -0
  105. package/dist/core/extensions/types.d.ts +1017 -0
  106. package/dist/core/extensions/types.d.ts.map +1 -0
  107. package/dist/core/extensions/types.js +35 -0
  108. package/dist/core/extensions/types.js.map +1 -0
  109. package/dist/core/extensions/wrapper.d.ts +27 -0
  110. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  111. package/dist/core/extensions/wrapper.js +102 -0
  112. package/dist/core/extensions/wrapper.js.map +1 -0
  113. package/dist/core/footer-data-provider.d.ts +32 -0
  114. package/dist/core/footer-data-provider.d.ts.map +1 -0
  115. package/dist/core/footer-data-provider.js +134 -0
  116. package/dist/core/footer-data-provider.js.map +1 -0
  117. package/dist/core/index.d.ts +9 -0
  118. package/dist/core/index.d.ts.map +1 -0
  119. package/dist/core/index.js +9 -0
  120. package/dist/core/index.js.map +1 -0
  121. package/dist/core/keybindings.d.ts +55 -0
  122. package/dist/core/keybindings.d.ts.map +1 -0
  123. package/dist/core/keybindings.js +153 -0
  124. package/dist/core/keybindings.js.map +1 -0
  125. package/dist/core/messages.d.ts +77 -0
  126. package/dist/core/messages.d.ts.map +1 -0
  127. package/dist/core/messages.js +123 -0
  128. package/dist/core/messages.js.map +1 -0
  129. package/dist/core/model-registry.d.ts +113 -0
  130. package/dist/core/model-registry.d.ts.map +1 -0
  131. package/dist/core/model-registry.js +537 -0
  132. package/dist/core/model-registry.js.map +1 -0
  133. package/dist/core/model-resolver.d.ts +104 -0
  134. package/dist/core/model-resolver.d.ts.map +1 -0
  135. package/dist/core/model-resolver.js +462 -0
  136. package/dist/core/model-resolver.js.map +1 -0
  137. package/dist/core/package-manager.d.ts +151 -0
  138. package/dist/core/package-manager.d.ts.map +1 -0
  139. package/dist/core/package-manager.js +1447 -0
  140. package/dist/core/package-manager.js.map +1 -0
  141. package/dist/core/prompt-templates.d.ts +50 -0
  142. package/dist/core/prompt-templates.d.ts.map +1 -0
  143. package/dist/core/prompt-templates.js +251 -0
  144. package/dist/core/prompt-templates.js.map +1 -0
  145. package/dist/core/resolve-config-value.d.ts +17 -0
  146. package/dist/core/resolve-config-value.d.ts.map +1 -0
  147. package/dist/core/resolve-config-value.js +59 -0
  148. package/dist/core/resolve-config-value.js.map +1 -0
  149. package/dist/core/resource-loader.d.ts +184 -0
  150. package/dist/core/resource-loader.d.ts.map +1 -0
  151. package/dist/core/resource-loader.js +670 -0
  152. package/dist/core/resource-loader.js.map +1 -0
  153. package/dist/core/sdk.d.ts +90 -0
  154. package/dist/core/sdk.d.ts.map +1 -0
  155. package/dist/core/sdk.js +235 -0
  156. package/dist/core/sdk.js.map +1 -0
  157. package/dist/core/session-manager.d.ts +323 -0
  158. package/dist/core/session-manager.d.ts.map +1 -0
  159. package/dist/core/session-manager.js +1098 -0
  160. package/dist/core/session-manager.js.map +1 -0
  161. package/dist/core/settings-manager.d.ts +231 -0
  162. package/dist/core/settings-manager.d.ts.map +1 -0
  163. package/dist/core/settings-manager.js +667 -0
  164. package/dist/core/settings-manager.js.map +1 -0
  165. package/dist/core/skills.d.ts +58 -0
  166. package/dist/core/skills.d.ts.map +1 -0
  167. package/dist/core/skills.js +364 -0
  168. package/dist/core/skills.js.map +1 -0
  169. package/dist/core/slash-commands.d.ts +15 -0
  170. package/dist/core/slash-commands.d.ts.map +1 -0
  171. package/dist/core/slash-commands.js +22 -0
  172. package/dist/core/slash-commands.js.map +1 -0
  173. package/dist/core/system-prompt.d.ts +28 -0
  174. package/dist/core/system-prompt.d.ts.map +1 -0
  175. package/dist/core/system-prompt.js +161 -0
  176. package/dist/core/system-prompt.js.map +1 -0
  177. package/dist/core/timings.d.ts +7 -0
  178. package/dist/core/timings.d.ts.map +1 -0
  179. package/dist/core/timings.js +25 -0
  180. package/dist/core/timings.js.map +1 -0
  181. package/dist/core/tools/bash.d.ts +55 -0
  182. package/dist/core/tools/bash.d.ts.map +1 -0
  183. package/dist/core/tools/bash.js +242 -0
  184. package/dist/core/tools/bash.js.map +1 -0
  185. package/dist/core/tools/edit-diff.d.ts +63 -0
  186. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  187. package/dist/core/tools/edit-diff.js +243 -0
  188. package/dist/core/tools/edit-diff.js.map +1 -0
  189. package/dist/core/tools/edit.d.ts +39 -0
  190. package/dist/core/tools/edit.d.ts.map +1 -0
  191. package/dist/core/tools/edit.js +146 -0
  192. package/dist/core/tools/edit.js.map +1 -0
  193. package/dist/core/tools/find.d.ts +39 -0
  194. package/dist/core/tools/find.d.ts.map +1 -0
  195. package/dist/core/tools/find.js +206 -0
  196. package/dist/core/tools/find.js.map +1 -0
  197. package/dist/core/tools/grep.d.ts +45 -0
  198. package/dist/core/tools/grep.d.ts.map +1 -0
  199. package/dist/core/tools/grep.js +239 -0
  200. package/dist/core/tools/grep.js.map +1 -0
  201. package/dist/core/tools/index.d.ts +73 -0
  202. package/dist/core/tools/index.d.ts.map +1 -0
  203. package/dist/core/tools/index.js +61 -0
  204. package/dist/core/tools/index.js.map +1 -0
  205. package/dist/core/tools/ls.d.ts +40 -0
  206. package/dist/core/tools/ls.d.ts.map +1 -0
  207. package/dist/core/tools/ls.js +118 -0
  208. package/dist/core/tools/ls.js.map +1 -0
  209. package/dist/core/tools/path-utils.d.ts +8 -0
  210. package/dist/core/tools/path-utils.d.ts.map +1 -0
  211. package/dist/core/tools/path-utils.js +81 -0
  212. package/dist/core/tools/path-utils.js.map +1 -0
  213. package/dist/core/tools/read.d.ts +39 -0
  214. package/dist/core/tools/read.d.ts.map +1 -0
  215. package/dist/core/tools/read.js +166 -0
  216. package/dist/core/tools/read.js.map +1 -0
  217. package/dist/core/tools/truncate.d.ts +70 -0
  218. package/dist/core/tools/truncate.d.ts.map +1 -0
  219. package/dist/core/tools/truncate.js +205 -0
  220. package/dist/core/tools/truncate.js.map +1 -0
  221. package/dist/core/tools/write.d.ts +29 -0
  222. package/dist/core/tools/write.d.ts.map +1 -0
  223. package/dist/core/tools/write.js +78 -0
  224. package/dist/core/tools/write.js.map +1 -0
  225. package/dist/index.d.ts +27 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +42 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/main.d.ts +8 -0
  230. package/dist/main.d.ts.map +1 -0
  231. package/dist/main.js +661 -0
  232. package/dist/main.js.map +1 -0
  233. package/dist/migrations.d.ts +33 -0
  234. package/dist/migrations.d.ts.map +1 -0
  235. package/dist/migrations.js +261 -0
  236. package/dist/migrations.js.map +1 -0
  237. package/dist/modes/index.d.ts +9 -0
  238. package/dist/modes/index.d.ts.map +1 -0
  239. package/dist/modes/index.js +8 -0
  240. package/dist/modes/index.js.map +1 -0
  241. package/dist/modes/interactive/components/armin.d.ts +34 -0
  242. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  243. package/dist/modes/interactive/components/armin.js +333 -0
  244. package/dist/modes/interactive/components/armin.js.map +1 -0
  245. package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
  246. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  247. package/dist/modes/interactive/components/assistant-message.js +96 -0
  248. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  249. package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
  250. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  251. package/dist/modes/interactive/components/bash-execution.js +162 -0
  252. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  253. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  254. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  255. package/dist/modes/interactive/components/bordered-loader.js +51 -0
  256. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  257. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  258. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  259. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  260. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  261. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  262. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  263. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  264. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  265. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  266. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  267. package/dist/modes/interactive/components/config-selector.js +479 -0
  268. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  269. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  270. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  271. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  272. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  273. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  274. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  275. package/dist/modes/interactive/components/custom-editor.js +70 -0
  276. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  277. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  278. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  279. package/dist/modes/interactive/components/custom-message.js +79 -0
  280. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  281. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  282. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  283. package/dist/modes/interactive/components/daxnuts.js +140 -0
  284. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  285. package/dist/modes/interactive/components/diff.d.ts +12 -0
  286. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  287. package/dist/modes/interactive/components/diff.js +133 -0
  288. package/dist/modes/interactive/components/diff.js.map +1 -0
  289. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  290. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  291. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  292. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  293. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  294. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  295. package/dist/modes/interactive/components/extension-editor.js +110 -0
  296. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  297. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  298. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  299. package/dist/modes/interactive/components/extension-input.js +61 -0
  300. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  301. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  302. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  303. package/dist/modes/interactive/components/extension-selector.js +78 -0
  304. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  305. package/dist/modes/interactive/components/footer.d.ts +26 -0
  306. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  307. package/dist/modes/interactive/components/footer.js +198 -0
  308. package/dist/modes/interactive/components/footer.js.map +1 -0
  309. package/dist/modes/interactive/components/index.d.ts +32 -0
  310. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  311. package/dist/modes/interactive/components/index.js +33 -0
  312. package/dist/modes/interactive/components/index.js.map +1 -0
  313. package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
  314. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  315. package/dist/modes/interactive/components/keybinding-hints.js +61 -0
  316. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  317. package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  318. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  319. package/dist/modes/interactive/components/login-dialog.js +145 -0
  320. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  321. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  322. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  323. package/dist/modes/interactive/components/model-selector.js +271 -0
  324. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  325. package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  326. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  327. package/dist/modes/interactive/components/oauth-selector.js +97 -0
  328. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  329. package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  330. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  331. package/dist/modes/interactive/components/scoped-models-selector.js +275 -0
  332. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  333. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  334. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  335. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  336. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  337. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  338. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  339. package/dist/modes/interactive/components/session-selector.js +851 -0
  340. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  341. package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
  342. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  343. package/dist/modes/interactive/components/settings-selector.js +297 -0
  344. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  345. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  346. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  347. package/dist/modes/interactive/components/show-images-selector.js +35 -0
  348. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  349. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  350. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  351. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  352. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  353. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  354. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  355. package/dist/modes/interactive/components/theme-selector.js +46 -0
  356. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  357. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  358. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  359. package/dist/modes/interactive/components/thinking-selector.js +47 -0
  360. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  361. package/dist/modes/interactive/components/tool-execution.d.ts +77 -0
  362. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  363. package/dist/modes/interactive/components/tool-execution.js +787 -0
  364. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  365. package/dist/modes/interactive/components/tree-selector.d.ts +70 -0
  366. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  367. package/dist/modes/interactive/components/tree-selector.js +935 -0
  368. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  369. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  370. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  371. package/dist/modes/interactive/components/user-message-selector.js +113 -0
  372. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  373. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  374. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  375. package/dist/modes/interactive/components/user-message.js +27 -0
  376. package/dist/modes/interactive/components/user-message.js.map +1 -0
  377. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  378. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  379. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  380. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  381. package/dist/modes/interactive/interactive-mode.d.ts +315 -0
  382. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  383. package/dist/modes/interactive/interactive-mode.js +3725 -0
  384. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  385. package/dist/modes/interactive/theme/dark.json +85 -0
  386. package/dist/modes/interactive/theme/light.json +84 -0
  387. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  388. package/dist/modes/interactive/theme/theme.d.ts +78 -0
  389. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  390. package/dist/modes/interactive/theme/theme.js +949 -0
  391. package/dist/modes/interactive/theme/theme.js.map +1 -0
  392. package/dist/modes/print-mode.d.ts +28 -0
  393. package/dist/modes/print-mode.d.ts.map +1 -0
  394. package/dist/modes/print-mode.js +101 -0
  395. package/dist/modes/print-mode.js.map +1 -0
  396. package/dist/modes/rpc/rpc-client.d.ts +217 -0
  397. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  398. package/dist/modes/rpc/rpc-client.js +405 -0
  399. package/dist/modes/rpc/rpc-client.js.map +1 -0
  400. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  401. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  402. package/dist/modes/rpc/rpc-mode.js +511 -0
  403. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  404. package/dist/modes/rpc/rpc-types.d.ts +409 -0
  405. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  406. package/dist/modes/rpc/rpc-types.js +8 -0
  407. package/dist/modes/rpc/rpc-types.js.map +1 -0
  408. package/dist/utils/changelog.d.ts +21 -0
  409. package/dist/utils/changelog.d.ts.map +1 -0
  410. package/dist/utils/changelog.js +87 -0
  411. package/dist/utils/changelog.js.map +1 -0
  412. package/dist/utils/clipboard-image.d.ts +11 -0
  413. package/dist/utils/clipboard-image.d.ts.map +1 -0
  414. package/dist/utils/clipboard-image.js +162 -0
  415. package/dist/utils/clipboard-image.js.map +1 -0
  416. package/dist/utils/clipboard-native.d.ts +7 -0
  417. package/dist/utils/clipboard-native.d.ts.map +1 -0
  418. package/dist/utils/clipboard-native.js +14 -0
  419. package/dist/utils/clipboard-native.js.map +1 -0
  420. package/dist/utils/clipboard.d.ts +2 -0
  421. package/dist/utils/clipboard.d.ts.map +1 -0
  422. package/dist/utils/clipboard.js +67 -0
  423. package/dist/utils/clipboard.js.map +1 -0
  424. package/dist/utils/frontmatter.d.ts +8 -0
  425. package/dist/utils/frontmatter.d.ts.map +1 -0
  426. package/dist/utils/frontmatter.js +26 -0
  427. package/dist/utils/frontmatter.js.map +1 -0
  428. package/dist/utils/git.d.ts +26 -0
  429. package/dist/utils/git.d.ts.map +1 -0
  430. package/dist/utils/git.js +163 -0
  431. package/dist/utils/git.js.map +1 -0
  432. package/dist/utils/image-convert.d.ts +9 -0
  433. package/dist/utils/image-convert.d.ts.map +1 -0
  434. package/dist/utils/image-convert.js +35 -0
  435. package/dist/utils/image-convert.js.map +1 -0
  436. package/dist/utils/image-resize.d.ts +36 -0
  437. package/dist/utils/image-resize.d.ts.map +1 -0
  438. package/dist/utils/image-resize.js +181 -0
  439. package/dist/utils/image-resize.js.map +1 -0
  440. package/dist/utils/mime.d.ts +2 -0
  441. package/dist/utils/mime.d.ts.map +1 -0
  442. package/dist/utils/mime.js +26 -0
  443. package/dist/utils/mime.js.map +1 -0
  444. package/dist/utils/photon.d.ts +21 -0
  445. package/dist/utils/photon.d.ts.map +1 -0
  446. package/dist/utils/photon.js +121 -0
  447. package/dist/utils/photon.js.map +1 -0
  448. package/dist/utils/shell.d.ts +26 -0
  449. package/dist/utils/shell.d.ts.map +1 -0
  450. package/dist/utils/shell.js +186 -0
  451. package/dist/utils/shell.js.map +1 -0
  452. package/dist/utils/sleep.d.ts +5 -0
  453. package/dist/utils/sleep.d.ts.map +1 -0
  454. package/dist/utils/sleep.js +17 -0
  455. package/dist/utils/sleep.js.map +1 -0
  456. package/dist/utils/tools-manager.d.ts +3 -0
  457. package/dist/utils/tools-manager.d.ts.map +1 -0
  458. package/dist/utils/tools-manager.js +251 -0
  459. package/dist/utils/tools-manager.js.map +1 -0
  460. package/package.json +88 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Soma — Changelog
2
+
3
+ ## [0.1.0] - 2026-03-08
4
+
5
+ ### Born
6
+
7
+ - σῶμα — the body. The vessel that grows around you.
8
+ - Built on Pi 0.56.2 with `piConfig.configDir: ".soma"`
9
+ - Identity system: `.soma/identity.md` — discovered, not configured
10
+ - Memory structure: `.soma/memory/` — muscles, sessions, preloads
11
+ - Breath cycle: sessions exhale what was learned, next session inhales it
12
+
13
+ ### First Session
14
+
15
+ - Designed logo with Curtis — planet + moon mascot through 36 SVG iterations
16
+ - Built collaborative voting UI (preview.html, click-to-vote, WINNER overlay)
17
+ - Created `svg-logo-design` muscle from iterative learning
18
+ - Installed `logo-designer` skill from neonwatty/logo-designer-skill
19
+
20
+ ### Known Issues
21
+
22
+ - No extensions installed — auto-flush and preload loading don't work yet
23
+ - Skills install to `~/.agents/skills/` instead of `~/.soma/agent/skills/`
24
+ - Startup shows Pi's changelog instead of this one (fixed in settings)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gravicity
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,100 @@
1
+ # meetsoma
2
+
3
+ > σῶμα — the body. The vessel that grows around you.
4
+
5
+ An AI coding agent with self-growing memory. Identity, protocols, and muscles that evolve with use.
6
+
7
+ Built on [Pi](https://github.com/badlogic/pi-mono). Made by [Gravicity](https://gravicity.ai).
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install -g meetsoma
13
+ ```
14
+
15
+ ## Quick Start
16
+
17
+ ```bash
18
+ cd your-project
19
+ soma
20
+ ```
21
+
22
+ On first run, Soma creates `.soma/` and writes her own identity based on your workspace. Next session, she picks up where she left off.
23
+
24
+ ### Session Modes
25
+
26
+ ```bash
27
+ soma # Fresh session — identity + protocols, clean slate
28
+ soma --continue # Resume — picks up where you left off
29
+ soma --resume # Select a previous session to resume
30
+ ```
31
+
32
+ ## What Grows Over Time
33
+
34
+ **Session 1:** Empty. Soma discovers her identity. Protocols load by default heat.
35
+
36
+ **Session 5:** Preloads carry context between sessions. Muscles start forming from repeated patterns.
37
+
38
+ **Session 20:** Hot protocols stay loaded, cold ones fade. Muscles auto-surface when relevant. Your `.soma/` is shaped by your work.
39
+
40
+ ## The Breath Cycle
41
+
42
+ Sessions are breaths. **Exhale** writes what Soma learned. **Inhale** picks it up.
43
+
44
+ ```
45
+ Session 1 (inhale) → work → exhale (preload written)
46
+
47
+ Session 2 (inhale) ← picks up preload → work → exhale
48
+
49
+ Session 3 (inhale) ← ...and so on
50
+ ```
51
+
52
+ At 85% context, Soma auto-exhales and continues seamlessly. No context is lost.
53
+
54
+ ## Commands
55
+
56
+ | Command | What it does |
57
+ |---------|-------------|
58
+ | `/exhale` | Save state, write preload for next session |
59
+ | `/inhale` | Start fresh — reload identity + protocols |
60
+ | `/pin <name>` | Pin a protocol/muscle to hot (stays loaded) |
61
+ | `/kill <name>` | Kill a protocol/muscle (drops to cold) |
62
+ | `/soma status` | Show memory status |
63
+ | `/soma init` | Create `.soma/` in current directory |
64
+
65
+ ## Memory Structure
66
+
67
+ ```
68
+ .soma/
69
+ ├── identity.md ← who Soma becomes (discovered, not configured)
70
+ ├── STATE.md ← project architecture truth
71
+ ├── protocols/ ← behavioral rules (heat-tracked)
72
+ ├── memory/
73
+ │ ├── muscles/ ← patterns learned from experience
74
+ │ ├── preload-next.md ← continuation for next session
75
+ │ └── sessions/ ← daily logs
76
+ └── scripts/ ← dev tooling
77
+ ```
78
+
79
+ ## Philosophy
80
+
81
+ - **Identity is discovered, not configured.** Soma writes who she is after she's worked, not before.
82
+ - **Structure is earned, not imposed.** Starts minimal. Grows where needed.
83
+ - **Memory is cultivated, not stored.** Patterns emerge from use.
84
+ - **Sessions are breaths.** Each exhale writes what was learned. Each inhale picks it up.
85
+
86
+ ## Provider Setup
87
+
88
+ ```bash
89
+ export ANTHROPIC_API_KEY=sk-... # Anthropic (Claude)
90
+ export GOOGLE_API_KEY=... # Google (Gemini)
91
+ export OPENAI_API_KEY=sk-... # OpenAI
92
+ ```
93
+
94
+ ## Documentation
95
+
96
+ Full docs at [soma.gravicity.ai](https://soma.gravicity.ai) and [GitHub](https://github.com/meetsoma/agent).
97
+
98
+ ## License
99
+
100
+ [MIT](LICENSE) — [Gravicity](https://gravicity.ai)
@@ -0,0 +1,48 @@
1
+ /**
2
+ * CLI argument parsing and help display
3
+ */
4
+ import type { ThinkingLevel } from "@mariozechner/pi-agent-core";
5
+ import { type ToolName } from "../core/tools/index.js";
6
+ export type Mode = "text" | "json" | "rpc";
7
+ export interface Args {
8
+ provider?: string;
9
+ model?: string;
10
+ apiKey?: string;
11
+ systemPrompt?: string;
12
+ appendSystemPrompt?: string;
13
+ thinking?: ThinkingLevel;
14
+ continue?: boolean;
15
+ resume?: boolean;
16
+ help?: boolean;
17
+ version?: boolean;
18
+ mode?: Mode;
19
+ noSession?: boolean;
20
+ session?: string;
21
+ sessionDir?: string;
22
+ models?: string[];
23
+ tools?: ToolName[];
24
+ noTools?: boolean;
25
+ extensions?: string[];
26
+ noExtensions?: boolean;
27
+ print?: boolean;
28
+ export?: string;
29
+ noSkills?: boolean;
30
+ skills?: string[];
31
+ promptTemplates?: string[];
32
+ noPromptTemplates?: boolean;
33
+ themes?: string[];
34
+ noThemes?: boolean;
35
+ listModels?: string | true;
36
+ offline?: boolean;
37
+ verbose?: boolean;
38
+ messages: string[];
39
+ fileArgs: string[];
40
+ /** Unknown flags (potentially extension flags) - map of flag name to value */
41
+ unknownFlags: Map<string, boolean | string>;
42
+ }
43
+ export declare function isValidThinkingLevel(level: string): level is ThinkingLevel;
44
+ export declare function parseArgs(args: string[], extensionFlags?: Map<string, {
45
+ type: "boolean" | "string";
46
+ }>): Args;
47
+ export declare function printHelp(): void;
48
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;CAC5C;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC,GAAG,IAAI,CA0H5G;AAED,wBAAgB,SAAS,IAAI,IAAI,CAyIhC","sourcesContent":["/**\n * CLI argument parsing and help display\n */\n\nimport type { ThinkingLevel } from \"@mariozechner/pi-agent-core\";\nimport chalk from \"chalk\";\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR } from \"../config.js\";\nimport { allTools, type ToolName } from \"../core/tools/index.js\";\n\nexport type Mode = \"text\" | \"json\" | \"rpc\";\n\nexport interface Args {\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string;\n\tthinking?: ThinkingLevel;\n\tcontinue?: boolean;\n\tresume?: boolean;\n\thelp?: boolean;\n\tversion?: boolean;\n\tmode?: Mode;\n\tnoSession?: boolean;\n\tsession?: string;\n\tsessionDir?: string;\n\tmodels?: string[];\n\ttools?: ToolName[];\n\tnoTools?: boolean;\n\textensions?: string[];\n\tnoExtensions?: boolean;\n\tprint?: boolean;\n\texport?: string;\n\tnoSkills?: boolean;\n\tskills?: string[];\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tnoThemes?: boolean;\n\tlistModels?: string | true;\n\toffline?: boolean;\n\tverbose?: boolean;\n\tmessages: string[];\n\tfileArgs: string[];\n\t/** Unknown flags (potentially extension flags) - map of flag name to value */\n\tunknownFlags: Map<string, boolean | string>;\n}\n\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"] as const;\n\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\n}\n\nexport function parseArgs(args: string[], extensionFlags?: Map<string, { type: \"boolean\" | \"string\" }>): Args {\n\tconst result: Args = {\n\t\tmessages: [],\n\t\tfileArgs: [],\n\t\tunknownFlags: new Map(),\n\t};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\n\t\tif (arg === \"--help\" || arg === \"-h\") {\n\t\t\tresult.help = true;\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\n\t\t\tresult.version = true;\n\t\t} else if (arg === \"--mode\" && i + 1 < args.length) {\n\t\t\tconst mode = args[++i];\n\t\t\tif (mode === \"text\" || mode === \"json\" || mode === \"rpc\") {\n\t\t\t\tresult.mode = mode;\n\t\t\t}\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\n\t\t\tresult.continue = true;\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\n\t\t\tresult.resume = true;\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\n\t\t\tresult.provider = args[++i];\n\t\t} else if (arg === \"--model\" && i + 1 < args.length) {\n\t\t\tresult.model = args[++i];\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\n\t\t\tresult.apiKey = args[++i];\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.systemPrompt = args[++i];\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.appendSystemPrompt = args[++i];\n\t\t} else if (arg === \"--no-session\") {\n\t\t\tresult.noSession = true;\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\n\t\t\tresult.session = args[++i];\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\n\t\t\tresult.sessionDir = args[++i];\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\n\t\t\tresult.models = args[++i].split(\",\").map((s) => s.trim());\n\t\t} else if (arg === \"--no-tools\") {\n\t\t\tresult.noTools = true;\n\t\t} else if (arg === \"--tools\" && i + 1 < args.length) {\n\t\t\tconst toolNames = args[++i].split(\",\").map((s) => s.trim());\n\t\t\tconst validTools: ToolName[] = [];\n\t\t\tfor (const name of toolNames) {\n\t\t\t\tif (name in allTools) {\n\t\t\t\t\tvalidTools.push(name as ToolName);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tchalk.yellow(`Warning: Unknown tool \"${name}\". Valid tools: ${Object.keys(allTools).join(\", \")}`),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult.tools = validTools;\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\n\t\t\tconst level = args[++i];\n\t\t\tif (isValidThinkingLevel(level)) {\n\t\t\t\tresult.thinking = level;\n\t\t\t} else {\n\t\t\t\tconsole.error(\n\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t`Warning: Invalid thinking level \"${level}\". Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\n\t\t\tresult.print = true;\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\n\t\t\tresult.export = args[++i];\n\t\t} else if ((arg === \"--extension\" || arg === \"-e\") && i + 1 < args.length) {\n\t\t\tresult.extensions = result.extensions ?? [];\n\t\t\tresult.extensions.push(args[++i]);\n\t\t} else if (arg === \"--no-extensions\" || arg === \"-ne\") {\n\t\t\tresult.noExtensions = true;\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\n\t\t\tresult.skills = result.skills ?? [];\n\t\t\tresult.skills.push(args[++i]);\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\n\t\t\tresult.promptTemplates.push(args[++i]);\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\n\t\t\tresult.themes = result.themes ?? [];\n\t\t\tresult.themes.push(args[++i]);\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\n\t\t\tresult.noSkills = true;\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\n\t\t\tresult.noPromptTemplates = true;\n\t\t} else if (arg === \"--no-themes\") {\n\t\t\tresult.noThemes = true;\n\t\t} else if (arg === \"--list-models\") {\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\n\t\t\t\tresult.listModels = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.listModels = true;\n\t\t\t}\n\t\t} else if (arg === \"--verbose\") {\n\t\t\tresult.verbose = true;\n\t\t} else if (arg === \"--offline\") {\n\t\t\tresult.offline = true;\n\t\t} else if (arg.startsWith(\"@\")) {\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\n\t\t} else if (arg.startsWith(\"--\") && extensionFlags) {\n\t\t\t// Check if it's an extension-registered flag\n\t\t\tconst flagName = arg.slice(2);\n\t\t\tconst extFlag = extensionFlags.get(flagName);\n\t\t\tif (extFlag) {\n\t\t\t\tif (extFlag.type === \"boolean\") {\n\t\t\t\t\tresult.unknownFlags.set(flagName, true);\n\t\t\t\t} else if (extFlag.type === \"string\" && i + 1 < args.length) {\n\t\t\t\t\tresult.unknownFlags.set(flagName, args[++i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Unknown flags without extensionFlags are silently ignored (first pass)\n\t\t} else if (!arg.startsWith(\"-\")) {\n\t\t\tresult.messages.push(arg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function printHelp(): void {\n\tconsole.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools\n\n${chalk.bold(\"Usage:\")}\n ${APP_NAME} [options] [@files...] [messages...]\n\n${chalk.bold(\"Commands:\")}\n ${APP_NAME} install <source> [-l] Install extension source and add to settings\n ${APP_NAME} remove <source> [-l] Remove extension source from settings\n ${APP_NAME} update [source] Update installed extensions (skips pinned sources)\n ${APP_NAME} list List installed extensions from settings\n ${APP_NAME} config Open TUI to enable/disable package resources\n ${APP_NAME} <command> --help Show help for install/remove/update/list\n\n${chalk.bold(\"Options:\")}\n --provider <name> Provider name (default: google)\n --model <pattern> Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")\n --api-key <key> API key (defaults to env vars)\n --system-prompt <text> System prompt (default: coding assistant prompt)\n --append-system-prompt <text> Append text or file contents to the system prompt\n --mode <mode> Output mode: text (default), json, or rpc\n --print, -p Non-interactive mode: process prompt and exit\n --continue, -c Continue previous session\n --resume, -r Select a session to resume\n --session <path> Use specific session file\n --session-dir <dir> Directory for session storage and lookup\n --no-session Don't save session (ephemeral)\n --models <patterns> Comma-separated model patterns for Ctrl+P cycling\n Supports globs (anthropic/*, *sonnet*) and fuzzy matching\n --no-tools Disable all built-in tools\n --tools <tools> Comma-separated list of tools to enable (default: read,bash,edit,write)\n Available: read, bash, edit, write, grep, find, ls\n --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh\n --extension, -e <path> Load an extension file (can be used multiple times)\n --no-extensions, -ne Disable extension discovery (explicit -e paths still work)\n --skill <path> Load a skill file or directory (can be used multiple times)\n --no-skills, -ns Disable skills discovery and loading\n --prompt-template <path> Load a prompt template file or directory (can be used multiple times)\n --no-prompt-templates, -np Disable prompt template discovery and loading\n --theme <path> Load a theme file or directory (can be used multiple times)\n --no-themes Disable theme discovery and loading\n --export <file> Export session file to HTML and exit\n --list-models [search] List available models (with optional fuzzy search)\n --verbose Force verbose startup (overrides quietStartup setting)\n --offline Disable startup network operations (same as PI_OFFLINE=1)\n --help, -h Show this help\n --version, -v Show version number\n\nExtensions can register additional flags (e.g., --plan from plan-mode extension).\n\n${chalk.bold(\"Examples:\")}\n # Interactive mode\n ${APP_NAME}\n\n # Interactive mode with initial prompt\n ${APP_NAME} \"List all .ts files in src/\"\n\n # Include files in initial message\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\n\n # Non-interactive mode (process and exit)\n ${APP_NAME} -p \"List all .ts files in src/\"\n\n # Multiple messages (interactive)\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n ${APP_NAME} --continue \"What did we discuss?\"\n\n # Use different model\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use model with provider prefix (no --provider needed)\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\n\n # Use model with thinking level shorthand\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\n\n # Limit model cycling to specific models\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\n\n # Limit to a specific provider with glob pattern\n ${APP_NAME} --models \"github-copilot/*\"\n\n # Cycle models with fixed thinking levels\n ${APP_NAME} --models sonnet:high,haiku:low\n\n # Start with a specific thinking level\n ${APP_NAME} --thinking high \"Solve this complex problem\"\n\n # Read-only mode (no file modifications possible)\n ${APP_NAME} --tools read,grep,find,ls -p \"Review the code in src/\"\n\n # Export a session file to HTML\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\n ${APP_NAME} --export session.jsonl output.html\n\n${chalk.bold(\"Environment Variables:\")}\n ANTHROPIC_API_KEY - Anthropic Claude API key\n ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)\n OPENAI_API_KEY - OpenAI GPT API key\n AZURE_OPENAI_API_KEY - Azure OpenAI API key\n AZURE_OPENAI_BASE_URL - Azure OpenAI base URL (https://{resource}.openai.azure.com/openai/v1)\n AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)\n AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)\n GEMINI_API_KEY - Google Gemini API key\n GROQ_API_KEY - Groq API key\n CEREBRAS_API_KEY - Cerebras API key\n XAI_API_KEY - xAI Grok API key\n OPENROUTER_API_KEY - OpenRouter API key\n AI_GATEWAY_API_KEY - Vercel AI Gateway API key\n ZAI_API_KEY - ZAI API key\n MISTRAL_API_KEY - Mistral API key\n MINIMAX_API_KEY - MiniMax API key\n OPENCODE_API_KEY - OpenCode Zen/OpenCode Go API key\n KIMI_API_KEY - Kimi For Coding API key\n AWS_PROFILE - AWS profile for Amazon Bedrock\n AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock\n AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock\n AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)\n AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)\n ${ENV_AGENT_DIR.padEnd(32)} - Session storage directory (default: ~/${CONFIG_DIR_NAME}/agent)\n PI_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)\n PI_OFFLINE - Disable startup network operations when set to 1/true/yes\n PI_SHARE_VIEWER_URL - Base URL for /share command (default: https://pi.dev/session/)\n PI_AI_ANTIGRAVITY_VERSION - Override Antigravity User-Agent version (e.g., 1.23.0)\n\n${chalk.bold(\"Available Tools (default: read, bash, edit, write):\")}\n read - Read file contents\n bash - Execute bash commands\n edit - Edit files with find/replace\n write - Write files (creates/overwrites)\n grep - Search file contents (read-only, off by default)\n find - Find files by glob pattern (read-only, off by default)\n ls - List directory contents (read-only, off by default)\n`);\n}\n"]}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * CLI argument parsing and help display
3
+ */
4
+ import chalk from "chalk";
5
+ import { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR } from "../config.js";
6
+ import { allTools } from "../core/tools/index.js";
7
+ const VALID_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8
+ export function isValidThinkingLevel(level) {
9
+ return VALID_THINKING_LEVELS.includes(level);
10
+ }
11
+ export function parseArgs(args, extensionFlags) {
12
+ const result = {
13
+ messages: [],
14
+ fileArgs: [],
15
+ unknownFlags: new Map(),
16
+ };
17
+ for (let i = 0; i < args.length; i++) {
18
+ const arg = args[i];
19
+ if (arg === "--help" || arg === "-h") {
20
+ result.help = true;
21
+ }
22
+ else if (arg === "--version" || arg === "-v") {
23
+ result.version = true;
24
+ }
25
+ else if (arg === "--mode" && i + 1 < args.length) {
26
+ const mode = args[++i];
27
+ if (mode === "text" || mode === "json" || mode === "rpc") {
28
+ result.mode = mode;
29
+ }
30
+ }
31
+ else if (arg === "--continue" || arg === "-c") {
32
+ result.continue = true;
33
+ }
34
+ else if (arg === "--resume" || arg === "-r") {
35
+ result.resume = true;
36
+ }
37
+ else if (arg === "--provider" && i + 1 < args.length) {
38
+ result.provider = args[++i];
39
+ }
40
+ else if (arg === "--model" && i + 1 < args.length) {
41
+ result.model = args[++i];
42
+ }
43
+ else if (arg === "--api-key" && i + 1 < args.length) {
44
+ result.apiKey = args[++i];
45
+ }
46
+ else if (arg === "--system-prompt" && i + 1 < args.length) {
47
+ result.systemPrompt = args[++i];
48
+ }
49
+ else if (arg === "--append-system-prompt" && i + 1 < args.length) {
50
+ result.appendSystemPrompt = args[++i];
51
+ }
52
+ else if (arg === "--no-session") {
53
+ result.noSession = true;
54
+ }
55
+ else if (arg === "--session" && i + 1 < args.length) {
56
+ result.session = args[++i];
57
+ }
58
+ else if (arg === "--session-dir" && i + 1 < args.length) {
59
+ result.sessionDir = args[++i];
60
+ }
61
+ else if (arg === "--models" && i + 1 < args.length) {
62
+ result.models = args[++i].split(",").map((s) => s.trim());
63
+ }
64
+ else if (arg === "--no-tools") {
65
+ result.noTools = true;
66
+ }
67
+ else if (arg === "--tools" && i + 1 < args.length) {
68
+ const toolNames = args[++i].split(",").map((s) => s.trim());
69
+ const validTools = [];
70
+ for (const name of toolNames) {
71
+ if (name in allTools) {
72
+ validTools.push(name);
73
+ }
74
+ else {
75
+ console.error(chalk.yellow(`Warning: Unknown tool "${name}". Valid tools: ${Object.keys(allTools).join(", ")}`));
76
+ }
77
+ }
78
+ result.tools = validTools;
79
+ }
80
+ else if (arg === "--thinking" && i + 1 < args.length) {
81
+ const level = args[++i];
82
+ if (isValidThinkingLevel(level)) {
83
+ result.thinking = level;
84
+ }
85
+ else {
86
+ console.error(chalk.yellow(`Warning: Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`));
87
+ }
88
+ }
89
+ else if (arg === "--print" || arg === "-p") {
90
+ result.print = true;
91
+ }
92
+ else if (arg === "--export" && i + 1 < args.length) {
93
+ result.export = args[++i];
94
+ }
95
+ else if ((arg === "--extension" || arg === "-e") && i + 1 < args.length) {
96
+ result.extensions = result.extensions ?? [];
97
+ result.extensions.push(args[++i]);
98
+ }
99
+ else if (arg === "--no-extensions" || arg === "-ne") {
100
+ result.noExtensions = true;
101
+ }
102
+ else if (arg === "--skill" && i + 1 < args.length) {
103
+ result.skills = result.skills ?? [];
104
+ result.skills.push(args[++i]);
105
+ }
106
+ else if (arg === "--prompt-template" && i + 1 < args.length) {
107
+ result.promptTemplates = result.promptTemplates ?? [];
108
+ result.promptTemplates.push(args[++i]);
109
+ }
110
+ else if (arg === "--theme" && i + 1 < args.length) {
111
+ result.themes = result.themes ?? [];
112
+ result.themes.push(args[++i]);
113
+ }
114
+ else if (arg === "--no-skills" || arg === "-ns") {
115
+ result.noSkills = true;
116
+ }
117
+ else if (arg === "--no-prompt-templates" || arg === "-np") {
118
+ result.noPromptTemplates = true;
119
+ }
120
+ else if (arg === "--no-themes") {
121
+ result.noThemes = true;
122
+ }
123
+ else if (arg === "--list-models") {
124
+ // Check if next arg is a search pattern (not a flag or file arg)
125
+ if (i + 1 < args.length && !args[i + 1].startsWith("-") && !args[i + 1].startsWith("@")) {
126
+ result.listModels = args[++i];
127
+ }
128
+ else {
129
+ result.listModels = true;
130
+ }
131
+ }
132
+ else if (arg === "--verbose") {
133
+ result.verbose = true;
134
+ }
135
+ else if (arg === "--offline") {
136
+ result.offline = true;
137
+ }
138
+ else if (arg.startsWith("@")) {
139
+ result.fileArgs.push(arg.slice(1)); // Remove @ prefix
140
+ }
141
+ else if (arg.startsWith("--") && extensionFlags) {
142
+ // Check if it's an extension-registered flag
143
+ const flagName = arg.slice(2);
144
+ const extFlag = extensionFlags.get(flagName);
145
+ if (extFlag) {
146
+ if (extFlag.type === "boolean") {
147
+ result.unknownFlags.set(flagName, true);
148
+ }
149
+ else if (extFlag.type === "string" && i + 1 < args.length) {
150
+ result.unknownFlags.set(flagName, args[++i]);
151
+ }
152
+ }
153
+ // Unknown flags without extensionFlags are silently ignored (first pass)
154
+ }
155
+ else if (!arg.startsWith("-")) {
156
+ result.messages.push(arg);
157
+ }
158
+ }
159
+ return result;
160
+ }
161
+ export function printHelp() {
162
+ console.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools
163
+
164
+ ${chalk.bold("Usage:")}
165
+ ${APP_NAME} [options] [@files...] [messages...]
166
+
167
+ ${chalk.bold("Commands:")}
168
+ ${APP_NAME} install <source> [-l] Install extension source and add to settings
169
+ ${APP_NAME} remove <source> [-l] Remove extension source from settings
170
+ ${APP_NAME} update [source] Update installed extensions (skips pinned sources)
171
+ ${APP_NAME} list List installed extensions from settings
172
+ ${APP_NAME} config Open TUI to enable/disable package resources
173
+ ${APP_NAME} <command> --help Show help for install/remove/update/list
174
+
175
+ ${chalk.bold("Options:")}
176
+ --provider <name> Provider name (default: google)
177
+ --model <pattern> Model pattern or ID (supports "provider/id" and optional ":<thinking>")
178
+ --api-key <key> API key (defaults to env vars)
179
+ --system-prompt <text> System prompt (default: coding assistant prompt)
180
+ --append-system-prompt <text> Append text or file contents to the system prompt
181
+ --mode <mode> Output mode: text (default), json, or rpc
182
+ --print, -p Non-interactive mode: process prompt and exit
183
+ --continue, -c Continue previous session
184
+ --resume, -r Select a session to resume
185
+ --session <path> Use specific session file
186
+ --session-dir <dir> Directory for session storage and lookup
187
+ --no-session Don't save session (ephemeral)
188
+ --models <patterns> Comma-separated model patterns for Ctrl+P cycling
189
+ Supports globs (anthropic/*, *sonnet*) and fuzzy matching
190
+ --no-tools Disable all built-in tools
191
+ --tools <tools> Comma-separated list of tools to enable (default: read,bash,edit,write)
192
+ Available: read, bash, edit, write, grep, find, ls
193
+ --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh
194
+ --extension, -e <path> Load an extension file (can be used multiple times)
195
+ --no-extensions, -ne Disable extension discovery (explicit -e paths still work)
196
+ --skill <path> Load a skill file or directory (can be used multiple times)
197
+ --no-skills, -ns Disable skills discovery and loading
198
+ --prompt-template <path> Load a prompt template file or directory (can be used multiple times)
199
+ --no-prompt-templates, -np Disable prompt template discovery and loading
200
+ --theme <path> Load a theme file or directory (can be used multiple times)
201
+ --no-themes Disable theme discovery and loading
202
+ --export <file> Export session file to HTML and exit
203
+ --list-models [search] List available models (with optional fuzzy search)
204
+ --verbose Force verbose startup (overrides quietStartup setting)
205
+ --offline Disable startup network operations (same as PI_OFFLINE=1)
206
+ --help, -h Show this help
207
+ --version, -v Show version number
208
+
209
+ Extensions can register additional flags (e.g., --plan from plan-mode extension).
210
+
211
+ ${chalk.bold("Examples:")}
212
+ # Interactive mode
213
+ ${APP_NAME}
214
+
215
+ # Interactive mode with initial prompt
216
+ ${APP_NAME} "List all .ts files in src/"
217
+
218
+ # Include files in initial message
219
+ ${APP_NAME} @prompt.md @image.png "What color is the sky?"
220
+
221
+ # Non-interactive mode (process and exit)
222
+ ${APP_NAME} -p "List all .ts files in src/"
223
+
224
+ # Multiple messages (interactive)
225
+ ${APP_NAME} "Read package.json" "What dependencies do we have?"
226
+
227
+ # Continue previous session
228
+ ${APP_NAME} --continue "What did we discuss?"
229
+
230
+ # Use different model
231
+ ${APP_NAME} --provider openai --model gpt-4o-mini "Help me refactor this code"
232
+
233
+ # Use model with provider prefix (no --provider needed)
234
+ ${APP_NAME} --model openai/gpt-4o "Help me refactor this code"
235
+
236
+ # Use model with thinking level shorthand
237
+ ${APP_NAME} --model sonnet:high "Solve this complex problem"
238
+
239
+ # Limit model cycling to specific models
240
+ ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o
241
+
242
+ # Limit to a specific provider with glob pattern
243
+ ${APP_NAME} --models "github-copilot/*"
244
+
245
+ # Cycle models with fixed thinking levels
246
+ ${APP_NAME} --models sonnet:high,haiku:low
247
+
248
+ # Start with a specific thinking level
249
+ ${APP_NAME} --thinking high "Solve this complex problem"
250
+
251
+ # Read-only mode (no file modifications possible)
252
+ ${APP_NAME} --tools read,grep,find,ls -p "Review the code in src/"
253
+
254
+ # Export a session file to HTML
255
+ ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl
256
+ ${APP_NAME} --export session.jsonl output.html
257
+
258
+ ${chalk.bold("Environment Variables:")}
259
+ ANTHROPIC_API_KEY - Anthropic Claude API key
260
+ ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)
261
+ OPENAI_API_KEY - OpenAI GPT API key
262
+ AZURE_OPENAI_API_KEY - Azure OpenAI API key
263
+ AZURE_OPENAI_BASE_URL - Azure OpenAI base URL (https://{resource}.openai.azure.com/openai/v1)
264
+ AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)
265
+ AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)
266
+ AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)
267
+ GEMINI_API_KEY - Google Gemini API key
268
+ GROQ_API_KEY - Groq API key
269
+ CEREBRAS_API_KEY - Cerebras API key
270
+ XAI_API_KEY - xAI Grok API key
271
+ OPENROUTER_API_KEY - OpenRouter API key
272
+ AI_GATEWAY_API_KEY - Vercel AI Gateway API key
273
+ ZAI_API_KEY - ZAI API key
274
+ MISTRAL_API_KEY - Mistral API key
275
+ MINIMAX_API_KEY - MiniMax API key
276
+ OPENCODE_API_KEY - OpenCode Zen/OpenCode Go API key
277
+ KIMI_API_KEY - Kimi For Coding API key
278
+ AWS_PROFILE - AWS profile for Amazon Bedrock
279
+ AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock
280
+ AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock
281
+ AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)
282
+ AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)
283
+ ${ENV_AGENT_DIR.padEnd(32)} - Session storage directory (default: ~/${CONFIG_DIR_NAME}/agent)
284
+ PI_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)
285
+ PI_OFFLINE - Disable startup network operations when set to 1/true/yes
286
+ PI_SHARE_VIEWER_URL - Base URL for /share command (default: https://pi.dev/session/)
287
+ PI_AI_ANTIGRAVITY_VERSION - Override Antigravity User-Agent version (e.g., 1.23.0)
288
+
289
+ ${chalk.bold("Available Tools (default: read, bash, edit, write):")}
290
+ read - Read file contents
291
+ bash - Execute bash commands
292
+ edit - Edit files with find/replace
293
+ write - Write files (creates/overwrites)
294
+ grep - Search file contents (read-only, off by default)
295
+ find - Find files by glob pattern (read-only, off by default)
296
+ ls - List directory contents (read-only, off by default)
297
+ `);
298
+ }
299
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CLI argument parsing and help display\n */\n\nimport type { ThinkingLevel } from \"@mariozechner/pi-agent-core\";\nimport chalk from \"chalk\";\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR } from \"../config.js\";\nimport { allTools, type ToolName } from \"../core/tools/index.js\";\n\nexport type Mode = \"text\" | \"json\" | \"rpc\";\n\nexport interface Args {\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string;\n\tthinking?: ThinkingLevel;\n\tcontinue?: boolean;\n\tresume?: boolean;\n\thelp?: boolean;\n\tversion?: boolean;\n\tmode?: Mode;\n\tnoSession?: boolean;\n\tsession?: string;\n\tsessionDir?: string;\n\tmodels?: string[];\n\ttools?: ToolName[];\n\tnoTools?: boolean;\n\textensions?: string[];\n\tnoExtensions?: boolean;\n\tprint?: boolean;\n\texport?: string;\n\tnoSkills?: boolean;\n\tskills?: string[];\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tnoThemes?: boolean;\n\tlistModels?: string | true;\n\toffline?: boolean;\n\tverbose?: boolean;\n\tmessages: string[];\n\tfileArgs: string[];\n\t/** Unknown flags (potentially extension flags) - map of flag name to value */\n\tunknownFlags: Map<string, boolean | string>;\n}\n\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"] as const;\n\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\n}\n\nexport function parseArgs(args: string[], extensionFlags?: Map<string, { type: \"boolean\" | \"string\" }>): Args {\n\tconst result: Args = {\n\t\tmessages: [],\n\t\tfileArgs: [],\n\t\tunknownFlags: new Map(),\n\t};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\n\t\tif (arg === \"--help\" || arg === \"-h\") {\n\t\t\tresult.help = true;\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\n\t\t\tresult.version = true;\n\t\t} else if (arg === \"--mode\" && i + 1 < args.length) {\n\t\t\tconst mode = args[++i];\n\t\t\tif (mode === \"text\" || mode === \"json\" || mode === \"rpc\") {\n\t\t\t\tresult.mode = mode;\n\t\t\t}\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\n\t\t\tresult.continue = true;\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\n\t\t\tresult.resume = true;\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\n\t\t\tresult.provider = args[++i];\n\t\t} else if (arg === \"--model\" && i + 1 < args.length) {\n\t\t\tresult.model = args[++i];\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\n\t\t\tresult.apiKey = args[++i];\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.systemPrompt = args[++i];\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.appendSystemPrompt = args[++i];\n\t\t} else if (arg === \"--no-session\") {\n\t\t\tresult.noSession = true;\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\n\t\t\tresult.session = args[++i];\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\n\t\t\tresult.sessionDir = args[++i];\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\n\t\t\tresult.models = args[++i].split(\",\").map((s) => s.trim());\n\t\t} else if (arg === \"--no-tools\") {\n\t\t\tresult.noTools = true;\n\t\t} else if (arg === \"--tools\" && i + 1 < args.length) {\n\t\t\tconst toolNames = args[++i].split(\",\").map((s) => s.trim());\n\t\t\tconst validTools: ToolName[] = [];\n\t\t\tfor (const name of toolNames) {\n\t\t\t\tif (name in allTools) {\n\t\t\t\t\tvalidTools.push(name as ToolName);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tchalk.yellow(`Warning: Unknown tool \"${name}\". Valid tools: ${Object.keys(allTools).join(\", \")}`),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult.tools = validTools;\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\n\t\t\tconst level = args[++i];\n\t\t\tif (isValidThinkingLevel(level)) {\n\t\t\t\tresult.thinking = level;\n\t\t\t} else {\n\t\t\t\tconsole.error(\n\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t`Warning: Invalid thinking level \"${level}\". Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\n\t\t\tresult.print = true;\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\n\t\t\tresult.export = args[++i];\n\t\t} else if ((arg === \"--extension\" || arg === \"-e\") && i + 1 < args.length) {\n\t\t\tresult.extensions = result.extensions ?? [];\n\t\t\tresult.extensions.push(args[++i]);\n\t\t} else if (arg === \"--no-extensions\" || arg === \"-ne\") {\n\t\t\tresult.noExtensions = true;\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\n\t\t\tresult.skills = result.skills ?? [];\n\t\t\tresult.skills.push(args[++i]);\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\n\t\t\tresult.promptTemplates.push(args[++i]);\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\n\t\t\tresult.themes = result.themes ?? [];\n\t\t\tresult.themes.push(args[++i]);\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\n\t\t\tresult.noSkills = true;\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\n\t\t\tresult.noPromptTemplates = true;\n\t\t} else if (arg === \"--no-themes\") {\n\t\t\tresult.noThemes = true;\n\t\t} else if (arg === \"--list-models\") {\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\n\t\t\t\tresult.listModels = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.listModels = true;\n\t\t\t}\n\t\t} else if (arg === \"--verbose\") {\n\t\t\tresult.verbose = true;\n\t\t} else if (arg === \"--offline\") {\n\t\t\tresult.offline = true;\n\t\t} else if (arg.startsWith(\"@\")) {\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\n\t\t} else if (arg.startsWith(\"--\") && extensionFlags) {\n\t\t\t// Check if it's an extension-registered flag\n\t\t\tconst flagName = arg.slice(2);\n\t\t\tconst extFlag = extensionFlags.get(flagName);\n\t\t\tif (extFlag) {\n\t\t\t\tif (extFlag.type === \"boolean\") {\n\t\t\t\t\tresult.unknownFlags.set(flagName, true);\n\t\t\t\t} else if (extFlag.type === \"string\" && i + 1 < args.length) {\n\t\t\t\t\tresult.unknownFlags.set(flagName, args[++i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Unknown flags without extensionFlags are silently ignored (first pass)\n\t\t} else if (!arg.startsWith(\"-\")) {\n\t\t\tresult.messages.push(arg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function printHelp(): void {\n\tconsole.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools\n\n${chalk.bold(\"Usage:\")}\n ${APP_NAME} [options] [@files...] [messages...]\n\n${chalk.bold(\"Commands:\")}\n ${APP_NAME} install <source> [-l] Install extension source and add to settings\n ${APP_NAME} remove <source> [-l] Remove extension source from settings\n ${APP_NAME} update [source] Update installed extensions (skips pinned sources)\n ${APP_NAME} list List installed extensions from settings\n ${APP_NAME} config Open TUI to enable/disable package resources\n ${APP_NAME} <command> --help Show help for install/remove/update/list\n\n${chalk.bold(\"Options:\")}\n --provider <name> Provider name (default: google)\n --model <pattern> Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")\n --api-key <key> API key (defaults to env vars)\n --system-prompt <text> System prompt (default: coding assistant prompt)\n --append-system-prompt <text> Append text or file contents to the system prompt\n --mode <mode> Output mode: text (default), json, or rpc\n --print, -p Non-interactive mode: process prompt and exit\n --continue, -c Continue previous session\n --resume, -r Select a session to resume\n --session <path> Use specific session file\n --session-dir <dir> Directory for session storage and lookup\n --no-session Don't save session (ephemeral)\n --models <patterns> Comma-separated model patterns for Ctrl+P cycling\n Supports globs (anthropic/*, *sonnet*) and fuzzy matching\n --no-tools Disable all built-in tools\n --tools <tools> Comma-separated list of tools to enable (default: read,bash,edit,write)\n Available: read, bash, edit, write, grep, find, ls\n --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh\n --extension, -e <path> Load an extension file (can be used multiple times)\n --no-extensions, -ne Disable extension discovery (explicit -e paths still work)\n --skill <path> Load a skill file or directory (can be used multiple times)\n --no-skills, -ns Disable skills discovery and loading\n --prompt-template <path> Load a prompt template file or directory (can be used multiple times)\n --no-prompt-templates, -np Disable prompt template discovery and loading\n --theme <path> Load a theme file or directory (can be used multiple times)\n --no-themes Disable theme discovery and loading\n --export <file> Export session file to HTML and exit\n --list-models [search] List available models (with optional fuzzy search)\n --verbose Force verbose startup (overrides quietStartup setting)\n --offline Disable startup network operations (same as PI_OFFLINE=1)\n --help, -h Show this help\n --version, -v Show version number\n\nExtensions can register additional flags (e.g., --plan from plan-mode extension).\n\n${chalk.bold(\"Examples:\")}\n # Interactive mode\n ${APP_NAME}\n\n # Interactive mode with initial prompt\n ${APP_NAME} \"List all .ts files in src/\"\n\n # Include files in initial message\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\n\n # Non-interactive mode (process and exit)\n ${APP_NAME} -p \"List all .ts files in src/\"\n\n # Multiple messages (interactive)\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n ${APP_NAME} --continue \"What did we discuss?\"\n\n # Use different model\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use model with provider prefix (no --provider needed)\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\n\n # Use model with thinking level shorthand\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\n\n # Limit model cycling to specific models\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\n\n # Limit to a specific provider with glob pattern\n ${APP_NAME} --models \"github-copilot/*\"\n\n # Cycle models with fixed thinking levels\n ${APP_NAME} --models sonnet:high,haiku:low\n\n # Start with a specific thinking level\n ${APP_NAME} --thinking high \"Solve this complex problem\"\n\n # Read-only mode (no file modifications possible)\n ${APP_NAME} --tools read,grep,find,ls -p \"Review the code in src/\"\n\n # Export a session file to HTML\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\n ${APP_NAME} --export session.jsonl output.html\n\n${chalk.bold(\"Environment Variables:\")}\n ANTHROPIC_API_KEY - Anthropic Claude API key\n ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)\n OPENAI_API_KEY - OpenAI GPT API key\n AZURE_OPENAI_API_KEY - Azure OpenAI API key\n AZURE_OPENAI_BASE_URL - Azure OpenAI base URL (https://{resource}.openai.azure.com/openai/v1)\n AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)\n AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)\n GEMINI_API_KEY - Google Gemini API key\n GROQ_API_KEY - Groq API key\n CEREBRAS_API_KEY - Cerebras API key\n XAI_API_KEY - xAI Grok API key\n OPENROUTER_API_KEY - OpenRouter API key\n AI_GATEWAY_API_KEY - Vercel AI Gateway API key\n ZAI_API_KEY - ZAI API key\n MISTRAL_API_KEY - Mistral API key\n MINIMAX_API_KEY - MiniMax API key\n OPENCODE_API_KEY - OpenCode Zen/OpenCode Go API key\n KIMI_API_KEY - Kimi For Coding API key\n AWS_PROFILE - AWS profile for Amazon Bedrock\n AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock\n AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock\n AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)\n AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)\n ${ENV_AGENT_DIR.padEnd(32)} - Session storage directory (default: ~/${CONFIG_DIR_NAME}/agent)\n PI_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)\n PI_OFFLINE - Disable startup network operations when set to 1/true/yes\n PI_SHARE_VIEWER_URL - Base URL for /share command (default: https://pi.dev/session/)\n PI_AI_ANTIGRAVITY_VERSION - Override Antigravity User-Agent version (e.g., 1.23.0)\n\n${chalk.bold(\"Available Tools (default: read, bash, edit, write):\")}\n read - Read file contents\n bash - Execute bash commands\n edit - Edit files with find/replace\n write - Write files (creates/overwrites)\n grep - Search file contents (read-only, off by default)\n find - Find files by glob pattern (read-only, off by default)\n ls - List directory contents (read-only, off by default)\n`);\n}\n"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * TUI config selector for `pi config` command
3
+ */
4
+ import type { ResolvedPaths } from "../core/package-manager.js";
5
+ import type { SettingsManager } from "../core/settings-manager.js";
6
+ export interface ConfigSelectorOptions {
7
+ resolvedPaths: ResolvedPaths;
8
+ settingsManager: SettingsManager;
9
+ cwd: string;
10
+ agentDir: string;
11
+ }
12
+ /** Show TUI config selector and return when closed */
13
+ export declare function selectConfig(options: ConfigSelectorOptions): Promise<void>;
14
+ //# sourceMappingURL=config-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-selector.d.ts","sourceRoot":"","sources":["../../src/cli/config-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,MAAM,WAAW,qBAAqB;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,wBAAsB,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChF","sourcesContent":["/**\n * TUI config selector for `pi config` command\n */\n\nimport { ProcessTerminal, TUI } from \"@mariozechner/pi-tui\";\nimport type { ResolvedPaths } from \"../core/package-manager.js\";\nimport type { SettingsManager } from \"../core/settings-manager.js\";\nimport { ConfigSelectorComponent } from \"../modes/interactive/components/config-selector.js\";\nimport { initTheme, stopThemeWatcher } from \"../modes/interactive/theme/theme.js\";\n\nexport interface ConfigSelectorOptions {\n\tresolvedPaths: ResolvedPaths;\n\tsettingsManager: SettingsManager;\n\tcwd: string;\n\tagentDir: string;\n}\n\n/** Show TUI config selector and return when closed */\nexport async function selectConfig(options: ConfigSelectorOptions): Promise<void> {\n\t// Initialize theme before showing TUI\n\tinitTheme(options.settingsManager.getTheme(), true);\n\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tlet resolved = false;\n\n\t\tconst selector = new ConfigSelectorComponent(\n\t\t\toptions.resolvedPaths,\n\t\t\toptions.settingsManager,\n\t\t\toptions.cwd,\n\t\t\toptions.agentDir,\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tstopThemeWatcher();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tstopThemeWatcher();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getResourceList());\n\t\tui.start();\n\t});\n}\n"]}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * TUI config selector for `pi config` command
3
+ */
4
+ import { ProcessTerminal, TUI } from "@mariozechner/pi-tui";
5
+ import { ConfigSelectorComponent } from "../modes/interactive/components/config-selector.js";
6
+ import { initTheme, stopThemeWatcher } from "../modes/interactive/theme/theme.js";
7
+ /** Show TUI config selector and return when closed */
8
+ export async function selectConfig(options) {
9
+ // Initialize theme before showing TUI
10
+ initTheme(options.settingsManager.getTheme(), true);
11
+ return new Promise((resolve) => {
12
+ const ui = new TUI(new ProcessTerminal());
13
+ let resolved = false;
14
+ const selector = new ConfigSelectorComponent(options.resolvedPaths, options.settingsManager, options.cwd, options.agentDir, () => {
15
+ if (!resolved) {
16
+ resolved = true;
17
+ ui.stop();
18
+ stopThemeWatcher();
19
+ resolve();
20
+ }
21
+ }, () => {
22
+ ui.stop();
23
+ stopThemeWatcher();
24
+ process.exit(0);
25
+ }, () => ui.requestRender());
26
+ ui.addChild(selector);
27
+ ui.setFocus(selector.getResourceList());
28
+ ui.start();
29
+ });
30
+ }
31
+ //# sourceMappingURL=config-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-selector.js","sourceRoot":"","sources":["../../src/cli/config-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AASlF,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA8B,EAAiB;IACjF,sCAAsC;IACtC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IAEpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAC3C,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,QAAQ,EAChB,GAAG,EAAE,CAAC;YACL,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,IAAI,EAAE,CAAC;gBACV,gBAAgB,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACX,CAAC;QAAA,CACD,EACD,GAAG,EAAE,CAAC;YACL,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,gBAAgB,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAA,CAChB,EACD,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CACxB,CAAC;QAEF,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QACxC,EAAE,CAAC,KAAK,EAAE,CAAC;IAAA,CACX,CAAC,CAAC;AAAA,CACH","sourcesContent":["/**\n * TUI config selector for `pi config` command\n */\n\nimport { ProcessTerminal, TUI } from \"@mariozechner/pi-tui\";\nimport type { ResolvedPaths } from \"../core/package-manager.js\";\nimport type { SettingsManager } from \"../core/settings-manager.js\";\nimport { ConfigSelectorComponent } from \"../modes/interactive/components/config-selector.js\";\nimport { initTheme, stopThemeWatcher } from \"../modes/interactive/theme/theme.js\";\n\nexport interface ConfigSelectorOptions {\n\tresolvedPaths: ResolvedPaths;\n\tsettingsManager: SettingsManager;\n\tcwd: string;\n\tagentDir: string;\n}\n\n/** Show TUI config selector and return when closed */\nexport async function selectConfig(options: ConfigSelectorOptions): Promise<void> {\n\t// Initialize theme before showing TUI\n\tinitTheme(options.settingsManager.getTheme(), true);\n\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tlet resolved = false;\n\n\t\tconst selector = new ConfigSelectorComponent(\n\t\t\toptions.resolvedPaths,\n\t\t\toptions.settingsManager,\n\t\t\toptions.cwd,\n\t\t\toptions.agentDir,\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tstopThemeWatcher();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tstopThemeWatcher();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getResourceList());\n\t\tui.start();\n\t});\n}\n"]}