im-hub-pro 0.2.29

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 (384) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +497 -0
  3. package/README.zh-CN.md +496 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +921 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/core/acp-server.d.ts +8 -0
  9. package/dist/core/acp-server.d.ts.map +1 -0
  10. package/dist/core/acp-server.js +266 -0
  11. package/dist/core/acp-server.js.map +1 -0
  12. package/dist/core/agent-base.d.ts +94 -0
  13. package/dist/core/agent-base.d.ts.map +1 -0
  14. package/dist/core/agent-base.js +374 -0
  15. package/dist/core/agent-base.js.map +1 -0
  16. package/dist/core/agent-cwd.d.ts +45 -0
  17. package/dist/core/agent-cwd.d.ts.map +1 -0
  18. package/dist/core/agent-cwd.js +178 -0
  19. package/dist/core/agent-cwd.js.map +1 -0
  20. package/dist/core/agent-cwd.test.d.ts +2 -0
  21. package/dist/core/agent-cwd.test.d.ts.map +1 -0
  22. package/dist/core/agent-cwd.test.js +149 -0
  23. package/dist/core/agent-cwd.test.js.map +1 -0
  24. package/dist/core/approval-bus.d.ts +232 -0
  25. package/dist/core/approval-bus.d.ts.map +1 -0
  26. package/dist/core/approval-bus.js +703 -0
  27. package/dist/core/approval-bus.js.map +1 -0
  28. package/dist/core/approval-bus.synthetic.test.d.ts +2 -0
  29. package/dist/core/approval-bus.synthetic.test.d.ts.map +1 -0
  30. package/dist/core/approval-bus.synthetic.test.js +182 -0
  31. package/dist/core/approval-bus.synthetic.test.js.map +1 -0
  32. package/dist/core/approval-bus.test.d.ts +2 -0
  33. package/dist/core/approval-bus.test.d.ts.map +1 -0
  34. package/dist/core/approval-bus.test.js +537 -0
  35. package/dist/core/approval-bus.test.js.map +1 -0
  36. package/dist/core/approval-router.d.ts +95 -0
  37. package/dist/core/approval-router.d.ts.map +1 -0
  38. package/dist/core/approval-router.js +450 -0
  39. package/dist/core/approval-router.js.map +1 -0
  40. package/dist/core/approval-router.test.d.ts +2 -0
  41. package/dist/core/approval-router.test.d.ts.map +1 -0
  42. package/dist/core/approval-router.test.js +413 -0
  43. package/dist/core/approval-router.test.js.map +1 -0
  44. package/dist/core/audit-log.d.ts +55 -0
  45. package/dist/core/audit-log.d.ts.map +1 -0
  46. package/dist/core/audit-log.js +203 -0
  47. package/dist/core/audit-log.js.map +1 -0
  48. package/dist/core/bgjob-reader.d.ts +65 -0
  49. package/dist/core/bgjob-reader.d.ts.map +1 -0
  50. package/dist/core/bgjob-reader.js +212 -0
  51. package/dist/core/bgjob-reader.js.map +1 -0
  52. package/dist/core/bgjob-reader.test.d.ts +2 -0
  53. package/dist/core/bgjob-reader.test.d.ts.map +1 -0
  54. package/dist/core/bgjob-reader.test.js +178 -0
  55. package/dist/core/bgjob-reader.test.js.map +1 -0
  56. package/dist/core/circuit-breaker.d.ts +37 -0
  57. package/dist/core/circuit-breaker.d.ts.map +1 -0
  58. package/dist/core/circuit-breaker.js +115 -0
  59. package/dist/core/circuit-breaker.js.map +1 -0
  60. package/dist/core/commands/agent.d.ts +4 -0
  61. package/dist/core/commands/agent.d.ts.map +1 -0
  62. package/dist/core/commands/agent.js +21 -0
  63. package/dist/core/commands/agent.js.map +1 -0
  64. package/dist/core/commands/approval.d.ts +3 -0
  65. package/dist/core/commands/approval.d.ts.map +1 -0
  66. package/dist/core/commands/approval.js +44 -0
  67. package/dist/core/commands/approval.js.map +1 -0
  68. package/dist/core/commands/approval.test.d.ts +2 -0
  69. package/dist/core/commands/approval.test.d.ts.map +1 -0
  70. package/dist/core/commands/approval.test.js +85 -0
  71. package/dist/core/commands/approval.test.js.map +1 -0
  72. package/dist/core/commands/audit.d.ts +3 -0
  73. package/dist/core/commands/audit.d.ts.map +1 -0
  74. package/dist/core/commands/audit.js +84 -0
  75. package/dist/core/commands/audit.js.map +1 -0
  76. package/dist/core/commands/builtin.d.ts +3 -0
  77. package/dist/core/commands/builtin.d.ts.map +1 -0
  78. package/dist/core/commands/builtin.js +26 -0
  79. package/dist/core/commands/builtin.js.map +1 -0
  80. package/dist/core/commands/job.d.ts +3 -0
  81. package/dist/core/commands/job.d.ts.map +1 -0
  82. package/dist/core/commands/job.js +195 -0
  83. package/dist/core/commands/job.js.map +1 -0
  84. package/dist/core/commands/model.d.ts +9 -0
  85. package/dist/core/commands/model.d.ts.map +1 -0
  86. package/dist/core/commands/model.js +183 -0
  87. package/dist/core/commands/model.js.map +1 -0
  88. package/dist/core/commands/plan.d.ts +3 -0
  89. package/dist/core/commands/plan.d.ts.map +1 -0
  90. package/dist/core/commands/plan.js +75 -0
  91. package/dist/core/commands/plan.js.map +1 -0
  92. package/dist/core/commands/plan.test.d.ts +2 -0
  93. package/dist/core/commands/plan.test.d.ts.map +1 -0
  94. package/dist/core/commands/plan.test.js +122 -0
  95. package/dist/core/commands/plan.test.js.map +1 -0
  96. package/dist/core/commands/router.d.ts +3 -0
  97. package/dist/core/commands/router.d.ts.map +1 -0
  98. package/dist/core/commands/router.js +71 -0
  99. package/dist/core/commands/router.js.map +1 -0
  100. package/dist/core/commands/schedule.d.ts +3 -0
  101. package/dist/core/commands/schedule.d.ts.map +1 -0
  102. package/dist/core/commands/schedule.js +123 -0
  103. package/dist/core/commands/schedule.js.map +1 -0
  104. package/dist/core/commands/sessions.d.ts +3 -0
  105. package/dist/core/commands/sessions.d.ts.map +1 -0
  106. package/dist/core/commands/sessions.js +88 -0
  107. package/dist/core/commands/sessions.js.map +1 -0
  108. package/dist/core/commands/stats.d.ts +3 -0
  109. package/dist/core/commands/stats.d.ts.map +1 -0
  110. package/dist/core/commands/stats.js +73 -0
  111. package/dist/core/commands/stats.js.map +1 -0
  112. package/dist/core/commands/think.d.ts +3 -0
  113. package/dist/core/commands/think.d.ts.map +1 -0
  114. package/dist/core/commands/think.js +28 -0
  115. package/dist/core/commands/think.js.map +1 -0
  116. package/dist/core/commands/workspaces.d.ts +3 -0
  117. package/dist/core/commands/workspaces.d.ts.map +1 -0
  118. package/dist/core/commands/workspaces.js +47 -0
  119. package/dist/core/commands/workspaces.js.map +1 -0
  120. package/dist/core/config-schema.d.ts +58 -0
  121. package/dist/core/config-schema.d.ts.map +1 -0
  122. package/dist/core/config-schema.js +63 -0
  123. package/dist/core/config-schema.js.map +1 -0
  124. package/dist/core/cron.d.ts +29 -0
  125. package/dist/core/cron.d.ts.map +1 -0
  126. package/dist/core/cron.js +184 -0
  127. package/dist/core/cron.js.map +1 -0
  128. package/dist/core/event-bus.d.ts +80 -0
  129. package/dist/core/event-bus.d.ts.map +1 -0
  130. package/dist/core/event-bus.js +62 -0
  131. package/dist/core/event-bus.js.map +1 -0
  132. package/dist/core/intent-llm.d.ts +27 -0
  133. package/dist/core/intent-llm.d.ts.map +1 -0
  134. package/dist/core/intent-llm.js +170 -0
  135. package/dist/core/intent-llm.js.map +1 -0
  136. package/dist/core/intent.d.ts +12 -0
  137. package/dist/core/intent.d.ts.map +1 -0
  138. package/dist/core/intent.js +187 -0
  139. package/dist/core/intent.js.map +1 -0
  140. package/dist/core/job-board.d.ts +84 -0
  141. package/dist/core/job-board.d.ts.map +1 -0
  142. package/dist/core/job-board.js +379 -0
  143. package/dist/core/job-board.js.map +1 -0
  144. package/dist/core/logger.d.ts +6 -0
  145. package/dist/core/logger.d.ts.map +1 -0
  146. package/dist/core/logger.js +54 -0
  147. package/dist/core/logger.js.map +1 -0
  148. package/dist/core/metrics.d.ts +55 -0
  149. package/dist/core/metrics.d.ts.map +1 -0
  150. package/dist/core/metrics.js +291 -0
  151. package/dist/core/metrics.js.map +1 -0
  152. package/dist/core/onboarding.d.ts +94 -0
  153. package/dist/core/onboarding.d.ts.map +1 -0
  154. package/dist/core/onboarding.js +426 -0
  155. package/dist/core/onboarding.js.map +1 -0
  156. package/dist/core/onboarding.test.d.ts +2 -0
  157. package/dist/core/onboarding.test.d.ts.map +1 -0
  158. package/dist/core/onboarding.test.js +112 -0
  159. package/dist/core/onboarding.test.js.map +1 -0
  160. package/dist/core/rate-limiter.d.ts +44 -0
  161. package/dist/core/rate-limiter.d.ts.map +1 -0
  162. package/dist/core/rate-limiter.js +115 -0
  163. package/dist/core/rate-limiter.js.map +1 -0
  164. package/dist/core/registry.d.ts +32 -0
  165. package/dist/core/registry.d.ts.map +1 -0
  166. package/dist/core/registry.js +122 -0
  167. package/dist/core/registry.js.map +1 -0
  168. package/dist/core/router.d.ts +41 -0
  169. package/dist/core/router.d.ts.map +1 -0
  170. package/dist/core/router.js +431 -0
  171. package/dist/core/router.js.map +1 -0
  172. package/dist/core/schedule.d.ts +65 -0
  173. package/dist/core/schedule.d.ts.map +1 -0
  174. package/dist/core/schedule.js +316 -0
  175. package/dist/core/schedule.js.map +1 -0
  176. package/dist/core/session-subtasks.test.d.ts +2 -0
  177. package/dist/core/session-subtasks.test.d.ts.map +1 -0
  178. package/dist/core/session-subtasks.test.js +88 -0
  179. package/dist/core/session-subtasks.test.js.map +1 -0
  180. package/dist/core/session.d.ts +182 -0
  181. package/dist/core/session.d.ts.map +1 -0
  182. package/dist/core/session.js +774 -0
  183. package/dist/core/session.js.map +1 -0
  184. package/dist/core/sqlite-helper.d.ts +37 -0
  185. package/dist/core/sqlite-helper.d.ts.map +1 -0
  186. package/dist/core/sqlite-helper.js +79 -0
  187. package/dist/core/sqlite-helper.js.map +1 -0
  188. package/dist/core/transcribe.d.ts +25 -0
  189. package/dist/core/transcribe.d.ts.map +1 -0
  190. package/dist/core/transcribe.js +217 -0
  191. package/dist/core/transcribe.js.map +1 -0
  192. package/dist/core/transcribe.test.d.ts +2 -0
  193. package/dist/core/transcribe.test.d.ts.map +1 -0
  194. package/dist/core/transcribe.test.js +163 -0
  195. package/dist/core/transcribe.test.js.map +1 -0
  196. package/dist/core/types.d.ts +352 -0
  197. package/dist/core/types.d.ts.map +1 -0
  198. package/dist/core/types.js +3 -0
  199. package/dist/core/types.js.map +1 -0
  200. package/dist/core/workspace.d.ts +67 -0
  201. package/dist/core/workspace.d.ts.map +1 -0
  202. package/dist/core/workspace.js +113 -0
  203. package/dist/core/workspace.js.map +1 -0
  204. package/dist/index.d.ts +5 -0
  205. package/dist/index.d.ts.map +1 -0
  206. package/dist/index.js +6 -0
  207. package/dist/index.js.map +1 -0
  208. package/dist/plugins/agents/acp/acp-adapter.d.ts +16 -0
  209. package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -0
  210. package/dist/plugins/agents/acp/acp-adapter.js +49 -0
  211. package/dist/plugins/agents/acp/acp-adapter.js.map +1 -0
  212. package/dist/plugins/agents/acp/acp-client.d.ts +32 -0
  213. package/dist/plugins/agents/acp/acp-client.d.ts.map +1 -0
  214. package/dist/plugins/agents/acp/acp-client.js +175 -0
  215. package/dist/plugins/agents/acp/acp-client.js.map +1 -0
  216. package/dist/plugins/agents/acp/discovery.d.ts +19 -0
  217. package/dist/plugins/agents/acp/discovery.d.ts.map +1 -0
  218. package/dist/plugins/agents/acp/discovery.js +109 -0
  219. package/dist/plugins/agents/acp/discovery.js.map +1 -0
  220. package/dist/plugins/agents/acp/index.d.ts +4 -0
  221. package/dist/plugins/agents/acp/index.d.ts.map +1 -0
  222. package/dist/plugins/agents/acp/index.js +4 -0
  223. package/dist/plugins/agents/acp/index.js.map +1 -0
  224. package/dist/plugins/agents/acp/types.d.ts +62 -0
  225. package/dist/plugins/agents/acp/types.d.ts.map +1 -0
  226. package/dist/plugins/agents/acp/types.js +5 -0
  227. package/dist/plugins/agents/acp/types.js.map +1 -0
  228. package/dist/plugins/agents/claude-code/adapter.test.d.ts +2 -0
  229. package/dist/plugins/agents/claude-code/adapter.test.d.ts.map +1 -0
  230. package/dist/plugins/agents/claude-code/adapter.test.js +195 -0
  231. package/dist/plugins/agents/claude-code/adapter.test.js.map +1 -0
  232. package/dist/plugins/agents/claude-code/index.d.ts +25 -0
  233. package/dist/plugins/agents/claude-code/index.d.ts.map +1 -0
  234. package/dist/plugins/agents/claude-code/index.js +184 -0
  235. package/dist/plugins/agents/claude-code/index.js.map +1 -0
  236. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +42 -0
  237. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -0
  238. package/dist/plugins/agents/claude-code/mcp-approval-server.js +235 -0
  239. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -0
  240. package/dist/plugins/agents/claude-code/mcp-approval-server.test.d.ts +2 -0
  241. package/dist/plugins/agents/claude-code/mcp-approval-server.test.d.ts.map +1 -0
  242. package/dist/plugins/agents/claude-code/mcp-approval-server.test.js +188 -0
  243. package/dist/plugins/agents/claude-code/mcp-approval-server.test.js.map +1 -0
  244. package/dist/plugins/agents/codex/adapter.test.d.ts +2 -0
  245. package/dist/plugins/agents/codex/adapter.test.d.ts.map +1 -0
  246. package/dist/plugins/agents/codex/adapter.test.js +192 -0
  247. package/dist/plugins/agents/codex/adapter.test.js.map +1 -0
  248. package/dist/plugins/agents/codex/index.d.ts +37 -0
  249. package/dist/plugins/agents/codex/index.d.ts.map +1 -0
  250. package/dist/plugins/agents/codex/index.js +254 -0
  251. package/dist/plugins/agents/codex/index.js.map +1 -0
  252. package/dist/plugins/agents/copilot/index.d.ts +35 -0
  253. package/dist/plugins/agents/copilot/index.d.ts.map +1 -0
  254. package/dist/plugins/agents/copilot/index.js +182 -0
  255. package/dist/plugins/agents/copilot/index.js.map +1 -0
  256. package/dist/plugins/agents/opencode/adapter.test.d.ts +2 -0
  257. package/dist/plugins/agents/opencode/adapter.test.d.ts.map +1 -0
  258. package/dist/plugins/agents/opencode/adapter.test.js +139 -0
  259. package/dist/plugins/agents/opencode/adapter.test.js.map +1 -0
  260. package/dist/plugins/agents/opencode/http-adapter.test.d.ts +2 -0
  261. package/dist/plugins/agents/opencode/http-adapter.test.d.ts.map +1 -0
  262. package/dist/plugins/agents/opencode/http-adapter.test.js +492 -0
  263. package/dist/plugins/agents/opencode/http-adapter.test.js.map +1 -0
  264. package/dist/plugins/agents/opencode/index.d.ts +5 -0
  265. package/dist/plugins/agents/opencode/index.d.ts.map +1 -0
  266. package/dist/plugins/agents/opencode/index.js +30 -0
  267. package/dist/plugins/agents/opencode/index.js.map +1 -0
  268. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts +138 -0
  269. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts.map +1 -0
  270. package/dist/plugins/agents/opencode/opencode-http-adapter.js +549 -0
  271. package/dist/plugins/agents/opencode/opencode-http-adapter.js.map +1 -0
  272. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +24 -0
  273. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -0
  274. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +103 -0
  275. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -0
  276. package/dist/plugins/agents/opencode/serve-manager.d.ts +27 -0
  277. package/dist/plugins/agents/opencode/serve-manager.d.ts.map +1 -0
  278. package/dist/plugins/agents/opencode/serve-manager.js +190 -0
  279. package/dist/plugins/agents/opencode/serve-manager.js.map +1 -0
  280. package/dist/plugins/messengers/discord/discord-adapter.d.ts +22 -0
  281. package/dist/plugins/messengers/discord/discord-adapter.d.ts.map +1 -0
  282. package/dist/plugins/messengers/discord/discord-adapter.js +241 -0
  283. package/dist/plugins/messengers/discord/discord-adapter.js.map +1 -0
  284. package/dist/plugins/messengers/discord/discord-adapter.test.d.ts +2 -0
  285. package/dist/plugins/messengers/discord/discord-adapter.test.d.ts.map +1 -0
  286. package/dist/plugins/messengers/discord/discord-adapter.test.js +332 -0
  287. package/dist/plugins/messengers/discord/discord-adapter.test.js.map +1 -0
  288. package/dist/plugins/messengers/discord/index.d.ts +4 -0
  289. package/dist/plugins/messengers/discord/index.d.ts.map +1 -0
  290. package/dist/plugins/messengers/discord/index.js +4 -0
  291. package/dist/plugins/messengers/discord/index.js.map +1 -0
  292. package/dist/plugins/messengers/discord/markdown-to-discord.d.ts +11 -0
  293. package/dist/plugins/messengers/discord/markdown-to-discord.d.ts.map +1 -0
  294. package/dist/plugins/messengers/discord/markdown-to-discord.js +59 -0
  295. package/dist/plugins/messengers/discord/markdown-to-discord.js.map +1 -0
  296. package/dist/plugins/messengers/discord/types.d.ts +9 -0
  297. package/dist/plugins/messengers/discord/types.d.ts.map +1 -0
  298. package/dist/plugins/messengers/discord/types.js +3 -0
  299. package/dist/plugins/messengers/discord/types.js.map +1 -0
  300. package/dist/plugins/messengers/feishu/card-builder.d.ts +23 -0
  301. package/dist/plugins/messengers/feishu/card-builder.d.ts.map +1 -0
  302. package/dist/plugins/messengers/feishu/card-builder.js +89 -0
  303. package/dist/plugins/messengers/feishu/card-builder.js.map +1 -0
  304. package/dist/plugins/messengers/feishu/feishu-adapter.d.ts +33 -0
  305. package/dist/plugins/messengers/feishu/feishu-adapter.d.ts.map +1 -0
  306. package/dist/plugins/messengers/feishu/feishu-adapter.js +195 -0
  307. package/dist/plugins/messengers/feishu/feishu-adapter.js.map +1 -0
  308. package/dist/plugins/messengers/feishu/feishu-client.d.ts +44 -0
  309. package/dist/plugins/messengers/feishu/feishu-client.d.ts.map +1 -0
  310. package/dist/plugins/messengers/feishu/feishu-client.js +120 -0
  311. package/dist/plugins/messengers/feishu/feishu-client.js.map +1 -0
  312. package/dist/plugins/messengers/feishu/feishu-dedup.test.d.ts +2 -0
  313. package/dist/plugins/messengers/feishu/feishu-dedup.test.d.ts.map +1 -0
  314. package/dist/plugins/messengers/feishu/feishu-dedup.test.js +70 -0
  315. package/dist/plugins/messengers/feishu/feishu-dedup.test.js.map +1 -0
  316. package/dist/plugins/messengers/feishu/index.d.ts +4 -0
  317. package/dist/plugins/messengers/feishu/index.d.ts.map +1 -0
  318. package/dist/plugins/messengers/feishu/index.js +4 -0
  319. package/dist/plugins/messengers/feishu/index.js.map +1 -0
  320. package/dist/plugins/messengers/feishu/types.d.ts +113 -0
  321. package/dist/plugins/messengers/feishu/types.d.ts.map +1 -0
  322. package/dist/plugins/messengers/feishu/types.js +4 -0
  323. package/dist/plugins/messengers/feishu/types.js.map +1 -0
  324. package/dist/plugins/messengers/telegram/index.d.ts +4 -0
  325. package/dist/plugins/messengers/telegram/index.d.ts.map +1 -0
  326. package/dist/plugins/messengers/telegram/index.js +4 -0
  327. package/dist/plugins/messengers/telegram/index.js.map +1 -0
  328. package/dist/plugins/messengers/telegram/markdown-to-html.d.ts +5 -0
  329. package/dist/plugins/messengers/telegram/markdown-to-html.d.ts.map +1 -0
  330. package/dist/plugins/messengers/telegram/markdown-to-html.js +186 -0
  331. package/dist/plugins/messengers/telegram/markdown-to-html.js.map +1 -0
  332. package/dist/plugins/messengers/telegram/media-download.d.ts +51 -0
  333. package/dist/plugins/messengers/telegram/media-download.d.ts.map +1 -0
  334. package/dist/plugins/messengers/telegram/media-download.js +224 -0
  335. package/dist/plugins/messengers/telegram/media-download.js.map +1 -0
  336. package/dist/plugins/messengers/telegram/media-download.test.d.ts +2 -0
  337. package/dist/plugins/messengers/telegram/media-download.test.d.ts.map +1 -0
  338. package/dist/plugins/messengers/telegram/media-download.test.js +125 -0
  339. package/dist/plugins/messengers/telegram/media-download.test.js.map +1 -0
  340. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +62 -0
  341. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts.map +1 -0
  342. package/dist/plugins/messengers/telegram/telegram-adapter.js +653 -0
  343. package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -0
  344. package/dist/plugins/messengers/telegram/types.d.ts +47 -0
  345. package/dist/plugins/messengers/telegram/types.d.ts.map +1 -0
  346. package/dist/plugins/messengers/telegram/types.js +3 -0
  347. package/dist/plugins/messengers/telegram/types.js.map +1 -0
  348. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +68 -0
  349. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -0
  350. package/dist/plugins/messengers/wechat/ilink-adapter.js +483 -0
  351. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -0
  352. package/dist/plugins/messengers/wechat/ilink-client.d.ts +66 -0
  353. package/dist/plugins/messengers/wechat/ilink-client.d.ts.map +1 -0
  354. package/dist/plugins/messengers/wechat/ilink-client.js +288 -0
  355. package/dist/plugins/messengers/wechat/ilink-client.js.map +1 -0
  356. package/dist/plugins/messengers/wechat/ilink-types.d.ts +173 -0
  357. package/dist/plugins/messengers/wechat/ilink-types.d.ts.map +1 -0
  358. package/dist/plugins/messengers/wechat/ilink-types.js +12 -0
  359. package/dist/plugins/messengers/wechat/ilink-types.js.map +1 -0
  360. package/dist/utils/backoff.d.ts +35 -0
  361. package/dist/utils/backoff.d.ts.map +1 -0
  362. package/dist/utils/backoff.js +59 -0
  363. package/dist/utils/backoff.js.map +1 -0
  364. package/dist/utils/cross-platform.d.ts +26 -0
  365. package/dist/utils/cross-platform.d.ts.map +1 -0
  366. package/dist/utils/cross-platform.js +58 -0
  367. package/dist/utils/cross-platform.js.map +1 -0
  368. package/dist/utils/message-split.d.ts +14 -0
  369. package/dist/utils/message-split.d.ts.map +1 -0
  370. package/dist/utils/message-split.js +65 -0
  371. package/dist/utils/message-split.js.map +1 -0
  372. package/dist/utils/safe-equal.d.ts +2 -0
  373. package/dist/utils/safe-equal.d.ts.map +1 -0
  374. package/dist/utils/safe-equal.js +11 -0
  375. package/dist/utils/safe-equal.js.map +1 -0
  376. package/dist/web/public/_app.js +196 -0
  377. package/dist/web/public/index.html +935 -0
  378. package/dist/web/public/settings.html +1181 -0
  379. package/dist/web/public/tasks.html +1827 -0
  380. package/dist/web/server.d.ts +11 -0
  381. package/dist/web/server.d.ts.map +1 -0
  382. package/dist/web/server.js +1820 -0
  383. package/dist/web/server.js.map +1 -0
  384. package/package.json +73 -0
@@ -0,0 +1,32 @@
1
+ import type { ChatMessage } from '../../../core/types.js';
2
+ import type { ACPAgentConfig, ACPManifest } from './types.js';
3
+ /**
4
+ * Build auth headers from ACP config. Extracted as a shared helper
5
+ * so both ACPClient and CLI config validation use the same logic.
6
+ */
7
+ export declare function buildAuthHeaders(config: {
8
+ auth?: ACPAgentConfig['auth'];
9
+ }): Record<string, string> | undefined;
10
+ export declare class ACPClient {
11
+ private baseUrl;
12
+ private authHeaders?;
13
+ private manifest?;
14
+ constructor(config: ACPAgentConfig);
15
+ /** Fetch and cache the Agent Manifest (GET /agent/card) */
16
+ fetchManifest(): Promise<ACPManifest>;
17
+ /** Check if the agent endpoint is reachable */
18
+ healthCheck(): Promise<boolean>;
19
+ /**
20
+ * Send prompt and stream response chunks via SSE.
21
+ * Parses Server-Sent Events per the W3C spec:
22
+ * - Multiple `data:` lines for a single event are joined with newlines
23
+ * - Events separated by blank lines
24
+ *
25
+ * `sessionId` is forwarded as `session_id` in the request body so the
26
+ * remote agent can persist context across turns (P2-C).
27
+ */
28
+ streamPrompt(prompt: string, history?: ChatMessage[], sessionId?: string): AsyncGenerator<string>;
29
+ /** Send prompt and wait for complete response (non-streaming fallback) */
30
+ sendPromptSync(prompt: string, history?: ChatMessage[], sessionId?: string): Promise<string>;
31
+ }
32
+ //# sourceMappingURL=acp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-client.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/acp-client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAyC,MAAM,YAAY,CAAA;AAEpG;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAM9G;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAC,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,CAAa;gBAElB,MAAM,EAAE,cAAc;IAKlC,2DAA2D;IACrD,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3C,+CAA+C;IACzC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;;;;;;;OAQG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IAwFxG,0EAA0E;IACpE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2BnG"}
@@ -0,0 +1,175 @@
1
+ // ACP HTTP client — communicates with remote ACP-compatible agents
2
+ //
3
+ // ACP convention for endpoint paths (per OpenAPI spec):
4
+ // GET /agent/card → Agent Manifest
5
+ // POST /tasks → Create task (sync or stream)
6
+ // GET /tasks/{id} → Get task status
7
+ //
8
+ // The user provides the base URL. We append these standard paths.
9
+ /**
10
+ * Build auth headers from ACP config. Extracted as a shared helper
11
+ * so both ACPClient and CLI config validation use the same logic.
12
+ */
13
+ export function buildAuthHeaders(config) {
14
+ if (!config.auth || config.auth.type === 'none')
15
+ return undefined;
16
+ if (!config.auth.token)
17
+ return undefined;
18
+ if (config.auth.type === 'bearer')
19
+ return { Authorization: `Bearer ${config.auth.token}` };
20
+ if (config.auth.type === 'apikey')
21
+ return { 'X-API-Key': config.auth.token };
22
+ return undefined;
23
+ }
24
+ export class ACPClient {
25
+ baseUrl;
26
+ authHeaders;
27
+ manifest;
28
+ constructor(config) {
29
+ this.baseUrl = config.endpoint.replace(/\/$/, '');
30
+ this.authHeaders = buildAuthHeaders(config);
31
+ }
32
+ /** Fetch and cache the Agent Manifest (GET /agent/card) */
33
+ async fetchManifest() {
34
+ const res = await fetch(`${this.baseUrl}/agent/card`, {
35
+ headers: { ...this.authHeaders, Accept: 'application/json' },
36
+ signal: AbortSignal.timeout(10000),
37
+ });
38
+ if (!res.ok) {
39
+ throw new Error(`Failed to fetch manifest: ${res.status} ${res.statusText}`);
40
+ }
41
+ this.manifest = (await res.json());
42
+ return this.manifest;
43
+ }
44
+ /** Check if the agent endpoint is reachable */
45
+ async healthCheck() {
46
+ try {
47
+ const manifest = await this.fetchManifest();
48
+ return !!manifest.name;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ /**
55
+ * Send prompt and stream response chunks via SSE.
56
+ * Parses Server-Sent Events per the W3C spec:
57
+ * - Multiple `data:` lines for a single event are joined with newlines
58
+ * - Events separated by blank lines
59
+ *
60
+ * `sessionId` is forwarded as `session_id` in the request body so the
61
+ * remote agent can persist context across turns (P2-C).
62
+ */
63
+ async *streamPrompt(prompt, history, sessionId) {
64
+ const body = {
65
+ input: {
66
+ prompt,
67
+ history: history?.map((m) => ({ role: m.role, content: m.content })),
68
+ },
69
+ mode: 'stream',
70
+ ...(sessionId ? { session_id: sessionId } : {}),
71
+ };
72
+ const res = await fetch(`${this.baseUrl}/tasks`, {
73
+ method: 'POST',
74
+ headers: {
75
+ 'Content-Type': 'application/json',
76
+ ...this.authHeaders,
77
+ },
78
+ body: JSON.stringify(body),
79
+ signal: AbortSignal.timeout(300000), // 5min timeout for long tasks
80
+ });
81
+ if (!res.ok) {
82
+ const errorBody = await res.text().catch(() => 'unknown error');
83
+ throw new Error(`ACP task failed: ${res.status} ${errorBody}`);
84
+ }
85
+ // Parse SSE stream (W3C spec compliant)
86
+ const reader = res.body?.getReader();
87
+ if (!reader)
88
+ throw new Error('No response body for streaming');
89
+ const decoder = new TextDecoder();
90
+ let buffer = '';
91
+ let eventDataLines = [];
92
+ while (true) {
93
+ const { done, value } = await reader.read();
94
+ if (done)
95
+ break;
96
+ buffer += decoder.decode(value, { stream: true });
97
+ // Process complete lines
98
+ let newlineIdx;
99
+ while ((newlineIdx = buffer.indexOf('\n')) !== -1) {
100
+ const line = buffer.slice(0, newlineIdx).replace(/\r$/, '');
101
+ buffer = buffer.slice(newlineIdx + 1);
102
+ if (line === '') {
103
+ // Empty line = end of event. Process accumulated data.
104
+ if (eventDataLines.length > 0) {
105
+ const data = eventDataLines.join('\n');
106
+ eventDataLines = [];
107
+ if (data === '[DONE]')
108
+ return;
109
+ try {
110
+ const event = JSON.parse(data);
111
+ if (event.output?.content) {
112
+ yield event.output.content;
113
+ }
114
+ else if (event.error) {
115
+ throw new Error(`ACP error: ${event.error.message}`);
116
+ }
117
+ }
118
+ catch (e) {
119
+ if (e instanceof SyntaxError)
120
+ continue;
121
+ throw e;
122
+ }
123
+ }
124
+ }
125
+ else if (line.startsWith('data: ')) {
126
+ eventDataLines.push(line.slice(6));
127
+ }
128
+ else if (line.startsWith('data:')) {
129
+ eventDataLines.push(line.slice(5).trimStart());
130
+ }
131
+ // Ignore comment lines (starting with ':') and other SSE fields
132
+ }
133
+ }
134
+ // Process any remaining data in buffer
135
+ if (eventDataLines.length > 0) {
136
+ const data = eventDataLines.join('\n');
137
+ if (data !== '[DONE]') {
138
+ try {
139
+ const event = JSON.parse(data);
140
+ if (event.output?.content)
141
+ yield event.output.content;
142
+ }
143
+ catch {
144
+ /* ignore trailing malformed data */
145
+ }
146
+ }
147
+ }
148
+ }
149
+ /** Send prompt and wait for complete response (non-streaming fallback) */
150
+ async sendPromptSync(prompt, history, sessionId) {
151
+ const body = {
152
+ input: {
153
+ prompt,
154
+ history: history?.map((m) => ({ role: m.role, content: m.content })),
155
+ },
156
+ mode: 'sync',
157
+ ...(sessionId ? { session_id: sessionId } : {}),
158
+ };
159
+ const res = await fetch(`${this.baseUrl}/tasks`, {
160
+ method: 'POST',
161
+ headers: {
162
+ 'Content-Type': 'application/json',
163
+ ...this.authHeaders,
164
+ },
165
+ body: JSON.stringify(body),
166
+ signal: AbortSignal.timeout(300000),
167
+ });
168
+ if (!res.ok) {
169
+ throw new Error(`ACP task failed: ${res.status}`);
170
+ }
171
+ const task = (await res.json());
172
+ return task.output?.content || '';
173
+ }
174
+ }
175
+ //# sourceMappingURL=acp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-client.js","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/acp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ACPAgentConfig } from './types.js';
2
+ export interface DiscoveryResult {
3
+ baseUrl: string;
4
+ agents: ACPAgentConfig[];
5
+ }
6
+ /**
7
+ * Fetch and parse `<baseUrl>/.well-known/acp`. Trailing slashes are
8
+ * trimmed. Returns the discovery result on success; throws on network
9
+ * error, non-2xx status, or invalid JSON. Individual malformed agent
10
+ * entries are skipped silently with a warn log.
11
+ */
12
+ export declare function discoverAgents(baseUrl: string): Promise<DiscoveryResult>;
13
+ /**
14
+ * Discover from multiple base URLs in parallel. Failures on individual
15
+ * URLs are logged but don't fail the batch — partial results are
16
+ * returned. Useful for `discoveryUrls` config or REST API fan-out.
17
+ */
18
+ export declare function discoverMany(baseUrls: string[]): Promise<DiscoveryResult[]>;
19
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/discovery.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB;AAgCD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA8B9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAWjF"}
@@ -0,0 +1,109 @@
1
+ // ACP agent discovery via the `.well-known/acp` HTTP endpoint.
2
+ //
3
+ // Convention: a host that wants to publish one or more ACP-compatible
4
+ // agents serves a JSON document at <base>/.well-known/acp containing:
5
+ //
6
+ // {
7
+ // "agents": [
8
+ // {
9
+ // "name": "weather-bot",
10
+ // "endpoint": "https://example.com/agents/weather",
11
+ // "aliases": ["w", "wx"],
12
+ // "auth": { "type": "bearer", "token": "..." },
13
+ // "description": "Real-time weather forecasts"
14
+ // },
15
+ // ...
16
+ // ]
17
+ // }
18
+ //
19
+ // The endpoint must be the BASE of the agent's ACP root — discovery
20
+ // itself does not poke the agent's `/agent/card`; that's left to
21
+ // ACPAdapter.isAvailable() at registration time.
22
+ import { logger as rootLogger } from '../../../core/logger.js';
23
+ const log = rootLogger.child({ component: 'acp-discovery' });
24
+ const DISCOVERY_TIMEOUT_MS = 10_000;
25
+ /**
26
+ * Validate one entry from the well-known doc. Returns a clean
27
+ * ACPAgentConfig or null if the entry is malformed.
28
+ */
29
+ function validateEntry(raw) {
30
+ if (!raw || typeof raw !== 'object')
31
+ return null;
32
+ const r = raw;
33
+ if (typeof r.name !== 'string' || r.name.length === 0)
34
+ return null;
35
+ if (typeof r.endpoint !== 'string' || r.endpoint.length === 0)
36
+ return null;
37
+ const out = {
38
+ name: r.name,
39
+ endpoint: r.endpoint,
40
+ };
41
+ if (Array.isArray(r.aliases)) {
42
+ out.aliases = r.aliases.filter((a) => typeof a === 'string');
43
+ }
44
+ if (r.auth && typeof r.auth === 'object') {
45
+ const auth = r.auth;
46
+ if (auth.type === 'none' || auth.type === 'apikey' || auth.type === 'bearer') {
47
+ out.auth = {
48
+ type: auth.type,
49
+ token: typeof auth.token === 'string' ? auth.token : undefined,
50
+ };
51
+ }
52
+ }
53
+ if (typeof r.enabled === 'boolean')
54
+ out.enabled = r.enabled;
55
+ return out;
56
+ }
57
+ /**
58
+ * Fetch and parse `<baseUrl>/.well-known/acp`. Trailing slashes are
59
+ * trimmed. Returns the discovery result on success; throws on network
60
+ * error, non-2xx status, or invalid JSON. Individual malformed agent
61
+ * entries are skipped silently with a warn log.
62
+ */
63
+ export async function discoverAgents(baseUrl) {
64
+ const cleaned = baseUrl.replace(/\/+$/, '');
65
+ const url = `${cleaned}/.well-known/acp`;
66
+ log.info({ url }, 'Discovering ACP agents');
67
+ const res = await fetch(url, {
68
+ headers: { Accept: 'application/json' },
69
+ signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS),
70
+ });
71
+ if (!res.ok) {
72
+ throw new Error(`Discovery failed: ${res.status} ${res.statusText}`);
73
+ }
74
+ const body = (await res.json());
75
+ if (!body || !Array.isArray(body.agents)) {
76
+ throw new Error('Invalid discovery doc: missing `agents` array');
77
+ }
78
+ const agents = [];
79
+ for (const raw of body.agents) {
80
+ const entry = validateEntry(raw);
81
+ if (entry) {
82
+ agents.push(entry);
83
+ }
84
+ else {
85
+ log.warn({ raw }, 'Skipping malformed agent entry');
86
+ }
87
+ }
88
+ log.info({ baseUrl: cleaned, count: agents.length }, 'Discovery complete');
89
+ return { baseUrl: cleaned, agents };
90
+ }
91
+ /**
92
+ * Discover from multiple base URLs in parallel. Failures on individual
93
+ * URLs are logged but don't fail the batch — partial results are
94
+ * returned. Useful for `discoveryUrls` config or REST API fan-out.
95
+ */
96
+ export async function discoverMany(baseUrls) {
97
+ const results = await Promise.allSettled(baseUrls.map((u) => discoverAgents(u)));
98
+ const out = [];
99
+ results.forEach((r, i) => {
100
+ if (r.status === 'fulfilled') {
101
+ out.push(r.value);
102
+ }
103
+ else {
104
+ log.warn({ baseUrl: baseUrls[i], error: String(r.reason) }, 'Discovery failed');
105
+ }
106
+ });
107
+ return out;
108
+ }
109
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { ACPAdapter } from './acp-adapter.js';
2
+ export { ACPClient } from './acp-client.js';
3
+ export type { ACPAgentConfig, ACPManifest, ACPCapability } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ACP agent adapter — export adapter and config loader
2
+ export { ACPAdapter } from './acp-adapter.js';
3
+ export { ACPClient } from './acp-client.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * ACP Agent Manifest — describes agent capabilities.
3
+ * Fetched from GET /agent/card per the ACP spec.
4
+ */
5
+ export interface ACPManifest {
6
+ name: string;
7
+ description?: string;
8
+ version?: string;
9
+ capabilities: ACPCapability[];
10
+ }
11
+ export interface ACPCapability {
12
+ name: string;
13
+ description?: string;
14
+ inputSchema?: Record<string, unknown>;
15
+ outputSchema?: Record<string, unknown>;
16
+ }
17
+ /** ACP Task creation request (POST /tasks) */
18
+ export interface ACPCreateTaskRequest {
19
+ input: {
20
+ prompt: string;
21
+ history?: Array<{
22
+ role: string;
23
+ content: string;
24
+ }>;
25
+ };
26
+ mode: 'sync' | 'stream';
27
+ /**
28
+ * Stable session identifier — passed through so the remote agent can
29
+ * thread context across multi-turn conversations. Not part of the
30
+ * upstream ACP spec yet; the remote may ignore it (the field is in
31
+ * the request body, not headers, so unknown-field-tolerant parsers
32
+ * pass it through fine).
33
+ */
34
+ session_id?: string;
35
+ }
36
+ /** ACP Task response */
37
+ export interface ACPTaskResponse {
38
+ id: string;
39
+ status: 'pending' | 'running' | 'completed' | 'failed';
40
+ output?: {
41
+ content: string;
42
+ };
43
+ error?: {
44
+ code: string;
45
+ message: string;
46
+ };
47
+ }
48
+ /**
49
+ * Configuration for a remote ACP agent.
50
+ * Stored in ~/.im-hub/config.json under the "acpAgents" key.
51
+ */
52
+ export interface ACPAgentConfig {
53
+ name: string;
54
+ aliases?: string[];
55
+ endpoint: string;
56
+ auth?: {
57
+ type: 'none' | 'apikey' | 'bearer';
58
+ token?: string;
59
+ };
60
+ enabled?: boolean;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/types.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,aAAa,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACnD,CAAA;IACD,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAwB;AACxB,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;IACtD,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;QAClC,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
@@ -0,0 +1,5 @@
1
+ // ACP (Agent Communication Protocol) types
2
+ // Based on the ACP OpenAPI specification
3
+ // @see https://github.com/i-am-bee/acp/blob/main/docs/spec/openapi.yaml
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/plugins/agents/acp/types.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,yCAAyC;AACzC,wEAAwE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/claude-code/adapter.test.ts"],"names":[],"mappings":""}