meetsoma 0.2.0 → 0.3.2

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 (517) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +2 -2
  3. package/bin/gum +0 -0
  4. package/dist/bun/cli.d.ts +3 -0
  5. package/dist/bun/cli.d.ts.map +1 -0
  6. package/dist/bun/cli.js +7 -0
  7. package/dist/bun/cli.js.map +1 -0
  8. package/dist/bun/register-bedrock.d.ts +2 -0
  9. package/dist/bun/register-bedrock.d.ts.map +1 -0
  10. package/dist/bun/register-bedrock.js +4 -0
  11. package/dist/bun/register-bedrock.js.map +1 -0
  12. package/dist/cli/args.d.ts +49 -0
  13. package/dist/cli/args.d.ts.map +1 -0
  14. package/dist/cli/args.js +304 -0
  15. package/dist/cli/args.js.map +1 -0
  16. package/dist/cli/config-selector.d.ts +14 -0
  17. package/dist/cli/config-selector.d.ts.map +1 -0
  18. package/dist/cli/config-selector.js +31 -0
  19. package/dist/cli/config-selector.js.map +1 -0
  20. package/dist/cli/file-processor.d.ts +15 -0
  21. package/dist/cli/file-processor.d.ts.map +1 -0
  22. package/dist/cli/file-processor.js +83 -0
  23. package/dist/cli/file-processor.js.map +1 -0
  24. package/dist/cli/initial-message.d.ts +18 -0
  25. package/dist/cli/initial-message.d.ts.map +1 -0
  26. package/dist/cli/initial-message.js +22 -0
  27. package/dist/cli/initial-message.js.map +1 -0
  28. package/dist/cli/list-models.d.ts +9 -0
  29. package/dist/cli/list-models.d.ts.map +1 -0
  30. package/dist/cli/list-models.js +92 -0
  31. package/dist/cli/list-models.js.map +1 -0
  32. package/dist/cli/session-picker.d.ts +9 -0
  33. package/dist/cli/session-picker.d.ts.map +1 -0
  34. package/dist/cli/session-picker.js +35 -0
  35. package/dist/cli/session-picker.js.map +1 -0
  36. package/dist/cli.d.ts +3 -0
  37. package/dist/cli.d.ts.map +1 -0
  38. package/dist/cli.js +601 -0
  39. package/dist/cli.js.map +1 -0
  40. package/dist/config.d.ts +68 -0
  41. package/dist/config.d.ts.map +1 -0
  42. package/dist/config.js +203 -0
  43. package/dist/config.js.map +1 -0
  44. package/dist/core/agent-session-runtime.d.ts +134 -0
  45. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  46. package/dist/core/agent-session-runtime.js +264 -0
  47. package/dist/core/agent-session-runtime.js.map +1 -0
  48. package/dist/core/agent-session.d.ts +585 -0
  49. package/dist/core/agent-session.d.ts.map +1 -0
  50. package/dist/core/agent-session.js +2497 -0
  51. package/dist/core/agent-session.js.map +1 -0
  52. package/dist/core/auth-storage.d.ts +132 -0
  53. package/dist/core/auth-storage.d.ts.map +1 -0
  54. package/dist/core/auth-storage.js +422 -0
  55. package/dist/core/auth-storage.js.map +1 -0
  56. package/dist/core/bash-executor.d.ts +46 -0
  57. package/dist/core/bash-executor.d.ts.map +1 -0
  58. package/dist/core/bash-executor.js +113 -0
  59. package/dist/core/bash-executor.js.map +1 -0
  60. package/dist/core/compaction/branch-summarization.d.ts +88 -0
  61. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  62. package/dist/core/compaction/branch-summarization.js +243 -0
  63. package/dist/core/compaction/branch-summarization.js.map +1 -0
  64. package/dist/core/compaction/compaction.d.ts +121 -0
  65. package/dist/core/compaction/compaction.d.ts.map +1 -0
  66. package/dist/core/compaction/compaction.js +613 -0
  67. package/dist/core/compaction/compaction.js.map +1 -0
  68. package/dist/core/compaction/index.d.ts +7 -0
  69. package/dist/core/compaction/index.d.ts.map +1 -0
  70. package/dist/core/compaction/index.js +7 -0
  71. package/dist/core/compaction/index.js.map +1 -0
  72. package/dist/core/compaction/utils.d.ts +38 -0
  73. package/dist/core/compaction/utils.d.ts.map +1 -0
  74. package/dist/core/compaction/utils.js +153 -0
  75. package/dist/core/compaction/utils.js.map +1 -0
  76. package/dist/core/defaults.d.ts +3 -0
  77. package/dist/core/defaults.d.ts.map +1 -0
  78. package/dist/core/defaults.js +2 -0
  79. package/dist/core/defaults.js.map +1 -0
  80. package/dist/core/diagnostics.d.ts +15 -0
  81. package/dist/core/diagnostics.d.ts.map +1 -0
  82. package/dist/core/diagnostics.js +2 -0
  83. package/dist/core/diagnostics.js.map +1 -0
  84. package/dist/core/event-bus.d.ts +9 -0
  85. package/dist/core/event-bus.d.ts.map +1 -0
  86. package/dist/core/event-bus.js +25 -0
  87. package/dist/core/event-bus.js.map +1 -0
  88. package/dist/core/exec.d.ts +29 -0
  89. package/dist/core/exec.d.ts.map +1 -0
  90. package/dist/core/exec.js +75 -0
  91. package/dist/core/exec.js.map +1 -0
  92. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  93. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  94. package/dist/core/export-html/ansi-to-html.js +249 -0
  95. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  96. package/dist/core/export-html/index.d.ts +37 -0
  97. package/dist/core/export-html/index.d.ts.map +1 -0
  98. package/dist/core/export-html/index.js +224 -0
  99. package/dist/core/export-html/index.js.map +1 -0
  100. package/dist/core/export-html/template.css +1001 -0
  101. package/dist/core/export-html/template.html +55 -0
  102. package/dist/core/export-html/template.js +1690 -0
  103. package/dist/core/export-html/tool-renderer.d.ts +40 -0
  104. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  105. package/dist/core/export-html/tool-renderer.js +95 -0
  106. package/dist/core/export-html/tool-renderer.js.map +1 -0
  107. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  108. package/dist/core/export-html/vendor/marked.min.js +6 -0
  109. package/dist/core/extensions/index.d.ts +12 -0
  110. package/dist/core/extensions/index.d.ts.map +1 -0
  111. package/dist/core/extensions/index.js +9 -0
  112. package/dist/core/extensions/index.js.map +1 -0
  113. package/dist/core/extensions/loader.d.ts +25 -0
  114. package/dist/core/extensions/loader.d.ts.map +1 -0
  115. package/dist/core/extensions/loader.js +436 -0
  116. package/dist/core/extensions/loader.js.map +1 -0
  117. package/dist/core/extensions/runner.d.ts +148 -0
  118. package/dist/core/extensions/runner.d.ts.map +1 -0
  119. package/dist/core/extensions/runner.js +700 -0
  120. package/dist/core/extensions/runner.js.map +1 -0
  121. package/dist/core/extensions/types.d.ts +1076 -0
  122. package/dist/core/extensions/types.d.ts.map +1 -0
  123. package/dist/core/extensions/types.js +35 -0
  124. package/dist/core/extensions/types.js.map +1 -0
  125. package/dist/core/extensions/wrapper.d.ts +20 -0
  126. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  127. package/dist/core/extensions/wrapper.js +22 -0
  128. package/dist/core/extensions/wrapper.js.map +1 -0
  129. package/dist/core/footer-data-provider.d.ts +48 -0
  130. package/dist/core/footer-data-provider.d.ts.map +1 -0
  131. package/dist/core/footer-data-provider.js +314 -0
  132. package/dist/core/footer-data-provider.js.map +1 -0
  133. package/dist/core/index.d.ts +11 -0
  134. package/dist/core/index.d.ts.map +1 -0
  135. package/dist/core/index.js +11 -0
  136. package/dist/core/index.js.map +1 -0
  137. package/dist/core/keybindings.d.ts +285 -0
  138. package/dist/core/keybindings.d.ts.map +1 -0
  139. package/dist/core/keybindings.js +251 -0
  140. package/dist/core/keybindings.js.map +1 -0
  141. package/dist/core/messages.d.ts +77 -0
  142. package/dist/core/messages.d.ts.map +1 -0
  143. package/dist/core/messages.js +123 -0
  144. package/dist/core/messages.js.map +1 -0
  145. package/dist/core/model-registry.d.ts +132 -0
  146. package/dist/core/model-registry.d.ts.map +1 -0
  147. package/dist/core/model-registry.js +583 -0
  148. package/dist/core/model-registry.js.map +1 -0
  149. package/dist/core/model-resolver.d.ts +110 -0
  150. package/dist/core/model-resolver.d.ts.map +1 -0
  151. package/dist/core/model-resolver.js +486 -0
  152. package/dist/core/model-resolver.js.map +1 -0
  153. package/dist/core/output-guard.d.ts +6 -0
  154. package/dist/core/output-guard.d.ts.map +1 -0
  155. package/dist/core/output-guard.js +59 -0
  156. package/dist/core/output-guard.js.map +1 -0
  157. package/dist/core/package-manager.d.ts +172 -0
  158. package/dist/core/package-manager.d.ts.map +1 -0
  159. package/dist/core/package-manager.js +1783 -0
  160. package/dist/core/package-manager.js.map +1 -0
  161. package/dist/core/prompt-templates.d.ts +51 -0
  162. package/dist/core/prompt-templates.d.ts.map +1 -0
  163. package/dist/core/prompt-templates.js +249 -0
  164. package/dist/core/prompt-templates.js.map +1 -0
  165. package/dist/core/resolve-config-value.d.ts +23 -0
  166. package/dist/core/resolve-config-value.d.ts.map +1 -0
  167. package/dist/core/resolve-config-value.js +126 -0
  168. package/dist/core/resolve-config-value.js.map +1 -0
  169. package/dist/core/resource-loader.d.ts +185 -0
  170. package/dist/core/resource-loader.d.ts.map +1 -0
  171. package/dist/core/resource-loader.js +698 -0
  172. package/dist/core/resource-loader.js.map +1 -0
  173. package/dist/core/sdk.d.ts +93 -0
  174. package/dist/core/sdk.d.ts.map +1 -0
  175. package/dist/core/sdk.js +236 -0
  176. package/dist/core/sdk.js.map +1 -0
  177. package/dist/core/session-manager.d.ts +332 -0
  178. package/dist/core/session-manager.d.ts.map +1 -0
  179. package/dist/core/session-manager.js +1104 -0
  180. package/dist/core/session-manager.js.map +1 -0
  181. package/dist/core/settings-manager.d.ts +237 -0
  182. package/dist/core/settings-manager.d.ts.map +1 -0
  183. package/dist/core/settings-manager.js +702 -0
  184. package/dist/core/settings-manager.js.map +1 -0
  185. package/dist/core/skills.d.ts +60 -0
  186. package/dist/core/skills.d.ts.map +1 -0
  187. package/dist/core/skills.js +409 -0
  188. package/dist/core/skills.js.map +1 -0
  189. package/dist/core/slash-commands.d.ts +14 -0
  190. package/dist/core/slash-commands.d.ts.map +1 -0
  191. package/dist/core/slash-commands.js +23 -0
  192. package/dist/core/slash-commands.js.map +1 -0
  193. package/dist/core/source-info.d.ts +18 -0
  194. package/dist/core/source-info.d.ts.map +1 -0
  195. package/dist/core/source-info.js +19 -0
  196. package/dist/core/source-info.js.map +1 -0
  197. package/dist/core/system-prompt.d.ts +28 -0
  198. package/dist/core/system-prompt.d.ts.map +1 -0
  199. package/dist/core/system-prompt.js +116 -0
  200. package/dist/core/system-prompt.js.map +1 -0
  201. package/dist/core/timings.d.ts +8 -0
  202. package/dist/core/timings.d.ts.map +1 -0
  203. package/dist/core/timings.js +31 -0
  204. package/dist/core/timings.js.map +1 -0
  205. package/dist/core/tools/bash.d.ts +73 -0
  206. package/dist/core/tools/bash.d.ts.map +1 -0
  207. package/dist/core/tools/bash.js +342 -0
  208. package/dist/core/tools/bash.js.map +1 -0
  209. package/dist/core/tools/edit-diff.d.ts +85 -0
  210. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  211. package/dist/core/tools/edit-diff.js +337 -0
  212. package/dist/core/tools/edit-diff.js.map +1 -0
  213. package/dist/core/tools/edit.d.ts +53 -0
  214. package/dist/core/tools/edit.d.ts.map +1 -0
  215. package/dist/core/tools/edit.js +196 -0
  216. package/dist/core/tools/edit.js.map +1 -0
  217. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  218. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  219. package/dist/core/tools/file-mutation-queue.js +37 -0
  220. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  221. package/dist/core/tools/find.d.ts +46 -0
  222. package/dist/core/tools/find.d.ts.map +1 -0
  223. package/dist/core/tools/find.js +258 -0
  224. package/dist/core/tools/find.js.map +1 -0
  225. package/dist/core/tools/grep.d.ts +56 -0
  226. package/dist/core/tools/grep.d.ts.map +1 -0
  227. package/dist/core/tools/grep.js +293 -0
  228. package/dist/core/tools/grep.js.map +1 -0
  229. package/dist/core/tools/index.d.ts +115 -0
  230. package/dist/core/tools/index.d.ts.map +1 -0
  231. package/dist/core/tools/index.js +86 -0
  232. package/dist/core/tools/index.js.map +1 -0
  233. package/dist/core/tools/ls.d.ts +46 -0
  234. package/dist/core/tools/ls.d.ts.map +1 -0
  235. package/dist/core/tools/ls.js +172 -0
  236. package/dist/core/tools/ls.js.map +1 -0
  237. package/dist/core/tools/path-utils.d.ts +8 -0
  238. package/dist/core/tools/path-utils.d.ts.map +1 -0
  239. package/dist/core/tools/path-utils.js +81 -0
  240. package/dist/core/tools/path-utils.js.map +1 -0
  241. package/dist/core/tools/read.d.ts +46 -0
  242. package/dist/core/tools/read.d.ts.map +1 -0
  243. package/dist/core/tools/read.js +225 -0
  244. package/dist/core/tools/read.js.map +1 -0
  245. package/dist/core/tools/render-utils.d.ts +21 -0
  246. package/dist/core/tools/render-utils.d.ts.map +1 -0
  247. package/dist/core/tools/render-utils.js +49 -0
  248. package/dist/core/tools/render-utils.js.map +1 -0
  249. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  250. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  251. package/dist/core/tools/tool-definition-wrapper.js +32 -0
  252. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  253. package/dist/core/tools/truncate.d.ts +70 -0
  254. package/dist/core/tools/truncate.d.ts.map +1 -0
  255. package/dist/core/tools/truncate.js +205 -0
  256. package/dist/core/tools/truncate.js.map +1 -0
  257. package/dist/core/tools/write.d.ts +35 -0
  258. package/dist/core/tools/write.d.ts.map +1 -0
  259. package/dist/core/tools/write.js +216 -0
  260. package/dist/core/tools/write.js.map +1 -0
  261. package/dist/index.d.ts +28 -0
  262. package/dist/index.d.ts.map +1 -0
  263. package/dist/index.js +43 -0
  264. package/dist/index.js.map +1 -0
  265. package/dist/lib/config.js +22 -0
  266. package/dist/lib/detect.js +94 -0
  267. package/dist/lib/display.js +182 -0
  268. package/dist/main.d.ts +8 -0
  269. package/dist/main.d.ts.map +1 -0
  270. package/dist/main.js +806 -0
  271. package/dist/main.js.map +1 -0
  272. package/dist/migrations.d.ts +33 -0
  273. package/dist/migrations.d.ts.map +1 -0
  274. package/dist/migrations.js +261 -0
  275. package/dist/migrations.js.map +1 -0
  276. package/dist/modes/index.d.ts +9 -0
  277. package/dist/modes/index.d.ts.map +1 -0
  278. package/dist/modes/index.js +8 -0
  279. package/dist/modes/index.js.map +1 -0
  280. package/dist/modes/interactive/components/armin.d.ts +34 -0
  281. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  282. package/dist/modes/interactive/components/armin.js +333 -0
  283. package/dist/modes/interactive/components/armin.js.map +1 -0
  284. package/dist/modes/interactive/components/assistant-message.d.ts +18 -0
  285. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  286. package/dist/modes/interactive/components/assistant-message.js +107 -0
  287. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  288. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  289. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  290. package/dist/modes/interactive/components/bash-execution.js +175 -0
  291. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  292. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  293. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  294. package/dist/modes/interactive/components/bordered-loader.js +51 -0
  295. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  296. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  297. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  298. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  299. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  300. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  301. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  302. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  303. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  304. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  305. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  306. package/dist/modes/interactive/components/config-selector.js +479 -0
  307. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  308. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  309. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  310. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  311. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  312. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  313. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  314. package/dist/modes/interactive/components/custom-editor.js +70 -0
  315. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  316. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  317. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  318. package/dist/modes/interactive/components/custom-message.js +79 -0
  319. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  320. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  321. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  322. package/dist/modes/interactive/components/daxnuts.js +140 -0
  323. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  324. package/dist/modes/interactive/components/diff.d.ts +12 -0
  325. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  326. package/dist/modes/interactive/components/diff.js +133 -0
  327. package/dist/modes/interactive/components/diff.js.map +1 -0
  328. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  329. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  330. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  331. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  332. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  333. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/extension-editor.js +111 -0
  335. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  336. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  337. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  338. package/dist/modes/interactive/components/extension-input.js +61 -0
  339. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  340. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  341. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/extension-selector.js +78 -0
  343. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  344. package/dist/modes/interactive/components/footer.d.ts +27 -0
  345. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/footer.js +201 -0
  347. package/dist/modes/interactive/components/footer.js.map +1 -0
  348. package/dist/modes/interactive/components/index.d.ts +32 -0
  349. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  350. package/dist/modes/interactive/components/index.js +33 -0
  351. package/dist/modes/interactive/components/index.js.map +1 -0
  352. package/dist/modes/interactive/components/keybinding-hints.d.ts +8 -0
  353. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  354. package/dist/modes/interactive/components/keybinding-hints.js +22 -0
  355. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  356. package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  357. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  358. package/dist/modes/interactive/components/login-dialog.js +145 -0
  359. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  360. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  361. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  362. package/dist/modes/interactive/components/model-selector.js +275 -0
  363. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  364. package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  365. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  366. package/dist/modes/interactive/components/oauth-selector.js +97 -0
  367. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  368. package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  369. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  370. package/dist/modes/interactive/components/scoped-models-selector.js +275 -0
  371. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  372. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  373. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  374. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  375. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  376. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  377. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  378. package/dist/modes/interactive/components/session-selector.js +848 -0
  379. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  380. package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
  381. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  382. package/dist/modes/interactive/components/settings-selector.js +301 -0
  383. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  384. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  385. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  386. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  387. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  388. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  389. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  390. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  391. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  392. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  393. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  394. package/dist/modes/interactive/components/theme-selector.js +50 -0
  395. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  396. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  397. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  398. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  399. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  400. package/dist/modes/interactive/components/tool-execution.d.ts +58 -0
  401. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  402. package/dist/modes/interactive/components/tool-execution.js +274 -0
  403. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  404. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  405. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  406. package/dist/modes/interactive/components/tree-selector.js +1084 -0
  407. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  408. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  409. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  410. package/dist/modes/interactive/components/user-message-selector.js +113 -0
  411. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  412. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  413. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  414. package/dist/modes/interactive/components/user-message.js +28 -0
  415. package/dist/modes/interactive/components/user-message.js.map +1 -0
  416. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  417. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  418. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  419. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  420. package/dist/modes/interactive/interactive-mode.d.ts +318 -0
  421. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  422. package/dist/modes/interactive/interactive-mode.js +3907 -0
  423. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  424. package/dist/modes/interactive/theme/dark.json +85 -0
  425. package/dist/modes/interactive/theme/light.json +84 -0
  426. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  427. package/dist/modes/interactive/theme/theme.d.ts +81 -0
  428. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  429. package/dist/modes/interactive/theme/theme.js +970 -0
  430. package/dist/modes/interactive/theme/theme.js.map +1 -0
  431. package/dist/modes/print-mode.d.ts +28 -0
  432. package/dist/modes/print-mode.d.ts.map +1 -0
  433. package/dist/modes/print-mode.js +108 -0
  434. package/dist/modes/print-mode.js.map +1 -0
  435. package/dist/modes/rpc/jsonl.d.ts +17 -0
  436. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  437. package/dist/modes/rpc/jsonl.js +49 -0
  438. package/dist/modes/rpc/jsonl.js.map +1 -0
  439. package/dist/modes/rpc/rpc-client.d.ts +217 -0
  440. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  441. package/dist/modes/rpc/rpc-client.js +401 -0
  442. package/dist/modes/rpc/rpc-client.js.map +1 -0
  443. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  444. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  445. package/dist/modes/rpc/rpc-mode.js +542 -0
  446. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  447. package/dist/modes/rpc/rpc-types.d.ts +408 -0
  448. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  449. package/dist/modes/rpc/rpc-types.js +8 -0
  450. package/dist/modes/rpc/rpc-types.js.map +1 -0
  451. package/dist/thin-cli.js +67 -812
  452. package/dist/utils/changelog.d.ts +21 -0
  453. package/dist/utils/changelog.d.ts.map +1 -0
  454. package/dist/utils/changelog.js +87 -0
  455. package/dist/utils/changelog.js.map +1 -0
  456. package/dist/utils/child-process.d.ts +11 -0
  457. package/dist/utils/child-process.d.ts.map +1 -0
  458. package/dist/utils/child-process.js +78 -0
  459. package/dist/utils/child-process.js.map +1 -0
  460. package/dist/utils/clipboard-image.d.ts +11 -0
  461. package/dist/utils/clipboard-image.d.ts.map +1 -0
  462. package/dist/utils/clipboard-image.js +245 -0
  463. package/dist/utils/clipboard-image.js.map +1 -0
  464. package/dist/utils/clipboard-native.d.ts +8 -0
  465. package/dist/utils/clipboard-native.d.ts.map +1 -0
  466. package/dist/utils/clipboard-native.js +14 -0
  467. package/dist/utils/clipboard-native.js.map +1 -0
  468. package/dist/utils/clipboard.d.ts +2 -0
  469. package/dist/utils/clipboard.d.ts.map +1 -0
  470. package/dist/utils/clipboard.js +78 -0
  471. package/dist/utils/clipboard.js.map +1 -0
  472. package/dist/utils/exif-orientation.d.ts +5 -0
  473. package/dist/utils/exif-orientation.d.ts.map +1 -0
  474. package/dist/utils/exif-orientation.js +158 -0
  475. package/dist/utils/exif-orientation.js.map +1 -0
  476. package/dist/utils/frontmatter.d.ts +8 -0
  477. package/dist/utils/frontmatter.d.ts.map +1 -0
  478. package/dist/utils/frontmatter.js +26 -0
  479. package/dist/utils/frontmatter.js.map +1 -0
  480. package/dist/utils/git.d.ts +26 -0
  481. package/dist/utils/git.d.ts.map +1 -0
  482. package/dist/utils/git.js +163 -0
  483. package/dist/utils/git.js.map +1 -0
  484. package/dist/utils/image-convert.d.ts +9 -0
  485. package/dist/utils/image-convert.d.ts.map +1 -0
  486. package/dist/utils/image-convert.js +39 -0
  487. package/dist/utils/image-convert.js.map +1 -0
  488. package/dist/utils/image-resize.d.ts +36 -0
  489. package/dist/utils/image-resize.d.ts.map +1 -0
  490. package/dist/utils/image-resize.js +137 -0
  491. package/dist/utils/image-resize.js.map +1 -0
  492. package/dist/utils/mime.d.ts +2 -0
  493. package/dist/utils/mime.d.ts.map +1 -0
  494. package/dist/utils/mime.js +26 -0
  495. package/dist/utils/mime.js.map +1 -0
  496. package/dist/utils/photon.d.ts +21 -0
  497. package/dist/utils/photon.d.ts.map +1 -0
  498. package/dist/utils/photon.js +121 -0
  499. package/dist/utils/photon.js.map +1 -0
  500. package/dist/utils/shell.d.ts +26 -0
  501. package/dist/utils/shell.d.ts.map +1 -0
  502. package/dist/utils/shell.js +186 -0
  503. package/dist/utils/shell.js.map +1 -0
  504. package/dist/utils/sleep.d.ts +5 -0
  505. package/dist/utils/sleep.d.ts.map +1 -0
  506. package/dist/utils/sleep.js +17 -0
  507. package/dist/utils/sleep.js.map +1 -0
  508. package/dist/utils/tools-manager.d.ts +3 -0
  509. package/dist/utils/tools-manager.d.ts.map +1 -0
  510. package/dist/utils/tools-manager.js +252 -0
  511. package/dist/utils/tools-manager.js.map +1 -0
  512. package/dist/welcome/about.js +50 -0
  513. package/dist/welcome/auth.js +126 -0
  514. package/dist/welcome/intro.js +90 -0
  515. package/dist/welcome/qa.js +131 -0
  516. package/package.json +90 -43
  517. package/scripts/install-gum.sh +141 -0
@@ -0,0 +1,126 @@
1
+ /**
2
+ * API key setup wizard — guides new users through auth.
3
+ */
4
+ import { soma as voice } from "../personality.js";
5
+ import { bold, dim, cyan, green, yellow, typeOut, typeParagraph, waitForKey, readSecret } from "../lib/display.js";
6
+ import { hasAnyAuth, getShellConfigPath, getShellConfigAbsPath, openBrowser } from "../lib/detect.js";
7
+ import { appendFileSync } from "fs";
8
+
9
+ export async function apiKeySetup() {
10
+ console.log(` ${yellow("!")} One more thing — Soma needs an AI provider to work.`);
11
+ console.log("");
12
+ await typeOut(` ${voice.spin("{Do you have an Anthropic API key?|Got a Claude API key?|Have an API key for Claude?}")}\n`);
13
+ console.log("");
14
+ console.log(` ${green("y")} ${dim("Yes, I have a key")}`);
15
+ console.log(` ${green("n")} ${dim("No, I need one")}`);
16
+ console.log(` ${green("s")} ${dim("I have a Claude Pro/Max subscription")}`);
17
+ console.log(` ${green("?")} ${dim("What's an API key?")}`);
18
+ console.log("");
19
+
20
+ const key = await waitForKey(` ${dim("→")} `);
21
+ const choice = key.toLowerCase();
22
+
23
+ if (choice === "y") {
24
+ await apiKeyEntry();
25
+ } else if (choice === "s") {
26
+ await oauthGuide();
27
+ } else if (choice === "?") {
28
+ await apiKeyExplain();
29
+ } else {
30
+ await apiKeyGetOne();
31
+ }
32
+ }
33
+
34
+ export async function apiKeyExplain() {
35
+ console.log("");
36
+ await typeParagraph("An API key is like a password that lets Soma talk to an AI model. You get one from Anthropic (the company that makes Claude), paste it into your terminal config, and Soma handles the rest. Your key stays on your machine — Soma never sends it anywhere.");
37
+ console.log("");
38
+ await typeParagraph("If you have a Claude Pro or Max subscription, you don't need a separate key — you can log in with your account instead.");
39
+ console.log("");
40
+
41
+ console.log(` ${green("g")} ${dim("Get a key (I'll show you how)")}`);
42
+ console.log(` ${green("s")} ${dim("I have Claude Pro/Max — log in instead")}`);
43
+ console.log("");
44
+
45
+ const key = await waitForKey(` ${dim("→")} `);
46
+ if (key.toLowerCase() === "s") {
47
+ await oauthGuide();
48
+ } else {
49
+ await apiKeyGetOne();
50
+ }
51
+ }
52
+
53
+ export async function apiKeyGetOne() {
54
+ console.log("");
55
+ await typeOut(` ${voice.spin("{Here's how.|Let me walk you through it.|Quick steps.}")}\n`);
56
+ console.log("");
57
+ console.log(` ${cyan("Step 1:")} Open this link to create a key:`);
58
+ console.log("");
59
+ console.log(` ${cyan("https://console.anthropic.com/settings/keys")}`);
60
+ console.log("");
61
+ openBrowser("https://console.anthropic.com/settings/keys");
62
+ console.log(` ${dim("(opened in your browser)")}`);
63
+ console.log("");
64
+ const { confirm } = await import("../lib/display.js");
65
+ await confirm(` ${dim("→")} Press ${bold("Enter")} when you have your key`);
66
+ await apiKeyEntry();
67
+ }
68
+
69
+ export async function apiKeyEntry() {
70
+ console.log("");
71
+ console.log(` ${cyan("Step 2:")} Paste your key below.`);
72
+ console.log(` ${dim("It starts with")} sk-ant-...`);
73
+ console.log("");
74
+
75
+ const apiKey = await readSecret(` ${dim("Key:")} `);
76
+
77
+ if (!apiKey || !apiKey.startsWith("sk-")) {
78
+ console.log("");
79
+ if (!apiKey) {
80
+ console.log(` ${dim("No key entered. You can set it up later.")}`);
81
+ } else {
82
+ console.log(` ${yellow("!")} That doesn't look like an Anthropic key.`);
83
+ console.log(` ${dim("Keys start with")} sk-ant-...`);
84
+ }
85
+ console.log("");
86
+ const sc = getShellConfigPath();
87
+ console.log(` ${dim("When you have your key, add it to")} ${dim(sc)}${dim(":")}`);
88
+ console.log(` ${green('export ANTHROPIC_API_KEY="your-key-here"')}`);
89
+ console.log(` ${dim("Then restart your terminal and run")} ${green("soma")}`);
90
+ console.log("");
91
+ return;
92
+ }
93
+
94
+ const shellConfigPath = getShellConfigAbsPath();
95
+ const shellConfigName = getShellConfigPath();
96
+ const exportLine = `\nexport ANTHROPIC_API_KEY="${apiKey}"\n`;
97
+
98
+ try {
99
+ appendFileSync(shellConfigPath, exportLine);
100
+ console.log("");
101
+ console.log(` ${green("✓")} Key saved to ${dim(shellConfigName)}`);
102
+ console.log("");
103
+ process.env.ANTHROPIC_API_KEY = apiKey;
104
+ await typeOut(` ${voice.spin("{You're all set.|Good to go.|Ready.}")} ${dim("Soma can start now.")}\n`);
105
+ console.log("");
106
+ } catch {
107
+ console.log("");
108
+ console.log(` ${yellow("!")} Couldn't write to ${dim(shellConfigName)}.`);
109
+ console.log(` ${dim("Add this line manually:")}`);
110
+ console.log(` ${green(`export ANTHROPIC_API_KEY="${apiKey}"`)}`);
111
+ console.log(` ${dim("Then restart your terminal and run")} ${green("soma")}`);
112
+ console.log("");
113
+ }
114
+ }
115
+
116
+ export async function oauthGuide() {
117
+ console.log("");
118
+ await typeParagraph("Nice — with a Pro or Max subscription, you can log in with your Anthropic account. No API key needed.");
119
+ console.log("");
120
+ console.log(` ${dim("When Soma starts, type")} ${green("/login")} ${dim("and follow the prompts.")}`);
121
+ console.log(` ${dim("It'll open your browser to authenticate.")}`);
122
+ console.log("");
123
+ await typeOut(` ${voice.spin("{Let's launch.|Starting up.|Here we go.}")}\n`);
124
+ console.log("");
125
+ process.env._SOMA_OAUTH_PENDING = "1";
126
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Welcome experience — first run and returning user flow.
3
+ */
4
+ import { soma as voice } from "../personality.js";
5
+ import { bold, dim, green, white, printSigma, typeOut, typeParagraph, readLine, confirmYN } from "../lib/display.js";
6
+ import { isInstalled, hasAnyAuth, hasGitHubCLI, getGitHubUsername, detectKeyInShellConfig, getShellConfigPath } from "../lib/detect.js";
7
+ import { getCliVersion } from "../lib/detect.js";
8
+ import { SITE_URL } from "../lib/config.js";
9
+ import { apiKeySetup } from "./auth.js";
10
+ import { handleQuestion, interactiveQ } from "./qa.js";
11
+
12
+ export async function showWelcome(delegateToCore, initSoma) {
13
+ const VERSION = getCliVersion();
14
+ printSigma();
15
+ console.log(` ${bold("Soma")} ${dim("—")} ${white("the AI agent that remembers")}`);
16
+ console.log("");
17
+
18
+ if (isInstalled()) {
19
+ const ghUser = hasGitHubCLI() ? getGitHubUsername() : null;
20
+ if (ghUser) {
21
+ console.log(` ${green("✓")} ${voice.greetBack(ghUser)}`);
22
+ }
23
+
24
+ if (!hasAnyAuth()) {
25
+ console.log(` ${green("✓")} Core installed`);
26
+ console.log("");
27
+
28
+ const unloadedKey = detectKeyInShellConfig();
29
+ if (unloadedKey) {
30
+ console.log(` ${dim("yellow")} Found ${bold(unloadedKey)} in ${dim(getShellConfigPath())} but it's not loaded.`);
31
+ console.log(` ${dim("Restart your terminal and run")} ${green("soma")} ${dim("again.")}`);
32
+ console.log("");
33
+ return;
34
+ }
35
+
36
+ await apiKeySetup();
37
+
38
+ if (!hasAnyAuth() && !process.env.ANTHROPIC_API_KEY && !process.env._SOMA_OAUTH_PENDING) {
39
+ console.log(` ${dim("No worries.")} ${voice.spin("{Come back when you're ready.|Set up a key and run soma again.|We'll be here.}")}`);
40
+ console.log("");
41
+ console.log(` ${dim(`v${VERSION} · BSL 1.1 · soma.gravicity.ai`)}`);
42
+ console.log("");
43
+ return;
44
+ }
45
+ } else {
46
+ console.log(` ${green("✓")} Core installed. Starting Soma...`);
47
+ }
48
+ console.log("");
49
+ await delegateToCore();
50
+ return;
51
+ }
52
+
53
+ // ── Not installed — first time ever ──
54
+ await typeOut(` ${voice.greet()}\n`);
55
+ console.log("");
56
+ await typeParagraph("Soma is an AI coding agent that remembers across sessions. It learns your patterns, builds its own tools, and picks up where it left off.");
57
+ console.log("");
58
+ console.log(` ${dim("─".repeat(58))}`);
59
+ console.log("");
60
+ console.log(` ${dim("→")} Press ${green("Enter")} to set up, or type a question.`);
61
+ console.log("");
62
+
63
+ const input = await readLine(` ${dim("→")} `);
64
+
65
+ if (input && input !== "") {
66
+ await handleQuestion(input);
67
+ await interactiveQ();
68
+ }
69
+
70
+ await initSoma();
71
+
72
+ if (isInstalled() && !hasAnyAuth()) {
73
+ await apiKeySetup();
74
+ }
75
+
76
+ if (isInstalled() && (hasAnyAuth() || process.env.ANTHROPIC_API_KEY || process.env._SOMA_OAUTH_PENDING)) {
77
+ console.log(` ${dim("─".repeat(58))}`);
78
+ console.log("");
79
+ const launch = await confirmYN(` ${voice.spin("{Ready to go?|Want to start your first session?|Launch Soma?}")}`);
80
+ if (launch) {
81
+ console.log("");
82
+ await delegateToCore();
83
+ return;
84
+ }
85
+ }
86
+
87
+ console.log("");
88
+ console.log(` ${dim(`v${VERSION} · BSL 1.1 · soma.gravicity.ai`)}`);
89
+ console.log("");
90
+ }
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Interactive Q&A — "ask me anything" flow for new users.
3
+ */
4
+ import { soma as voice } from "../personality.js";
5
+ import { bold, dim, cyan, green, typeOut, typeParagraph, readLine } from "../lib/display.js";
6
+
7
+ const QUESTION_MAP = [
8
+ { triggers: ["compact", "compaction", "summarise", "summarize", "summarization", "compress", "waiting", "context limit", "token limit", "context fills", "context window", "run out", "limit"], topic: "no_compaction", label: "Why no compaction?" },
9
+ { triggers: ["heat", "hot", "cold", "fade", "decay", "temperature"], topic: "what_is_heat", label: "What is the heat system?" },
10
+ { triggers: ["breath", "inhale", "exhale", "cycle", "session lifecycle"], topic: "what_is_breath", label: "What is the breath cycle?" },
11
+ { triggers: ["protocol", "rule", "behaviour", "behavior", "protocols"], topic: "what_are_protocols", label: "What are protocols?" },
12
+ { triggers: ["muscle", "muscles", "learn", "pattern", "grow", "correction"], topic: "what_are_muscles", label: "What are muscles?" },
13
+ { triggers: ["script", "scripts", "tool", "tools", "automate", "automation"], topic: "what_are_scripts", label: "What are scripts?" },
14
+ { triggers: ["memory", "remember", "forget", "remembers", "change"], topic: "how_memory_works", label: "How does memory work?" },
15
+ { triggers: ["license", "source", "open", "bsl", "mit", "available"], topic: "why_source_available", label: "Why source-available?" },
16
+ { triggers: ["install", "set up", "setup", "get started", "start", "begin", "getting started", "requirements", "require", "need to", "prerequisites"], topic: "how_to_install", label: "How do I install?" },
17
+ { triggers: ["sign up", "signup", "register", "join", "invite", "invitation", "apply"], topic: "how_to_source", label: "How do I get source access?" },
18
+ { triggers: ["cost", "price", "pricing", "free", "pay", "money", "subscription", "plan"], topic: "how_to_cost", label: "What does it cost?" },
19
+ { triggers: ["language", "languages", "python", "rust", "java", "typescript", "ruby", "go", "cpp", "swift"], topic: "how_to_languages", label: "What languages does it support?" },
20
+ { triggers: ["api key", "api_key", "anthropic", "openai", "gemini", "key", "token", "provider"], topic: "how_to_api_key", label: "Do I need an API key?" },
21
+ { triggers: ["model", "llm", "claude", "gpt", "which model", "what model"], topic: "how_to_model", label: "What model does it use?" },
22
+ { triggers: ["try", "demo", "preview", "test", "sample", "example"], topic: "how_to_try", label: "Can I try it?" },
23
+ { triggers: ["are you ai", "are you real", "are you alive", "sentient", "conscious", "artificial"], topic: "meta_self", label: "Are you AI?" },
24
+ { triggers: ["feel", "feelings", "emotion", "aware", "think", "alive"], topic: "meta_feelings", label: "Do you have feelings?" },
25
+ { triggers: ["who made", "who built", "who created", "creator", "developer", "behind"], topic: "meta_who_made", label: "Who made Soma?" },
26
+ { triggers: ["cursor", "copilot", "windsurf", "claude code", "cline", "better", "competitor", "vs", "compared"], topic: "meta_competitor", label: "How does Soma compare?" },
27
+ { triggers: ["how do you work", "how does this work", "what are you", "how are you built"], topic: "meta_how_work", label: "How does this CLI work?" },
28
+ { triggers: ["cool", "amazing", "impressive", "wow", "nice", "love", "awesome", "brilliant"], topic: "meta_impressed", label: "I'm impressed" },
29
+ { triggers: ["soma", "agent", "what is"], topic: "what_is_soma", label: "What is Soma?" },
30
+ ];
31
+
32
+ function matchQuestion(input) {
33
+ const lower = input.toLowerCase();
34
+ let best = null;
35
+ let bestScore = 0;
36
+ for (const q of QUESTION_MAP) {
37
+ const score = q.triggers.filter(t => lower.includes(t)).length;
38
+ if (score > bestScore) {
39
+ bestScore = score;
40
+ best = q;
41
+ }
42
+ }
43
+ return best;
44
+ }
45
+
46
+ export async function handleQuestion(input) {
47
+ const match = matchQuestion(input);
48
+ if (match) {
49
+ const answer = voice.ask(match.topic);
50
+ console.log("");
51
+ await typeParagraph(answer);
52
+ return true;
53
+ }
54
+
55
+ const lower = input.toLowerCase();
56
+ const rude = /suck|stupid|dumb|trash|garbage|hate|worst|bad|ugly|boring|lame|waste/.test(lower);
57
+ const impressed = /cool|amazing|wow|nice|love|awesome|brilliant|impressive|neat|sick|fire|goat/.test(lower);
58
+ const meta = /are you|what are you|how do you|who are you|real|alive|ai\b|bot\b/.test(lower);
59
+ const greeting = /^(hi|hey|hello|sup|yo|howdy|hola|greetings|good morning|good evening)\b/.test(lower);
60
+
61
+ console.log("");
62
+ if (greeting) {
63
+ await typeOut(` ${voice.greet()} ${voice.spin("{Ask me anything.|What do you want to know?|I know about 9 topics — pick one.}")}\n`);
64
+ } else if (rude) {
65
+ await typeParagraph(voice.ask("meta_rude"));
66
+ } else if (impressed) {
67
+ await typeParagraph(voice.ask("meta_impressed"));
68
+ } else if (meta) {
69
+ await typeParagraph(voice.ask("meta_self"));
70
+ } else {
71
+ await typeParagraph(voice.ask("meta_nonsense"));
72
+ }
73
+ return false;
74
+ }
75
+
76
+ export async function interactiveQ() {
77
+ console.log("");
78
+ console.log(` ${bold("Ask me anything.")}`);
79
+ console.log("");
80
+ console.log(` ${dim("•")} How do I install? ${dim("•")} What is heat?`);
81
+ console.log(` ${dim("•")} What does it cost? ${dim("•")} What are muscles?`);
82
+ console.log(` ${dim("•")} Why no compaction? ${dim("•")} Are you AI?`);
83
+ console.log(` ${dim("•")} How does it compare? ${dim("•")} Who made this?`);
84
+ console.log("");
85
+ console.log(` ${dim("...or ask anything. Press")} ${green("Enter")} ${dim("when you're ready to install.")}`);
86
+
87
+ let rounds = 0;
88
+ const maxRounds = 8;
89
+
90
+ while (rounds < maxRounds) {
91
+ console.log("");
92
+ const input = await readLine(` ${cyan("?")} `);
93
+
94
+ if (!input || input === "q" || input === "quit" || input === "exit") {
95
+ break;
96
+ }
97
+
98
+ await handleQuestion(input);
99
+ rounds++;
100
+
101
+ if (rounds < maxRounds) {
102
+ console.log("");
103
+ console.log(` ${dim("Ask another, or")} ${green("Enter")} ${dim("to install Soma.")}`);
104
+ }
105
+ }
106
+
107
+ if (rounds >= maxRounds) {
108
+ console.log("");
109
+ await typeOut(` ${voice.spin("{Curious enough?|Intrigued?|Want to see it in action?}")} ${dim("Let's set you up.")}\n`);
110
+ }
111
+ }
112
+
113
+ export const CONCEPTS = [
114
+ { title: "Memory isn't retrieval. Memory is change.", topic: "how_memory_works" },
115
+ { title: "Your agent should know who it is.", topic: "what_is_soma" },
116
+ { title: "Protocols evolve. Muscles grow.", topic: "what_are_protocols" },
117
+ { title: "The breath cycle.", topic: "what_is_breath" },
118
+ { title: "Tools that survive across sessions.", topic: "what_are_scripts" },
119
+ { title: "Heat tracks what matters.", topic: "what_is_heat" },
120
+ { title: "What are muscles?", topic: "what_are_muscles" },
121
+ { title: "No compaction. Ever.", topic: "no_compaction" },
122
+ ];
123
+
124
+ export function getConceptIndex() {
125
+ const day = Math.floor(Date.now() / 86400000);
126
+ return day % CONCEPTS.length;
127
+ }
128
+
129
+ export function getConceptBody(topic) {
130
+ return voice.ask(topic) || "";
131
+ }
package/package.json CHANGED
@@ -1,44 +1,91 @@
1
1
  {
2
- "name": "meetsoma",
3
- "version": "0.2.0",
4
- "description": "Soma \u2014 the AI coding agent with self-growing memory",
5
- "type": "module",
6
- "bin": {
7
- "soma": "dist/thin-cli.js"
8
- },
9
- "files": [
10
- "dist/thin-cli.js",
11
- "dist/personality.js",
12
- "dist/postinstall.js",
13
- "LICENSE",
14
- "README.md",
15
- "CHANGELOG.md"
16
- ],
17
- "keywords": [
18
- "soma",
19
- "meetsoma",
20
- "ai",
21
- "agent",
22
- "memory",
23
- "coding-agent",
24
- "identity",
25
- "muscles",
26
- "protocols",
27
- "self-evolving",
28
- "cli",
29
- "llm"
30
- ],
31
- "author": "Gravicity <hello@gravicity.ai>",
32
- "license": "BSL-1.1",
33
- "homepage": "https://soma.gravicity.ai",
34
- "repository": {
35
- "type": "git",
36
- "url": "git+https://github.com/meetsoma/soma-agent.git"
37
- },
38
- "scripts": {
39
- "postinstall": "node dist/postinstall.js"
40
- },
41
- "engines": {
42
- "node": ">=20.6.0"
43
- }
44
- }
2
+ "name": "meetsoma",
3
+ "version": "0.3.2",
4
+ "description": "AI coding agent with self-growing memory — identity, protocols, and muscles that evolve with use",
5
+ "type": "module",
6
+ "piConfig": {
7
+ "name": "soma",
8
+ "configDir": ".soma"
9
+ },
10
+ "bin": {
11
+ "soma": "dist/cli.js"
12
+ },
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ },
20
+ "./hooks": {
21
+ "types": "./dist/core/hooks/index.d.ts",
22
+ "import": "./dist/core/hooks/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "bin",
28
+ "scripts/install-gum.sh",
29
+ "CHANGELOG.md"
30
+ ],
31
+ "dependencies": {
32
+ "@mariozechner/jiti": "^2.6.5",
33
+ "@mariozechner/pi-agent-core": "^0.64.0",
34
+ "@mariozechner/pi-ai": "^0.64.0",
35
+ "@mariozechner/pi-tui": "^0.64.0",
36
+ "@silvia-odwyer/photon-node": "^0.3.4",
37
+ "@sinclair/typebox": "^0.34.48",
38
+ "chalk": "^5.5.0",
39
+ "cli-highlight": "^2.1.11",
40
+ "diff": "^8.0.2",
41
+ "extract-zip": "^2.0.1",
42
+ "file-type": "^21.1.1",
43
+ "glob": "^13.0.1",
44
+ "hosted-git-info": "^9.0.2",
45
+ "ignore": "^7.0.5",
46
+ "marked": "^15.0.12",
47
+ "minimatch": "^10.2.3",
48
+ "proper-lockfile": "^4.1.2",
49
+ "strip-ansi": "^7.1.0",
50
+ "undici": "^7.19.1",
51
+ "yaml": "^2.8.2"
52
+ },
53
+ "overrides": {
54
+ "rimraf": "6.1.2",
55
+ "gaxios": {
56
+ "rimraf": "6.1.2"
57
+ }
58
+ },
59
+ "optionalDependencies": {
60
+ "@mariozechner/clipboard": "^0.3.2"
61
+ },
62
+ "keywords": [
63
+ "soma",
64
+ "meetsoma",
65
+ "ai",
66
+ "agent",
67
+ "memory",
68
+ "coding-agent",
69
+ "identity",
70
+ "muscles",
71
+ "protocols",
72
+ "self-evolving",
73
+ "cli",
74
+ "llm",
75
+ "persistence",
76
+ "session"
77
+ ],
78
+ "author": "Gravicity <hello@gravicity.ai>",
79
+ "license": "BSL-1.1",
80
+ "homepage": "https://soma.gravicity.ai",
81
+ "repository": {
82
+ "type": "git",
83
+ "url": "git+https://github.com/meetsoma/soma-agent.git"
84
+ },
85
+ "engines": {
86
+ "node": ">=20.6.0"
87
+ },
88
+ "scripts": {
89
+ "postinstall": "bash scripts/install-gum.sh || true"
90
+ }
91
+ }
@@ -0,0 +1,141 @@
1
+ #!/bin/bash
2
+ # ═══════════════════════════════════════════════════════════════════════════
3
+ # install-gum.sh — download gum binary for soma TUI support
4
+ # ═══════════════════════════════════════════════════════════════════════════
5
+ #
6
+ # Called by postinstall. Downloads the correct gum binary for the current
7
+ # platform into the package's bin/ directory. Falls back gracefully —
8
+ # soma works without gum, it just looks better with it.
9
+ #
10
+ # Usage: bash install-gum.sh [--force]
11
+ #
12
+ # Env:
13
+ # SOMA_SKIP_GUM=1 Skip gum installation entirely
14
+ # GUM_VERSION Override version (default: 0.17.0)
15
+
16
+ set -euo pipefail
17
+
18
+ GUM_VERSION="${GUM_VERSION:-0.17.0}"
19
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
20
+ PKG_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
21
+ BIN_DIR="$PKG_DIR/bin"
22
+ GUM_BIN="$BIN_DIR/gum"
23
+
24
+ # ─── Skip checks ──────────────────────────────────────────────────────────
25
+
26
+ if [ "${SOMA_SKIP_GUM:-0}" = "1" ]; then
27
+ echo " ℹ Skipping gum install (SOMA_SKIP_GUM=1)"
28
+ exit 0
29
+ fi
30
+
31
+ # Already installed and not forcing
32
+ if [ -x "$GUM_BIN" ] && [ "${1:-}" != "--force" ]; then
33
+ existing=$("$GUM_BIN" --version 2>/dev/null | grep -o '[0-9]*\.[0-9]*\.[0-9]*' || echo "unknown")
34
+ echo " ✓ gum $existing already installed"
35
+ exit 0
36
+ fi
37
+
38
+ # Check if system gum exists
39
+ if command -v gum >/dev/null 2>&1 && [ "${1:-}" != "--force" ]; then
40
+ sys_version=$(gum --version 2>/dev/null | grep -o '[0-9]*\.[0-9]*\.[0-9]*' || echo "unknown")
41
+ echo " ✓ System gum $sys_version found, skipping bundled install"
42
+ # Symlink to system gum for consistent path
43
+ mkdir -p "$BIN_DIR"
44
+ ln -sf "$(command -v gum)" "$GUM_BIN" 2>/dev/null || true
45
+ exit 0
46
+ fi
47
+
48
+ # ─── Detect platform ──────────────────────────────────────────────────────
49
+
50
+ OS="$(uname -s)"
51
+ ARCH="$(uname -m)"
52
+
53
+ case "$OS" in
54
+ Darwin) PLATFORM="Darwin" ;;
55
+ Linux) PLATFORM="Linux" ;;
56
+ MINGW*|MSYS*|CYGWIN*)
57
+ echo " ⚠ Windows detected — install gum manually: scoop install gum"
58
+ exit 0
59
+ ;;
60
+ *)
61
+ echo " ⚠ Unsupported OS: $OS — gum TUI features will be unavailable"
62
+ exit 0
63
+ ;;
64
+ esac
65
+
66
+ case "$ARCH" in
67
+ x86_64|amd64) MACHINE="x86_64" ;;
68
+ arm64|aarch64) MACHINE="arm64" ;;
69
+ armv7*) MACHINE="armv7" ;;
70
+ armv6*) MACHINE="armv6" ;;
71
+ *)
72
+ echo " ⚠ Unsupported architecture: $ARCH — gum TUI features will be unavailable"
73
+ exit 0
74
+ ;;
75
+ esac
76
+
77
+ # ─── Download ──────────────────────────────────────────────────────────────
78
+
79
+ FILENAME="gum_${GUM_VERSION}_${PLATFORM}_${MACHINE}.tar.gz"
80
+ URL="https://github.com/charmbracelet/gum/releases/download/v${GUM_VERSION}/${FILENAME}"
81
+ TMP_DIR=$(mktemp -d)
82
+
83
+ cleanup() {
84
+ rm -rf "$TMP_DIR"
85
+ }
86
+ trap cleanup EXIT
87
+
88
+ echo " ↓ Downloading gum v${GUM_VERSION} for ${PLATFORM}/${MACHINE}..."
89
+
90
+ # Try curl first, then wget
91
+ if command -v curl >/dev/null 2>&1; then
92
+ HTTP_CODE=$(curl -fsSL -o "$TMP_DIR/$FILENAME" -w "%{http_code}" "$URL" 2>/dev/null) || true
93
+ if [ "$HTTP_CODE" != "200" ] && [ ! -s "$TMP_DIR/$FILENAME" ]; then
94
+ echo " ⚠ Download failed (HTTP $HTTP_CODE) — gum TUI features will be unavailable"
95
+ echo " Install manually: brew install gum"
96
+ exit 0
97
+ fi
98
+ elif command -v wget >/dev/null 2>&1; then
99
+ wget -q -O "$TMP_DIR/$FILENAME" "$URL" 2>/dev/null || {
100
+ echo " ⚠ Download failed — gum TUI features will be unavailable"
101
+ echo " Install manually: brew install gum"
102
+ exit 0
103
+ }
104
+ else
105
+ echo " ⚠ Neither curl nor wget found — install gum manually: brew install gum"
106
+ exit 0
107
+ fi
108
+
109
+ # ─── Extract ───────────────────────────────────────────────────────────────
110
+
111
+ echo " ⊙ Extracting..."
112
+ tar -xzf "$TMP_DIR/$FILENAME" -C "$TMP_DIR" 2>/dev/null || {
113
+ echo " ⚠ Extraction failed — gum TUI features will be unavailable"
114
+ exit 0
115
+ }
116
+
117
+ # Find the gum binary in extracted files
118
+ GUM_EXTRACTED=$(find "$TMP_DIR" -name "gum" -type f -perm +111 2>/dev/null | head -1)
119
+ if [ -z "$GUM_EXTRACTED" ]; then
120
+ GUM_EXTRACTED=$(find "$TMP_DIR" -name "gum" -type f 2>/dev/null | head -1)
121
+ fi
122
+
123
+ if [ -z "$GUM_EXTRACTED" ]; then
124
+ echo " ⚠ gum binary not found in archive — TUI features will be unavailable"
125
+ exit 0
126
+ fi
127
+
128
+ # ─── Install ───────────────────────────────────────────────────────────────
129
+
130
+ mkdir -p "$BIN_DIR"
131
+ rm -f "$GUM_BIN"
132
+ cp "$GUM_EXTRACTED" "$GUM_BIN"
133
+ chmod +x "$GUM_BIN"
134
+
135
+ # Verify
136
+ if "$GUM_BIN" --version >/dev/null 2>&1; then
137
+ installed_version=$("$GUM_BIN" --version | grep -o '[0-9]*\.[0-9]*\.[0-9]*')
138
+ echo " ✓ gum v${installed_version} installed to $GUM_BIN"
139
+ else
140
+ echo " ⚠ gum installed but verification failed"
141
+ fi