openbotgate 1.0.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 (425) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -0
  3. package/bin/openbotgate.js +31 -0
  4. package/dist/config/config.d.ts +56 -0
  5. package/dist/config/config.d.ts.map +1 -0
  6. package/dist/config/config.js +136 -0
  7. package/dist/config/config.js.map +1 -0
  8. package/dist/debug.d.ts +2 -0
  9. package/dist/debug.d.ts.map +1 -0
  10. package/dist/debug.js +33 -0
  11. package/dist/debug.js.map +1 -0
  12. package/dist/gateway/bluebubbles.d.ts +12 -0
  13. package/dist/gateway/bluebubbles.d.ts.map +1 -0
  14. package/dist/gateway/bluebubbles.js +80 -0
  15. package/dist/gateway/bluebubbles.js.map +1 -0
  16. package/dist/gateway/catalog.d.ts +10 -0
  17. package/dist/gateway/catalog.d.ts.map +1 -0
  18. package/dist/gateway/catalog.js +28 -0
  19. package/dist/gateway/catalog.js.map +1 -0
  20. package/dist/gateway/discord.d.ts +12 -0
  21. package/dist/gateway/discord.d.ts.map +1 -0
  22. package/dist/gateway/discord.js +83 -0
  23. package/dist/gateway/discord.js.map +1 -0
  24. package/dist/gateway/feishu.d.ts +35 -0
  25. package/dist/gateway/feishu.d.ts.map +1 -0
  26. package/dist/gateway/feishu.js +290 -0
  27. package/dist/gateway/feishu.js.map +1 -0
  28. package/dist/gateway/googlechat.d.ts +11 -0
  29. package/dist/gateway/googlechat.d.ts.map +1 -0
  30. package/dist/gateway/googlechat.js +92 -0
  31. package/dist/gateway/googlechat.js.map +1 -0
  32. package/dist/gateway/imessage.d.ts +12 -0
  33. package/dist/gateway/imessage.d.ts.map +1 -0
  34. package/dist/gateway/imessage.js +84 -0
  35. package/dist/gateway/imessage.js.map +1 -0
  36. package/dist/gateway/index.d.ts +9 -0
  37. package/dist/gateway/index.d.ts.map +1 -0
  38. package/dist/gateway/index.js +27 -0
  39. package/dist/gateway/index.js.map +1 -0
  40. package/dist/gateway/line.d.ts +13 -0
  41. package/dist/gateway/line.d.ts.map +1 -0
  42. package/dist/gateway/line.js +80 -0
  43. package/dist/gateway/line.js.map +1 -0
  44. package/dist/gateway/matrix.d.ts +12 -0
  45. package/dist/gateway/matrix.d.ts.map +1 -0
  46. package/dist/gateway/matrix.js +105 -0
  47. package/dist/gateway/matrix.js.map +1 -0
  48. package/dist/gateway/mattermost.d.ts +14 -0
  49. package/dist/gateway/mattermost.d.ts.map +1 -0
  50. package/dist/gateway/mattermost.js +92 -0
  51. package/dist/gateway/mattermost.js.map +1 -0
  52. package/dist/gateway/msteams.d.ts +12 -0
  53. package/dist/gateway/msteams.d.ts.map +1 -0
  54. package/dist/gateway/msteams.js +119 -0
  55. package/dist/gateway/msteams.js.map +1 -0
  56. package/dist/gateway/nextcloud-talk.d.ts +11 -0
  57. package/dist/gateway/nextcloud-talk.d.ts.map +1 -0
  58. package/dist/gateway/nextcloud-talk.js +93 -0
  59. package/dist/gateway/nextcloud-talk.js.map +1 -0
  60. package/dist/gateway/nostr.d.ts +15 -0
  61. package/dist/gateway/nostr.d.ts.map +1 -0
  62. package/dist/gateway/nostr.js +95 -0
  63. package/dist/gateway/nostr.js.map +1 -0
  64. package/dist/gateway/qq-guild.d.ts +14 -0
  65. package/dist/gateway/qq-guild.d.ts.map +1 -0
  66. package/dist/gateway/qq-guild.js +121 -0
  67. package/dist/gateway/qq-guild.js.map +1 -0
  68. package/dist/gateway/qq.d.ts +14 -0
  69. package/dist/gateway/qq.d.ts.map +1 -0
  70. package/dist/gateway/qq.js +121 -0
  71. package/dist/gateway/qq.js.map +1 -0
  72. package/dist/gateway/registry.d.ts +4 -0
  73. package/dist/gateway/registry.d.ts.map +1 -0
  74. package/dist/gateway/registry.js +38 -0
  75. package/dist/gateway/registry.js.map +1 -0
  76. package/dist/gateway/signal.d.ts +12 -0
  77. package/dist/gateway/signal.d.ts.map +1 -0
  78. package/dist/gateway/signal.js +80 -0
  79. package/dist/gateway/signal.js.map +1 -0
  80. package/dist/gateway/slack.d.ts +12 -0
  81. package/dist/gateway/slack.d.ts.map +1 -0
  82. package/dist/gateway/slack.js +83 -0
  83. package/dist/gateway/slack.js.map +1 -0
  84. package/dist/gateway/stub.d.ts +7 -0
  85. package/dist/gateway/stub.d.ts.map +1 -0
  86. package/dist/gateway/stub.js +23 -0
  87. package/dist/gateway/stub.js.map +1 -0
  88. package/dist/gateway/telegram.d.ts +12 -0
  89. package/dist/gateway/telegram.d.ts.map +1 -0
  90. package/dist/gateway/telegram.js +61 -0
  91. package/dist/gateway/telegram.js.map +1 -0
  92. package/dist/gateway/tlon.d.ts +12 -0
  93. package/dist/gateway/tlon.d.ts.map +1 -0
  94. package/dist/gateway/tlon.js +105 -0
  95. package/dist/gateway/tlon.js.map +1 -0
  96. package/dist/gateway/types.d.ts +21 -0
  97. package/dist/gateway/types.d.ts.map +1 -0
  98. package/dist/gateway/types.js +3 -0
  99. package/dist/gateway/types.js.map +1 -0
  100. package/dist/gateway/whatsapp.d.ts +12 -0
  101. package/dist/gateway/whatsapp.d.ts.map +1 -0
  102. package/dist/gateway/whatsapp.js +81 -0
  103. package/dist/gateway/whatsapp.js.map +1 -0
  104. package/dist/gateway/zalo.d.ts +12 -0
  105. package/dist/gateway/zalo.d.ts.map +1 -0
  106. package/dist/gateway/zalo.js +77 -0
  107. package/dist/gateway/zalo.js.map +1 -0
  108. package/dist/gateway/zalouser.d.ts +12 -0
  109. package/dist/gateway/zalouser.d.ts.map +1 -0
  110. package/dist/gateway/zalouser.js +85 -0
  111. package/dist/gateway/zalouser.js.map +1 -0
  112. package/dist/handler/code/agent.d.ts +10 -0
  113. package/dist/handler/code/agent.d.ts.map +1 -0
  114. package/dist/handler/code/agent.js +63 -0
  115. package/dist/handler/code/agent.js.map +1 -0
  116. package/dist/handler/code/code.d.ts +15 -0
  117. package/dist/handler/code/code.d.ts.map +1 -0
  118. package/dist/handler/code/code.js +129 -0
  119. package/dist/handler/code/code.js.map +1 -0
  120. package/dist/handler/code/model.d.ts +10 -0
  121. package/dist/handler/code/model.d.ts.map +1 -0
  122. package/dist/handler/code/model.js +63 -0
  123. package/dist/handler/code/model.js.map +1 -0
  124. package/dist/handler/code/new.d.ts +7 -0
  125. package/dist/handler/code/new.d.ts.map +1 -0
  126. package/dist/handler/code/new.js +27 -0
  127. package/dist/handler/code/new.js.map +1 -0
  128. package/dist/handler/code/opencode.d.ts +12 -0
  129. package/dist/handler/code/opencode.d.ts.map +1 -0
  130. package/dist/handler/code/opencode.js +88 -0
  131. package/dist/handler/code/opencode.js.map +1 -0
  132. package/dist/handler/code/session.d.ts +9 -0
  133. package/dist/handler/code/session.d.ts.map +1 -0
  134. package/dist/handler/code/session.js +55 -0
  135. package/dist/handler/code/session.js.map +1 -0
  136. package/dist/handler/code/workspace.d.ts +10 -0
  137. package/dist/handler/code/workspace.d.ts.map +1 -0
  138. package/dist/handler/code/workspace.js +80 -0
  139. package/dist/handler/code/workspace.js.map +1 -0
  140. package/dist/handler/commands/agent.d.ts +10 -0
  141. package/dist/handler/commands/agent.d.ts.map +1 -0
  142. package/dist/handler/commands/agent.js +63 -0
  143. package/dist/handler/commands/agent.js.map +1 -0
  144. package/dist/handler/commands/async.d.ts +3 -0
  145. package/dist/handler/commands/async.d.ts.map +1 -0
  146. package/dist/handler/commands/async.js +30 -0
  147. package/dist/handler/commands/async.js.map +1 -0
  148. package/dist/handler/commands/claude.d.ts +3 -0
  149. package/dist/handler/commands/claude.d.ts.map +1 -0
  150. package/dist/handler/commands/claude.js +19 -0
  151. package/dist/handler/commands/claude.js.map +1 -0
  152. package/dist/handler/commands/code.d.ts +15 -0
  153. package/dist/handler/commands/code.d.ts.map +1 -0
  154. package/dist/handler/commands/code.js +133 -0
  155. package/dist/handler/commands/code.js.map +1 -0
  156. package/dist/handler/commands/git.d.ts +3 -0
  157. package/dist/handler/commands/git.d.ts.map +1 -0
  158. package/dist/handler/commands/git.js +25 -0
  159. package/dist/handler/commands/git.js.map +1 -0
  160. package/dist/handler/commands/help.d.ts +3 -0
  161. package/dist/handler/commands/help.d.ts.map +1 -0
  162. package/dist/handler/commands/help.js +49 -0
  163. package/dist/handler/commands/help.js.map +1 -0
  164. package/dist/handler/commands/index.d.ts +10 -0
  165. package/dist/handler/commands/index.d.ts.map +1 -0
  166. package/dist/handler/commands/index.js +43 -0
  167. package/dist/handler/commands/index.js.map +1 -0
  168. package/dist/handler/commands/model.d.ts +10 -0
  169. package/dist/handler/commands/model.d.ts.map +1 -0
  170. package/dist/handler/commands/model.js +63 -0
  171. package/dist/handler/commands/model.js.map +1 -0
  172. package/dist/handler/commands/new.d.ts +3 -0
  173. package/dist/handler/commands/new.d.ts.map +1 -0
  174. package/dist/handler/commands/new.js +25 -0
  175. package/dist/handler/commands/new.js.map +1 -0
  176. package/dist/handler/commands/opencode.d.ts +12 -0
  177. package/dist/handler/commands/opencode.d.ts.map +1 -0
  178. package/dist/handler/commands/opencode.js +131 -0
  179. package/dist/handler/commands/opencode.js.map +1 -0
  180. package/dist/handler/commands/session.d.ts +9 -0
  181. package/dist/handler/commands/session.d.ts.map +1 -0
  182. package/dist/handler/commands/session.js +55 -0
  183. package/dist/handler/commands/session.js.map +1 -0
  184. package/dist/handler/commands/shell.d.ts +11 -0
  185. package/dist/handler/commands/shell.d.ts.map +1 -0
  186. package/dist/handler/commands/shell.js +142 -0
  187. package/dist/handler/commands/shell.js.map +1 -0
  188. package/dist/handler/commands/status.d.ts +3 -0
  189. package/dist/handler/commands/status.d.ts.map +1 -0
  190. package/dist/handler/commands/status.js +21 -0
  191. package/dist/handler/commands/status.js.map +1 -0
  192. package/dist/handler/commands/sync.d.ts +3 -0
  193. package/dist/handler/commands/sync.d.ts.map +1 -0
  194. package/dist/handler/commands/sync.js +26 -0
  195. package/dist/handler/commands/sync.js.map +1 -0
  196. package/dist/handler/commands/tasks.d.ts +10 -0
  197. package/dist/handler/commands/tasks.d.ts.map +1 -0
  198. package/dist/handler/commands/tasks.js +58 -0
  199. package/dist/handler/commands/tasks.js.map +1 -0
  200. package/dist/handler/commands/utils.d.ts +10 -0
  201. package/dist/handler/commands/utils.d.ts.map +1 -0
  202. package/dist/handler/commands/utils.js +63 -0
  203. package/dist/handler/commands/utils.js.map +1 -0
  204. package/dist/handler/commands/workspace.d.ts +10 -0
  205. package/dist/handler/commands/workspace.d.ts.map +1 -0
  206. package/dist/handler/commands/workspace.js +80 -0
  207. package/dist/handler/commands/workspace.js.map +1 -0
  208. package/dist/handler/dedup.d.ts +3 -0
  209. package/dist/handler/dedup.d.ts.map +1 -0
  210. package/dist/handler/dedup.js +29 -0
  211. package/dist/handler/dedup.js.map +1 -0
  212. package/dist/handler/index.d.ts +21 -0
  213. package/dist/handler/index.d.ts.map +1 -0
  214. package/dist/handler/index.js +189 -0
  215. package/dist/handler/index.js.map +1 -0
  216. package/dist/handler/parse.d.ts +30 -0
  217. package/dist/handler/parse.d.ts.map +1 -0
  218. package/dist/handler/parse.js +57 -0
  219. package/dist/handler/parse.js.map +1 -0
  220. package/dist/handler/session/agent.d.ts +10 -0
  221. package/dist/handler/session/agent.d.ts.map +1 -0
  222. package/dist/handler/session/agent.js +63 -0
  223. package/dist/handler/session/agent.js.map +1 -0
  224. package/dist/handler/session/model.d.ts +10 -0
  225. package/dist/handler/session/model.d.ts.map +1 -0
  226. package/dist/handler/session/model.js +63 -0
  227. package/dist/handler/session/model.js.map +1 -0
  228. package/dist/handler/session/new.d.ts +3 -0
  229. package/dist/handler/session/new.d.ts.map +1 -0
  230. package/dist/handler/session/new.js +25 -0
  231. package/dist/handler/session/new.js.map +1 -0
  232. package/dist/handler/session/session.d.ts +9 -0
  233. package/dist/handler/session/session.d.ts.map +1 -0
  234. package/dist/handler/session/session.js +55 -0
  235. package/dist/handler/session/session.js.map +1 -0
  236. package/dist/handler/session/workspace.d.ts +10 -0
  237. package/dist/handler/session/workspace.d.ts.map +1 -0
  238. package/dist/handler/session/workspace.js +80 -0
  239. package/dist/handler/session/workspace.js.map +1 -0
  240. package/dist/handler/shell/git.d.ts +3 -0
  241. package/dist/handler/shell/git.d.ts.map +1 -0
  242. package/dist/handler/shell/git.js +25 -0
  243. package/dist/handler/shell/git.js.map +1 -0
  244. package/dist/handler/shell/runShell.d.ts +7 -0
  245. package/dist/handler/shell/runShell.d.ts.map +1 -0
  246. package/dist/handler/shell/runShell.js +42 -0
  247. package/dist/handler/shell/runShell.js.map +1 -0
  248. package/dist/handler/shell/utils.d.ts +10 -0
  249. package/dist/handler/shell/utils.d.ts.map +1 -0
  250. package/dist/handler/shell/utils.js +63 -0
  251. package/dist/handler/shell/utils.js.map +1 -0
  252. package/dist/handler/streamHandler.d.ts +9 -0
  253. package/dist/handler/streamHandler.d.ts.map +1 -0
  254. package/dist/handler/streamHandler.js +49 -0
  255. package/dist/handler/streamHandler.js.map +1 -0
  256. package/dist/handler/types.d.ts +36 -0
  257. package/dist/handler/types.d.ts.map +1 -0
  258. package/dist/handler/types.js +3 -0
  259. package/dist/handler/types.js.map +1 -0
  260. package/dist/handlers/messageHandler.d.ts +3 -0
  261. package/dist/handlers/messageHandler.d.ts.map +1 -0
  262. package/dist/handlers/messageHandler.js +249 -0
  263. package/dist/handlers/messageHandler.js.map +1 -0
  264. package/dist/handlers/messageHandlerOfficial.d.ts +2 -0
  265. package/dist/handlers/messageHandlerOfficial.d.ts.map +1 -0
  266. package/dist/handlers/messageHandlerOfficial.js +302 -0
  267. package/dist/handlers/messageHandlerOfficial.js.map +1 -0
  268. package/dist/handlers/messageHandlerV2.d.ts +2 -0
  269. package/dist/handlers/messageHandlerV2.d.ts.map +1 -0
  270. package/dist/handlers/messageHandlerV2.js +250 -0
  271. package/dist/handlers/messageHandlerV2.js.map +1 -0
  272. package/dist/helloWorld.d.ts +5 -0
  273. package/dist/helloWorld.d.ts.map +1 -0
  274. package/dist/helloWorld.js +19 -0
  275. package/dist/helloWorld.js.map +1 -0
  276. package/dist/index.d.ts +2 -0
  277. package/dist/index.d.ts.map +1 -0
  278. package/dist/index.js +25 -0
  279. package/dist/index.js.map +1 -0
  280. package/dist/indexOfficial.d.ts +4 -0
  281. package/dist/indexOfficial.d.ts.map +1 -0
  282. package/dist/indexOfficial.js +92 -0
  283. package/dist/indexOfficial.js.map +1 -0
  284. package/dist/indexV2.d.ts +4 -0
  285. package/dist/indexV2.d.ts.map +1 -0
  286. package/dist/indexV2.js +109 -0
  287. package/dist/indexV2.js.map +1 -0
  288. package/dist/runtime/cliTools.d.ts +17 -0
  289. package/dist/runtime/cliTools.d.ts.map +1 -0
  290. package/dist/runtime/cliTools.js +97 -0
  291. package/dist/runtime/cliTools.js.map +1 -0
  292. package/dist/runtime/executor.d.ts +27 -0
  293. package/dist/runtime/executor.d.ts.map +1 -0
  294. package/dist/runtime/executor.js +108 -0
  295. package/dist/runtime/executor.js.map +1 -0
  296. package/dist/runtime/sessionManager.d.ts +42 -0
  297. package/dist/runtime/sessionManager.d.ts.map +1 -0
  298. package/dist/runtime/sessionManager.js +161 -0
  299. package/dist/runtime/sessionManager.js.map +1 -0
  300. package/dist/runtime/streamHandler.d.ts +9 -0
  301. package/dist/runtime/streamHandler.d.ts.map +1 -0
  302. package/dist/runtime/streamHandler.js +49 -0
  303. package/dist/runtime/streamHandler.js.map +1 -0
  304. package/dist/runtime/taskManager.d.ts +26 -0
  305. package/dist/runtime/taskManager.d.ts.map +1 -0
  306. package/dist/runtime/taskManager.js +153 -0
  307. package/dist/runtime/taskManager.js.map +1 -0
  308. package/dist/runtime/tools/base.d.ts +81 -0
  309. package/dist/runtime/tools/base.d.ts.map +1 -0
  310. package/dist/runtime/tools/base.js +100 -0
  311. package/dist/runtime/tools/base.js.map +1 -0
  312. package/dist/runtime/tools/claudecode.d.ts +19 -0
  313. package/dist/runtime/tools/claudecode.d.ts.map +1 -0
  314. package/dist/runtime/tools/claudecode.js +59 -0
  315. package/dist/runtime/tools/claudecode.js.map +1 -0
  316. package/dist/runtime/tools/codex.d.ts +19 -0
  317. package/dist/runtime/tools/codex.d.ts.map +1 -0
  318. package/dist/runtime/tools/codex.js +68 -0
  319. package/dist/runtime/tools/codex.js.map +1 -0
  320. package/dist/runtime/tools/cursor.d.ts +15 -0
  321. package/dist/runtime/tools/cursor.d.ts.map +1 -0
  322. package/dist/runtime/tools/cursor.js +33 -0
  323. package/dist/runtime/tools/cursor.js.map +1 -0
  324. package/dist/runtime/tools/cursorcode.d.ts +20 -0
  325. package/dist/runtime/tools/cursorcode.d.ts.map +1 -0
  326. package/dist/runtime/tools/cursorcode.js +99 -0
  327. package/dist/runtime/tools/cursorcode.js.map +1 -0
  328. package/dist/runtime/tools/geminicode.d.ts +20 -0
  329. package/dist/runtime/tools/geminicode.d.ts.map +1 -0
  330. package/dist/runtime/tools/geminicode.js +65 -0
  331. package/dist/runtime/tools/geminicode.js.map +1 -0
  332. package/dist/runtime/tools/index.d.ts +11 -0
  333. package/dist/runtime/tools/index.d.ts.map +1 -0
  334. package/dist/runtime/tools/index.js +36 -0
  335. package/dist/runtime/tools/index.js.map +1 -0
  336. package/dist/runtime/tools/kimi.d.ts +16 -0
  337. package/dist/runtime/tools/kimi.d.ts.map +1 -0
  338. package/dist/runtime/tools/kimi.js +32 -0
  339. package/dist/runtime/tools/kimi.js.map +1 -0
  340. package/dist/runtime/tools/kimicode.d.ts +16 -0
  341. package/dist/runtime/tools/kimicode.d.ts.map +1 -0
  342. package/dist/runtime/tools/kimicode.js +43 -0
  343. package/dist/runtime/tools/kimicode.js.map +1 -0
  344. package/dist/runtime/tools/nanobot.d.ts +19 -0
  345. package/dist/runtime/tools/nanobot.d.ts.map +1 -0
  346. package/dist/runtime/tools/nanobot.js +94 -0
  347. package/dist/runtime/tools/nanobot.js.map +1 -0
  348. package/dist/runtime/tools/openaicodex.d.ts +17 -0
  349. package/dist/runtime/tools/openaicodex.d.ts.map +1 -0
  350. package/dist/runtime/tools/openaicodex.js +54 -0
  351. package/dist/runtime/tools/openaicodex.js.map +1 -0
  352. package/dist/runtime/tools/openclaw.d.ts +24 -0
  353. package/dist/runtime/tools/openclaw.d.ts.map +1 -0
  354. package/dist/runtime/tools/openclaw.js +88 -0
  355. package/dist/runtime/tools/openclaw.js.map +1 -0
  356. package/dist/runtime/tools/opencode.d.ts +23 -0
  357. package/dist/runtime/tools/opencode.d.ts.map +1 -0
  358. package/dist/runtime/tools/opencode.js +82 -0
  359. package/dist/runtime/tools/opencode.js.map +1 -0
  360. package/dist/runtime/tools/qwencode.d.ts +17 -0
  361. package/dist/runtime/tools/qwencode.d.ts.map +1 -0
  362. package/dist/runtime/tools/qwencode.js +49 -0
  363. package/dist/runtime/tools/qwencode.js.map +1 -0
  364. package/dist/runtime/tools/registerAll.d.ts +9 -0
  365. package/dist/runtime/tools/registerAll.d.ts.map +1 -0
  366. package/dist/runtime/tools/registerAll.js +29 -0
  367. package/dist/runtime/tools/registerAll.js.map +1 -0
  368. package/dist/runtime/tools/registry.d.ts +21 -0
  369. package/dist/runtime/tools/registry.d.ts.map +1 -0
  370. package/dist/runtime/tools/registry.js +41 -0
  371. package/dist/runtime/tools/registry.js.map +1 -0
  372. package/dist/runtime/tools/types.d.ts +67 -0
  373. package/dist/runtime/tools/types.d.ts.map +1 -0
  374. package/dist/runtime/tools/types.js +3 -0
  375. package/dist/runtime/tools/types.js.map +1 -0
  376. package/dist/services/cliTools.d.ts +32 -0
  377. package/dist/services/cliTools.d.ts.map +1 -0
  378. package/dist/services/cliTools.js +149 -0
  379. package/dist/services/cliTools.js.map +1 -0
  380. package/dist/services/commandExecutor.d.ts +29 -0
  381. package/dist/services/commandExecutor.d.ts.map +1 -0
  382. package/dist/services/commandExecutor.js +125 -0
  383. package/dist/services/commandExecutor.js.map +1 -0
  384. package/dist/services/commandExecutor.test.d.ts +2 -0
  385. package/dist/services/commandExecutor.test.d.ts.map +1 -0
  386. package/dist/services/commandExecutor.test.js +54 -0
  387. package/dist/services/commandExecutor.test.js.map +1 -0
  388. package/dist/services/feishuService.d.ts +14 -0
  389. package/dist/services/feishuService.d.ts.map +1 -0
  390. package/dist/services/feishuService.js +103 -0
  391. package/dist/services/feishuService.js.map +1 -0
  392. package/dist/services/feishuServiceOfficial.d.ts +15 -0
  393. package/dist/services/feishuServiceOfficial.d.ts.map +1 -0
  394. package/dist/services/feishuServiceOfficial.js +167 -0
  395. package/dist/services/feishuServiceOfficial.js.map +1 -0
  396. package/dist/services/feishuServiceV2.d.ts +20 -0
  397. package/dist/services/feishuServiceV2.d.ts.map +1 -0
  398. package/dist/services/feishuServiceV2.js +222 -0
  399. package/dist/services/feishuServiceV2.js.map +1 -0
  400. package/dist/services/taskManager.d.ts +25 -0
  401. package/dist/services/taskManager.d.ts.map +1 -0
  402. package/dist/services/taskManager.js +129 -0
  403. package/dist/services/taskManager.js.map +1 -0
  404. package/dist/services/taskManagerSimple.d.ts +25 -0
  405. package/dist/services/taskManagerSimple.d.ts.map +1 -0
  406. package/dist/services/taskManagerSimple.js +147 -0
  407. package/dist/services/taskManagerSimple.js.map +1 -0
  408. package/dist/testHelloWorld.d.ts +2 -0
  409. package/dist/testHelloWorld.d.ts.map +1 -0
  410. package/dist/testHelloWorld.js +18 -0
  411. package/dist/testHelloWorld.js.map +1 -0
  412. package/dist/utils/encoding.d.ts +3 -0
  413. package/dist/utils/encoding.d.ts.map +1 -0
  414. package/dist/utils/encoding.js +110 -0
  415. package/dist/utils/encoding.js.map +1 -0
  416. package/dist/utils/logger.d.ts +19 -0
  417. package/dist/utils/logger.d.ts.map +1 -0
  418. package/dist/utils/logger.js +192 -0
  419. package/dist/utils/logger.js.map +1 -0
  420. package/dist/utils/shellEncoding.d.ts +5 -0
  421. package/dist/utils/shellEncoding.d.ts.map +1 -0
  422. package/dist/utils/shellEncoding.js +117 -0
  423. package/dist/utils/shellEncoding.js.map +1 -0
  424. package/openbotgate.example.yml +60 -0
  425. package/package.json +81 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 OpenBotGate Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,293 @@
1
+ # OpenBotGate
2
+
3
+ **AI 编程工具网关** — 通过飞书等聊天工具,在对话里直接唤起 OpenCode、Claude Code 等 AI 编程 CLI。
4
+ **专为灵感涌现时的你而设计**:想法来了就发一条消息,不必切到终端、不必离开当前上下文。
5
+
6
+ OpenBotGate 是一个命令行工具,由AI编码创建。灵感来自 OpenClaw,保留了机器人网关通信能供,通过非互交方式调用 AI Code CLI 工具。这些AI编码工具本身就代表了当前AI的强大能力,几乎可以完成市面上所有AI工具能完成的任务。你可以下载此项目使用 AI Code 工具继续添加更多特性,当前项目中提供了我自己使用的 [AGENTS.md](AGENTS.md)。虽然我使用的语言是中文,不过你可以借助 AI 轻松突破语言的限制。
7
+
8
+ 关于AI编码我一开始创建了一个简单原型不过竟然完全没有运行成功,例如使用 spawn 调用 opencode 花费了半天时间才把跑通这个基本功能,可以说项目一开始就给我了一个闷棍,心中感觉生活依然还是不容易的。AI一开始创建的代码也是非常乱糟糟的,看起来并不像一位专业程序员所写的代码。在完成了原型功能后,我用了3次大的代码重构使得代码成了现在的样子,最终还是感谢AI,没有它这个想法都不一定能实现。
9
+
10
+ 关于机器人网关推荐使用飞书,他有Feishu(中国版)/Lark(国际版), 在它的开发者平台创建机器人我是最容易的,其它的平台我竟然都没有把机器人创建成功。所以当前除了feishu/lark我测试了其它的的都没有测试请见谅。飞书还有一个优点是同一个账号可以在多个设备上运行这点很适合我。
11
+
12
+ ## 功能特性
13
+
14
+ - ✅ **官方 SDK 集成**:使用飞书官方 `@larksuiteoapi/node-sdk`,确保稳定性和兼容性
15
+ - ✅ **长连接**:使用飞书官方 SDK 长连接接收事件,无需 Webhook 公网地址
16
+ - ✅ **多工具支持**:OpenCode、Claude Code、Cursor、Qwen、Kimi、Gemini、OpenClaw、Nanobot 等 Code 工具;Shell 命令(默认 git、pwd)
17
+ - ✅ **可定制可执行文件**:Code 工具与 Shell 命令均可配置为调用自定义脚本(如 `claude.ps1`、`git.ps1`)
18
+ - ✅ **任务管理**:查看状态、取消任务、历史记录
19
+ - ✅ **配置文件驱动**:使用 `openbotgate.yml` / `openbotgate.json` 统一配置,YAML 支持注释
20
+ - ✅ **安全控制**:Code 工具与 Shell 命令均通过白名单控制;执行超时与输出截断
21
+
22
+ ## 快速开始
23
+
24
+ ### 安装
25
+
26
+ **方式一:npx 直接运行(无需安装)**
27
+
28
+ ```bash
29
+ npx openbotgate
30
+ ```
31
+
32
+ **方式二:全局安装后使用 CLI**
33
+
34
+ ```bash
35
+ npm install -g openbotgate
36
+ openbotgate
37
+ ```
38
+
39
+ **方式三:克隆项目本地开发**
40
+
41
+ ```bash
42
+ git clone https://github.com/dachongbaba/openbotgate.git
43
+ cd openbotgate
44
+ pnpm install
45
+ ```
46
+
47
+ CLI 支持:
48
+
49
+ - `openbotgate` — 启动网关服务
50
+ - `openbotgate --help` / `openbotgate -h` — 显示帮助
51
+ - `openbotgate --version` / `openbotgate -v` — 显示版本
52
+
53
+ ### 1. 配置文件
54
+
55
+ 所有配置通过 **配置文件** 加载,**不使用环境变量**。从当前工作目录读取 `openbotgate.yml`、`openbotgate.yaml` 或 `openbotgate.json`(按此顺序,找到即用)。
56
+
57
+ 复制示例并编辑:
58
+
59
+ ```bash
60
+ cp openbotgate.example.yml openbotgate.yml
61
+ ```
62
+
63
+ 编辑 `openbotgate.yml`,至少填写飞书应用信息:
64
+
65
+ ```yaml
66
+ gateway:
67
+ type: feishu
68
+
69
+ feishu:
70
+ appId: "你的 App ID"
71
+ appSecret: "你的 App Secret"
72
+ verificationToken: "" # 可选
73
+ domain: feishu # 国内用 feishu,国际用 lark
74
+ ```
75
+
76
+ 其他如执行超时、白名单、Code/Shell 命令覆盖等见下方「配置文件说明」及 `openbotgate.example.yml` 内注释。
77
+
78
+ ### 2. 启动服务
79
+
80
+ ```bash
81
+ # 使用 CLI(已全局安装或 npx 时)
82
+ openbotgate
83
+
84
+ # 或本地开发
85
+ npm run dev # 开发模式(热重载)
86
+ npm run build && npm start # 生产模式
87
+ ```
88
+
89
+ 服务通过 **飞书官方 SDK 长连接** 接收消息,无需部署本地 HTTP 服务或公网地址。
90
+
91
+ ### 3. 配置飞书机器人
92
+
93
+ 1. 登录 [飞书开放平台](https://open.feishu.cn/)
94
+ 2. 创建应用,获取 App ID 和 App Secret
95
+ 3. 配置机器人能力,添加以下权限:
96
+ - `im:message`(发送和接收消息)
97
+ - `im:message.p2p_msg:readonly`(读取私聊消息)
98
+ - `im:message.group_at_msg:readonly`(接收群内 @ 消息)
99
+ - `im:message:send_as_bot`(以机器人身份发送消息)
100
+ - `im:resource`(上传/下载媒体文件)
101
+ 4. **配置事件订阅**(重要):
102
+ - 进入 **事件与回调** 页面
103
+ - 选择 **使用长连接接收事件**(推荐)
104
+ - 添加事件订阅:`im.message.receive_v1`(接收消息)
105
+ 5. 发布应用
106
+
107
+ ## 使用方法
108
+
109
+ 在飞书聊天中,可直接发送**纯文本**(不带 `/`)作为提示词,使用当前选中的 Code 工具执行;或使用以下命令。
110
+
111
+ ### Code 工具与会话
112
+
113
+ | 命令 | 说明 |
114
+ |------|------|
115
+ | `/code` | 显示当前工具及可用工具列表 |
116
+ | `/code <tool>` | 切换默认工具(如 opencode、claudecode、cursorcode、openaicodex、qwen、kimi、geminicode、openclaw、nanobot) |
117
+ | `/code <tool> "prompt"` | 使用指定工具一次性执行提示词 |
118
+ | `/new` | 新建会话(清空历史,取消当前任务) |
119
+ | `/session` | 列出会话;`/session <id>` 切换到指定会话 |
120
+ | `/model` | 列出当前工具可用模型;`/model <name>` 设置模型;`/model reset` 恢复默认 |
121
+ | `/agent` | 列出当前工具可用 Agent;`/agent <name>` 设置 Agent;`/agent reset` 恢复默认 |
122
+ | `/workspace` | 显示当前工作目录;`/workspace <path>` 设置工作目录;`/workspace reset` 恢复默认 |
123
+
124
+ ### Shell 命令
125
+
126
+ 在配置的 `allowedShellCommands` 中的命令可通过 `/<命令名> <参数>` 执行,例如 `/git status`、`/pwd`。默认仅允许 `git`、`pwd`;可在配置文件中增加或通过 `shellCommandOverrides` 指定实际调用的脚本(如 `git.ps1`)。
127
+
128
+ ### 任务与系统
129
+
130
+ | 命令 | 说明 |
131
+ |------|------|
132
+ | `/help` | 显示帮助信息 |
133
+ | `/status` | 显示系统状态 |
134
+ | `/tasks` | 列出当前用户运行中的任务 |
135
+ | `/cancel <task_id>` | 取消指定任务 |
136
+
137
+ ### 使用示例
138
+
139
+ ```
140
+ 写一个计算斐波那契数列的函数 # 用当前工具执行
141
+
142
+ /code opencode # 切换到 OpenCode
143
+ /code claude "为这个项目生成单元测试" # 用 Claude 一次性执行
144
+
145
+ /new # 新建会话
146
+ /model # 查看可用模型
147
+ /workspace /path/to/project # 设置工作目录
148
+
149
+ /git status # 执行 shell 命令
150
+ /tasks # 查看运行中的任务
151
+ /cancel abc-123 # 取消任务
152
+ ```
153
+
154
+ ## 配置文件说明
155
+
156
+ 配置**仅**从 `openbotgate.yml` / `openbotgate.yaml` / `openbotgate.json` 加载,不从环境变量读取。未提供配置文件时使用内置默认值。
157
+
158
+ | 配置块 / 字段 | 说明 | 默认 |
159
+ |---------------|------|------|
160
+ | **gateway** | | |
161
+ | `gateway.type` | 网关类型(当前仅实现 feishu / lark) | feishu |
162
+ | **feishu** | | |
163
+ | `feishu.appId` | 飞书应用 ID | 必填 |
164
+ | `feishu.appSecret` | 飞书应用密钥 | 必填 |
165
+ | `feishu.verificationToken` | 事件订阅验证令牌 | 可选 |
166
+ | `feishu.domain` | 飞书域名:feishu(国内)/ lark(国际) | feishu |
167
+ | **execution** | | |
168
+ | `execution.timeout` | 命令执行超时(毫秒,上限 180000) | 120000 |
169
+ | `execution.codeTimeout` | Code 工具单独超时(毫秒,可选) | 同 timeout |
170
+ | `execution.maxOutputLength` | 单次输出最大长度 | 10000 |
171
+ | `execution.shellOutputEncoding` | Shell 输出编码(如 Windows 下 gbk,可选) | 系统编码 |
172
+ | **白名单** | | |
173
+ | `allowedCodeTools` | 允许的 Code 工具(适配器名列表) | opencode, cursorcode, claudecode, openaicodex, qwencode, kimicode, geminicode, openclaw, nanobot |
174
+ | `allowedShellCommands` | 允许的 Shell 命令首词列表 | git, pwd |
175
+ | **覆盖** | | |
176
+ | `codeToolOverrides` | Code 适配器 → 实际可执行名(如 claudecode: claude.ps1) | {} |
177
+ | `shellCommandOverrides` | Shell 命令首词 → 实际可执行名(如 git: git.ps1) | {} |
178
+
179
+ 完整示例见 **openbotgate.example.yml**。网关类型与多网关说明见 **[docs/GATEWAYS.md](docs/GATEWAYS.md)**。
180
+
181
+ ## 项目结构
182
+
183
+ ```
184
+ openbotgate/
185
+ ├── src/
186
+ │ ├── config/ # 配置:从 openbotgate.yml/json 加载
187
+ │ │ └── config.ts
188
+ │ ├── gateway/ # 外部平台网关
189
+ │ │ ├── index.ts # 网关注册与分发
190
+ │ │ ├── catalog.ts # 网关目录
191
+ │ │ ├── registry.ts # 网关注册表
192
+ │ │ ├── types.ts
193
+ │ │ ├── feishu.ts # 飞书 API 集成
194
+ │ │ ├── telegram.ts
195
+ │ │ ├── discord.ts
196
+ │ │ ├── whatsapp.ts
197
+ │ │ └── qq.ts
198
+ │ ├── handler/ # 消息处理
199
+ │ │ ├── index.ts # 路由入口
200
+ │ │ ├── parse.ts # 消息解析
201
+ │ │ ├── dedup.ts # 去重
202
+ │ │ ├── types.ts
203
+ │ │ ├── commands/ # 命令处理器
204
+ │ │ │ ├── index.ts # 命令注册
205
+ │ │ │ ├── code.ts # /code 与默认执行
206
+ │ │ │ ├── help.ts
207
+ │ │ │ ├── shell.ts
208
+ │ │ │ ├── status.ts
209
+ │ │ │ └── tasks.ts # /tasks、/cancel
210
+ │ │ └── code/ # Code 相关命令
211
+ │ │ ├── new.ts # /new
212
+ │ │ ├── model.ts # /model
213
+ │ │ ├── session.ts
214
+ │ │ ├── agent.ts
215
+ │ │ └── workspace.ts
216
+ │ ├── runtime/ # 运行时
217
+ │ │ ├── executor.ts # 命令执行器
218
+ │ │ ├── cliTools.ts # CLI 调用入口
219
+ │ │ ├── sessionManager.ts
220
+ │ │ ├── streamHandler.ts
221
+ │ │ ├── taskManager.ts
222
+ │ │ └── tools/ # Code 工具适配器
223
+ │ │ ├── registry.ts
224
+ │ │ ├── base.ts
225
+ │ │ ├── opencode.ts
226
+ │ │ ├── claudecode.ts
227
+ │ │ ├── cursorcode.ts
228
+ │ │ ├── openaicodex.ts
229
+ │ │ ├── qwencode.ts
230
+ │ │ ├── kimicode.ts
231
+ │ │ ├── geminicode.ts
232
+ │ │ ├── openclaw.ts
233
+ │ │ └── nanobot.ts
234
+ │ ├── utils/
235
+ │ │ ├── logger.ts
236
+ │ │ └── encoding.ts
237
+ │ └── index.ts # 入口
238
+ ├── test/
239
+ ├── docs/ # GATEWAYS.md、PUBLISHING.md
240
+ ├── AGENTS.md # Agent 操作指南
241
+ ├── CONTRIBUTING.md
242
+ ├── openbotgate.example.yml # 配置示例(复制为 openbotgate.yml 使用)
243
+ ├── package.json
244
+ ├── tsconfig.json
245
+ ├── tsconfig.test.json
246
+ ├── jest.config.js
247
+ ├── nodemon.json
248
+ └── .env.example # 仅说明:本产品不从环境变量加载配置
249
+ ```
250
+
251
+ ## 架构设计
252
+
253
+ - **gateway/** — 外部平台集成层,隔离第三方 API
254
+ - **handler/** — 消息处理层,解析并路由命令
255
+ - **runtime/** — 运行时层,执行 CLI 工具和管理任务
256
+ - **config/** — 配置层,从 `openbotgate.yml` / `openbotgate.json` 加载,统一导出 `config`
257
+
258
+ ## 扩展支持
259
+
260
+ ### 添加新的聊天平台
261
+
262
+ 1. 在 `src/gateway/` 下创建新平台适配器,实现 `IGateway`
263
+ 2. 在 `gateway/catalog.ts` 与 `gateway/registry.ts` 中注册
264
+ 3. 在 `handler/index.ts` 中按 `gateway.id` 解析 payload
265
+
266
+ ### 添加新命令
267
+
268
+ 在 `src/handler/commands/` 下创建新文件,导出 `run(ctx: CommandContext): Promise<void>`,在 `src/handler/commands/index.ts` 的 `commands` 中注册。
269
+
270
+ ### 启用更多 Shell 命令
271
+
272
+ 在配置文件 `openbotgate.yml` 的 `allowedShellCommands` 中加入命令首词(如 `ls`、`dir`),即可通过 `/ls`、`/dir` 等调用。若需实际执行自定义脚本,可配置 `shellCommandOverrides`(如 `dir: dir.ps1`)。
273
+
274
+ ### 添加新的 Code 工具(CLI 适配器)
275
+
276
+ 1. 在 `src/runtime/tools/` 下新建适配器,实现 `ToolAdapter`(参见 `base.ts`)
277
+ 2. 在 `src/runtime/tools/index.ts` 的 `ALL_ADAPTERS` 中注册
278
+ 3. 在配置文件的 `allowedCodeTools` 中加入适配器名称;如需自定义可执行名,在 `codeToolOverrides` 中配置
279
+
280
+ ## 安全考虑
281
+
282
+ - ⚠️ Shell 仅允许 `allowedShellCommands` 中的首词执行,默认仅 `git`、`pwd`
283
+ - 📝 命令执行有超时限制(默认 120s,最大 180s),防止长时间运行
284
+ - 🔒 敏感信息(appSecret、token 等)写在配置文件中;不要将 `openbotgate.yml` 提交到仓库(已列入 .gitignore),可提交 `openbotgate.example.yml` 作为模板
285
+ - 🛡️ Code 工具与 Shell 命令均通过白名单控制;可按需配合 `codeToolOverrides` / `shellCommandOverrides` 使用封装脚本
286
+
287
+ ## 发布(GitHub / npm)
288
+
289
+ 完整流程与 rebase 约定见 **[docs/PUBLISHING.md](docs/PUBLISHING.md)**。
290
+
291
+ ## License
292
+
293
+ MIT
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+
3
+ const path = require('path');
4
+
5
+ const args = process.argv.slice(2);
6
+ const showVersion = args.includes('--version') || args.includes('-v');
7
+ const showHelp = args.includes('--help') || args.includes('-h');
8
+
9
+ if (showVersion) {
10
+ const pkg = require(path.join(__dirname, '..', 'package.json'));
11
+ console.log(pkg.version);
12
+ process.exit(0);
13
+ }
14
+
15
+ if (showHelp) {
16
+ console.log(`
17
+ OpenBotGate - AI coding tool gateway, for when inspiration strikes
18
+
19
+ Usage:
20
+ openbotgate Start the gateway server (default)
21
+ openbotgate --help Show this help
22
+ openbotgate --version Show version
23
+
24
+ Environment:
25
+ Copy .env.example to .env and configure your gateway (e.g. Feishu).
26
+ See https://github.com/dachongbaba/openbotgate#readme
27
+ `);
28
+ process.exit(0);
29
+ }
30
+
31
+ require(path.join(__dirname, '..', 'dist', 'index.js'));
@@ -0,0 +1,56 @@
1
+ /** 最大允许执行超时(毫秒) */
2
+ export declare const MAX_EXECUTION_TIMEOUT_MS = 180000;
3
+ export interface BotConfig {
4
+ gateway: {
5
+ type: string;
6
+ };
7
+ feishu: {
8
+ appId: string;
9
+ appSecret: string;
10
+ verificationToken?: string;
11
+ domain: 'feishu' | 'lark';
12
+ };
13
+ telegram?: {
14
+ token: string;
15
+ };
16
+ whatsapp?: {
17
+ sessionPath?: string;
18
+ logQr?: boolean;
19
+ };
20
+ discord?: {
21
+ token: string;
22
+ };
23
+ qqGuild?: {
24
+ appID: string;
25
+ token: string;
26
+ intents?: string[];
27
+ sandbox?: boolean;
28
+ };
29
+ execution: {
30
+ timeout: number;
31
+ codeTimeout?: number;
32
+ maxOutputLength: number;
33
+ shellOutputEncoding?: string;
34
+ };
35
+ allowedCodeTools: string[];
36
+ allowedShellCommands: string[];
37
+ codeToolOverrides: Record<string, string>;
38
+ /** Shell 命令可执行文件覆盖(命令首词 -> 实际调用的命令/脚本),如 git -> git.ps1 */
39
+ shellCommandOverrides: Record<string, string>;
40
+ /** 日志配置 */
41
+ log: {
42
+ /** 级别:error | warn | info | debug */
43
+ level: string;
44
+ /** 日志目录,相对当前工作目录或绝对路径,默认 logs */
45
+ dir: string;
46
+ /** 单文件最大大小,如 20m,默认 20m */
47
+ maxSize: string;
48
+ /** 保留天数,如 14d,默认 14d */
49
+ maxFiles: string;
50
+ /** 调试模式:为 true 时 shell 等仅打日志不回复、便于本地调试;默认 false */
51
+ debugMode?: boolean;
52
+ };
53
+ }
54
+ export declare function loadConfig(): BotConfig;
55
+ export declare const config: BotConfig;
56
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAIA,mBAAmB;AACnB,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAS/C,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrD,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,2DAA2D;IAC3D,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,WAAW;IACX,GAAG,EAAE;QACH,qCAAqC;QACrC,KAAK,EAAE,MAAM,CAAC;QACd,iCAAiC;QACjC,GAAG,EAAE,MAAM,CAAC;QACZ,2BAA2B;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,wBAAwB;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,mDAAmD;QACnD,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAwGD,wBAAgB,UAAU,IAAI,SAAS,CAItC;AAED,eAAO,MAAM,MAAM,WAAe,CAAC"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.config = exports.MAX_EXECUTION_TIMEOUT_MS = void 0;
37
+ exports.loadConfig = loadConfig;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const yaml = __importStar(require("js-yaml"));
41
+ /** 最大允许执行超时(毫秒) */
42
+ exports.MAX_EXECUTION_TIMEOUT_MS = 180000;
43
+ const DEFAULT_ALLOWED_CODE_TOOLS = [
44
+ 'opencode', 'cursorcode', 'claudecode', 'openaicodex',
45
+ 'qwencode', 'kimicode', 'geminicode', 'openclaw', 'nanobot',
46
+ ];
47
+ const DEFAULT_ALLOWED_SHELL_COMMANDS = ['git', 'pwd'];
48
+ function defaultConfig() {
49
+ return {
50
+ gateway: { type: 'feishu' },
51
+ feishu: {
52
+ appId: '',
53
+ appSecret: '',
54
+ verificationToken: undefined,
55
+ domain: 'feishu',
56
+ },
57
+ telegram: undefined,
58
+ whatsapp: undefined,
59
+ discord: undefined,
60
+ qqGuild: undefined,
61
+ execution: {
62
+ timeout: 120000,
63
+ codeTimeout: undefined,
64
+ maxOutputLength: 10000,
65
+ shellOutputEncoding: undefined,
66
+ },
67
+ allowedCodeTools: [...DEFAULT_ALLOWED_CODE_TOOLS],
68
+ allowedShellCommands: [...DEFAULT_ALLOWED_SHELL_COMMANDS],
69
+ codeToolOverrides: {},
70
+ shellCommandOverrides: {},
71
+ log: {
72
+ level: 'info',
73
+ dir: 'logs',
74
+ maxSize: '20m',
75
+ maxFiles: '14d',
76
+ debugMode: false,
77
+ },
78
+ };
79
+ }
80
+ const CONFIG_NAMES = ['openbotgate.yml', 'openbotgate.yaml', 'openbotgate.json'];
81
+ function findConfigPath() {
82
+ const cwd = process.cwd();
83
+ for (const name of CONFIG_NAMES) {
84
+ const p = path.join(cwd, name);
85
+ if (fs.existsSync(p))
86
+ return p;
87
+ }
88
+ return null;
89
+ }
90
+ function parseConfigFile(filePath) {
91
+ const raw = fs.readFileSync(filePath, 'utf8');
92
+ const ext = path.extname(filePath).toLowerCase();
93
+ if (ext === '.json') {
94
+ return JSON.parse(raw);
95
+ }
96
+ if (ext === '.yml' || ext === '.yaml') {
97
+ return yaml.load(raw) ?? {};
98
+ }
99
+ return {};
100
+ }
101
+ function mergeDeep(target, source) {
102
+ if (source == null)
103
+ return target;
104
+ const out = { ...target };
105
+ for (const key of Object.keys(source)) {
106
+ const s = source[key];
107
+ if (s === undefined)
108
+ continue;
109
+ const t = out[key];
110
+ if (Array.isArray(s)) {
111
+ out[key] = s;
112
+ }
113
+ else if (t != null && typeof t === 'object' && !Array.isArray(t) && typeof s === 'object' && s !== null && !Array.isArray(s)) {
114
+ out[key] = mergeDeep(t, s);
115
+ }
116
+ else {
117
+ out[key] = s;
118
+ }
119
+ }
120
+ return out;
121
+ }
122
+ function rawToConfig(raw) {
123
+ const def = defaultConfig();
124
+ const merged = mergeDeep(def, raw);
125
+ if (merged.execution.timeout > exports.MAX_EXECUTION_TIMEOUT_MS) {
126
+ merged.execution.timeout = exports.MAX_EXECUTION_TIMEOUT_MS;
127
+ }
128
+ return merged;
129
+ }
130
+ function loadConfig() {
131
+ const def = defaultConfig();
132
+ const configPath = findConfigPath();
133
+ return configPath ? rawToConfig(parseConfigFile(configPath)) : def;
134
+ }
135
+ exports.config = loadConfig();
136
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,CAAC"}
package/dist/debug.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const registry_1 = require("./gateway/registry");
7
+ const handler_1 = require("./handler");
8
+ const logger_1 = __importDefault(require("./utils/logger"));
9
+ // Set debug mode
10
+ process.env.DEBUG = 'true';
11
+ // Debug mode: simulate message processing without Feishu connection
12
+ async function debugMode() {
13
+ logger_1.default.info('OpenBotGate Debug Mode');
14
+ logger_1.default.info('Simulating message processing...');
15
+ const gateway = (0, registry_1.getGateway)('feishu');
16
+ const mockMessage = {
17
+ message: {
18
+ message_id: 'mock_msg_123',
19
+ chat_id: 'mock_chat_456',
20
+ content: '{"text":"写一个hello world函数"}',
21
+ message_type: 'text',
22
+ },
23
+ sender: {
24
+ sender_id: {
25
+ open_id: 'mock_user_789',
26
+ },
27
+ },
28
+ };
29
+ await (0, handler_1.handleMessageEvent)(gateway, mockMessage);
30
+ }
31
+ // Run debug mode directly
32
+ debugMode().catch((err) => logger_1.default.error('Debug mode failed', err));
33
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":";;;;;AAAA,iDAAgD;AAChD,uCAA+C;AAC/C,4DAAoC;AAEpC,iBAAiB;AACjB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;AAE3B,oEAAoE;AACpE,KAAK,UAAU,SAAS;IACtB,gBAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtC,gBAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAA,qBAAU,EAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE;YACP,UAAU,EAAE,cAAc;YAC1B,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,6BAA6B;YACtC,YAAY,EAAE,MAAM;SACrB;QACD,MAAM,EAAE;YACN,SAAS,EAAE;gBACT,OAAO,EAAE,eAAe;aACzB;SACF;KACF,CAAC;IAEF,MAAM,IAAA,4BAAkB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,0BAA0B;AAC1B,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { IGateway } from './types';
2
+ export declare class BlueBubblesGateway implements IGateway {
3
+ readonly id = "bluebubbles";
4
+ private messageToChat;
5
+ private baseUrl;
6
+ private password;
7
+ start(messageHandler: (data: unknown) => Promise<void>): void;
8
+ reply(messageId: string, text: string): Promise<void>;
9
+ send(chatId: string, _chatIdType: string, title: string, content: string): Promise<void>;
10
+ }
11
+ export declare const bluebubbles: BlueBubblesGateway;
12
+ //# sourceMappingURL=bluebubbles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bluebubbles.d.ts","sourceRoot":"","sources":["../../src/gateway/bluebubbles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,qBAAa,kBAAmB,YAAW,QAAQ;IACjD,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAM;IAEtB,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAsCvD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAY/F;AAED,eAAO,MAAM,WAAW,oBAA2B,CAAC"}