@jungjaehoon/mama-os 0.1.1

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 (356) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +643 -0
  3. package/dist/agent/agent-loop.d.ts +98 -0
  4. package/dist/agent/agent-loop.d.ts.map +1 -0
  5. package/dist/agent/agent-loop.js +417 -0
  6. package/dist/agent/agent-loop.js.map +1 -0
  7. package/dist/agent/auto-recall.d.ts +48 -0
  8. package/dist/agent/auto-recall.d.ts.map +1 -0
  9. package/dist/agent/auto-recall.js +178 -0
  10. package/dist/agent/auto-recall.js.map +1 -0
  11. package/dist/agent/claude-cli-wrapper.d.ts +130 -0
  12. package/dist/agent/claude-cli-wrapper.d.ts.map +1 -0
  13. package/dist/agent/claude-cli-wrapper.js +227 -0
  14. package/dist/agent/claude-cli-wrapper.js.map +1 -0
  15. package/dist/agent/claude-client.d.ts +50 -0
  16. package/dist/agent/claude-client.d.ts.map +1 -0
  17. package/dist/agent/claude-client.js +214 -0
  18. package/dist/agent/claude-client.js.map +1 -0
  19. package/dist/agent/gateway-tool-executor.d.ts +75 -0
  20. package/dist/agent/gateway-tool-executor.d.ts.map +1 -0
  21. package/dist/agent/gateway-tool-executor.js +348 -0
  22. package/dist/agent/gateway-tool-executor.js.map +1 -0
  23. package/dist/agent/index.d.ts +13 -0
  24. package/dist/agent/index.d.ts.map +1 -0
  25. package/dist/agent/index.js +18 -0
  26. package/dist/agent/index.js.map +1 -0
  27. package/dist/agent/mcp-executor.d.ts +75 -0
  28. package/dist/agent/mcp-executor.d.ts.map +1 -0
  29. package/dist/agent/mcp-executor.js +307 -0
  30. package/dist/agent/mcp-executor.js.map +1 -0
  31. package/dist/agent/session-pool.d.ts +148 -0
  32. package/dist/agent/session-pool.d.ts.map +1 -0
  33. package/dist/agent/session-pool.js +272 -0
  34. package/dist/agent/session-pool.js.map +1 -0
  35. package/dist/agent/streaming-callback-manager.d.ts +85 -0
  36. package/dist/agent/streaming-callback-manager.d.ts.map +1 -0
  37. package/dist/agent/streaming-callback-manager.js +103 -0
  38. package/dist/agent/streaming-callback-manager.js.map +1 -0
  39. package/dist/agent/types.d.ts +437 -0
  40. package/dist/agent/types.d.ts.map +1 -0
  41. package/dist/agent/types.js +29 -0
  42. package/dist/agent/types.js.map +1 -0
  43. package/dist/api/cron-handler.d.ts +44 -0
  44. package/dist/api/cron-handler.d.ts.map +1 -0
  45. package/dist/api/cron-handler.js +195 -0
  46. package/dist/api/cron-handler.js.map +1 -0
  47. package/dist/api/error-handler.d.ts +22 -0
  48. package/dist/api/error-handler.d.ts.map +1 -0
  49. package/dist/api/error-handler.js +104 -0
  50. package/dist/api/error-handler.js.map +1 -0
  51. package/dist/api/heartbeat-handler.d.ts +49 -0
  52. package/dist/api/heartbeat-handler.d.ts.map +1 -0
  53. package/dist/api/heartbeat-handler.js +91 -0
  54. package/dist/api/heartbeat-handler.js.map +1 -0
  55. package/dist/api/index.d.ts +61 -0
  56. package/dist/api/index.d.ts.map +1 -0
  57. package/dist/api/index.js +145 -0
  58. package/dist/api/index.js.map +1 -0
  59. package/dist/api/types.d.ts +156 -0
  60. package/dist/api/types.d.ts.map +1 -0
  61. package/dist/api/types.js +62 -0
  62. package/dist/api/types.js.map +1 -0
  63. package/dist/auth/index.d.ts +7 -0
  64. package/dist/auth/index.d.ts.map +1 -0
  65. package/dist/auth/index.js +11 -0
  66. package/dist/auth/index.js.map +1 -0
  67. package/dist/auth/oauth-manager.d.ts +59 -0
  68. package/dist/auth/oauth-manager.d.ts.map +1 -0
  69. package/dist/auth/oauth-manager.js +237 -0
  70. package/dist/auth/oauth-manager.js.map +1 -0
  71. package/dist/auth/types.d.ts +92 -0
  72. package/dist/auth/types.d.ts.map +1 -0
  73. package/dist/auth/types.js +23 -0
  74. package/dist/auth/types.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +19 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +155 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/run.d.ts +19 -0
  80. package/dist/cli/commands/run.d.ts.map +1 -0
  81. package/dist/cli/commands/run.js +89 -0
  82. package/dist/cli/commands/run.js.map +1 -0
  83. package/dist/cli/commands/setup.d.ts +19 -0
  84. package/dist/cli/commands/setup.d.ts.map +1 -0
  85. package/dist/cli/commands/setup.js +134 -0
  86. package/dist/cli/commands/setup.js.map +1 -0
  87. package/dist/cli/commands/start.d.ts +24 -0
  88. package/dist/cli/commands/start.d.ts.map +1 -0
  89. package/dist/cli/commands/start.js +1073 -0
  90. package/dist/cli/commands/start.js.map +1 -0
  91. package/dist/cli/commands/status.d.ts +10 -0
  92. package/dist/cli/commands/status.d.ts.map +1 -0
  93. package/dist/cli/commands/status.js +85 -0
  94. package/dist/cli/commands/status.js.map +1 -0
  95. package/dist/cli/commands/stop.d.ts +10 -0
  96. package/dist/cli/commands/stop.d.ts.map +1 -0
  97. package/dist/cli/commands/stop.js +65 -0
  98. package/dist/cli/commands/stop.js.map +1 -0
  99. package/dist/cli/config/config-manager.d.ts +51 -0
  100. package/dist/cli/config/config-manager.d.ts.map +1 -0
  101. package/dist/cli/config/config-manager.js +216 -0
  102. package/dist/cli/config/config-manager.js.map +1 -0
  103. package/dist/cli/config/types.d.ts +172 -0
  104. package/dist/cli/config/types.d.ts.map +1 -0
  105. package/dist/cli/config/types.js +48 -0
  106. package/dist/cli/config/types.js.map +1 -0
  107. package/dist/cli/index.d.ts +8 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +92 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/utils/pid-manager.d.ts +66 -0
  112. package/dist/cli/utils/pid-manager.d.ts.map +1 -0
  113. package/dist/cli/utils/pid-manager.js +167 -0
  114. package/dist/cli/utils/pid-manager.js.map +1 -0
  115. package/dist/concurrency/index.d.ts +13 -0
  116. package/dist/concurrency/index.d.ts.map +1 -0
  117. package/dist/concurrency/index.js +22 -0
  118. package/dist/concurrency/index.js.map +1 -0
  119. package/dist/concurrency/lane-manager.d.ts +113 -0
  120. package/dist/concurrency/lane-manager.d.ts.map +1 -0
  121. package/dist/concurrency/lane-manager.js +245 -0
  122. package/dist/concurrency/lane-manager.js.map +1 -0
  123. package/dist/concurrency/session-key.d.ts +41 -0
  124. package/dist/concurrency/session-key.d.ts.map +1 -0
  125. package/dist/concurrency/session-key.js +61 -0
  126. package/dist/concurrency/session-key.js.map +1 -0
  127. package/dist/concurrency/types.d.ts +69 -0
  128. package/dist/concurrency/types.d.ts.map +1 -0
  129. package/dist/concurrency/types.js +16 -0
  130. package/dist/concurrency/types.js.map +1 -0
  131. package/dist/gateways/channel-history.d.ts +102 -0
  132. package/dist/gateways/channel-history.d.ts.map +1 -0
  133. package/dist/gateways/channel-history.js +181 -0
  134. package/dist/gateways/channel-history.js.map +1 -0
  135. package/dist/gateways/context-injector.d.ts +74 -0
  136. package/dist/gateways/context-injector.d.ts.map +1 -0
  137. package/dist/gateways/context-injector.js +121 -0
  138. package/dist/gateways/context-injector.js.map +1 -0
  139. package/dist/gateways/discord.d.ts +122 -0
  140. package/dist/gateways/discord.d.ts.map +1 -0
  141. package/dist/gateways/discord.js +602 -0
  142. package/dist/gateways/discord.js.map +1 -0
  143. package/dist/gateways/index.d.ts +30 -0
  144. package/dist/gateways/index.d.ts.map +1 -0
  145. package/dist/gateways/index.js +49 -0
  146. package/dist/gateways/index.js.map +1 -0
  147. package/dist/gateways/message-router.d.ts +116 -0
  148. package/dist/gateways/message-router.d.ts.map +1 -0
  149. package/dist/gateways/message-router.js +315 -0
  150. package/dist/gateways/message-router.js.map +1 -0
  151. package/dist/gateways/message-splitter.d.ts +54 -0
  152. package/dist/gateways/message-splitter.d.ts.map +1 -0
  153. package/dist/gateways/message-splitter.js +146 -0
  154. package/dist/gateways/message-splitter.js.map +1 -0
  155. package/dist/gateways/plugin-loader.d.ts +76 -0
  156. package/dist/gateways/plugin-loader.d.ts.map +1 -0
  157. package/dist/gateways/plugin-loader.js +221 -0
  158. package/dist/gateways/plugin-loader.js.map +1 -0
  159. package/dist/gateways/session-store.d.ts +77 -0
  160. package/dist/gateways/session-store.d.ts.map +1 -0
  161. package/dist/gateways/session-store.js +233 -0
  162. package/dist/gateways/session-store.js.map +1 -0
  163. package/dist/gateways/slack.d.ts +90 -0
  164. package/dist/gateways/slack.d.ts.map +1 -0
  165. package/dist/gateways/slack.js +281 -0
  166. package/dist/gateways/slack.js.map +1 -0
  167. package/dist/gateways/telegram.d.ts +79 -0
  168. package/dist/gateways/telegram.d.ts.map +1 -0
  169. package/dist/gateways/telegram.js +207 -0
  170. package/dist/gateways/telegram.js.map +1 -0
  171. package/dist/gateways/types.d.ts +340 -0
  172. package/dist/gateways/types.d.ts.map +1 -0
  173. package/dist/gateways/types.js +6 -0
  174. package/dist/gateways/types.js.map +1 -0
  175. package/dist/index.d.ts +7 -0
  176. package/dist/index.d.ts.map +1 -0
  177. package/dist/index.js +26 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/memory/memory-logger.d.ts +47 -0
  180. package/dist/memory/memory-logger.d.ts.map +1 -0
  181. package/dist/memory/memory-logger.js +126 -0
  182. package/dist/memory/memory-logger.js.map +1 -0
  183. package/dist/onboarding/all-tools.d.ts +18 -0
  184. package/dist/onboarding/all-tools.d.ts.map +1 -0
  185. package/dist/onboarding/all-tools.js +149 -0
  186. package/dist/onboarding/all-tools.js.map +1 -0
  187. package/dist/onboarding/autonomous-discovery-tools.d.ts +13 -0
  188. package/dist/onboarding/autonomous-discovery-tools.d.ts.map +1 -0
  189. package/dist/onboarding/autonomous-discovery-tools.js +268 -0
  190. package/dist/onboarding/autonomous-discovery-tools.js.map +1 -0
  191. package/dist/onboarding/bootstrap-template.d.ts +5 -0
  192. package/dist/onboarding/bootstrap-template.d.ts.map +1 -0
  193. package/dist/onboarding/bootstrap-template.js +142 -0
  194. package/dist/onboarding/bootstrap-template.js.map +1 -0
  195. package/dist/onboarding/complete-autonomous-prompt.d.ts +13 -0
  196. package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -0
  197. package/dist/onboarding/complete-autonomous-prompt.js +1220 -0
  198. package/dist/onboarding/complete-autonomous-prompt.js.map +1 -0
  199. package/dist/onboarding/onboarding-state.d.ts +70 -0
  200. package/dist/onboarding/onboarding-state.d.ts.map +1 -0
  201. package/dist/onboarding/onboarding-state.js +184 -0
  202. package/dist/onboarding/onboarding-state.js.map +1 -0
  203. package/dist/onboarding/personality-quiz.d.ts +35 -0
  204. package/dist/onboarding/personality-quiz.d.ts.map +1 -0
  205. package/dist/onboarding/personality-quiz.js +219 -0
  206. package/dist/onboarding/personality-quiz.js.map +1 -0
  207. package/dist/onboarding/phase-5-summary.d.ts +22 -0
  208. package/dist/onboarding/phase-5-summary.d.ts.map +1 -0
  209. package/dist/onboarding/phase-5-summary.js +151 -0
  210. package/dist/onboarding/phase-5-summary.js.map +1 -0
  211. package/dist/onboarding/phase-6-security.d.ts +33 -0
  212. package/dist/onboarding/phase-6-security.d.ts.map +1 -0
  213. package/dist/onboarding/phase-6-security.js +473 -0
  214. package/dist/onboarding/phase-6-security.js.map +1 -0
  215. package/dist/onboarding/phase-7-integrations.d.ts +66 -0
  216. package/dist/onboarding/phase-7-integrations.d.ts.map +1 -0
  217. package/dist/onboarding/phase-7-integrations.js +619 -0
  218. package/dist/onboarding/phase-7-integrations.js.map +1 -0
  219. package/dist/onboarding/phase-8-demo.d.ts +43 -0
  220. package/dist/onboarding/phase-8-demo.d.ts.map +1 -0
  221. package/dist/onboarding/phase-8-demo.js +346 -0
  222. package/dist/onboarding/phase-8-demo.js.map +1 -0
  223. package/dist/onboarding/phase-9-finalization.d.ts +22 -0
  224. package/dist/onboarding/phase-9-finalization.d.ts.map +1 -0
  225. package/dist/onboarding/phase-9-finalization.js +375 -0
  226. package/dist/onboarding/phase-9-finalization.js.map +1 -0
  227. package/dist/onboarding/ritual-prompt.d.ts +2 -0
  228. package/dist/onboarding/ritual-prompt.d.ts.map +1 -0
  229. package/dist/onboarding/ritual-prompt.js +285 -0
  230. package/dist/onboarding/ritual-prompt.js.map +1 -0
  231. package/dist/onboarding/ritual-tools.d.ts +13 -0
  232. package/dist/onboarding/ritual-tools.d.ts.map +1 -0
  233. package/dist/onboarding/ritual-tools.js +93 -0
  234. package/dist/onboarding/ritual-tools.js.map +1 -0
  235. package/dist/runners/cli-runner.d.ts +59 -0
  236. package/dist/runners/cli-runner.d.ts.map +1 -0
  237. package/dist/runners/cli-runner.js +190 -0
  238. package/dist/runners/cli-runner.js.map +1 -0
  239. package/dist/runners/index.d.ts +11 -0
  240. package/dist/runners/index.d.ts.map +1 -0
  241. package/dist/runners/index.js +15 -0
  242. package/dist/runners/index.js.map +1 -0
  243. package/dist/runners/types.d.ts +81 -0
  244. package/dist/runners/types.d.ts.map +1 -0
  245. package/dist/runners/types.js +31 -0
  246. package/dist/runners/types.js.map +1 -0
  247. package/dist/scheduler/cron-scheduler.d.ts +115 -0
  248. package/dist/scheduler/cron-scheduler.d.ts.map +1 -0
  249. package/dist/scheduler/cron-scheduler.js +320 -0
  250. package/dist/scheduler/cron-scheduler.js.map +1 -0
  251. package/dist/scheduler/heartbeat.d.ts +53 -0
  252. package/dist/scheduler/heartbeat.d.ts.map +1 -0
  253. package/dist/scheduler/heartbeat.js +160 -0
  254. package/dist/scheduler/heartbeat.js.map +1 -0
  255. package/dist/scheduler/index.d.ts +22 -0
  256. package/dist/scheduler/index.d.ts.map +1 -0
  257. package/dist/scheduler/index.js +31 -0
  258. package/dist/scheduler/index.js.map +1 -0
  259. package/dist/scheduler/job-lock.d.ts +85 -0
  260. package/dist/scheduler/job-lock.d.ts.map +1 -0
  261. package/dist/scheduler/job-lock.js +137 -0
  262. package/dist/scheduler/job-lock.js.map +1 -0
  263. package/dist/scheduler/recovery.d.ts +78 -0
  264. package/dist/scheduler/recovery.d.ts.map +1 -0
  265. package/dist/scheduler/recovery.js +124 -0
  266. package/dist/scheduler/recovery.js.map +1 -0
  267. package/dist/scheduler/schedule-store.d.ts +112 -0
  268. package/dist/scheduler/schedule-store.d.ts.map +1 -0
  269. package/dist/scheduler/schedule-store.js +259 -0
  270. package/dist/scheduler/schedule-store.js.map +1 -0
  271. package/dist/scheduler/token-keep-alive.d.ts +49 -0
  272. package/dist/scheduler/token-keep-alive.d.ts.map +1 -0
  273. package/dist/scheduler/token-keep-alive.js +102 -0
  274. package/dist/scheduler/token-keep-alive.js.map +1 -0
  275. package/dist/scheduler/types.d.ts +96 -0
  276. package/dist/scheduler/types.d.ts.map +1 -0
  277. package/dist/scheduler/types.js +21 -0
  278. package/dist/scheduler/types.js.map +1 -0
  279. package/dist/setup/setup-prompt.d.ts +2 -0
  280. package/dist/setup/setup-prompt.d.ts.map +1 -0
  281. package/dist/setup/setup-prompt.js +138 -0
  282. package/dist/setup/setup-prompt.js.map +1 -0
  283. package/dist/setup/setup-server.d.ts +8 -0
  284. package/dist/setup/setup-server.d.ts.map +1 -0
  285. package/dist/setup/setup-server.js +71 -0
  286. package/dist/setup/setup-server.js.map +1 -0
  287. package/dist/setup/setup-tools.d.ts +13 -0
  288. package/dist/setup/setup-tools.d.ts.map +1 -0
  289. package/dist/setup/setup-tools.js +103 -0
  290. package/dist/setup/setup-tools.js.map +1 -0
  291. package/dist/setup/setup-websocket.d.ts +6 -0
  292. package/dist/setup/setup-websocket.d.ts.map +1 -0
  293. package/dist/setup/setup-websocket.js +312 -0
  294. package/dist/setup/setup-websocket.js.map +1 -0
  295. package/dist/skills/index.d.ts +10 -0
  296. package/dist/skills/index.d.ts.map +1 -0
  297. package/dist/skills/index.js +26 -0
  298. package/dist/skills/index.js.map +1 -0
  299. package/dist/skills/skill-executor.d.ts +48 -0
  300. package/dist/skills/skill-executor.d.ts.map +1 -0
  301. package/dist/skills/skill-executor.js +483 -0
  302. package/dist/skills/skill-executor.js.map +1 -0
  303. package/dist/skills/skill-loader.d.ts +40 -0
  304. package/dist/skills/skill-loader.d.ts.map +1 -0
  305. package/dist/skills/skill-loader.js +225 -0
  306. package/dist/skills/skill-loader.js.map +1 -0
  307. package/dist/skills/skill-matcher.d.ts +33 -0
  308. package/dist/skills/skill-matcher.d.ts.map +1 -0
  309. package/dist/skills/skill-matcher.js +190 -0
  310. package/dist/skills/skill-matcher.js.map +1 -0
  311. package/dist/skills/types.d.ts +123 -0
  312. package/dist/skills/types.d.ts.map +1 -0
  313. package/dist/skills/types.js +12 -0
  314. package/dist/skills/types.js.map +1 -0
  315. package/dist/tools/browser-tool.d.ts +149 -0
  316. package/dist/tools/browser-tool.d.ts.map +1 -0
  317. package/dist/tools/browser-tool.js +257 -0
  318. package/dist/tools/browser-tool.js.map +1 -0
  319. package/package.json +84 -0
  320. package/public/favicon.ico +0 -0
  321. package/public/setup.html +1026 -0
  322. package/public/viewer/icons/icon-192.png +0 -0
  323. package/public/viewer/icons/icon-512.png +0 -0
  324. package/public/viewer/js/modules/chat.js +1587 -0
  325. package/public/viewer/js/modules/dashboard.js +275 -0
  326. package/public/viewer/js/modules/graph.js +997 -0
  327. package/public/viewer/js/modules/memory.js +353 -0
  328. package/public/viewer/js/modules/settings.js +255 -0
  329. package/public/viewer/js/utils/api.js +169 -0
  330. package/public/viewer/js/utils/dom.js +92 -0
  331. package/public/viewer/js/utils/format.js +192 -0
  332. package/public/viewer/manifest.json +26 -0
  333. package/public/viewer/sw.js +131 -0
  334. package/public/viewer/viewer.css +500 -0
  335. package/public/viewer/viewer.html +1535 -0
  336. package/scripts/postinstall.js +118 -0
  337. package/templates/skills/document-analyze.md +63 -0
  338. package/templates/skills/heartbeat-report.md +75 -0
  339. package/templates/skills/image-translate.md +67 -0
  340. package/templates/workspace/skill-forge/DESIGN.md +115 -0
  341. package/templates/workspace/skill-forge/agents/architect.ts +295 -0
  342. package/templates/workspace/skill-forge/agents/developer.ts +364 -0
  343. package/templates/workspace/skill-forge/agents/qa.ts +313 -0
  344. package/templates/workspace/skill-forge/claude-api.ts +353 -0
  345. package/templates/workspace/skill-forge/discord-ui.ts +580 -0
  346. package/templates/workspace/skill-forge/error-handler.ts +354 -0
  347. package/templates/workspace/skill-forge/mama-integration.ts +357 -0
  348. package/templates/workspace/skill-forge/orchestrator.ts +495 -0
  349. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/README.md +24 -0
  350. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/index.ts +79 -0
  351. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/types.ts +17 -0
  352. package/templates/workspace/skill-forge/package.json +21 -0
  353. package/templates/workspace/skill-forge/state/session.json +132 -0
  354. package/templates/workspace/skill-forge/test-e2e.ts +139 -0
  355. package/templates/workspace/skill-forge/tsconfig.json +20 -0
  356. package/templates/workspace/skill-forge/types.ts +159 -0
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ /**
3
+ * Claude API Client for MAMA Standalone
4
+ *
5
+ * Uses Claude Messages API with OAuth tokens (OpenClaw Gateway 방식 이식).
6
+ * @anthropic-ai/sdk의 authToken 옵션 사용 (pi-ai 방식)
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ClaudeClient = void 0;
13
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
14
+ const types_js_1 = require("./types.js");
15
+ /**
16
+ * Default configuration
17
+ */
18
+ const DEFAULT_MODEL = 'claude-sonnet-4-20250514';
19
+ const DEFAULT_MAX_TOKENS = 4096;
20
+ /**
21
+ * Claude Code stealth headers for OAuth authentication
22
+ * From: @mariozechner/pi-ai/dist/providers/anthropic.js
23
+ *
24
+ * CRITICAL: OAuth tokens require:
25
+ * 1. apiKey: null (not empty string!)
26
+ * 2. System prompt MUST start with Claude Code identity
27
+ * 3. Proper beta features in header
28
+ */
29
+ const CLAUDE_CODE_VERSION = '2.1.2';
30
+ const OAUTH_HEADERS = {
31
+ accept: 'application/json',
32
+ 'anthropic-dangerous-direct-browser-access': 'true',
33
+ 'anthropic-beta': 'claude-code-20250219,oauth-2025-04-20,fine-grained-tool-streaming-2025-05-14',
34
+ 'user-agent': `claude-cli/${CLAUDE_CODE_VERSION} (external, cli)`,
35
+ 'x-app': 'cli',
36
+ };
37
+ /**
38
+ * Required Claude Code identity system prompt for OAuth
39
+ * Without this, OAuth tokens are rejected with "only authorized for use with Claude Code"
40
+ */
41
+ const CLAUDE_CODE_IDENTITY = "You are Claude Code, Anthropic's official CLI for Claude.";
42
+ class ClaudeClient {
43
+ oauthManager;
44
+ client = null;
45
+ lastToken = null;
46
+ constructor(oauthManager, _options = {}) {
47
+ this.oauthManager = oauthManager;
48
+ }
49
+ /**
50
+ * Get or create Anthropic client with OAuth token
51
+ * Recreates client if token changes (refresh)
52
+ */
53
+ async getClient() {
54
+ const token = await this.oauthManager.getToken();
55
+ if (!token) {
56
+ throw new types_js_1.AgentError('No access token available. Please run: mama login', 'AUTH_ERROR', undefined, false);
57
+ }
58
+ // Recreate client if token changed
59
+ if (this.client && this.lastToken === token) {
60
+ return this.client;
61
+ }
62
+ // Create new client with OAuth token (pi-ai 방식)
63
+ // CRITICAL: apiKey MUST be null (not empty string!) for OAuth to work
64
+ this.client = new sdk_1.default({
65
+ apiKey: null, // Must be null for OAuth!
66
+ authToken: token, // OAuth token goes here
67
+ defaultHeaders: OAUTH_HEADERS,
68
+ dangerouslyAllowBrowser: true,
69
+ });
70
+ this.lastToken = token;
71
+ return this.client;
72
+ }
73
+ /**
74
+ * Send a message to Claude via API
75
+ *
76
+ * @param messages - Conversation history
77
+ * @param options - Request options including tools
78
+ * @returns Claude API response
79
+ * @throws AgentError on API errors
80
+ */
81
+ async sendMessage(messages, options = {}) {
82
+ const client = await this.getClient();
83
+ const model = options.model ?? DEFAULT_MODEL;
84
+ const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
85
+ console.log(`[ClaudeClient] API call: model=${model}, tools=${options.tools?.length || 0}, messages=${messages.length}`);
86
+ try {
87
+ // Build request params
88
+ const params = {
89
+ model,
90
+ max_tokens: maxTokens,
91
+ messages: this.formatMessages(messages),
92
+ };
93
+ // OAuth tokens REQUIRE Claude Code identity in system prompt
94
+ // Without this, API returns: "This credential is only authorized for use with Claude Code"
95
+ const systemBlocks = [
96
+ {
97
+ type: 'text',
98
+ text: CLAUDE_CODE_IDENTITY,
99
+ cache_control: { type: 'ephemeral' },
100
+ },
101
+ ];
102
+ // Add custom system prompt after identity
103
+ if (options.system) {
104
+ systemBlocks.push({
105
+ type: 'text',
106
+ text: options.system,
107
+ cache_control: { type: 'ephemeral' },
108
+ });
109
+ }
110
+ params.system = systemBlocks;
111
+ // Add tools if provided - THIS IS THE KEY DIFFERENCE
112
+ if (options.tools && options.tools.length > 0) {
113
+ params.tools = options.tools.map((tool) => ({
114
+ name: tool.name,
115
+ description: tool.description,
116
+ input_schema: tool.input_schema,
117
+ }));
118
+ }
119
+ // Call API using SDK
120
+ const response = await client.messages.create(params);
121
+ console.log(`[ClaudeClient] Response: stop_reason=${response.stop_reason}, content_blocks=${response.content?.length || 0}`);
122
+ // Convert to our ClaudeResponse type
123
+ return {
124
+ id: response.id,
125
+ type: 'message',
126
+ role: 'assistant',
127
+ content: response.content,
128
+ model: response.model,
129
+ stop_reason: response.stop_reason,
130
+ stop_sequence: response.stop_sequence ?? null,
131
+ usage: response.usage,
132
+ };
133
+ }
134
+ catch (error) {
135
+ if (error instanceof types_js_1.AgentError) {
136
+ throw error;
137
+ }
138
+ // Handle Anthropic API errors
139
+ if (error instanceof sdk_1.default.APIError) {
140
+ console.error(`[ClaudeClient] API error: ${error.status} ${error.message}`);
141
+ if (error.status === 401) {
142
+ throw new types_js_1.AgentError('Authentication failed. Please run: mama login', 'AUTH_ERROR', undefined, true);
143
+ }
144
+ if (error.status === 429) {
145
+ throw new types_js_1.AgentError(`Rate limited: ${error.message}`, 'RATE_LIMIT', error, true);
146
+ }
147
+ throw new types_js_1.AgentError(`API request failed: ${error.status} ${error.message}`, 'API_ERROR', error, (error.status ?? 0) >= 500);
148
+ }
149
+ throw new types_js_1.AgentError(`API request failed: ${error instanceof Error ? error.message : String(error)}`, 'API_ERROR', error instanceof Error ? error : undefined, true);
150
+ }
151
+ }
152
+ /**
153
+ * Format messages for API
154
+ */
155
+ formatMessages(messages) {
156
+ return messages.map((msg) => ({
157
+ role: msg.role,
158
+ content: this.formatContent(msg.content),
159
+ }));
160
+ }
161
+ /**
162
+ * Format content blocks for API
163
+ */
164
+ formatContent(content) {
165
+ if (typeof content === 'string') {
166
+ return content;
167
+ }
168
+ return content.map((block) => {
169
+ switch (block.type) {
170
+ case 'text':
171
+ return { type: 'text', text: block.text };
172
+ case 'image':
173
+ return {
174
+ type: 'image',
175
+ source: {
176
+ type: 'base64',
177
+ media_type: block.source.media_type,
178
+ data: block.source.data,
179
+ },
180
+ };
181
+ case 'tool_use':
182
+ return {
183
+ type: 'tool_use',
184
+ id: block.id,
185
+ name: block.name,
186
+ input: block.input,
187
+ };
188
+ case 'tool_result':
189
+ return {
190
+ type: 'tool_result',
191
+ tool_use_id: block.tool_use_id,
192
+ content: block.content,
193
+ is_error: block.is_error,
194
+ };
195
+ default:
196
+ return block;
197
+ }
198
+ });
199
+ }
200
+ /**
201
+ * Get the default model name
202
+ */
203
+ static getDefaultModel() {
204
+ return DEFAULT_MODEL;
205
+ }
206
+ /**
207
+ * Get the default max tokens
208
+ */
209
+ static getDefaultMaxTokens() {
210
+ return DEFAULT_MAX_TOKENS;
211
+ }
212
+ }
213
+ exports.ClaudeClient = ClaudeClient;
214
+ //# sourceMappingURL=claude-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-client.js","sourceRoot":"","sources":["../../src/agent/claude-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * MAMA Tool Executor for MAMA Standalone
3
+ *
4
+ * Executes MAMA gateway tools (mama_search, mama_save, mama_update, mama_load_checkpoint, Read, discord_send).
5
+ * NOT MCP - uses Claude Messages API tool definitions.
6
+ * Supports both direct API integration and mock API for testing.
7
+ */
8
+ import type { GatewayToolName, GatewayToolInput, GatewayToolResult, GatewayToolExecutorOptions } from './types.js';
9
+ /**
10
+ * Discord gateway interface for sending messages
11
+ */
12
+ export interface DiscordGatewayInterface {
13
+ sendMessage(channelId: string, message: string): Promise<void>;
14
+ sendImage(channelId: string, imagePath: string, caption?: string): Promise<void>;
15
+ }
16
+ export declare class GatewayToolExecutor {
17
+ private mamaApi;
18
+ private readonly mamaDbPath?;
19
+ private sessionStore?;
20
+ private discordGateway;
21
+ constructor(options?: GatewayToolExecutorOptions);
22
+ setDiscordGateway(gateway: DiscordGatewayInterface): void;
23
+ /**
24
+ * Initialize the MAMA API by importing from mcp-server package
25
+ * Called lazily on first tool execution if not provided in constructor
26
+ */
27
+ private initializeMAMAApi;
28
+ /**
29
+ * Execute an MCP tool
30
+ *
31
+ * @param toolName - Name of the tool to execute
32
+ * @param input - Tool input parameters
33
+ * @returns Tool execution result
34
+ * @throws AgentError on tool errors
35
+ */
36
+ execute(toolName: string, input: GatewayToolInput): Promise<GatewayToolResult>;
37
+ /**
38
+ * Execute save tool (decision or checkpoint)
39
+ */
40
+ private executeSave;
41
+ /**
42
+ * Execute search tool
43
+ */
44
+ private executeSearch;
45
+ /**
46
+ * Execute update tool
47
+ */
48
+ private executeUpdate;
49
+ /**
50
+ * Execute load_checkpoint tool
51
+ */
52
+ private executeLoadCheckpoint;
53
+ /**
54
+ * Execute read tool - Read file from filesystem
55
+ */
56
+ private executeRead;
57
+ /**
58
+ * Execute Write tool - Write content to a file
59
+ */
60
+ private executeWrite;
61
+ /**
62
+ * Execute Bash tool - Execute bash command
63
+ */
64
+ private executeBash;
65
+ /**
66
+ * Execute discord_send tool - Send message/image to Discord channel
67
+ */
68
+ private executeDiscordSend;
69
+ static getValidTools(): GatewayToolName[];
70
+ /**
71
+ * Check if a tool name is valid
72
+ */
73
+ static isValidTool(toolName: string): toolName is GatewayToolName;
74
+ }
75
+ //# sourceMappingURL=gateway-tool-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-tool-executor.d.ts","sourceRoot":"","sources":["../../src/agent/gateway-tool-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAWjB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClF;AAmBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,YAAY,CAAC,CAAM;IAC3B,OAAO,CAAC,cAAc,CAAwC;gBAElD,OAAO,GAAE,0BAA+B;IASpD,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAIzD;;;OAGG;YACW,iBAAiB;IAwC/B;;;;;;;OAOG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsDpF;;OAEG;YACW,WAAW;IA+CzB;;OAEG;YACW,aAAa;IAyC3B;;OAEG;YACW,aAAa;IAkC3B;;OAEG;YACW,qBAAqB;IAWnC;;OAEG;YACW,WAAW;IA+BzB;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,WAAW;IA2BzB;;OAEG;YACW,kBAAkB;IA8BhC,MAAM,CAAC,aAAa,IAAI,eAAe,EAAE;IAIzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,eAAe;CAGlE"}
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * MAMA Tool Executor for MAMA Standalone
4
+ *
5
+ * Executes MAMA gateway tools (mama_search, mama_save, mama_update, mama_load_checkpoint, Read, discord_send).
6
+ * NOT MCP - uses Claude Messages API tool definitions.
7
+ * Supports both direct API integration and mock API for testing.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.GatewayToolExecutor = void 0;
11
+ const fs_1 = require("fs");
12
+ const path_1 = require("path");
13
+ const child_process_1 = require("child_process");
14
+ const types_js_1 = require("./types.js");
15
+ /**
16
+ * Valid MAMA gateway tools
17
+ * These tools are executed by GatewayToolExecutor
18
+ * Includes MAMA tools (mama_search, mama_save, mama_update, mama_load_checkpoint)
19
+ * and utility tools (Read, Write, Bash, discord_send)
20
+ */
21
+ const VALID_TOOLS = [
22
+ 'mama_search',
23
+ 'mama_save',
24
+ 'mama_update',
25
+ 'mama_load_checkpoint',
26
+ 'Read',
27
+ 'Write',
28
+ 'Bash',
29
+ 'discord_send',
30
+ ];
31
+ class GatewayToolExecutor {
32
+ mamaApi = null;
33
+ mamaDbPath;
34
+ sessionStore;
35
+ discordGateway = null;
36
+ constructor(options = {}) {
37
+ this.mamaDbPath = options.mamaDbPath;
38
+ this.sessionStore = options.sessionStore;
39
+ if (options.mamaApi) {
40
+ this.mamaApi = options.mamaApi;
41
+ }
42
+ }
43
+ setDiscordGateway(gateway) {
44
+ this.discordGateway = gateway;
45
+ }
46
+ /**
47
+ * Initialize the MAMA API by importing from mcp-server package
48
+ * Called lazily on first tool execution if not provided in constructor
49
+ */
50
+ async initializeMAMAApi() {
51
+ if (this.mamaApi) {
52
+ return this.mamaApi;
53
+ }
54
+ try {
55
+ // Set database path if provided
56
+ if (this.mamaDbPath) {
57
+ process.env.MAMA_DB_PATH = this.mamaDbPath;
58
+ }
59
+ // Dynamic import of MAMA mama-core modules
60
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
61
+ const mama = require('@jungjaehoon/mama-core/mama-api');
62
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
63
+ const { initDB } = require('@jungjaehoon/mama-core/db-manager');
64
+ // Initialize the database before using mama-api functions
65
+ await initDB();
66
+ this.mamaApi = {
67
+ save: mama.save.bind(mama),
68
+ saveCheckpoint: mama.saveCheckpoint.bind(mama),
69
+ listDecisions: mama.list.bind(mama), // Note: mama exports listDecisions as 'list'
70
+ suggest: mama.suggest.bind(mama),
71
+ updateOutcome: mama.updateOutcome.bind(mama),
72
+ loadCheckpoint: mama.loadCheckpoint.bind(mama),
73
+ };
74
+ return this.mamaApi;
75
+ }
76
+ catch (error) {
77
+ throw new types_js_1.AgentError(`Failed to initialize MAMA API: ${error instanceof Error ? error.message : String(error)}`, 'TOOL_ERROR', error instanceof Error ? error : undefined, false);
78
+ }
79
+ }
80
+ /**
81
+ * Execute an MCP tool
82
+ *
83
+ * @param toolName - Name of the tool to execute
84
+ * @param input - Tool input parameters
85
+ * @returns Tool execution result
86
+ * @throws AgentError on tool errors
87
+ */
88
+ async execute(toolName, input) {
89
+ if (!VALID_TOOLS.includes(toolName)) {
90
+ throw new types_js_1.AgentError(`Unknown tool: ${toolName}. Valid tools: ${VALID_TOOLS.join(', ')}`, 'UNKNOWN_TOOL', undefined, false);
91
+ }
92
+ try {
93
+ // Handle non-MAMA tools first
94
+ switch (toolName) {
95
+ case 'Read':
96
+ return await this.executeRead(input);
97
+ case 'Write':
98
+ return await this.executeWrite(input);
99
+ case 'Bash':
100
+ return await this.executeBash(input);
101
+ case 'discord_send':
102
+ return await this.executeDiscordSend(input);
103
+ }
104
+ // MAMA tools require API
105
+ const api = await this.initializeMAMAApi();
106
+ switch (toolName) {
107
+ case 'mama_save':
108
+ return await this.executeSave(api, input);
109
+ case 'mama_search':
110
+ return await this.executeSearch(api, input);
111
+ case 'mama_update':
112
+ return await this.executeUpdate(api, input);
113
+ case 'mama_load_checkpoint':
114
+ return await this.executeLoadCheckpoint(api, input);
115
+ default:
116
+ throw new types_js_1.AgentError(`Unknown tool: ${toolName}`, 'UNKNOWN_TOOL', undefined, false);
117
+ }
118
+ }
119
+ catch (error) {
120
+ if (error instanceof types_js_1.AgentError) {
121
+ throw error;
122
+ }
123
+ throw new types_js_1.AgentError(`Tool execution failed (${toolName}): ${error instanceof Error ? error.message : String(error)}`, 'TOOL_ERROR', error instanceof Error ? error : undefined, false);
124
+ }
125
+ }
126
+ /**
127
+ * Execute save tool (decision or checkpoint)
128
+ */
129
+ async executeSave(api, input) {
130
+ if (input.type === 'decision') {
131
+ const decisionInput = input;
132
+ if (!decisionInput.topic || !decisionInput.decision || !decisionInput.reasoning) {
133
+ return {
134
+ success: false,
135
+ message: 'Decision requires: topic, decision, reasoning',
136
+ };
137
+ }
138
+ // Map MCP 'decision' type to mama-api 'user_decision' type
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+ return await api.save({
141
+ topic: decisionInput.topic,
142
+ decision: decisionInput.decision,
143
+ reasoning: decisionInput.reasoning,
144
+ confidence: decisionInput.confidence ?? 0.5,
145
+ type: 'user_decision', // mama-api expects 'user_decision' not 'decision'
146
+ });
147
+ }
148
+ if (input.type === 'checkpoint') {
149
+ const checkpointInput = input;
150
+ if (!checkpointInput.summary) {
151
+ return {
152
+ success: false,
153
+ message: 'Checkpoint requires: summary',
154
+ };
155
+ }
156
+ const recentConversation = this.sessionStore?.getRecentMessages() || [];
157
+ return await api.saveCheckpoint(checkpointInput.summary, checkpointInput.open_files ?? [], checkpointInput.next_steps ?? '', recentConversation);
158
+ }
159
+ return {
160
+ success: false,
161
+ message: `Invalid save type: ${input.type}. Must be 'decision' or 'checkpoint'`,
162
+ };
163
+ }
164
+ /**
165
+ * Execute search tool
166
+ */
167
+ async executeSearch(api, input) {
168
+ const { query, type, limit = 10 } = input;
169
+ // If no query provided, return recent items using listDecisions
170
+ if (!query) {
171
+ const decisions = await api.listDecisions({ limit });
172
+ const results = Array.isArray(decisions) ? decisions : [];
173
+ // Filter by type if specified
174
+ const filteredResults = type && type !== 'all'
175
+ ? results.filter((item) => {
176
+ const typedItem = item;
177
+ return typedItem.type === type;
178
+ })
179
+ : results;
180
+ return {
181
+ success: true,
182
+ results: filteredResults,
183
+ count: filteredResults.length,
184
+ };
185
+ }
186
+ // Semantic search using suggest
187
+ const result = await api.suggest(query, { limit });
188
+ // Filter by type if specified
189
+ let filteredResults = result.results ?? [];
190
+ if (type && type !== 'all') {
191
+ filteredResults = filteredResults.filter((item) => item.type === type);
192
+ }
193
+ return {
194
+ success: true,
195
+ results: filteredResults,
196
+ count: filteredResults.length,
197
+ };
198
+ }
199
+ /**
200
+ * Execute update tool
201
+ */
202
+ async executeUpdate(api, input) {
203
+ const { id, outcome, reason } = input;
204
+ if (!id) {
205
+ return {
206
+ success: false,
207
+ message: 'Update requires: id',
208
+ };
209
+ }
210
+ if (!outcome) {
211
+ return {
212
+ success: false,
213
+ message: 'Update requires: outcome',
214
+ };
215
+ }
216
+ // Normalize outcome to uppercase
217
+ const normalizedOutcome = outcome.toUpperCase();
218
+ const validOutcomes = ['SUCCESS', 'FAILED', 'PARTIAL'];
219
+ if (!validOutcomes.includes(normalizedOutcome)) {
220
+ return {
221
+ success: false,
222
+ message: `Invalid outcome: ${outcome}. Must be one of: success, failed, partial`,
223
+ };
224
+ }
225
+ return await api.updateOutcome(id, {
226
+ outcome: normalizedOutcome,
227
+ failure_reason: reason,
228
+ });
229
+ }
230
+ /**
231
+ * Execute load_checkpoint tool
232
+ */
233
+ async executeLoadCheckpoint(api, _input) {
234
+ const checkpoint = await api.loadCheckpoint();
235
+ if (checkpoint && checkpoint.recentConversation && this.sessionStore) {
236
+ this.sessionStore.restoreMessages(checkpoint.recentConversation);
237
+ }
238
+ return checkpoint;
239
+ }
240
+ /**
241
+ * Execute read tool - Read file from filesystem
242
+ */
243
+ async executeRead(input) {
244
+ const { path: filePath } = input;
245
+ if (!filePath) {
246
+ return { success: false, error: 'Path is required' };
247
+ }
248
+ // Expand ~ to home directory
249
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
250
+ const expandedPath = filePath.startsWith('~/') ? (0, path_1.join)(homeDir, filePath.slice(2)) : filePath;
251
+ // Security: Only allow reading from ~/.mama/ directory
252
+ const mamaDir = (0, path_1.join)(homeDir, '.mama');
253
+ if (!expandedPath.startsWith(mamaDir)) {
254
+ return { success: false, error: `Access denied: Can only read files from ${mamaDir}` };
255
+ }
256
+ if (!(0, fs_1.existsSync)(expandedPath)) {
257
+ return { success: false, error: `File not found: ${expandedPath}` };
258
+ }
259
+ try {
260
+ const content = (0, fs_1.readFileSync)(expandedPath, 'utf-8');
261
+ return { success: true, content };
262
+ }
263
+ catch (err) {
264
+ return { success: false, error: `Failed to read file: ${err}` };
265
+ }
266
+ }
267
+ /**
268
+ * Execute Write tool - Write content to a file
269
+ */
270
+ async executeWrite(input) {
271
+ const { path, content } = input;
272
+ if (!path) {
273
+ return { success: false, error: 'path is required' };
274
+ }
275
+ try {
276
+ const dir = (0, path_1.dirname)(path);
277
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
278
+ (0, fs_1.writeFileSync)(path, content, 'utf-8');
279
+ return { success: true };
280
+ }
281
+ catch (err) {
282
+ return { success: false, error: `Failed to write file: ${err}` };
283
+ }
284
+ }
285
+ /**
286
+ * Execute Bash tool - Execute bash command
287
+ */
288
+ async executeBash(input) {
289
+ const { command, workdir } = input;
290
+ if (!command) {
291
+ return { success: false, error: 'command is required' };
292
+ }
293
+ try {
294
+ const output = (0, child_process_1.execSync)(command, {
295
+ cwd: workdir || process.cwd(),
296
+ encoding: 'utf-8',
297
+ maxBuffer: 10 * 1024 * 1024,
298
+ timeout: 60000,
299
+ });
300
+ return { success: true, output };
301
+ }
302
+ catch (err) {
303
+ return {
304
+ success: false,
305
+ error: `Command failed: ${err.message}`,
306
+ output: err.stdout || err.stderr,
307
+ };
308
+ }
309
+ }
310
+ /**
311
+ * Execute discord_send tool - Send message/image to Discord channel
312
+ */
313
+ async executeDiscordSend(input) {
314
+ const { channel_id, message, image_path } = input;
315
+ if (!channel_id) {
316
+ return { success: false, error: 'channel_id is required' };
317
+ }
318
+ if (!this.discordGateway) {
319
+ return { success: false, error: 'Discord gateway not configured' };
320
+ }
321
+ try {
322
+ if (image_path) {
323
+ await this.discordGateway.sendImage(channel_id, image_path, message);
324
+ }
325
+ else if (message) {
326
+ await this.discordGateway.sendMessage(channel_id, message);
327
+ }
328
+ else {
329
+ return { success: false, error: 'Either message or image_path is required' };
330
+ }
331
+ return { success: true };
332
+ }
333
+ catch (err) {
334
+ return { success: false, error: `Failed to send to Discord: ${err}` };
335
+ }
336
+ }
337
+ static getValidTools() {
338
+ return [...VALID_TOOLS];
339
+ }
340
+ /**
341
+ * Check if a tool name is valid
342
+ */
343
+ static isValidTool(toolName) {
344
+ return VALID_TOOLS.includes(toolName);
345
+ }
346
+ }
347
+ exports.GatewayToolExecutor = GatewayToolExecutor;
348
+ //# sourceMappingURL=gateway-tool-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-tool-executor.js","sourceRoot":"","sources":["../../src/agent/gateway-tool-executor.ts"],"names":[],"mappings":"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"}