@travisennis/acai 0.0.8 → 0.0.10

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 (386) hide show
  1. package/README.md +48 -729
  2. package/bin/acai +52 -0
  3. package/dist/agent/index.d.ts +12 -2
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js +378 -168
  6. package/dist/agent/sub-agent.d.ts +23 -0
  7. package/dist/agent/sub-agent.d.ts.map +1 -0
  8. package/dist/agent/sub-agent.js +109 -0
  9. package/dist/cli/index.d.ts +26 -0
  10. package/dist/cli/index.d.ts.map +1 -0
  11. package/dist/{cli.js → cli/index.js} +84 -76
  12. package/dist/cli/stdin.d.ts +9 -0
  13. package/dist/cli/stdin.d.ts.map +1 -0
  14. package/dist/cli/stdin.js +37 -0
  15. package/dist/commands/copy/index.js +2 -2
  16. package/dist/commands/copy/utils.d.ts.map +1 -1
  17. package/dist/commands/copy/utils.js +15 -13
  18. package/dist/commands/generate-rules/index.d.ts +1 -1
  19. package/dist/commands/generate-rules/index.d.ts.map +1 -1
  20. package/dist/commands/generate-rules/index.js +16 -100
  21. package/dist/commands/generate-rules/service.d.ts +21 -0
  22. package/dist/commands/generate-rules/service.d.ts.map +1 -0
  23. package/dist/commands/generate-rules/service.js +103 -0
  24. package/dist/commands/handoff/index.js +2 -2
  25. package/dist/commands/health/index.js +1 -1
  26. package/dist/commands/health/utils.d.ts.map +1 -1
  27. package/dist/commands/health/utils.js +6 -0
  28. package/dist/commands/history/index.d.ts +1 -1
  29. package/dist/commands/history/index.d.ts.map +1 -1
  30. package/dist/commands/history/index.js +17 -18
  31. package/dist/commands/history/types.d.ts +38 -0
  32. package/dist/commands/history/types.d.ts.map +1 -1
  33. package/dist/commands/history/utils.d.ts.map +1 -1
  34. package/dist/commands/history/utils.js +63 -58
  35. package/dist/commands/init/index.d.ts.map +1 -1
  36. package/dist/commands/init/index.js +3 -8
  37. package/dist/commands/init-project/index.d.ts.map +1 -1
  38. package/dist/commands/init-project/index.js +3 -3
  39. package/dist/commands/init-project/utils.d.ts.map +1 -1
  40. package/dist/commands/init-project/utils.js +10 -2
  41. package/dist/commands/list-tools/index.d.ts.map +1 -1
  42. package/dist/commands/list-tools/index.js +7 -31
  43. package/dist/commands/manager.d.ts +2 -2
  44. package/dist/commands/manager.d.ts.map +1 -1
  45. package/dist/commands/manager.js +57 -33
  46. package/dist/commands/model/index.d.ts.map +1 -1
  47. package/dist/commands/model/index.js +20 -151
  48. package/dist/commands/model/model-panel.d.ts +4 -0
  49. package/dist/commands/model/model-panel.d.ts.map +1 -0
  50. package/dist/commands/model/model-panel.js +144 -0
  51. package/dist/commands/paste/index.d.ts.map +1 -1
  52. package/dist/commands/paste/index.js +59 -62
  53. package/dist/commands/paste/utils.d.ts.map +1 -1
  54. package/dist/commands/paste/utils.js +88 -58
  55. package/dist/commands/pickup/index.d.ts.map +1 -1
  56. package/dist/commands/pickup/index.js +6 -3
  57. package/dist/commands/pickup/utils.js +3 -3
  58. package/dist/commands/resources/index.d.ts.map +1 -1
  59. package/dist/commands/resources/index.js +33 -50
  60. package/dist/commands/review/index.d.ts.map +1 -1
  61. package/dist/commands/review/index.js +3 -117
  62. package/dist/commands/review/review-panel.d.ts +3 -0
  63. package/dist/commands/review/review-panel.d.ts.map +1 -0
  64. package/dist/commands/review/review-panel.js +186 -0
  65. package/dist/commands/review/utils.d.ts +9 -0
  66. package/dist/commands/review/utils.d.ts.map +1 -1
  67. package/dist/commands/review/utils.js +127 -68
  68. package/dist/commands/session/index.d.ts +1 -1
  69. package/dist/commands/session/index.d.ts.map +1 -1
  70. package/dist/commands/session/index.js +134 -112
  71. package/dist/commands/session/types.d.ts +7 -0
  72. package/dist/commands/session/types.d.ts.map +1 -1
  73. package/dist/commands/share/html-renderer.d.ts +25 -0
  74. package/dist/commands/share/html-renderer.d.ts.map +1 -0
  75. package/dist/commands/share/html-renderer.js +384 -0
  76. package/dist/commands/share/index.d.ts +3 -0
  77. package/dist/commands/share/index.d.ts.map +1 -0
  78. package/dist/commands/share/index.js +122 -0
  79. package/dist/commands/shell/index.d.ts.map +1 -1
  80. package/dist/commands/shell/index.js +16 -1
  81. package/dist/commands/types.d.ts +2 -2
  82. package/dist/commands/types.d.ts.map +1 -1
  83. package/dist/{config.d.ts → config/index.d.ts} +20 -9
  84. package/dist/config/index.d.ts.map +1 -0
  85. package/dist/{config.js → config/index.js} +43 -42
  86. package/dist/execution/index.d.ts.map +1 -1
  87. package/dist/execution/index.js +75 -55
  88. package/dist/index.d.ts +1 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +170 -127
  91. package/dist/middleware/cache.d.ts.map +1 -1
  92. package/dist/middleware/cache.js +18 -36
  93. package/dist/models/ai-config.d.ts +1 -0
  94. package/dist/models/ai-config.d.ts.map +1 -1
  95. package/dist/models/ai-config.js +4 -3
  96. package/dist/models/anthropic-provider.d.ts +2 -5
  97. package/dist/models/anthropic-provider.d.ts.map +1 -1
  98. package/dist/models/anthropic-provider.js +3 -70
  99. package/dist/models/deepseek-provider.d.ts +1 -0
  100. package/dist/models/deepseek-provider.d.ts.map +1 -1
  101. package/dist/models/google-provider.d.ts +2 -3
  102. package/dist/models/google-provider.d.ts.map +1 -1
  103. package/dist/models/google-provider.js +0 -26
  104. package/dist/models/groq-provider.d.ts +1 -0
  105. package/dist/models/groq-provider.d.ts.map +1 -1
  106. package/dist/models/manager.d.ts +13 -2
  107. package/dist/models/manager.d.ts.map +1 -1
  108. package/dist/models/manager.js +20 -8
  109. package/dist/models/openai-provider.d.ts +5 -5
  110. package/dist/models/openai-provider.d.ts.map +1 -1
  111. package/dist/models/openai-provider.js +27 -40
  112. package/dist/models/opencode-zen-provider.d.ts +8 -3
  113. package/dist/models/opencode-zen-provider.d.ts.map +1 -1
  114. package/dist/models/opencode-zen-provider.js +68 -11
  115. package/dist/models/openrouter-provider.d.ts +24 -30
  116. package/dist/models/openrouter-provider.d.ts.map +1 -1
  117. package/dist/models/openrouter-provider.js +92 -177
  118. package/dist/models/providers.d.ts +1 -1
  119. package/dist/models/providers.d.ts.map +1 -1
  120. package/dist/models/xai-provider.d.ts +4 -3
  121. package/dist/models/xai-provider.d.ts.map +1 -1
  122. package/dist/models/xai-provider.js +18 -18
  123. package/dist/modes/manager.d.ts +23 -0
  124. package/dist/modes/manager.d.ts.map +1 -0
  125. package/dist/modes/manager.js +77 -0
  126. package/dist/modes/prompts.d.ts +2 -0
  127. package/dist/modes/prompts.d.ts.map +1 -0
  128. package/dist/modes/prompts.js +143 -0
  129. package/dist/prompts/mentions.d.ts +11 -0
  130. package/dist/prompts/mentions.d.ts.map +1 -0
  131. package/dist/{mentions.js → prompts/mentions.js} +21 -80
  132. package/dist/prompts/system-prompt.d.ts +26 -0
  133. package/dist/prompts/system-prompt.d.ts.map +1 -0
  134. package/dist/{prompts.js → prompts/system-prompt.js} +50 -22
  135. package/dist/repl/index.d.ts +174 -0
  136. package/dist/repl/index.d.ts.map +1 -0
  137. package/dist/{repl-new.js → repl/index.js} +399 -76
  138. package/dist/repl/project-status.d.ts +1 -0
  139. package/dist/repl/project-status.d.ts.map +1 -1
  140. package/dist/repl/project-status.js +4 -1
  141. package/dist/sessions/manager.d.ts +93 -1
  142. package/dist/sessions/manager.d.ts.map +1 -1
  143. package/dist/sessions/manager.js +264 -9
  144. package/dist/sessions/summary.d.ts +4 -0
  145. package/dist/sessions/summary.d.ts.map +1 -0
  146. package/dist/sessions/summary.js +30 -0
  147. package/dist/{skills.d.ts → skills/index.d.ts} +14 -2
  148. package/dist/skills/index.d.ts.map +1 -0
  149. package/dist/skills/index.js +294 -0
  150. package/dist/subagents/index.d.ts +15 -0
  151. package/dist/subagents/index.d.ts.map +1 -0
  152. package/dist/subagents/index.js +231 -0
  153. package/dist/terminal/control.d.ts +1 -1
  154. package/dist/terminal/control.d.ts.map +1 -1
  155. package/dist/terminal/control.js +30 -9
  156. package/dist/terminal/east-asian-width.d.ts.map +1 -1
  157. package/dist/terminal/east-asian-width.js +404 -351
  158. package/dist/terminal/keys.d.ts +17 -0
  159. package/dist/terminal/keys.d.ts.map +1 -1
  160. package/dist/terminal/keys.js +37 -0
  161. package/dist/terminal/select-prompt.d.ts.map +1 -1
  162. package/dist/terminal/select-prompt.js +24 -12
  163. package/dist/terminal/string-width.d.ts.map +1 -1
  164. package/dist/terminal/string-width.js +25 -27
  165. package/dist/terminal/style.d.ts.map +1 -1
  166. package/dist/terminal/style.js +4 -7
  167. package/dist/terminal/supports-color.d.ts.map +1 -1
  168. package/dist/terminal/supports-color.js +41 -27
  169. package/dist/terminal/table/cell.d.ts +12 -0
  170. package/dist/terminal/table/cell.d.ts.map +1 -1
  171. package/dist/terminal/table/cell.js +40 -25
  172. package/dist/terminal/table/layout-manager.d.ts.map +1 -1
  173. package/dist/terminal/table/layout-manager.js +100 -68
  174. package/dist/terminal/table/utils.d.ts.map +1 -1
  175. package/dist/terminal/table/utils.js +17 -10
  176. package/dist/terminal/wrap-ansi.d.ts.map +1 -1
  177. package/dist/terminal/wrap-ansi.js +172 -103
  178. package/dist/tokens/tracker.d.ts +1 -0
  179. package/dist/tokens/tracker.d.ts.map +1 -1
  180. package/dist/tokens/tracker.js +3 -0
  181. package/dist/tools/agent.d.ts +27 -0
  182. package/dist/tools/agent.d.ts.map +1 -0
  183. package/dist/tools/agent.js +81 -0
  184. package/dist/tools/bash.d.ts +4 -3
  185. package/dist/tools/bash.d.ts.map +1 -1
  186. package/dist/tools/bash.js +343 -121
  187. package/dist/tools/code-search.d.ts +41 -0
  188. package/dist/tools/code-search.d.ts.map +1 -0
  189. package/dist/tools/code-search.js +195 -0
  190. package/dist/tools/directory-tree.d.ts +3 -3
  191. package/dist/tools/directory-tree.d.ts.map +1 -1
  192. package/dist/tools/directory-tree.js +8 -5
  193. package/dist/tools/dynamic-tool-loader.d.ts +2 -5
  194. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  195. package/dist/tools/dynamic-tool-loader.js +20 -4
  196. package/dist/tools/edit-file.d.ts +7 -7
  197. package/dist/tools/edit-file.d.ts.map +1 -1
  198. package/dist/tools/edit-file.js +164 -66
  199. package/dist/tools/glob.d.ts +6 -6
  200. package/dist/tools/glob.d.ts.map +1 -1
  201. package/dist/tools/glob.js +95 -55
  202. package/dist/tools/grep.d.ts +15 -12
  203. package/dist/tools/grep.d.ts.map +1 -1
  204. package/dist/tools/grep.js +300 -192
  205. package/dist/tools/index.d.ts +143 -5
  206. package/dist/tools/index.d.ts.map +1 -1
  207. package/dist/tools/index.js +39 -24
  208. package/dist/tools/ls.d.ts +2 -2
  209. package/dist/tools/ls.d.ts.map +1 -1
  210. package/dist/tools/ls.js +7 -5
  211. package/dist/tools/read-file.d.ts +3 -3
  212. package/dist/tools/read-file.d.ts.map +1 -1
  213. package/dist/tools/read-file.js +74 -34
  214. package/dist/tools/save-file.d.ts +3 -3
  215. package/dist/tools/save-file.d.ts.map +1 -1
  216. package/dist/tools/save-file.js +11 -11
  217. package/dist/tools/skill.d.ts +23 -0
  218. package/dist/tools/skill.d.ts.map +1 -0
  219. package/dist/tools/skill.js +65 -0
  220. package/dist/tools/think.d.ts.map +1 -1
  221. package/dist/tools/think.js +2 -9
  222. package/dist/tools/utils.d.ts +2 -0
  223. package/dist/tools/utils.d.ts.map +1 -1
  224. package/dist/tools/utils.js +12 -0
  225. package/dist/tools/web-fetch.d.ts +62 -0
  226. package/dist/tools/web-fetch.d.ts.map +1 -0
  227. package/dist/tools/web-fetch.js +429 -0
  228. package/dist/tools/web-search.d.ts +62 -0
  229. package/dist/tools/web-search.d.ts.map +1 -0
  230. package/dist/tools/web-search.js +226 -0
  231. package/dist/tui/autocomplete/attachment-provider.d.ts +3 -6
  232. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -1
  233. package/dist/tui/autocomplete/attachment-provider.js +25 -78
  234. package/dist/tui/autocomplete/base-provider.d.ts +1 -0
  235. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -1
  236. package/dist/tui/autocomplete/combined-provider.d.ts +1 -4
  237. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -1
  238. package/dist/tui/autocomplete/combined-provider.js +3 -17
  239. package/dist/tui/autocomplete/command-provider.d.ts +1 -0
  240. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -1
  241. package/dist/tui/autocomplete/command-provider.js +3 -0
  242. package/dist/tui/autocomplete/file-search-provider.d.ts +2 -1
  243. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -1
  244. package/dist/tui/autocomplete/file-search-provider.js +36 -16
  245. package/dist/tui/autocomplete/skill-provider.d.ts +17 -0
  246. package/dist/tui/autocomplete/skill-provider.d.ts.map +1 -0
  247. package/dist/tui/autocomplete/skill-provider.js +49 -0
  248. package/dist/tui/autocomplete.d.ts +2 -2
  249. package/dist/tui/autocomplete.d.ts.map +1 -1
  250. package/dist/tui/autocomplete.js +3 -5
  251. package/dist/tui/components/assistant-message.d.ts.map +1 -1
  252. package/dist/tui/components/assistant-message.js +0 -4
  253. package/dist/tui/components/editor.d.ts +21 -2
  254. package/dist/tui/components/editor.d.ts.map +1 -1
  255. package/dist/tui/components/editor.js +228 -236
  256. package/dist/tui/components/footer.d.ts +6 -4
  257. package/dist/tui/components/footer.d.ts.map +1 -1
  258. package/dist/tui/components/footer.js +49 -25
  259. package/dist/tui/components/markdown.d.ts +8 -5
  260. package/dist/tui/components/markdown.d.ts.map +1 -1
  261. package/dist/tui/components/markdown.js +57 -39
  262. package/dist/tui/components/modal.d.ts.map +1 -1
  263. package/dist/tui/components/modal.js +35 -33
  264. package/dist/tui/components/notification.d.ts +13 -2
  265. package/dist/tui/components/notification.d.ts.map +1 -1
  266. package/dist/tui/components/notification.js +37 -2
  267. package/dist/tui/components/progress-bar.js +1 -1
  268. package/dist/tui/components/select-list.d.ts +1 -0
  269. package/dist/tui/components/select-list.d.ts.map +1 -1
  270. package/dist/tui/components/select-list.js +14 -11
  271. package/dist/tui/components/text.d.ts +16 -0
  272. package/dist/tui/components/text.d.ts.map +1 -1
  273. package/dist/tui/components/text.js +72 -57
  274. package/dist/tui/components/thinking-block.d.ts +9 -0
  275. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  276. package/dist/tui/components/thinking-block.js +43 -11
  277. package/dist/tui/components/tool-execution.d.ts +5 -1
  278. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  279. package/dist/tui/components/tool-execution.js +19 -10
  280. package/dist/tui/components/user-message.d.ts.map +1 -1
  281. package/dist/tui/components/user-message.js +0 -3
  282. package/dist/tui/components/welcome.js +2 -2
  283. package/dist/tui/editor-launcher.d.ts +13 -0
  284. package/dist/tui/editor-launcher.d.ts.map +1 -0
  285. package/dist/tui/editor-launcher.js +39 -0
  286. package/dist/tui/index.d.ts +3 -1
  287. package/dist/tui/index.d.ts.map +1 -1
  288. package/dist/tui/index.js +1 -0
  289. package/dist/tui/terminal.d.ts +27 -0
  290. package/dist/tui/terminal.d.ts.map +1 -1
  291. package/dist/tui/terminal.js +144 -15
  292. package/dist/tui/tui.d.ts +43 -0
  293. package/dist/tui/tui.d.ts.map +1 -1
  294. package/dist/tui/tui.js +172 -41
  295. package/dist/utils/bash/parse.d.ts +19 -0
  296. package/dist/utils/bash/parse.d.ts.map +1 -0
  297. package/dist/utils/bash/parse.js +223 -0
  298. package/dist/utils/bash/quote.d.ts +6 -0
  299. package/dist/utils/bash/quote.d.ts.map +1 -0
  300. package/dist/utils/bash/quote.js +23 -0
  301. package/dist/utils/bash.d.ts.map +1 -1
  302. package/dist/utils/bash.js +211 -126
  303. package/dist/utils/command-protection.d.ts +28 -0
  304. package/dist/utils/command-protection.d.ts.map +1 -0
  305. package/dist/utils/command-protection.js +324 -0
  306. package/dist/utils/dedent.d.ts.map +1 -0
  307. package/dist/utils/env-expand.d.ts +2 -0
  308. package/dist/utils/env-expand.d.ts.map +1 -0
  309. package/dist/utils/env-expand.js +8 -0
  310. package/dist/utils/filesystem/path-display.d.ts +11 -0
  311. package/dist/utils/filesystem/path-display.d.ts.map +1 -0
  312. package/dist/utils/filesystem/path-display.js +32 -0
  313. package/dist/utils/filesystem/security.d.ts +2 -2
  314. package/dist/utils/filesystem/security.d.ts.map +1 -1
  315. package/dist/utils/filesystem/security.js +32 -31
  316. package/dist/utils/formatting.d.ts.map +1 -0
  317. package/dist/{formatting.js → utils/formatting.js} +1 -1
  318. package/dist/utils/git.d.ts +4 -0
  319. package/dist/utils/git.d.ts.map +1 -1
  320. package/dist/utils/git.js +30 -0
  321. package/dist/utils/glob.d.ts +1 -1
  322. package/dist/utils/glob.d.ts.map +1 -1
  323. package/dist/utils/logger.d.ts.map +1 -0
  324. package/dist/{logger.js → utils/logger.js} +1 -1
  325. package/dist/utils/parsing.d.ts.map +1 -0
  326. package/dist/utils/process.d.ts.map +1 -1
  327. package/dist/utils/process.js +90 -37
  328. package/dist/utils/templates.d.ts +2 -0
  329. package/dist/utils/templates.d.ts.map +1 -0
  330. package/dist/utils/templates.js +24 -0
  331. package/dist/utils/version.d.ts.map +1 -0
  332. package/dist/{version.js → utils/version.js} +1 -1
  333. package/package.json +34 -25
  334. package/dist/cli.d.ts +0 -23
  335. package/dist/cli.d.ts.map +0 -1
  336. package/dist/commands/exit/index.d.ts +0 -10
  337. package/dist/commands/exit/index.d.ts.map +0 -1
  338. package/dist/commands/exit/index.js +0 -21
  339. package/dist/commands/exit/types.d.ts +0 -8
  340. package/dist/commands/exit/types.d.ts.map +0 -1
  341. package/dist/commands/exit/types.js +0 -1
  342. package/dist/commands/exit/utils.d.ts +0 -2
  343. package/dist/commands/exit/utils.d.ts.map +0 -1
  344. package/dist/commands/exit/utils.js +0 -13
  345. package/dist/commands/prompt/index.d.ts +0 -5
  346. package/dist/commands/prompt/index.d.ts.map +0 -1
  347. package/dist/commands/prompt/index.js +0 -126
  348. package/dist/commands/prompt/types.d.ts +0 -15
  349. package/dist/commands/prompt/types.d.ts.map +0 -1
  350. package/dist/commands/prompt/types.js +0 -1
  351. package/dist/commands/prompt/utils.d.ts +0 -12
  352. package/dist/commands/prompt/utils.d.ts.map +0 -1
  353. package/dist/commands/prompt/utils.js +0 -107
  354. package/dist/commands/reset/index.d.ts +0 -3
  355. package/dist/commands/reset/index.d.ts.map +0 -1
  356. package/dist/commands/reset/index.js +0 -25
  357. package/dist/commands/reset/types.d.ts +0 -1
  358. package/dist/commands/reset/types.d.ts.map +0 -1
  359. package/dist/commands/reset/types.js +0 -3
  360. package/dist/commands/save/index.d.ts +0 -3
  361. package/dist/commands/save/index.d.ts.map +0 -1
  362. package/dist/commands/save/index.js +0 -19
  363. package/dist/config.d.ts.map +0 -1
  364. package/dist/dedent.d.ts.map +0 -1
  365. package/dist/formatting.d.ts.map +0 -1
  366. package/dist/logger.d.ts.map +0 -1
  367. package/dist/mentions.d.ts +0 -14
  368. package/dist/mentions.d.ts.map +0 -1
  369. package/dist/parsing.d.ts.map +0 -1
  370. package/dist/prompts.d.ts +0 -10
  371. package/dist/prompts.d.ts.map +0 -1
  372. package/dist/repl-new.d.ts +0 -62
  373. package/dist/repl-new.d.ts.map +0 -1
  374. package/dist/skills.d.ts.map +0 -1
  375. package/dist/skills.js +0 -233
  376. package/dist/tui/autocomplete/path-provider.d.ts +0 -21
  377. package/dist/tui/autocomplete/path-provider.d.ts.map +0 -1
  378. package/dist/tui/autocomplete/path-provider.js +0 -164
  379. package/dist/version.d.ts.map +0 -1
  380. /package/dist/{dedent.d.ts → utils/dedent.d.ts} +0 -0
  381. /package/dist/{dedent.js → utils/dedent.js} +0 -0
  382. /package/dist/{formatting.d.ts → utils/formatting.d.ts} +0 -0
  383. /package/dist/{logger.d.ts → utils/logger.d.ts} +0 -0
  384. /package/dist/{parsing.d.ts → utils/parsing.d.ts} +0 -0
  385. /package/dist/{parsing.js → utils/parsing.js} +0 -0
  386. /package/dist/{version.d.ts → utils/version.d.ts} +0 -0
@@ -0,0 +1,384 @@
1
+ import { basename } from "node:path";
2
+ export function escapeHtml(text) {
3
+ return text
4
+ .replace(/&/g, "&")
5
+ .replace(/</g, "&lt;")
6
+ .replace(/>/g, "&gt;")
7
+ .replace(/"/g, "&quot;")
8
+ .replace(/'/g, "&#039;");
9
+ }
10
+ function formatDate(date) {
11
+ return date.toLocaleString("en-US", {
12
+ year: "numeric",
13
+ month: "short",
14
+ day: "numeric",
15
+ hour: "2-digit",
16
+ minute: "2-digit",
17
+ });
18
+ }
19
+ function renderToolCall(toolCall) {
20
+ const toolName = escapeHtml(toolCall.toolName);
21
+ const input = escapeHtml(JSON.stringify(toolCall.input, null, 2));
22
+ return `
23
+ <div class="tool-call">
24
+ <div class="tool-header">
25
+ <span class="tool-icon">→</span>
26
+ <span class="tool-name">${toolName}</span>
27
+ </div>
28
+ <div class="tool-body">
29
+ <pre class="tool-args">${input}</pre>
30
+ </div>
31
+ </div>`;
32
+ }
33
+ function renderToolResult(toolResult) {
34
+ const toolName = escapeHtml(toolResult.toolName);
35
+ let resultContent = "";
36
+ const output = toolResult.output;
37
+ if (output.type === "text") {
38
+ resultContent = escapeHtml(output.value);
39
+ }
40
+ else if (output.type === "json") {
41
+ resultContent = escapeHtml(JSON.stringify(output.value, null, 2));
42
+ }
43
+ else if (output.type === "execution-denied") {
44
+ resultContent = output.reason
45
+ ? `[Tool execution denied: ${escapeHtml(output.reason)}]`
46
+ : "[Tool execution denied]";
47
+ }
48
+ else if (output.type === "error-text") {
49
+ resultContent = `[Error: ${escapeHtml(output.value)}]`;
50
+ }
51
+ else if (output.type === "error-json") {
52
+ resultContent = `[Error: ${escapeHtml(JSON.stringify(output.value, null, 2))}]`;
53
+ }
54
+ else if (output.type === "content") {
55
+ const textParts = output.value.filter((part) => part.type === "text");
56
+ resultContent = textParts.map((part) => escapeHtml(part.text)).join("\n");
57
+ }
58
+ const truncated = resultContent.length > 5000
59
+ ? `${resultContent.slice(0, 5000)}...\n[truncated]`
60
+ : resultContent;
61
+ return `
62
+ <div class="tool-result">
63
+ <div class="tool-header">
64
+ <span class="tool-icon">←</span>
65
+ <span class="tool-name">${toolName}</span>
66
+ </div>
67
+ <div class="tool-body">
68
+ <pre class="tool-output">${truncated}</pre>
69
+ </div>
70
+ </div>`;
71
+ }
72
+ function renderMessage(message) {
73
+ const role = message.role;
74
+ if (role === "system") {
75
+ const content = Array.isArray(message.content)
76
+ ? message.content
77
+ .filter((p) => p.type === "text")
78
+ .map((p) => escapeHtml(p.text))
79
+ .join("\n")
80
+ : escapeHtml(String(message.content));
81
+ return `
82
+ <div class="message system">
83
+ <div class="role">system</div>
84
+ <div class="content">${content}</div>
85
+ </div>`;
86
+ }
87
+ if (role === "user") {
88
+ const content = message.content;
89
+ let textContent = "";
90
+ if (typeof content === "string") {
91
+ textContent = escapeHtml(content);
92
+ }
93
+ else if (Array.isArray(content)) {
94
+ textContent = content
95
+ .filter((p) => typeof p !== "string" && p.type === "text")
96
+ .map((p) => escapeHtml(p.text))
97
+ .join("\n");
98
+ }
99
+ return `
100
+ <div class="message user">
101
+ <div class="role">user</div>
102
+ <div class="content">${textContent}</div>
103
+ </div>`;
104
+ }
105
+ if (role === "assistant") {
106
+ const content = message.content;
107
+ let html = `<div class="message assistant"><div class="role">assistant</div>`;
108
+ if (typeof content === "string") {
109
+ html += `<div class="content">${escapeHtml(content)}</div>`;
110
+ }
111
+ else if (Array.isArray(content)) {
112
+ for (const part of content) {
113
+ if (part.type === "text" && part.text.trim()) {
114
+ html += `<div class="content">${escapeHtml(part.text)}</div>`;
115
+ }
116
+ else if (part.type === "tool-call") {
117
+ html += renderToolCall(part);
118
+ }
119
+ }
120
+ }
121
+ html += "</div>";
122
+ return html;
123
+ }
124
+ if (role === "tool") {
125
+ const parts = message.content;
126
+ let html = "";
127
+ for (const part of parts) {
128
+ if (part.type === "tool-result") {
129
+ html += renderToolResult(part);
130
+ }
131
+ }
132
+ return html;
133
+ }
134
+ return "";
135
+ }
136
+ export function renderSessionHtml(session) {
137
+ const title = escapeHtml(session.title || "Untitled Session");
138
+ const project = escapeHtml(session.project);
139
+ const modelId = escapeHtml(session.modelId);
140
+ const createdAt = formatDate(session.createdAt);
141
+ const updatedAt = formatDate(session.updatedAt);
142
+ const messagesHtml = session.messages.map(renderMessage).join("\n");
143
+ return `<!DOCTYPE html>
144
+ <html lang="en">
145
+ <head>
146
+ <meta charset="utf-8">
147
+ <meta name="viewport" content="width=device-width, initial-scale=1">
148
+ <title>Session: ${title}</title>
149
+ <style>
150
+ :root {
151
+ --bg: #0d1117;
152
+ --bg-secondary: #161b22;
153
+ --bg-tertiary: #21262d;
154
+ --text: #e6edf3;
155
+ --text-muted: #8b949e;
156
+ --border: #30363d;
157
+ --user-bg: #1f2937;
158
+ --user-accent: #58a6ff;
159
+ --assistant-bg: #161b22;
160
+ --assistant-accent: #e6edf3;
161
+ --system-bg: transparent;
162
+ --system-accent: #8b949e;
163
+ --tool-bg: #21262d;
164
+ --tool-accent: #8b949e;
165
+ }
166
+
167
+ * {
168
+ box-sizing: border-box;
169
+ margin: 0;
170
+ padding: 0;
171
+ }
172
+
173
+ body {
174
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
175
+ background: var(--bg);
176
+ color: var(--text);
177
+ line-height: 1.6;
178
+ font-size: 14px;
179
+ }
180
+
181
+ .container {
182
+ max-width: 800px;
183
+ margin: 0 auto;
184
+ padding: 24px;
185
+ }
186
+
187
+ header {
188
+ margin-bottom: 32px;
189
+ padding-bottom: 16px;
190
+ border-bottom: 1px solid var(--border);
191
+ }
192
+
193
+ h1 {
194
+ font-size: 20px;
195
+ font-weight: 600;
196
+ color: var(--text);
197
+ margin-bottom: 12px;
198
+ }
199
+
200
+ .metadata {
201
+ display: flex;
202
+ flex-wrap: wrap;
203
+ gap: 16px;
204
+ font-size: 12px;
205
+ color: var(--text-muted);
206
+ }
207
+
208
+ .metadata-item {
209
+ display: flex;
210
+ gap: 6px;
211
+ }
212
+
213
+ .metadata-label {
214
+ color: var(--text-muted);
215
+ }
216
+
217
+ .metadata-value {
218
+ color: var(--text);
219
+ }
220
+
221
+ .message {
222
+ margin: 16px 0;
223
+ padding: 16px;
224
+ border-radius: 8px;
225
+ border: 1px solid var(--border);
226
+ }
227
+
228
+ .role {
229
+ font-size: 11px;
230
+ font-weight: 600;
231
+ text-transform: uppercase;
232
+ letter-spacing: 0.5px;
233
+ margin-bottom: 8px;
234
+ }
235
+
236
+ .user {
237
+ background: var(--user-bg);
238
+ }
239
+
240
+ .user .role {
241
+ color: var(--user-accent);
242
+ }
243
+
244
+ .user .content {
245
+ color: var(--text);
246
+ }
247
+
248
+ .assistant {
249
+ background: var(--assistant-bg);
250
+ }
251
+
252
+ .assistant .role {
253
+ color: var(--text-muted);
254
+ }
255
+
256
+ .assistant .content {
257
+ color: var(--text);
258
+ }
259
+
260
+ .system {
261
+ background: var(--system-bg);
262
+ border-style: dashed;
263
+ }
264
+
265
+ .system .role {
266
+ color: var(--system-accent);
267
+ }
268
+
269
+ .system .content {
270
+ color: var(--text-muted);
271
+ font-size: 13px;
272
+ }
273
+
274
+ .content {
275
+ white-space: pre-wrap;
276
+ word-break: break-word;
277
+ }
278
+
279
+ .tool-call, .tool-result {
280
+ margin: 12px 0;
281
+ border-radius: 6px;
282
+ border: 1px solid var(--border);
283
+ overflow: hidden;
284
+ }
285
+
286
+ .tool-header {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 8px;
290
+ padding: 8px 12px;
291
+ background: var(--bg-tertiary);
292
+ font-size: 12px;
293
+ font-weight: 500;
294
+ color: var(--text-muted);
295
+ }
296
+
297
+ .tool-icon {
298
+ font-size: 14px;
299
+ }
300
+
301
+ .tool-name {
302
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
303
+ color: var(--text);
304
+ }
305
+
306
+ .tool-body {
307
+ padding: 12px;
308
+ background: var(--tool-bg);
309
+ }
310
+
311
+ .tool-args, .tool-output {
312
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
313
+ font-size: 12px;
314
+ color: var(--text-muted);
315
+ overflow-x: auto;
316
+ margin: 0;
317
+ white-space: pre-wrap;
318
+ word-break: break-word;
319
+ }
320
+
321
+ @media (max-width: 600px) {
322
+ .container {
323
+ padding: 16px;
324
+ }
325
+
326
+ h1 {
327
+ font-size: 18px;
328
+ }
329
+
330
+ .metadata {
331
+ flex-direction: column;
332
+ gap: 8px;
333
+ }
334
+ }
335
+ </style>
336
+ </head>
337
+ <body>
338
+ <div class="container">
339
+ <header>
340
+ <h1>${title}</h1>
341
+ <div class="metadata">
342
+ <div class="metadata-item">
343
+ <span class="metadata-label">Project:</span>
344
+ <span class="metadata-value">${project}</span>
345
+ </div>
346
+ <div class="metadata-item">
347
+ <span class="metadata-label">Model:</span>
348
+ <span class="metadata-value">${modelId}</span>
349
+ </div>
350
+ <div class="metadata-item">
351
+ <span class="metadata-label">Created:</span>
352
+ <span class="metadata-value">${createdAt}</span>
353
+ </div>
354
+ <div class="metadata-item">
355
+ <span class="metadata-label">Updated:</span>
356
+ <span class="metadata-value">${updatedAt}</span>
357
+ </div>
358
+ </div>
359
+ </header>
360
+ <main>
361
+ ${messagesHtml}
362
+ </main>
363
+ </div>
364
+ </body>
365
+ </html>`;
366
+ }
367
+ export function getSessionData(sessionManager, project) {
368
+ return {
369
+ sessionId: sessionManager.getSessionId(),
370
+ title: sessionManager.getTitle(),
371
+ modelId: sessionManager.getModelId(),
372
+ project: project ?? basename(process.cwd()),
373
+ createdAt: sessionManager.getCreatedAt(),
374
+ updatedAt: sessionManager.getUpdatedAt(),
375
+ messages: sessionManager.get(),
376
+ };
377
+ }
378
+ export function estimateSessionSize(session) {
379
+ const html = renderSessionHtml(session);
380
+ return {
381
+ messageCount: session.messages.length,
382
+ contentSizeBytes: Buffer.byteLength(html, "utf-8"),
383
+ };
384
+ }
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions, ReplCommand } from "../types.ts";
2
+ export declare const shareCommand: (options: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/share/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0D/D,eAAO,MAAM,YAAY,GAAI,SAAS,cAAc,KAAG,WA6JtD,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { spawn } from "node:child_process";
2
+ import { basename } from "node:path";
3
+ import style from "../../terminal/style.js";
4
+ import { Spacer, Text } from "../../tui/index.js";
5
+ import { estimateSessionSize, getSessionData, renderSessionHtml, } from "./html-renderer.js";
6
+ async function runCommand(cmd, args, stdin) {
7
+ return new Promise((resolve) => {
8
+ const proc = spawn(cmd, args, {
9
+ stdio: ["pipe", "pipe", "pipe"],
10
+ });
11
+ let stdout = "";
12
+ let stderr = "";
13
+ proc.stdout.on("data", (data) => {
14
+ stdout += data.toString();
15
+ });
16
+ proc.stderr.on("data", (data) => {
17
+ stderr += data.toString();
18
+ });
19
+ proc.on("close", (exitCode) => {
20
+ resolve({ stdout, stderr, exitCode: exitCode ?? 1 });
21
+ });
22
+ proc.on("error", (err) => {
23
+ resolve({ stdout: "", stderr: err.message, exitCode: 1 });
24
+ });
25
+ if (stdin) {
26
+ proc.stdin.write(stdin);
27
+ proc.stdin.end();
28
+ }
29
+ });
30
+ }
31
+ async function checkGhInstalled() {
32
+ const result = await runCommand("which", ["gh"]);
33
+ return result.exitCode === 0;
34
+ }
35
+ async function checkGhAuth() {
36
+ const result = await runCommand("gh", ["auth", "status"]);
37
+ return result.exitCode === 0;
38
+ }
39
+ function extractGistId(output) {
40
+ const match = output.match(/gist\.github\.com\/[\w-]+\/([a-f0-9]+)/i);
41
+ return match ? match[1] : null;
42
+ }
43
+ export const shareCommand = (options) => {
44
+ return {
45
+ command: "/share",
46
+ description: "Share the current session as a GitHub Gist for viewing in a web browser",
47
+ getSubCommands: () => Promise.resolve([]),
48
+ async handle(_args, { tui, container, editor, }) {
49
+ const { sessionManager } = options;
50
+ container.addChild(new Spacer(1));
51
+ if (sessionManager.isEmpty()) {
52
+ container.addChild(new Text(style.yellow("No messages in current session to share."), 1, 0));
53
+ tui.requestRender();
54
+ editor.setText("");
55
+ return "continue";
56
+ }
57
+ container.addChild(new Text(style.gray("Checking GitHub CLI availability..."), 1, 0));
58
+ tui.requestRender();
59
+ const ghInstalled = await checkGhInstalled();
60
+ if (!ghInstalled) {
61
+ container.addChild(new Text(style.red("GitHub CLI (gh) is not installed. Please install it from https://cli.github.com/"), 1, 0));
62
+ tui.requestRender();
63
+ editor.setText("");
64
+ return "continue";
65
+ }
66
+ const ghAuthed = await checkGhAuth();
67
+ if (!ghAuthed) {
68
+ container.addChild(new Text(style.red("Not authenticated with GitHub. Please run `gh auth login` first."), 1, 0));
69
+ tui.requestRender();
70
+ editor.setText("");
71
+ return "continue";
72
+ }
73
+ const project = basename(process.cwd());
74
+ const sessionData = getSessionData(sessionManager, project);
75
+ const { messageCount, contentSizeBytes } = estimateSessionSize(sessionData);
76
+ const isLargeSession = messageCount > 100 || contentSizeBytes > 100 * 1024;
77
+ if (isLargeSession) {
78
+ const sizeKb = Math.round(contentSizeBytes / 1024);
79
+ container.addChild(new Text(style.yellow(`Large session detected: ${messageCount} messages, ~${sizeKb}KB`), 1, 0));
80
+ container.addChild(new Text(style.gray("Proceeding with share... (this may take a moment)"), 1, 0));
81
+ tui.requestRender();
82
+ }
83
+ container.addChild(new Text(style.gray("Creating GitHub Gist..."), 1, 0));
84
+ tui.requestRender();
85
+ const html = renderSessionHtml(sessionData);
86
+ const title = sessionData.title || "Untitled Session";
87
+ const description = `Acai session: ${title}`;
88
+ const result = await runCommand("gh", [
89
+ "gist",
90
+ "create",
91
+ "--public",
92
+ "--desc",
93
+ description,
94
+ "--filename",
95
+ "index.html",
96
+ "-",
97
+ ], html);
98
+ if (result.exitCode !== 0) {
99
+ container.addChild(new Text(style.red(`Failed to create Gist: ${result.stderr.trim()}`), 1, 0));
100
+ tui.requestRender();
101
+ editor.setText("");
102
+ return "continue";
103
+ }
104
+ const gistId = extractGistId(result.stdout);
105
+ if (!gistId) {
106
+ container.addChild(new Text(style.red("Failed to extract Gist ID from response."), 1, 0));
107
+ tui.requestRender();
108
+ editor.setText("");
109
+ return "continue";
110
+ }
111
+ const gistUrl = `https://gist.github.com/${gistId}`;
112
+ const shareUrl = `https://gistpreview.github.io/?${gistId}`;
113
+ container.addChild(new Spacer(1));
114
+ container.addChild(new Text(style.green("Session shared successfully!"), 1, 0));
115
+ container.addChild(new Text(`View: ${style.blue(gistUrl)}`, 1, 0));
116
+ container.addChild(new Text(`Share: ${style.blue(shareUrl)}`, 1, 0));
117
+ tui.requestRender();
118
+ editor.setText("");
119
+ return "continue";
120
+ },
121
+ };
122
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/shell/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/D,eAAO,MAAM,YAAY,GAAI,SAAS,cAAc,KAAG,WAqHtD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/shell/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/D,eAAO,MAAM,YAAY,GAAI,SAAS,cAAc,KAAG,WAuItD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { initExecutionEnvironment } from "../../execution/index.js";
2
2
  import style from "../../terminal/style.js";
3
- import { SelectList, Text } from "../../tui/index.js";
3
+ import { Loader, SelectList, Spacer, Text } from "../../tui/index.js";
4
4
  // Command execution timeout in milliseconds
5
5
  const DEFAULT_TIMEOUT = 1.5 * 60 * 1000; // 1.5 minutes
6
6
  export const shellCommand = (options) => {
@@ -27,6 +27,13 @@ export const shellCommand = (options) => {
27
27
  ["COLORTERM"]: process.env["COLORTERM"] ?? "truecolor",
28
28
  ["npm_config_color"]: "true",
29
29
  };
30
+ // Show loader before execution
31
+ const truncatedCommand = commandStr.length > 50
32
+ ? `${commandStr.substring(0, 50)}...`
33
+ : commandStr;
34
+ const loader = new Loader(tui, `Running: ${truncatedCommand}`);
35
+ container.addChild(loader);
36
+ tui.requestRender();
30
37
  const { output, exitCode, duration } = await execEnv.executeCommand(commandStr, {
31
38
  cwd: process.cwd(),
32
39
  timeout: DEFAULT_TIMEOUT,
@@ -35,7 +42,13 @@ export const shellCommand = (options) => {
35
42
  throwOnError: false,
36
43
  env: colorEnv,
37
44
  });
45
+ // Cleanup loader
46
+ loader.stop();
47
+ container.removeChild(loader);
48
+ // Display results with spacing
49
+ container.addChild(new Spacer(1));
38
50
  container.addChild(new Text(style.gray(`Exit code: ${exitCode}, Duration: ${duration}ms`), 1, 0));
51
+ container.addChild(new Spacer(1));
39
52
  container.addChild(new Text(output, 2, 0));
40
53
  // Create context selection component
41
54
  const contextSelector = new SelectList([
@@ -61,6 +74,7 @@ export const shellCommand = (options) => {
61
74
  }
62
75
  // Remove the selector and show final result
63
76
  container.removeChild(contextSelector);
77
+ tui.setFocus(editor);
64
78
  tui.requestRender();
65
79
  editor.setText("");
66
80
  };
@@ -68,6 +82,7 @@ export const shellCommand = (options) => {
68
82
  // User cancelled - default to not adding to context
69
83
  container.addChild(new Text(style.gray("Output not added to context."), 3, 0));
70
84
  container.removeChild(contextSelector);
85
+ tui.setFocus(editor);
71
86
  tui.requestRender();
72
87
  editor.setText("");
73
88
  };
@@ -1,4 +1,4 @@
1
- import type { ConfigManager } from "../config.ts";
1
+ import type { ConfigManager } from "../config/index.ts";
2
2
  import type { WorkspaceContext } from "../index.ts";
3
3
  import type { ModelManager } from "../models/manager.ts";
4
4
  import type { PromptManagerApi } from "../prompts/manager.ts";
@@ -16,7 +16,7 @@ export interface ReplCommand {
16
16
  container: Container;
17
17
  inputContainer: Container;
18
18
  editor: Editor;
19
- }) => Promise<"break" | "continue" | "use">;
19
+ }) => Promise<"continue" | "use">;
20
20
  }
21
21
  export interface CommandOptions {
22
22
  promptManager: PromptManagerApi;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../source/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,CACN,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QACP,GAAG,EAAE,GAAG,CAAC;QACT,SAAS,EAAE,SAAS,CAAC;QACrB,cAAc,EAAE,SAAS,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;KAChB,KACE,OAAO,CAAC,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../source/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,CACN,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QACP,GAAG,EAAE,GAAG,CAAC;QACT,SAAS,EAAE,SAAS,CAAC;QACrB,cAAc,EAAE,SAAS,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;KAChB,KACE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;CAC7B"}
@@ -17,8 +17,13 @@ export declare const defaultConfig: {
17
17
  readonly skills: {
18
18
  readonly enabled: true;
19
19
  };
20
+ readonly devtools: {
21
+ readonly enabled: false;
22
+ };
23
+ readonly autoGenerateRules: false;
24
+ readonly env: Record<string, string>;
20
25
  };
21
- declare const ProjectConfigSchema: z.ZodObject<{
26
+ declare const ConfigSchema: z.ZodObject<{
22
27
  logs: z.ZodOptional<z.ZodObject<{
23
28
  path: z.ZodString;
24
29
  }, z.core.$strip>>;
@@ -39,8 +44,13 @@ declare const ProjectConfigSchema: z.ZodObject<{
39
44
  skills: z.ZodDefault<z.ZodOptional<z.ZodObject<{
40
45
  enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
41
46
  }, z.core.$strip>>>;
47
+ autoGenerateRules: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
48
+ devtools: z.ZodDefault<z.ZodOptional<z.ZodObject<{
49
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
50
+ }, z.core.$strip>>>;
51
+ env: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
42
52
  }, z.core.$strip>;
43
- export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
53
+ export type Config = z.infer<typeof ConfigSchema>;
44
54
  export declare class DirectoryProvider {
45
55
  private baseDir;
46
56
  constructor(baseDir: string);
@@ -53,9 +63,12 @@ export declare class DirectoryProvider {
53
63
  export declare class ConfigManager {
54
64
  readonly project: DirectoryProvider;
55
65
  readonly app: DirectoryProvider;
66
+ private cachedConfig;
67
+ private configCacheTime;
68
+ private configCacheTtl;
56
69
  constructor();
57
70
  private _readConfig;
58
- getConfig(): Promise<ProjectConfig>;
71
+ getConfig(): Promise<Config>;
59
72
  getSkillsEnabled(): Promise<boolean>;
60
73
  setSkillsEnabled(enabled: boolean): Promise<void>;
61
74
  readAgentsFiles(): Promise<{
@@ -63,14 +76,12 @@ export declare class ConfigManager {
63
76
  content: string;
64
77
  }[]>;
65
78
  writeAgentsFile(rules: string): Promise<void>;
66
- readProjectLearnedRulesFile(): Promise<string>;
67
- writeProjectLearnedRulesFile(rules: string): Promise<void>;
68
- readCachedLearnedRulesFile(): Promise<string>;
69
- writeCachedLearnedRulesFile(rules: string): Promise<void>;
79
+ readLearnedRulesFile(): Promise<string>;
80
+ writeLearnedRulesFile(rules: string): Promise<void>;
70
81
  private _readAppConfig;
71
- ensureDefaultConfig(configName: string): Promise<ProjectConfig>;
82
+ ensureDefaultConfig(configName: string): Promise<Config>;
72
83
  writeAppConfig(configName: string, data: Record<PropertyKey, unknown>): Promise<void>;
73
84
  }
74
85
  export declare const config: ConfigManager;
75
86
  export {};
76
- //# sourceMappingURL=config.d.ts.map
87
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,aAAa;;;;;8BAKI,MAAM,EAAE,GAAG,SAAS;;;;;;;;;4BAS3B,MAAM,EAAE;;;;;;;;kBAQlB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAGX,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqDhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAK1B,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlD,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAOjC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/C,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;CAIrC;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,cAAc,CAAS;;YAOjB,WAAW;IAanB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA8B5B,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjD,eAAe,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IA4B/D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAYvC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAc3C,cAAc;IActB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAexD,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAKjB;AAGD,eAAO,MAAM,MAAM,eAAsB,CAAC"}