atena-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +210 -0
  3. package/dist/agent.d.ts +44 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +731 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/agents.d.ts +33 -0
  8. package/dist/agents.d.ts.map +1 -0
  9. package/dist/agents.js +162 -0
  10. package/dist/agents.js.map +1 -0
  11. package/dist/autocomplete.d.ts +4 -0
  12. package/dist/autocomplete.d.ts.map +1 -0
  13. package/dist/autocomplete.js +96 -0
  14. package/dist/autocomplete.js.map +1 -0
  15. package/dist/cli/commands/connect.d.ts +3 -0
  16. package/dist/cli/commands/connect.d.ts.map +1 -0
  17. package/dist/cli/commands/connect.js +31 -0
  18. package/dist/cli/commands/connect.js.map +1 -0
  19. package/dist/cli/commands/deploy.d.ts +3 -0
  20. package/dist/cli/commands/deploy.d.ts.map +1 -0
  21. package/dist/cli/commands/deploy.js +26 -0
  22. package/dist/cli/commands/deploy.js.map +1 -0
  23. package/dist/cli/commands/login.d.ts +3 -0
  24. package/dist/cli/commands/login.d.ts.map +1 -0
  25. package/dist/cli/commands/login.js +46 -0
  26. package/dist/cli/commands/login.js.map +1 -0
  27. package/dist/cli/commands/vault.d.ts +3 -0
  28. package/dist/cli/commands/vault.d.ts.map +1 -0
  29. package/dist/cli/commands/vault.js +73 -0
  30. package/dist/cli/commands/vault.js.map +1 -0
  31. package/dist/cli/index.d.ts +3 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +309 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/cli/init/setup.d.ts +3 -0
  36. package/dist/cli/init/setup.d.ts.map +1 -0
  37. package/dist/cli/init/setup.js +74 -0
  38. package/dist/cli/init/setup.js.map +1 -0
  39. package/dist/cli/menus.d.ts +2 -0
  40. package/dist/cli/menus.d.ts.map +1 -0
  41. package/dist/cli/menus.js +111 -0
  42. package/dist/cli/menus.js.map +1 -0
  43. package/dist/cli/postinstall.d.ts +9 -0
  44. package/dist/cli/postinstall.d.ts.map +1 -0
  45. package/dist/cli/postinstall.js +81 -0
  46. package/dist/cli/postinstall.js.map +1 -0
  47. package/dist/cli/realtime-input.d.ts +4 -0
  48. package/dist/cli/realtime-input.d.ts.map +1 -0
  49. package/dist/cli/realtime-input.js +268 -0
  50. package/dist/cli/realtime-input.js.map +1 -0
  51. package/dist/cli/setup.d.ts +26 -0
  52. package/dist/cli/setup.d.ts.map +1 -0
  53. package/dist/cli/setup.js +202 -0
  54. package/dist/cli/setup.js.map +1 -0
  55. package/dist/cli/themes.d.ts +30 -0
  56. package/dist/cli/themes.d.ts.map +1 -0
  57. package/dist/cli/themes.js +225 -0
  58. package/dist/cli/themes.js.map +1 -0
  59. package/dist/cli/ui.d.ts +70 -0
  60. package/dist/cli/ui.d.ts.map +1 -0
  61. package/dist/cli/ui.js +455 -0
  62. package/dist/cli/ui.js.map +1 -0
  63. package/dist/commands.d.ts +16 -0
  64. package/dist/commands.d.ts.map +1 -0
  65. package/dist/commands.js +230 -0
  66. package/dist/commands.js.map +1 -0
  67. package/dist/config.d.ts +42 -0
  68. package/dist/config.d.ts.map +1 -0
  69. package/dist/config.js +140 -0
  70. package/dist/config.js.map +1 -0
  71. package/dist/context.d.ts +23 -0
  72. package/dist/context.d.ts.map +1 -0
  73. package/dist/context.js +80 -0
  74. package/dist/context.js.map +1 -0
  75. package/dist/core/agent.d.ts +94 -0
  76. package/dist/core/agent.d.ts.map +1 -0
  77. package/dist/core/agent.js +1280 -0
  78. package/dist/core/agent.js.map +1 -0
  79. package/dist/core/agents/enterprise/backend.d.ts +3 -0
  80. package/dist/core/agents/enterprise/backend.d.ts.map +1 -0
  81. package/dist/core/agents/enterprise/backend.js +35 -0
  82. package/dist/core/agents/enterprise/backend.js.map +1 -0
  83. package/dist/core/agents/enterprise/cloud.d.ts +3 -0
  84. package/dist/core/agents/enterprise/cloud.d.ts.map +1 -0
  85. package/dist/core/agents/enterprise/cloud.js +35 -0
  86. package/dist/core/agents/enterprise/cloud.js.map +1 -0
  87. package/dist/core/agents/enterprise/datascience.d.ts +3 -0
  88. package/dist/core/agents/enterprise/datascience.d.ts.map +1 -0
  89. package/dist/core/agents/enterprise/datascience.js +35 -0
  90. package/dist/core/agents/enterprise/datascience.js.map +1 -0
  91. package/dist/core/agents/enterprise/design.d.ts +3 -0
  92. package/dist/core/agents/enterprise/design.d.ts.map +1 -0
  93. package/dist/core/agents/enterprise/design.js +35 -0
  94. package/dist/core/agents/enterprise/design.js.map +1 -0
  95. package/dist/core/agents/enterprise/devops.d.ts +3 -0
  96. package/dist/core/agents/enterprise/devops.d.ts.map +1 -0
  97. package/dist/core/agents/enterprise/devops.js +35 -0
  98. package/dist/core/agents/enterprise/devops.js.map +1 -0
  99. package/dist/core/agents/enterprise/finance.d.ts +3 -0
  100. package/dist/core/agents/enterprise/finance.d.ts.map +1 -0
  101. package/dist/core/agents/enterprise/finance.js +35 -0
  102. package/dist/core/agents/enterprise/finance.js.map +1 -0
  103. package/dist/core/agents/enterprise/frontend.d.ts +3 -0
  104. package/dist/core/agents/enterprise/frontend.d.ts.map +1 -0
  105. package/dist/core/agents/enterprise/frontend.js +35 -0
  106. package/dist/core/agents/enterprise/frontend.js.map +1 -0
  107. package/dist/core/agents/enterprise/hr.d.ts +3 -0
  108. package/dist/core/agents/enterprise/hr.d.ts.map +1 -0
  109. package/dist/core/agents/enterprise/hr.js +35 -0
  110. package/dist/core/agents/enterprise/hr.js.map +1 -0
  111. package/dist/core/agents/enterprise/index.d.ts +4 -0
  112. package/dist/core/agents/enterprise/index.d.ts.map +1 -0
  113. package/dist/core/agents/enterprise/index.js +44 -0
  114. package/dist/core/agents/enterprise/index.js.map +1 -0
  115. package/dist/core/agents/enterprise/legal.d.ts +3 -0
  116. package/dist/core/agents/enterprise/legal.d.ts.map +1 -0
  117. package/dist/core/agents/enterprise/legal.js +35 -0
  118. package/dist/core/agents/enterprise/legal.js.map +1 -0
  119. package/dist/core/agents/enterprise/marketing.d.ts +3 -0
  120. package/dist/core/agents/enterprise/marketing.d.ts.map +1 -0
  121. package/dist/core/agents/enterprise/marketing.js +35 -0
  122. package/dist/core/agents/enterprise/marketing.js.map +1 -0
  123. package/dist/core/agents/enterprise/pm.d.ts +3 -0
  124. package/dist/core/agents/enterprise/pm.d.ts.map +1 -0
  125. package/dist/core/agents/enterprise/pm.js +35 -0
  126. package/dist/core/agents/enterprise/pm.js.map +1 -0
  127. package/dist/core/agents/enterprise/product.d.ts +3 -0
  128. package/dist/core/agents/enterprise/product.d.ts.map +1 -0
  129. package/dist/core/agents/enterprise/product.js +35 -0
  130. package/dist/core/agents/enterprise/product.js.map +1 -0
  131. package/dist/core/agents/enterprise/qa.d.ts +3 -0
  132. package/dist/core/agents/enterprise/qa.d.ts.map +1 -0
  133. package/dist/core/agents/enterprise/qa.js +35 -0
  134. package/dist/core/agents/enterprise/qa.js.map +1 -0
  135. package/dist/core/agents/enterprise/sales.d.ts +3 -0
  136. package/dist/core/agents/enterprise/sales.d.ts.map +1 -0
  137. package/dist/core/agents/enterprise/sales.js +35 -0
  138. package/dist/core/agents/enterprise/sales.js.map +1 -0
  139. package/dist/core/agents/enterprise/security.d.ts +3 -0
  140. package/dist/core/agents/enterprise/security.d.ts.map +1 -0
  141. package/dist/core/agents/enterprise/security.js +36 -0
  142. package/dist/core/agents/enterprise/security.js.map +1 -0
  143. package/dist/core/agents/enterprise/support.d.ts +3 -0
  144. package/dist/core/agents/enterprise/support.d.ts.map +1 -0
  145. package/dist/core/agents/enterprise/support.js +35 -0
  146. package/dist/core/agents/enterprise/support.js.map +1 -0
  147. package/dist/core/agents.d.ts +84 -0
  148. package/dist/core/agents.d.ts.map +1 -0
  149. package/dist/core/agents.js +266 -0
  150. package/dist/core/agents.js.map +1 -0
  151. package/dist/core/analytics.d.ts +21 -0
  152. package/dist/core/analytics.d.ts.map +1 -0
  153. package/dist/core/analytics.js +57 -0
  154. package/dist/core/analytics.js.map +1 -0
  155. package/dist/core/auth.d.ts +43 -0
  156. package/dist/core/auth.d.ts.map +1 -0
  157. package/dist/core/auth.js +110 -0
  158. package/dist/core/auth.js.map +1 -0
  159. package/dist/core/code_indexer.d.ts +14 -0
  160. package/dist/core/code_indexer.d.ts.map +1 -0
  161. package/dist/core/code_indexer.js +52 -0
  162. package/dist/core/code_indexer.js.map +1 -0
  163. package/dist/core/commands.d.ts +16 -0
  164. package/dist/core/commands.d.ts.map +1 -0
  165. package/dist/core/commands.js +285 -0
  166. package/dist/core/commands.js.map +1 -0
  167. package/dist/core/consensus.d.ts +25 -0
  168. package/dist/core/consensus.d.ts.map +1 -0
  169. package/dist/core/consensus.js +49 -0
  170. package/dist/core/consensus.js.map +1 -0
  171. package/dist/core/context.d.ts +23 -0
  172. package/dist/core/context.d.ts.map +1 -0
  173. package/dist/core/context.js +82 -0
  174. package/dist/core/context.js.map +1 -0
  175. package/dist/core/eden-ai-sdk.d.ts +11 -0
  176. package/dist/core/eden-ai-sdk.d.ts.map +1 -0
  177. package/dist/core/eden-ai-sdk.js +158 -0
  178. package/dist/core/eden-ai-sdk.js.map +1 -0
  179. package/dist/core/events.d.ts +64 -0
  180. package/dist/core/events.d.ts.map +1 -0
  181. package/dist/core/events.js +18 -0
  182. package/dist/core/events.js.map +1 -0
  183. package/dist/core/groq-client.d.ts +7 -0
  184. package/dist/core/groq-client.d.ts.map +1 -0
  185. package/dist/core/groq-client.js +112 -0
  186. package/dist/core/groq-client.js.map +1 -0
  187. package/dist/core/mcp.d.ts +51 -0
  188. package/dist/core/mcp.d.ts.map +1 -0
  189. package/dist/core/mcp.js +201 -0
  190. package/dist/core/mcp.js.map +1 -0
  191. package/dist/core/memory.d.ts +20 -0
  192. package/dist/core/memory.d.ts.map +1 -0
  193. package/dist/core/memory.js +61 -0
  194. package/dist/core/memory.js.map +1 -0
  195. package/dist/core/model-profiles.d.ts +62 -0
  196. package/dist/core/model-profiles.d.ts.map +1 -0
  197. package/dist/core/model-profiles.js +841 -0
  198. package/dist/core/model-profiles.js.map +1 -0
  199. package/dist/core/moonshot-client.d.ts +7 -0
  200. package/dist/core/moonshot-client.d.ts.map +1 -0
  201. package/dist/core/moonshot-client.js +102 -0
  202. package/dist/core/moonshot-client.js.map +1 -0
  203. package/dist/core/nexus.d.ts +16 -0
  204. package/dist/core/nexus.d.ts.map +1 -0
  205. package/dist/core/nexus.js +31 -0
  206. package/dist/core/nexus.js.map +1 -0
  207. package/dist/core/notifications.d.ts +16 -0
  208. package/dist/core/notifications.d.ts.map +1 -0
  209. package/dist/core/notifications.js +26 -0
  210. package/dist/core/notifications.js.map +1 -0
  211. package/dist/core/ollama-client.d.ts +16 -0
  212. package/dist/core/ollama-client.d.ts.map +1 -0
  213. package/dist/core/ollama-client.js +138 -0
  214. package/dist/core/ollama-client.js.map +1 -0
  215. package/dist/core/orchestrator.d.ts +96 -0
  216. package/dist/core/orchestrator.d.ts.map +1 -0
  217. package/dist/core/orchestrator.js +801 -0
  218. package/dist/core/orchestrator.js.map +1 -0
  219. package/dist/core/permissions.d.ts +34 -0
  220. package/dist/core/permissions.d.ts.map +1 -0
  221. package/dist/core/permissions.js +224 -0
  222. package/dist/core/permissions.js.map +1 -0
  223. package/dist/core/providers.d.ts +22 -0
  224. package/dist/core/providers.d.ts.map +1 -0
  225. package/dist/core/providers.js +81 -0
  226. package/dist/core/providers.js.map +1 -0
  227. package/dist/core/researcher.d.ts +24 -0
  228. package/dist/core/researcher.d.ts.map +1 -0
  229. package/dist/core/researcher.js +97 -0
  230. package/dist/core/researcher.js.map +1 -0
  231. package/dist/core/sandbox.d.ts +22 -0
  232. package/dist/core/sandbox.d.ts.map +1 -0
  233. package/dist/core/sandbox.js +79 -0
  234. package/dist/core/sandbox.js.map +1 -0
  235. package/dist/core/scavenger.d.ts +5 -0
  236. package/dist/core/scavenger.d.ts.map +1 -0
  237. package/dist/core/scavenger.js +51 -0
  238. package/dist/core/scavenger.js.map +1 -0
  239. package/dist/core/server.d.ts +21 -0
  240. package/dist/core/server.d.ts.map +1 -0
  241. package/dist/core/server.js +776 -0
  242. package/dist/core/server.js.map +1 -0
  243. package/dist/core/sessions.d.ts +54 -0
  244. package/dist/core/sessions.d.ts.map +1 -0
  245. package/dist/core/sessions.js +182 -0
  246. package/dist/core/sessions.js.map +1 -0
  247. package/dist/core/setup.d.ts +12 -0
  248. package/dist/core/setup.d.ts.map +1 -0
  249. package/dist/core/setup.js +70 -0
  250. package/dist/core/setup.js.map +1 -0
  251. package/dist/core/skills.d.ts +17 -0
  252. package/dist/core/skills.d.ts.map +1 -0
  253. package/dist/core/skills.js +123 -0
  254. package/dist/core/skills.js.map +1 -0
  255. package/dist/core/stats.d.ts +54 -0
  256. package/dist/core/stats.d.ts.map +1 -0
  257. package/dist/core/stats.js +221 -0
  258. package/dist/core/stats.js.map +1 -0
  259. package/dist/core/swarm_manager.d.ts +20 -0
  260. package/dist/core/swarm_manager.d.ts.map +1 -0
  261. package/dist/core/swarm_manager.js +48 -0
  262. package/dist/core/swarm_manager.js.map +1 -0
  263. package/dist/core/system.d.ts +39 -0
  264. package/dist/core/system.d.ts.map +1 -0
  265. package/dist/core/system.js +129 -0
  266. package/dist/core/system.js.map +1 -0
  267. package/dist/core/tasks.d.ts +24 -0
  268. package/dist/core/tasks.d.ts.map +1 -0
  269. package/dist/core/tasks.js +66 -0
  270. package/dist/core/tasks.js.map +1 -0
  271. package/dist/core/telegram.d.ts +9 -0
  272. package/dist/core/telegram.d.ts.map +1 -0
  273. package/dist/core/telegram.js +49 -0
  274. package/dist/core/telegram.js.map +1 -0
  275. package/dist/core/tools/acquire_skill.d.ts +3 -0
  276. package/dist/core/tools/acquire_skill.d.ts.map +1 -0
  277. package/dist/core/tools/acquire_skill.js +30 -0
  278. package/dist/core/tools/acquire_skill.js.map +1 -0
  279. package/dist/core/tools/agent_tools.d.ts +4 -0
  280. package/dist/core/tools/agent_tools.d.ts.map +1 -0
  281. package/dist/core/tools/agent_tools.js +117 -0
  282. package/dist/core/tools/agent_tools.js.map +1 -0
  283. package/dist/core/tools/code_search.d.ts +3 -0
  284. package/dist/core/tools/code_search.d.ts.map +1 -0
  285. package/dist/core/tools/code_search.js +43 -0
  286. package/dist/core/tools/code_search.js.map +1 -0
  287. package/dist/core/tools/craft_tool.d.ts +3 -0
  288. package/dist/core/tools/craft_tool.d.ts.map +1 -0
  289. package/dist/core/tools/craft_tool.js +32 -0
  290. package/dist/core/tools/craft_tool.js.map +1 -0
  291. package/dist/core/tools/discord.d.ts +3 -0
  292. package/dist/core/tools/discord.d.ts.map +1 -0
  293. package/dist/core/tools/discord.js +206 -0
  294. package/dist/core/tools/discord.js.map +1 -0
  295. package/dist/core/tools/dynamic/registry.d.ts +15 -0
  296. package/dist/core/tools/dynamic/registry.d.ts.map +1 -0
  297. package/dist/core/tools/dynamic/registry.js +59 -0
  298. package/dist/core/tools/dynamic/registry.js.map +1 -0
  299. package/dist/core/tools/github.d.ts +3 -0
  300. package/dist/core/tools/github.d.ts.map +1 -0
  301. package/dist/core/tools/github.js +357 -0
  302. package/dist/core/tools/github.js.map +1 -0
  303. package/dist/core/tools/google.d.ts +3 -0
  304. package/dist/core/tools/google.d.ts.map +1 -0
  305. package/dist/core/tools/google.js +409 -0
  306. package/dist/core/tools/google.js.map +1 -0
  307. package/dist/core/tools/index.d.ts +4 -0
  308. package/dist/core/tools/index.d.ts.map +1 -0
  309. package/dist/core/tools/index.js +2338 -0
  310. package/dist/core/tools/index.js.map +1 -0
  311. package/dist/core/tools/optimize_prompt.d.ts +3 -0
  312. package/dist/core/tools/optimize_prompt.d.ts.map +1 -0
  313. package/dist/core/tools/optimize_prompt.js +43 -0
  314. package/dist/core/tools/optimize_prompt.js.map +1 -0
  315. package/dist/core/tools/predict_healing.d.ts +3 -0
  316. package/dist/core/tools/predict_healing.d.ts.map +1 -0
  317. package/dist/core/tools/predict_healing.js +34 -0
  318. package/dist/core/tools/predict_healing.js.map +1 -0
  319. package/dist/core/tools/sage_memory.d.ts +3 -0
  320. package/dist/core/tools/sage_memory.d.ts.map +1 -0
  321. package/dist/core/tools/sage_memory.js +29 -0
  322. package/dist/core/tools/sage_memory.js.map +1 -0
  323. package/dist/core/tools/self_heal.d.ts +3 -0
  324. package/dist/core/tools/self_heal.d.ts.map +1 -0
  325. package/dist/core/tools/self_heal.js +46 -0
  326. package/dist/core/tools/self_heal.js.map +1 -0
  327. package/dist/core/tools/send_briefing.d.ts +3 -0
  328. package/dist/core/tools/send_briefing.d.ts.map +1 -0
  329. package/dist/core/tools/send_briefing.js +31 -0
  330. package/dist/core/tools/send_briefing.js.map +1 -0
  331. package/dist/core/tools/slack.d.ts +3 -0
  332. package/dist/core/tools/slack.d.ts.map +1 -0
  333. package/dist/core/tools/slack.js +256 -0
  334. package/dist/core/tools/slack.js.map +1 -0
  335. package/dist/core/tools/telegram.d.ts +3 -0
  336. package/dist/core/tools/telegram.d.ts.map +1 -0
  337. package/dist/core/tools/telegram.js +211 -0
  338. package/dist/core/tools/telegram.js.map +1 -0
  339. package/dist/core/tools/vox.d.ts +3 -0
  340. package/dist/core/tools/vox.d.ts.map +1 -0
  341. package/dist/core/tools/vox.js +29 -0
  342. package/dist/core/tools/vox.js.map +1 -0
  343. package/dist/core/types/index.d.ts +164 -0
  344. package/dist/core/types/index.d.ts.map +1 -0
  345. package/dist/core/types/index.js +3 -0
  346. package/dist/core/types/index.js.map +1 -0
  347. package/dist/core/vault.d.ts +20 -0
  348. package/dist/core/vault.d.ts.map +1 -0
  349. package/dist/core/vault.js +91 -0
  350. package/dist/core/vault.js.map +1 -0
  351. package/dist/core/verify_v3.d.ts +2 -0
  352. package/dist/core/verify_v3.d.ts.map +1 -0
  353. package/dist/core/verify_v3.js +38 -0
  354. package/dist/core/verify_v3.js.map +1 -0
  355. package/dist/core/verify_v3_5.d.ts +2 -0
  356. package/dist/core/verify_v3_5.d.ts.map +1 -0
  357. package/dist/core/verify_v3_5.js +56 -0
  358. package/dist/core/verify_v3_5.js.map +1 -0
  359. package/dist/core/verify_v4.d.ts +2 -0
  360. package/dist/core/verify_v4.d.ts.map +1 -0
  361. package/dist/core/verify_v4.js +42 -0
  362. package/dist/core/verify_v4.js.map +1 -0
  363. package/dist/core/verify_v5.d.ts +2 -0
  364. package/dist/core/verify_v5.d.ts.map +1 -0
  365. package/dist/core/verify_v5.js +53 -0
  366. package/dist/core/verify_v5.js.map +1 -0
  367. package/dist/core/verify_v6.d.ts +2 -0
  368. package/dist/core/verify_v6.d.ts.map +1 -0
  369. package/dist/core/verify_v6.js +42 -0
  370. package/dist/core/verify_v6.js.map +1 -0
  371. package/dist/core/verify_v7.d.ts +2 -0
  372. package/dist/core/verify_v7.d.ts.map +1 -0
  373. package/dist/core/verify_v7.js +29 -0
  374. package/dist/core/verify_v7.js.map +1 -0
  375. package/dist/core/verify_v8.d.ts +2 -0
  376. package/dist/core/verify_v8.d.ts.map +1 -0
  377. package/dist/core/verify_v8.js +32 -0
  378. package/dist/core/verify_v8.js.map +1 -0
  379. package/dist/core/workflows.d.ts +24 -0
  380. package/dist/core/workflows.d.ts.map +1 -0
  381. package/dist/core/workflows.js +47 -0
  382. package/dist/core/workflows.js.map +1 -0
  383. package/dist/core/workspaces.d.ts +13 -0
  384. package/dist/core/workspaces.d.ts.map +1 -0
  385. package/dist/core/workspaces.js +45 -0
  386. package/dist/core/workspaces.js.map +1 -0
  387. package/dist/enquirer-input.d.ts +3 -0
  388. package/dist/enquirer-input.d.ts.map +1 -0
  389. package/dist/enquirer-input.js +112 -0
  390. package/dist/enquirer-input.js.map +1 -0
  391. package/dist/index.d.ts +3 -0
  392. package/dist/index.d.ts.map +1 -0
  393. package/dist/index.js +241 -0
  394. package/dist/index.js.map +1 -0
  395. package/dist/mcp.d.ts +51 -0
  396. package/dist/mcp.d.ts.map +1 -0
  397. package/dist/mcp.js +201 -0
  398. package/dist/mcp.js.map +1 -0
  399. package/dist/ollama-client.d.ts +15 -0
  400. package/dist/ollama-client.d.ts.map +1 -0
  401. package/dist/ollama-client.js +95 -0
  402. package/dist/ollama-client.js.map +1 -0
  403. package/dist/permissions.d.ts +34 -0
  404. package/dist/permissions.d.ts.map +1 -0
  405. package/dist/permissions.js +224 -0
  406. package/dist/permissions.js.map +1 -0
  407. package/dist/realtime-input.d.ts +2 -0
  408. package/dist/realtime-input.d.ts.map +1 -0
  409. package/dist/realtime-input.js +308 -0
  410. package/dist/realtime-input.js.map +1 -0
  411. package/dist/server.d.ts +20 -0
  412. package/dist/server.d.ts.map +1 -0
  413. package/dist/server.js +203 -0
  414. package/dist/server.js.map +1 -0
  415. package/dist/sessions.d.ts +50 -0
  416. package/dist/sessions.d.ts.map +1 -0
  417. package/dist/sessions.js +181 -0
  418. package/dist/sessions.js.map +1 -0
  419. package/dist/simple-input.d.ts +2 -0
  420. package/dist/simple-input.d.ts.map +1 -0
  421. package/dist/simple-input.js +83 -0
  422. package/dist/simple-input.js.map +1 -0
  423. package/dist/skills.d.ts +17 -0
  424. package/dist/skills.d.ts.map +1 -0
  425. package/dist/skills.js +194 -0
  426. package/dist/skills.js.map +1 -0
  427. package/dist/stats.d.ts +54 -0
  428. package/dist/stats.d.ts.map +1 -0
  429. package/dist/stats.js +220 -0
  430. package/dist/stats.js.map +1 -0
  431. package/dist/tools/discord.d.ts +3 -0
  432. package/dist/tools/discord.d.ts.map +1 -0
  433. package/dist/tools/discord.js +206 -0
  434. package/dist/tools/discord.js.map +1 -0
  435. package/dist/tools/github.d.ts +3 -0
  436. package/dist/tools/github.d.ts.map +1 -0
  437. package/dist/tools/github.js +357 -0
  438. package/dist/tools/github.js.map +1 -0
  439. package/dist/tools/google.d.ts +3 -0
  440. package/dist/tools/google.d.ts.map +1 -0
  441. package/dist/tools/google.js +409 -0
  442. package/dist/tools/google.js.map +1 -0
  443. package/dist/tools/index.d.ts +4 -0
  444. package/dist/tools/index.d.ts.map +1 -0
  445. package/dist/tools/index.js +2139 -0
  446. package/dist/tools/index.js.map +1 -0
  447. package/dist/tools/slack.d.ts +3 -0
  448. package/dist/tools/slack.d.ts.map +1 -0
  449. package/dist/tools/slack.js +256 -0
  450. package/dist/tools/slack.js.map +1 -0
  451. package/dist/tools/telegram.d.ts +3 -0
  452. package/dist/tools/telegram.d.ts.map +1 -0
  453. package/dist/tools/telegram.js +211 -0
  454. package/dist/tools/telegram.js.map +1 -0
  455. package/dist/types/index.d.ts +152 -0
  456. package/dist/types/index.d.ts.map +1 -0
  457. package/dist/types/index.js +3 -0
  458. package/dist/types/index.js.map +1 -0
  459. package/dist/ui.d.ts +101 -0
  460. package/dist/ui.d.ts.map +1 -0
  461. package/dist/ui.js +317 -0
  462. package/dist/ui.js.map +1 -0
  463. package/dist/web/src/lib/utils.d.ts +3 -0
  464. package/dist/web/src/lib/utils.d.ts.map +1 -0
  465. package/dist/web/src/lib/utils.js +6 -0
  466. package/dist/web/src/lib/utils.js.map +1 -0
  467. package/dist/web/src/main.d.ts +2 -0
  468. package/dist/web/src/main.d.ts.map +1 -0
  469. package/dist/web/src/main.js +5 -0
  470. package/dist/web/src/main.js.map +1 -0
  471. package/dist/web/vite.config.d.ts +3 -0
  472. package/dist/web/vite.config.d.ts.map +1 -0
  473. package/dist/web/vite.config.js +12 -0
  474. package/dist/web/vite.config.js.map +1 -0
  475. package/package.json +83 -0
package/dist/agent.js ADDED
@@ -0,0 +1,731 @@
1
+ import { OllamaClient } from './ollama-client.js';
2
+ import { tools, toolMap } from './tools/index.js';
3
+ import { SpinnerManager, renderHeader, renderStatusBar, renderWelcome, renderUserMessage, renderAssistantMessage, renderToolCall, renderToolResult, renderSystemMessage, colors, icons, boxify, } from './ui.js';
4
+ import { ContextManager } from './context.js';
5
+ import { parseSlashCommand, parseMentions } from './commands.js';
6
+ import { realtimeInput } from './realtime-input.js';
7
+ import { detectSkills, getActiveSkillsInfo, buildEnhancedPrompt } from './skills.js';
8
+ import { AgentManager, formatAgentName } from './agents.js';
9
+ import { SessionManager } from './sessions.js';
10
+ import { PermissionManager, parsePermissionsFromEnv } from './permissions.js';
11
+ import { statsTracker } from './stats.js';
12
+ import { MCPManager } from './mcp.js';
13
+ export class AtenaAgent {
14
+ client;
15
+ options;
16
+ messages = [];
17
+ transcript = [];
18
+ ollamaTools;
19
+ spinner;
20
+ context;
21
+ agentManager;
22
+ sessionManager;
23
+ permissionManager;
24
+ statsTracker;
25
+ mcpManager;
26
+ constructor(options) {
27
+ this.options = options;
28
+ this.client = new OllamaClient(options.ollamaUrl);
29
+ this.ollamaTools = this.client.toOllamaTools(tools.map(t => t.definition));
30
+ this.spinner = new SpinnerManager();
31
+ this.context = new ContextManager();
32
+ this.agentManager = new AgentManager('build');
33
+ this.sessionManager = new SessionManager();
34
+ this.permissionManager = new PermissionManager(parsePermissionsFromEnv());
35
+ this.statsTracker = statsTracker;
36
+ this.statsTracker.startSession(`session_${Date.now()}`, options.model);
37
+ this.mcpManager = new MCPManager();
38
+ if (options.systemPrompt) {
39
+ const effectivePrompt = this.agentManager.getEffectiveSystemPrompt(options.systemPrompt);
40
+ this.messages.push({
41
+ role: 'system',
42
+ content: effectivePrompt,
43
+ });
44
+ }
45
+ }
46
+ renderAgentStatus() {
47
+ const agent = this.agentManager.getCurrentAgent();
48
+ console.log(colors.muted(` ${icons.agent} Agente: ${formatAgentName(agent)} | Tab para cambiar`));
49
+ }
50
+ switchAgent(agentId) {
51
+ const success = this.agentManager.switchAgent(agentId);
52
+ if (success) {
53
+ const agent = this.agentManager.getCurrentAgent();
54
+ console.log(colors.success(` ✓ Cambiado a agente: ${formatAgentName(agent)}`));
55
+ // Update system message with new agent prompt
56
+ if (this.messages.length > 0 && this.messages[0].role === 'system') {
57
+ const basePrompt = this.options.systemPrompt || '';
58
+ this.messages[0].content = this.agentManager.getEffectiveSystemPrompt(basePrompt);
59
+ }
60
+ }
61
+ return success;
62
+ }
63
+ listAgents() {
64
+ console.log(colors.primary('\n Agentes disponibles:'));
65
+ console.log(colors.muted(' ' + '─'.repeat(50)));
66
+ for (const agent of this.agentManager.listAgents()) {
67
+ const isCurrent = agent.id === this.agentManager.getCurrentAgent().id;
68
+ const marker = isCurrent ? colors.success('● ') : ' ';
69
+ console.log(`${marker}${formatAgentName(agent)} - ${colors.muted(agent.description)}`);
70
+ }
71
+ console.log(colors.muted(' ' + '─'.repeat(50)));
72
+ console.log(colors.muted(' Usa: /agent <nombre> para cambiar\n'));
73
+ }
74
+ // Session management methods
75
+ async listSessions() {
76
+ const sessions = await this.sessionManager.listSessions(10);
77
+ if (sessions.length === 0) {
78
+ console.log(colors.muted('\n No hay sesiones guardadas.\n'));
79
+ return;
80
+ }
81
+ console.log(colors.primary('\n Sesiones recientes:'));
82
+ console.log(colors.muted(' ' + '─'.repeat(60)));
83
+ for (let i = 0; i < sessions.length; i++) {
84
+ const session = sessions[i];
85
+ const date = new Date(session.updatedAt).toLocaleString('es-ES', {
86
+ day: '2-digit',
87
+ month: 'short',
88
+ hour: '2-digit',
89
+ minute: '2-digit',
90
+ });
91
+ console.log(` ${i + 1}. ${colors.cyan(session.title)}`);
92
+ console.log(` ${colors.muted(`Modelo: ${session.model} | Mensajes: ${session.messageCount} | ${date}`)}`);
93
+ if (session.preview) {
94
+ console.log(` ${colors.dim(session.preview)}`);
95
+ }
96
+ }
97
+ console.log(colors.muted(' ' + '─'.repeat(60)));
98
+ console.log(colors.muted(' Usa: /session load <número> para cargar\n'));
99
+ }
100
+ async saveSession(name) {
101
+ const currentId = this.sessionManager.getCurrentSessionId();
102
+ if (currentId) {
103
+ // Update existing session
104
+ await this.sessionManager.updateCurrentSession(this.messages);
105
+ console.log(colors.success(` ✓ Sesión actualizada: ${colors.cyan(currentId)}`));
106
+ }
107
+ else {
108
+ // Create new session
109
+ const session = await this.sessionManager.createSession(this.messages, this.options.model, this.agentManager.getCurrentAgent().id, process.cwd());
110
+ this.sessionManager.setCurrentSessionId(session.id);
111
+ console.log(colors.success(` ✓ Sesión guardada: ${colors.cyan(session.title)}`));
112
+ }
113
+ }
114
+ async loadSession(indexOrId) {
115
+ let session = null;
116
+ // Check if it's a number (index from list)
117
+ const index = parseInt(indexOrId, 10);
118
+ if (!isNaN(index) && index > 0) {
119
+ const sessions = await this.sessionManager.listSessions(10);
120
+ if (index <= sessions.length) {
121
+ session = await this.sessionManager.loadSession(sessions[index - 1].id);
122
+ }
123
+ }
124
+ else {
125
+ // Treat as ID
126
+ session = await this.sessionManager.loadSession(indexOrId);
127
+ }
128
+ if (!session) {
129
+ console.log(colors.error(` ✗ No se encontró la sesión: ${indexOrId}`));
130
+ return;
131
+ }
132
+ // Load session data
133
+ this.messages = session.messages;
134
+ this.options.model = session.model;
135
+ this.sessionManager.setCurrentSessionId(session.id);
136
+ // Switch to the agent used in the session
137
+ if (session.metadata.agent) {
138
+ this.agentManager.switchAgent(session.metadata.agent);
139
+ }
140
+ console.log(colors.success(` ✓ Sesión cargada: ${colors.cyan(session.title)}`));
141
+ console.log(colors.muted(` Modelo: ${session.model} | Mensajes: ${session.messages.length}`));
142
+ }
143
+ async exportSession(sessionId) {
144
+ const id = sessionId || this.sessionManager.getCurrentSessionId();
145
+ if (!id) {
146
+ console.log(colors.error(' ✗ No hay sesión activa para exportar'));
147
+ return;
148
+ }
149
+ const exportPath = await this.sessionManager.exportSession(id);
150
+ if (exportPath) {
151
+ console.log(colors.success(` ✓ Sesión exportada a: ${colors.cyan(exportPath)}`));
152
+ }
153
+ else {
154
+ console.log(colors.error(' ✗ Error al exportar sesión'));
155
+ }
156
+ }
157
+ async deleteSession(sessionId) {
158
+ const success = await this.sessionManager.deleteSession(sessionId);
159
+ if (success) {
160
+ console.log(colors.success(` ✓ Sesión eliminada: ${colors.cyan(sessionId)}`));
161
+ }
162
+ else {
163
+ console.log(colors.error(` ✗ No se pudo eliminar la sesión: ${sessionId}`));
164
+ }
165
+ }
166
+ // MCP management methods
167
+ async listMCPServers() {
168
+ const servers = this.mcpManager.listServers();
169
+ const connections = this.mcpManager.listConnections();
170
+ if (servers.length === 0) {
171
+ console.log(colors.muted('\n No hay servidores MCP configurados.\n'));
172
+ console.log(colors.muted(' Usa: /mcp add para agregar uno\n'));
173
+ return;
174
+ }
175
+ console.log(colors.primary('\n Servidores MCP:'));
176
+ console.log(colors.muted(' ' + '─'.repeat(60)));
177
+ for (const server of servers) {
178
+ const connection = connections.find(c => c.name === server.name);
179
+ const authStatus = this.mcpManager.getAuthStatus(server.name);
180
+ let statusIcon = '○';
181
+ let statusColor = colors.muted;
182
+ if (connection?.status === 'connected') {
183
+ statusIcon = '●';
184
+ statusColor = colors.success;
185
+ }
186
+ else if (connection?.status === 'error') {
187
+ statusIcon = '✗';
188
+ statusColor = colors.error;
189
+ }
190
+ console.log(` ${statusColor(statusIcon)} ${colors.cyan(server.name)} (${server.type})`);
191
+ console.log(` ${colors.muted(`Habilitado: ${server.enabled ? 'sí' : 'no'}`)}`);
192
+ if (authStatus.hasOAuth) {
193
+ console.log(` ${colors.muted(`Auth: ${authStatus.authenticated ? '✓' : '○'}`)}`);
194
+ }
195
+ if (connection?.tools.length) {
196
+ console.log(` ${colors.muted(`Tools: ${connection.tools.join(', ')}`)}`);
197
+ }
198
+ }
199
+ console.log(colors.muted(' ' + '─'.repeat(60)));
200
+ console.log(colors.muted(' Usa: /mcp auth <nombre> para autenticar\n'));
201
+ }
202
+ async addMCPServer() {
203
+ await this.mcpManager.setupWizard();
204
+ console.log(colors.success('\n ✓ Wizard de configuración MCP iniciado'));
205
+ console.log(colors.muted(' (Implementación completa requiere configuración manual)\n'));
206
+ }
207
+ async authenticateMCP(serverName) {
208
+ const success = await this.mcpManager.authenticate(serverName);
209
+ if (success) {
210
+ console.log(colors.success(` ✓ Autenticado con: ${colors.cyan(serverName)}`));
211
+ }
212
+ else {
213
+ console.log(colors.error(` ✗ No se pudo autenticar con: ${serverName}`));
214
+ }
215
+ }
216
+ async removeMCPServer(serverName) {
217
+ const success = await this.mcpManager.removeServer(serverName);
218
+ if (success) {
219
+ console.log(colors.success(` ✓ Servidor MCP eliminado: ${colors.cyan(serverName)}`));
220
+ }
221
+ else {
222
+ console.log(colors.error(` ✗ No se encontró el servidor: ${serverName}`));
223
+ }
224
+ }
225
+ // Permission management methods
226
+ async setPermission(type, level) {
227
+ const validLevels = ['ask', 'auto', 'deny'];
228
+ if (!validLevels.includes(level)) {
229
+ console.log(colors.error(` ✗ Nivel inválido. Use: ask, auto, deny`));
230
+ return;
231
+ }
232
+ this.permissionManager.setPermissions({ [type]: level });
233
+ console.log(colors.success(` ✓ Permiso ${type} configurado: ${level}`));
234
+ }
235
+ showPermissions() {
236
+ const perms = this.permissionManager.getPermissions();
237
+ console.log(colors.primary('\n Permisos actuales:'));
238
+ console.log(colors.muted(' ' + '─'.repeat(40)));
239
+ console.log(` fileWrite: ${perms.fileWrite}`);
240
+ console.log(` fileDelete: ${perms.fileDelete}`);
241
+ console.log(` bash: ${perms.bash}`);
242
+ console.log(` network: ${perms.network}`);
243
+ console.log(colors.muted(' ' + '─'.repeat(40)));
244
+ console.log(colors.muted(' Usa: /permission <tipo> <nivel>\n'));
245
+ }
246
+ async showStats() {
247
+ const stats = await this.statsTracker.getStats(7);
248
+ console.log(colors.primary('\n 📊 Estadísticas de uso (últimos 7 días):'));
249
+ console.log(colors.muted(' ' + '─'.repeat(50)));
250
+ console.log(` Sesiones: ${colors.cyan(stats.totalSessions.toString())}`);
251
+ console.log(` Tokens totales: ${colors.cyan(this.statsTracker.formatTokens(stats.totalTokens))}`);
252
+ console.log(` Costo estimado: ${colors.cyan(this.statsTracker.formatCurrency(stats.totalCost))}`);
253
+ if (Object.keys(stats.modelBreakdown).length > 0) {
254
+ console.log(colors.muted(' ' + '─'.repeat(50)));
255
+ console.log(colors.primary(' Por modelo:'));
256
+ for (const [model, data] of Object.entries(stats.modelBreakdown)) {
257
+ console.log(` ${colors.cyan(model)}: ${this.statsTracker.formatTokens(data.tokens)} tokens, ${this.statsTracker.formatCurrency(data.cost)}`);
258
+ }
259
+ }
260
+ if (Object.keys(stats.toolBreakdown).length > 0) {
261
+ console.log(colors.muted(' ' + '─'.repeat(50)));
262
+ console.log(colors.primary(' Tools más usados:'));
263
+ const sortedTools = Object.entries(stats.toolBreakdown).sort((a, b) => b[1] - a[1]).slice(0, 5);
264
+ for (const [tool, count] of sortedTools) {
265
+ console.log(` ${colors.cyan(tool)}: ${count} usos`);
266
+ }
267
+ }
268
+ // Current session stats
269
+ const currentStats = this.statsTracker.getCurrentSessionStats();
270
+ if (currentStats) {
271
+ console.log(colors.muted(' ' + '─'.repeat(50)));
272
+ console.log(colors.primary(' Sesión actual:'));
273
+ console.log(` Tokens: ${this.statsTracker.formatTokens(currentStats.tokenUsage.totalTokens)}`);
274
+ console.log(` Costo: ${this.statsTracker.formatCurrency(currentStats.tokenUsage.cost)}`);
275
+ console.log(` Mensajes: ${currentStats.messages}`);
276
+ }
277
+ console.log(colors.muted(' ' + '─'.repeat(50)));
278
+ console.log();
279
+ }
280
+ showStatus() {
281
+ const agent = this.agentManager.getCurrentAgent();
282
+ const perms = this.permissionManager.getPermissions();
283
+ const currentStats = this.statsTracker.getCurrentSessionStats();
284
+ const fileCount = this.context.getAttachmentCount();
285
+ console.log(colors.primary('\n ⚡ Estado actual de Atena CLI'));
286
+ console.log(colors.muted(' ' + '─'.repeat(50)));
287
+ console.log(` Modelo: ${colors.cyan(this.options.model)}`);
288
+ console.log(` Agente: ${formatAgentName(agent)}`);
289
+ console.log(` CWD: ${colors.muted(this.options.cwd)}`);
290
+ console.log(` Archivos: ${fileCount > 0 ? colors.cyan(String(fileCount)) : colors.muted('0')}`);
291
+ if (currentStats) {
292
+ console.log(` Mensajes: ${colors.cyan(String(currentStats.messages))}`);
293
+ console.log(` Tokens: ${colors.cyan(this.statsTracker.formatTokens(currentStats.tokenUsage.totalTokens))}`);
294
+ }
295
+ console.log(colors.muted(' ' + '─'.repeat(50)));
296
+ console.log(` Permisos: write=${perms.fileWrite} | delete=${perms.fileDelete} | bash=${perms.bash} | net=${perms.network}`);
297
+ console.log(colors.muted(' ' + '─'.repeat(50)));
298
+ console.log();
299
+ }
300
+ log(entry) {
301
+ this.transcript.push(entry);
302
+ this.renderEntry(entry);
303
+ }
304
+ renderEntry(entry) {
305
+ switch (entry.kind) {
306
+ case 'assistant':
307
+ this.spinner.stop();
308
+ renderAssistantMessage(entry.text);
309
+ break;
310
+ case 'thinking':
311
+ this.spinner.update(entry.text);
312
+ break;
313
+ case 'user':
314
+ renderUserMessage(entry.text);
315
+ break;
316
+ case 'tool_call':
317
+ this.spinner.stop();
318
+ renderToolCall(entry.name, (entry.input || {}));
319
+ break;
320
+ case 'tool_result':
321
+ this.spinner.stop();
322
+ renderToolResult({
323
+ status: entry.isError ? 'error' : 'success',
324
+ output: entry.content,
325
+ error: entry.isError ? entry.content : undefined
326
+ });
327
+ break;
328
+ case 'system':
329
+ renderSystemMessage(entry.text);
330
+ break;
331
+ case 'stderr':
332
+ console.log(colors.error(`${icons.error} ${entry.text}`));
333
+ break;
334
+ case 'stdout':
335
+ if (this.options.debug) {
336
+ console.log(colors.muted(`${entry.text}`));
337
+ }
338
+ break;
339
+ }
340
+ }
341
+ async executeTool(call) {
342
+ const toolName = call.function.name;
343
+ const toolArgs = call.function.arguments;
344
+ const tool = toolMap.get(toolName);
345
+ if (!tool) {
346
+ return {
347
+ status: 'error',
348
+ error: `Unknown tool: ${toolName}`,
349
+ };
350
+ }
351
+ // Check permissions for sensitive operations
352
+ let permissionType = null;
353
+ let permissionDesc = '';
354
+ let permissionDetails = '';
355
+ switch (toolName) {
356
+ case 'write_file':
357
+ permissionType = 'fileWrite';
358
+ permissionDesc = 'Escribir archivo';
359
+ permissionDetails = toolArgs.file_path;
360
+ break;
361
+ case 'edit_file':
362
+ permissionType = 'fileWrite';
363
+ permissionDesc = 'Editar archivo';
364
+ permissionDetails = toolArgs.file_path;
365
+ break;
366
+ case 'run_command':
367
+ permissionType = 'bash';
368
+ permissionDesc = 'Ejecutar comando shell';
369
+ permissionDetails = toolArgs.command;
370
+ break;
371
+ case 'view_url':
372
+ case 'web_search':
373
+ case 'browser':
374
+ permissionType = 'network';
375
+ permissionDesc = `Tool: ${toolName}`;
376
+ break;
377
+ }
378
+ if (permissionType) {
379
+ const allowed = await this.permissionManager.checkPermission({
380
+ type: permissionType,
381
+ tool: toolName,
382
+ description: permissionDesc,
383
+ details: permissionDetails,
384
+ });
385
+ if (!allowed) {
386
+ return {
387
+ status: 'error',
388
+ error: `Permiso denegado: ${permissionDesc}`,
389
+ };
390
+ }
391
+ }
392
+ try {
393
+ // Record tool usage for stats
394
+ this.statsTracker.recordToolUsage(toolName);
395
+ return await Promise.resolve(tool.handler(toolArgs));
396
+ }
397
+ catch (err) {
398
+ return {
399
+ status: 'error',
400
+ error: err instanceof Error ? err.message : String(err),
401
+ };
402
+ }
403
+ }
404
+ renderContextStatus() {
405
+ if (this.context.hasAttachments()) {
406
+ const files = this.context.getAttachedFiles();
407
+ const fileList = files.map(f => colors.yellow(`@${f.path.split('/').pop()}`)).join(' ');
408
+ console.log(colors.muted(` ${icons.file} Contexto: ${fileList} (${this.context.getTotalSize() / 1024}KB)`));
409
+ }
410
+ }
411
+ renderActiveSkills(prompt) {
412
+ const { names, count } = getActiveSkillsInfo(prompt);
413
+ if (count > 0) {
414
+ const skillsList = names.map(n => colors.primary(n)).join(', ');
415
+ console.log(colors.muted(` ${icons.sparkle} Skills activas: ${skillsList}`));
416
+ }
417
+ }
418
+ async processInput(userInput) {
419
+ // Check for slash commands
420
+ const slashCmd = parseSlashCommand(userInput);
421
+ if (slashCmd && slashCmd.command) {
422
+ const result = await slashCmd.command.execute(slashCmd.args, this.context);
423
+ // Handle special commands
424
+ if (result === 'CLEAR_SCREEN') {
425
+ console.clear();
426
+ renderHeader();
427
+ renderStatusBar(this.options.model, tools.length);
428
+ return null;
429
+ }
430
+ if (result.startsWith('CHANGE_MODEL:')) {
431
+ const newModel = result.split(':')[1];
432
+ this.options.model = newModel;
433
+ console.log(colors.success(`${icons.success} Modelo cambiado a: ${newModel}`));
434
+ renderStatusBar(this.options.model, tools.length);
435
+ return null;
436
+ }
437
+ if (result === 'AGENT_LIST') {
438
+ this.listAgents();
439
+ return null;
440
+ }
441
+ if (result.startsWith('CHANGE_AGENT:')) {
442
+ const agentId = result.split(':')[1];
443
+ this.switchAgent(agentId);
444
+ return null;
445
+ }
446
+ // Session commands
447
+ if (result === 'SESSION_LIST') {
448
+ await this.listSessions();
449
+ return null;
450
+ }
451
+ if (result === 'SESSION_SAVE') {
452
+ await this.saveSession();
453
+ return null;
454
+ }
455
+ if (result.startsWith('SESSION_LOAD:')) {
456
+ const sessionId = result.split(':')[1];
457
+ await this.loadSession(sessionId);
458
+ return null;
459
+ }
460
+ if (result.startsWith('SESSION_EXPORT:')) {
461
+ const sessionId = result.split(':')[1];
462
+ await this.exportSession(sessionId || undefined);
463
+ return null;
464
+ }
465
+ if (result.startsWith('SESSION_DELETE:')) {
466
+ const sessionId = result.split(':')[1];
467
+ await this.deleteSession(sessionId);
468
+ return null;
469
+ }
470
+ // Permission commands
471
+ if (result === 'PERMISSION_SHOW') {
472
+ this.showPermissions();
473
+ return null;
474
+ }
475
+ if (result.startsWith('PERMISSION_SET:')) {
476
+ const parts = result.split(':');
477
+ const type = parts[1];
478
+ const level = parts[2];
479
+ await this.setPermission(type, level);
480
+ return null;
481
+ }
482
+ if (result === 'STATS_SHOW') {
483
+ await this.showStats();
484
+ return null;
485
+ }
486
+ if (result === 'STATUS_SHOW') {
487
+ this.showStatus();
488
+ return null;
489
+ }
490
+ // MCP commands
491
+ if (result === 'MCP_LIST') {
492
+ await this.listMCPServers();
493
+ return null;
494
+ }
495
+ if (result === 'MCP_ADD') {
496
+ await this.addMCPServer();
497
+ return null;
498
+ }
499
+ if (result.startsWith('MCP_AUTH:')) {
500
+ const serverName = result.split(':')[1];
501
+ await this.authenticateMCP(serverName);
502
+ return null;
503
+ }
504
+ if (result.startsWith('MCP_REMOVE:')) {
505
+ const serverName = result.split(':')[1];
506
+ await this.removeMCPServer(serverName);
507
+ return null;
508
+ }
509
+ // Workflow commands
510
+ if (result === 'WORKFLOW_LIST') {
511
+ const path = await import('node:path');
512
+ const fs = await import('node:fs/promises');
513
+ const wfDir = path.join(this.options.cwd, '.atena', 'workflows');
514
+ try {
515
+ const files = await fs.readdir(wfDir);
516
+ const mds = files.filter(f => f.endsWith('.md') || f.endsWith('.yaml'));
517
+ console.log(colors.primary('\n Flujos de trabajo disponibles en .atena/workflows/:'));
518
+ if (mds.length === 0)
519
+ console.log(colors.muted(' No hay flujos. Crea archivos .md en este directorio.'));
520
+ for (const f of mds) {
521
+ console.log(` • ${f.replace(/\.(md|yaml)$/, '')}`);
522
+ }
523
+ }
524
+ catch {
525
+ console.log(colors.muted('\n No hay flujos. Crea la carpeta .atena/workflows/ y añade archivos .md'));
526
+ }
527
+ return null;
528
+ }
529
+ if (result.startsWith('WORKFLOW_RUN:')) {
530
+ const flowName = result.split(':')[1];
531
+ await this.runWorkflow(flowName);
532
+ return null;
533
+ }
534
+ // Display command result
535
+ console.log(boxify(result, { style: 'round', color: colors.info, title: ' Comando ' }));
536
+ return null;
537
+ }
538
+ // Parse @ mentions
539
+ const { cleanedInput, mentions } = parseMentions(userInput);
540
+ // Attach mentioned files
541
+ if (mentions.length > 0) {
542
+ for (const mention of mentions) {
543
+ const result = await this.context.attachFile(mention);
544
+ if (result.success) {
545
+ console.log(colors.success(` ${icons.success} ${result.message}`));
546
+ }
547
+ else {
548
+ console.log(colors.error(` ${icons.error} ${result.message}`));
549
+ }
550
+ }
551
+ }
552
+ // Build final prompt with context
553
+ let finalPrompt = cleanedInput;
554
+ if (this.context.hasAttachments()) {
555
+ finalPrompt += this.context.getContextString();
556
+ }
557
+ return finalPrompt || null;
558
+ }
559
+ async runWorkflow(name) {
560
+ const path = await import('node:path');
561
+ const fs = await import('node:fs/promises');
562
+ const wfPath = path.join(this.options.cwd, '.atena', 'workflows', `${name}.md`);
563
+ let content;
564
+ try {
565
+ content = await fs.readFile(wfPath, 'utf8');
566
+ }
567
+ catch {
568
+ console.log(colors.error(` ✗ No se encontró el flujo: ${name}.md (en .atena/workflows/)`));
569
+ return;
570
+ }
571
+ const lines = content.split('\n')
572
+ .map(l => l.trim())
573
+ .filter(l => l && !l.startsWith('#') && !l.startsWith('//'));
574
+ console.log(colors.success(`\n 🚀 Iniciando flujo: ${name} (${lines.length} pasos)`));
575
+ for (let i = 0; i < lines.length; i++) {
576
+ const step = lines[i];
577
+ console.log(colors.system(`\n 🔄 [Paso ${i + 1}/${lines.length}] Iniciando...`));
578
+ // Re-trigger the input directly
579
+ await this.runSingleTurn(step);
580
+ }
581
+ console.log(colors.success(`\n ✨ Flujo completado exitosamente: ${name}\n`));
582
+ }
583
+ async runSingleTurn(userInput) {
584
+ const finalPrompt = await this.processInput(userInput);
585
+ if (!finalPrompt)
586
+ return;
587
+ // Display current agent and active skills
588
+ this.renderAgentStatus();
589
+ this.renderActiveSkills(userInput);
590
+ const now = new Date().toISOString();
591
+ this.log({
592
+ kind: 'user',
593
+ ts: now,
594
+ text: userInput,
595
+ });
596
+ // Build messages array with skill-enhanced system prompt if needed
597
+ const detectedSkills = detectSkills(userInput);
598
+ let messagesToSend = this.messages;
599
+ if (detectedSkills.length > 0 && this.options.systemPrompt) {
600
+ // Create enhanced system prompt with skills
601
+ const enhancedPrompt = buildEnhancedPrompt(this.options.systemPrompt, userInput);
602
+ messagesToSend = [
603
+ { role: 'system', content: enhancedPrompt },
604
+ ...this.messages.slice(1) // Keep rest of conversation
605
+ ];
606
+ }
607
+ this.messages.push({
608
+ role: 'user',
609
+ content: finalPrompt,
610
+ });
611
+ messagesToSend.push({
612
+ role: 'user',
613
+ content: finalPrompt,
614
+ });
615
+ let assistantContent = '';
616
+ const toolCalls = [];
617
+ try {
618
+ if (this.options.debug) {
619
+ console.log(colors.muted('Calling Ollama API...'));
620
+ }
621
+ this.spinner.start('Pensando...');
622
+ const stream = this.client.chatStream({
623
+ model: this.options.model,
624
+ messages: messagesToSend,
625
+ tools: this.ollamaTools,
626
+ stream: true,
627
+ });
628
+ for await (const chunk of stream) {
629
+ if (chunk.message?.content) {
630
+ assistantContent += chunk.message.content;
631
+ if (!this.options.interactive) {
632
+ process.stdout.write(chunk.message.content);
633
+ }
634
+ }
635
+ if (chunk.message?.tool_calls) {
636
+ for (const call of chunk.message.tool_calls) {
637
+ toolCalls.push(call);
638
+ }
639
+ }
640
+ }
641
+ if (!this.options.interactive) {
642
+ process.stdout.write('\n');
643
+ }
644
+ this.spinner.stop();
645
+ if (assistantContent.trim()) {
646
+ this.log({
647
+ kind: 'assistant',
648
+ ts: new Date().toISOString(),
649
+ text: assistantContent,
650
+ });
651
+ // Estimate and record token usage
652
+ // Rough estimate: ~4 chars per token for input, ~4 for output
653
+ const inputTokens = Math.ceil(finalPrompt.length / 4);
654
+ const outputTokens = Math.ceil(assistantContent.length / 4);
655
+ this.statsTracker.recordMessage(inputTokens, outputTokens, this.options.model);
656
+ }
657
+ if (toolCalls.length > 0) {
658
+ for (const call of toolCalls) {
659
+ const toolCallId = `call_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
660
+ this.log({
661
+ kind: 'tool_call',
662
+ ts: new Date().toISOString(),
663
+ name: call.function.name,
664
+ input: call.function.arguments,
665
+ toolUseId: toolCallId,
666
+ });
667
+ this.spinner.start(`Ejecutando ${call.function.name}...`);
668
+ const result = await this.executeTool(call);
669
+ this.spinner.stop();
670
+ this.log({
671
+ kind: 'tool_result',
672
+ ts: new Date().toISOString(),
673
+ toolUseId: toolCallId,
674
+ toolName: call.function.name,
675
+ content: result.output || result.error || '',
676
+ isError: result.status === 'error',
677
+ });
678
+ this.messages.push({
679
+ role: 'assistant',
680
+ content: '',
681
+ tool_calls: [call],
682
+ });
683
+ this.messages.push({
684
+ role: 'tool',
685
+ content: result.output || result.error || '',
686
+ });
687
+ }
688
+ await this.runSingleTurn('');
689
+ }
690
+ else {
691
+ this.messages.push({
692
+ role: 'assistant',
693
+ content: assistantContent,
694
+ });
695
+ }
696
+ }
697
+ catch (err) {
698
+ this.spinner.stop();
699
+ this.log({
700
+ kind: 'system',
701
+ ts: new Date().toISOString(),
702
+ text: `Error: ${err instanceof Error ? err.message : String(err)}`,
703
+ });
704
+ }
705
+ }
706
+ async runInteractive() {
707
+ // Render modern header
708
+ renderHeader();
709
+ renderWelcome(this.options.model, tools.length);
710
+ renderStatusBar(this.options.model, tools.length);
711
+ while (true) {
712
+ const input = await realtimeInput(colors.user(`${icons.user} Tú: `));
713
+ if (input.toLowerCase() === 'exit' || input.toLowerCase() === 'quit') {
714
+ console.log();
715
+ console.log(boxify(`${colors.success('¡Gracias por usar Atena!')} ${icons.sparkle}\n\n` +
716
+ `${colors.muted('Sesión guardada. Puedes retomarla más tarde.')}`, { style: 'round', color: colors.success }));
717
+ console.log();
718
+ break;
719
+ }
720
+ if (input.trim()) {
721
+ await this.runSingleTurn(input);
722
+ this.renderContextStatus();
723
+ renderStatusBar(this.options.model, tools.length);
724
+ }
725
+ }
726
+ }
727
+ getTranscript() {
728
+ return [...this.transcript];
729
+ }
730
+ }
731
+ //# sourceMappingURL=agent.js.map