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,379 @@
1
+ // Job Board — persistent async job queue backed by SQLite
2
+ //
3
+ // Jobs survive restarts. Each job executes an agent invocation and stores the result.
4
+ // Supports: create, list, get, cancel.
5
+ //
6
+ // Ownership (H5/M6/H7, code-review-2026-05-06):
7
+ // - Each row carries `creator_id` (the IM userId that originated the job)
8
+ // and `workspace_id`. Commands that the user runs through IM
9
+ // (`/job list|check|cancel|run`) MUST pass the caller's userId via
10
+ // opts.creatorId so users can't peek at or stomp on each others' jobs.
11
+ // Internal callers (REST `/api/jobs`, ACP server, scheduler) pass no
12
+ // filter and see every row — that's intentional, those entry-points
13
+ // are guarded by the web / API token.
14
+ // - Legacy rows (created before the migration) have creator_id = ''.
15
+ // They're treated as "ownerless / system" and visible to every owner-
16
+ // scoped query (so an upgrade doesn't appear to vanish the user's
17
+ // prior history).
18
+ // - pruneOldJobs() walks completed/failed/cancelled rows older than
19
+ // `IM_HUB_JOB_RETENTION_DAYS` (default 30) and deletes them; runs every
20
+ // 6h via setInterval, mirroring audit-log.
21
+ import { homedir } from 'os';
22
+ import { join } from 'path';
23
+ import { logger as rootLogger } from './logger.js';
24
+ import { eventBus } from './event-bus.js';
25
+ import { createSqliteHelper } from './sqlite-helper.js';
26
+ const BOARD_DB = join(homedir(), '.im-hub', 'jobs.db');
27
+ /** Hard cap on a single job's accumulated result. A misbehaving agent (or a
28
+ * runaway tool that dumps a giant file) could otherwise keep filling the
29
+ * Buffer in {@link runJob} until the host OOMs and rage-stuff the SQLite TEXT
30
+ * column with the same payload. We cap at 1 MiB by default; chunks that would
31
+ * push past the cap are dropped and a truncation footer is appended. Override
32
+ * via env IMHUB_JOB_RESULT_MAX_BYTES. */
33
+ function resolveMaxResultBytes() {
34
+ const raw = process.env.IMHUB_JOB_RESULT_MAX_BYTES;
35
+ if (raw) {
36
+ const n = parseInt(raw, 10);
37
+ if (Number.isFinite(n) && n > 0)
38
+ return n;
39
+ }
40
+ return 1 * 1024 * 1024;
41
+ }
42
+ /** Hard cap on concurrent runJob() invocations. Spawning more than this
43
+ * would let a few /job run X requests OOM the host (each agent process
44
+ * carries hundreds of MB). Override via env IM_HUB_MAX_CONCURRENT_JOBS. */
45
+ function resolveMaxConcurrent() {
46
+ const raw = process.env.IM_HUB_MAX_CONCURRENT_JOBS;
47
+ if (raw) {
48
+ const n = parseInt(raw, 10);
49
+ if (Number.isFinite(n) && n > 0)
50
+ return n;
51
+ }
52
+ return 3;
53
+ }
54
+ // Running job controllers (for cancellation)
55
+ const runningControllers = new Map();
56
+ // Wait queue for jobs that arrived while at capacity. Each entry is the
57
+ // resolver of a Promise the caller is awaiting on.
58
+ const waitQueue = [];
59
+ let activeJobs = 0;
60
+ /**
61
+ * Reset jobs that were 'running' when the previous im-hub process died.
62
+ * Without this, those rows stay marked 'running' forever and every
63
+ * /job list shows ghosts.
64
+ */
65
+ function reapStaleRunning(d) {
66
+ try {
67
+ const stmt = d.prepare("UPDATE jobs SET status='failed', error='im-hub restarted while running', completed_at=datetime('now') WHERE status='running'");
68
+ const info = stmt.run();
69
+ if (info.changes > 0) {
70
+ rootLogger.warn({ event: 'job-board.reap', stale: info.changes }, `Marked ${info.changes} stale running job(s) as failed`);
71
+ }
72
+ }
73
+ catch {
74
+ // best-effort; missing table is fine on first start
75
+ }
76
+ }
77
+ /**
78
+ * Idempotent column-add for ownership tracking. Run on every helper init —
79
+ * SQLite's ALTER TABLE ADD COLUMN throws "duplicate column name" if the
80
+ * column already exists, which we silently swallow. Cheaper than the full
81
+ * pragma table_info() inspection round-trip.
82
+ */
83
+ function migrateOwnership(d) {
84
+ for (const col of ['creator_id', 'workspace_id']) {
85
+ try {
86
+ d.prepare(`ALTER TABLE jobs ADD COLUMN ${col} TEXT NOT NULL DEFAULT ''`).run();
87
+ rootLogger.info({ component: 'job-board', column: col, event: 'job-board.migration' }, `Added ${col} column to jobs table`);
88
+ }
89
+ catch {
90
+ // duplicate column — already migrated
91
+ }
92
+ }
93
+ }
94
+ /** Default number of days a completed/failed/cancelled job is retained. */
95
+ function resolveRetentionDays() {
96
+ const raw = process.env.IM_HUB_JOB_RETENTION_DAYS;
97
+ if (raw) {
98
+ const n = parseInt(raw, 10);
99
+ if (Number.isFinite(n) && n > 0)
100
+ return n;
101
+ }
102
+ return 30;
103
+ }
104
+ /** How often pruneOldJobs() is fired by the auto-sweep timer. 0 disables. */
105
+ const RETENTION_SWEEP_INTERVAL_MS = 6 * 60 * 60 * 1000;
106
+ let retentionSweepTimer = null;
107
+ const helper = createSqliteHelper({
108
+ file: BOARD_DB,
109
+ component: 'job-board',
110
+ logger: rootLogger,
111
+ schema: `
112
+ CREATE TABLE IF NOT EXISTS jobs (
113
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
114
+ agent TEXT NOT NULL,
115
+ prompt TEXT NOT NULL,
116
+ status TEXT NOT NULL DEFAULT 'pending',
117
+ result TEXT,
118
+ error TEXT,
119
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
120
+ completed_at TEXT,
121
+ creator_id TEXT NOT NULL DEFAULT '',
122
+ workspace_id TEXT NOT NULL DEFAULT ''
123
+ );
124
+ CREATE INDEX IF NOT EXISTS idx_jobs_created ON jobs(created_at);
125
+ CREATE INDEX IF NOT EXISTS idx_jobs_creator ON jobs(creator_id);
126
+ CREATE INDEX IF NOT EXISTS idx_jobs_status_created ON jobs(status, created_at);
127
+ `,
128
+ init: (d) => {
129
+ migrateOwnership(d);
130
+ // First-time / cold-start cleanup: any 'running' rows are leftover from a
131
+ // prior process that didn't get to finalize.
132
+ reapStaleRunning(d);
133
+ // Initial retention sweep + periodic timer. Mirrors audit-log shape so
134
+ // both tables stay bounded without operator intervention.
135
+ pruneOldJobs(d);
136
+ if (RETENTION_SWEEP_INTERVAL_MS > 0 && retentionSweepTimer === null) {
137
+ retentionSweepTimer = setInterval(() => {
138
+ const live = helper.get();
139
+ if (live)
140
+ pruneOldJobs(live);
141
+ }, RETENTION_SWEEP_INTERVAL_MS);
142
+ if (typeof retentionSweepTimer === 'object' && retentionSweepTimer && 'unref' in retentionSweepTimer) {
143
+ retentionSweepTimer.unref();
144
+ }
145
+ }
146
+ },
147
+ });
148
+ /** Stop the retention sweep (used by tests + graceful shutdown). */
149
+ export function stopJobRetentionSweep() {
150
+ if (retentionSweepTimer) {
151
+ clearInterval(retentionSweepTimer);
152
+ retentionSweepTimer = null;
153
+ }
154
+ }
155
+ /** Close the underlying SQLite handle. Called by cli.ts on graceful
156
+ * shutdown so the WAL is checkpointed before exit (L2). */
157
+ export function closeJobBoardDb() {
158
+ helper.close();
159
+ }
160
+ function getDb() {
161
+ return helper.get();
162
+ }
163
+ export function createJob(agent, prompt, opts = {}) {
164
+ const d = getDb();
165
+ if (!d)
166
+ throw new Error('Job board unavailable (SQLite not initialized)');
167
+ const row = d.prepare('INSERT INTO jobs (agent, prompt, status, creator_id, workspace_id) VALUES (?, ?, ?, ?, ?)').run(agent, prompt, 'pending', opts.creatorId || '', opts.workspaceId || '');
168
+ const id = Number(row.lastInsertRowid);
169
+ eventBus.publish({ type: 'job', phase: 'created', jobId: id, agent });
170
+ return id;
171
+ }
172
+ export function getJob(id, opts = {}) {
173
+ const d = getDb();
174
+ if (!d)
175
+ return null;
176
+ const row = (opts.creatorId !== undefined
177
+ ? d.prepare("SELECT * FROM jobs WHERE id = ? AND (creator_id = ? OR creator_id = '')")
178
+ .get(id, opts.creatorId)
179
+ : d.prepare('SELECT * FROM jobs WHERE id = ?').get(id));
180
+ return row || null;
181
+ }
182
+ export function listJobs(limit = 20, status, opts = {}) {
183
+ const d = getDb();
184
+ if (!d)
185
+ return [];
186
+ const safeLimit = Number.isFinite(limit) && limit > 0 ? Math.min(Math.floor(limit), 1000) : 20;
187
+ const conditions = [];
188
+ const params = [];
189
+ if (status) {
190
+ conditions.push('status = ?');
191
+ params.push(status);
192
+ }
193
+ if (opts.creatorId !== undefined) {
194
+ conditions.push("(creator_id = ? OR creator_id = '')");
195
+ params.push(opts.creatorId);
196
+ }
197
+ if (opts.agent) {
198
+ conditions.push('agent = ?');
199
+ params.push(opts.agent);
200
+ }
201
+ const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
202
+ return d.prepare(`SELECT * FROM jobs ${where} ORDER BY created_at DESC LIMIT ?`)
203
+ .all(...params, safeLimit);
204
+ }
205
+ function updateJob(id, fields) {
206
+ const d = getDb();
207
+ if (!d)
208
+ return;
209
+ const sets = [];
210
+ const vals = [];
211
+ for (const [k, v] of Object.entries(fields)) {
212
+ if (v !== undefined) {
213
+ sets.push(`${k} = ?`);
214
+ vals.push(v);
215
+ }
216
+ }
217
+ if (!sets.length)
218
+ return;
219
+ d.prepare(`UPDATE jobs SET ${sets.join(', ')} WHERE id = ?`).run(...vals, id);
220
+ }
221
+ /**
222
+ * Acquire a job slot. Returns immediately when capacity available, otherwise
223
+ * queues the caller and returns a promise that resolves when a slot frees.
224
+ */
225
+ async function acquireSlot() {
226
+ const max = resolveMaxConcurrent();
227
+ if (activeJobs < max) {
228
+ activeJobs++;
229
+ return;
230
+ }
231
+ await new Promise((resolve) => waitQueue.push(resolve));
232
+ activeJobs++;
233
+ }
234
+ function releaseSlot() {
235
+ activeJobs = Math.max(0, activeJobs - 1);
236
+ const next = waitQueue.shift();
237
+ if (next)
238
+ next();
239
+ }
240
+ export async function runJob(id, runner, logger) {
241
+ const job = getJob(id);
242
+ if (!job)
243
+ return;
244
+ // Block here if the job board is at capacity. The job stays 'pending' in
245
+ // SQLite while waiting — visible to /job list as queued.
246
+ await acquireSlot();
247
+ const controller = new AbortController();
248
+ runningControllers.set(id, controller);
249
+ updateJob(id, { status: 'running' });
250
+ eventBus.publish({ type: 'job', phase: 'started', jobId: id, agent: job.agent });
251
+ logger.info({ event: 'job.start', jobId: id, agent: job.agent, active: activeJobs });
252
+ let fullText = '';
253
+ let bytes = 0;
254
+ let droppedBytes = 0;
255
+ let truncated = false;
256
+ const cap = resolveMaxResultBytes();
257
+ try {
258
+ for await (const chunk of runner(job, logger, controller.signal)) {
259
+ if (controller.signal.aborted)
260
+ break;
261
+ const chunkBytes = Buffer.byteLength(chunk, 'utf-8');
262
+ if (truncated) {
263
+ droppedBytes += chunkBytes;
264
+ continue;
265
+ }
266
+ if (bytes + chunkBytes > cap) {
267
+ // Drop the entire over-cap chunk to keep the boundary on a UTF-8 /
268
+ // line boundary the producer chose; partial slicing risks splitting
269
+ // a multibyte char or a JSON object mid-event.
270
+ truncated = true;
271
+ droppedBytes += chunkBytes;
272
+ continue;
273
+ }
274
+ fullText += chunk;
275
+ bytes += chunkBytes;
276
+ }
277
+ if (truncated) {
278
+ const note = `\n\n[im-hub: result truncated — ${droppedBytes} bytes dropped after ${cap}-byte cap; raise IMHUB_JOB_RESULT_MAX_BYTES if needed]`;
279
+ fullText += note;
280
+ logger.warn({ event: 'job.result.truncated', jobId: id, droppedBytes, cap });
281
+ }
282
+ // Only update if not cancelled
283
+ if (!controller.signal.aborted) {
284
+ updateJob(id, { status: 'completed', result: fullText, completed_at: new Date().toISOString() });
285
+ eventBus.publish({ type: 'job', phase: 'completed', jobId: id, agent: job.agent });
286
+ logger.info({ event: 'job.complete', jobId: id, resultLen: fullText.length, truncated });
287
+ }
288
+ else {
289
+ updateJob(id, { status: 'cancelled', result: fullText || null, completed_at: new Date().toISOString() });
290
+ eventBus.publish({ type: 'job', phase: 'cancelled', jobId: id, agent: job.agent });
291
+ logger.info({ event: 'job.cancelled', jobId: id });
292
+ }
293
+ }
294
+ catch (err) {
295
+ const msg = err instanceof Error ? err.message : String(err);
296
+ const stack = err instanceof Error ? err.stack : undefined;
297
+ updateJob(id, { status: 'failed', error: msg, completed_at: new Date().toISOString() });
298
+ eventBus.publish({ type: 'job', phase: 'failed', jobId: id, agent: job.agent });
299
+ logger.error({ event: 'job.failed', jobId: id, error: msg, stack });
300
+ }
301
+ finally {
302
+ runningControllers.delete(id);
303
+ releaseSlot();
304
+ }
305
+ }
306
+ /** Test/diagnostic accessor: how many runJob invocations are currently in flight. */
307
+ export function _activeJobCount() { return activeJobs; }
308
+ /** Test/diagnostic accessor: the wait queue depth. */
309
+ export function _waitQueueDepth() { return waitQueue.length; }
310
+ /** Test-only: directly exercise the concurrency gate without SQLite. */
311
+ export const _testSlot = { acquire: acquireSlot, release: releaseSlot };
312
+ export function cancelJob(id, opts = {}) {
313
+ const job = getJob(id, opts);
314
+ if (!job || (job.status !== 'pending' && job.status !== 'running'))
315
+ return false;
316
+ const ctrl = runningControllers.get(id);
317
+ if (ctrl) {
318
+ ctrl.abort();
319
+ runningControllers.delete(id);
320
+ }
321
+ updateJob(id, { status: 'cancelled', completed_at: new Date().toISOString() });
322
+ eventBus.publish({ type: 'job', phase: 'cancelled', jobId: id, agent: job.agent });
323
+ return true;
324
+ }
325
+ /**
326
+ * Delete jobs that finished (completed / failed / cancelled) more than
327
+ * `daysRetention` days ago. 'pending' / 'running' rows are never pruned —
328
+ * a stalled-but-resumable job is the operator's call. Returns the row
329
+ * count so callers / tests can assert.
330
+ */
331
+ export function pruneOldJobs(d = getDb(), daysRetention = resolveRetentionDays()) {
332
+ if (!d)
333
+ return 0;
334
+ try {
335
+ const info = d.prepare(`
336
+ DELETE FROM jobs
337
+ WHERE status IN ('completed', 'failed', 'cancelled')
338
+ AND completed_at IS NOT NULL
339
+ AND completed_at < datetime('now', ?)
340
+ `).run(`-${daysRetention} days`);
341
+ if (info.changes > 0) {
342
+ rootLogger.info({
343
+ component: 'job-board', event: 'job-board.pruned',
344
+ deleted: info.changes, days: daysRetention,
345
+ }, `Pruned ${info.changes} job row(s) older than ${daysRetention}d`);
346
+ }
347
+ return info.changes;
348
+ }
349
+ catch (err) {
350
+ const msg = err instanceof Error ? err.message : String(err);
351
+ rootLogger.warn({ component: 'job-board', event: 'job-board.prune.failed', error: msg }, 'job-board retention sweep failed');
352
+ return 0;
353
+ }
354
+ }
355
+ export function getJobStats() {
356
+ const empty = { total: 0, pending: 0, running: 0, completed: 0, failed: 0 };
357
+ const d = getDb();
358
+ if (!d)
359
+ return empty;
360
+ try {
361
+ const row = d.prepare(`
362
+ SELECT
363
+ COUNT(*) as total,
364
+ SUM(CASE WHEN status='pending' THEN 1 ELSE 0 END) as pending,
365
+ SUM(CASE WHEN status='running' THEN 1 ELSE 0 END) as running,
366
+ SUM(CASE WHEN status='completed' THEN 1 ELSE 0 END) as completed,
367
+ SUM(CASE WHEN status='failed' THEN 1 ELSE 0 END) as failed
368
+ FROM jobs
369
+ `).get();
370
+ return {
371
+ total: row.total || 0, pending: row.pending || 0, running: row.running || 0,
372
+ completed: row.completed || 0, failed: row.failed || 0,
373
+ };
374
+ }
375
+ catch {
376
+ return empty;
377
+ }
378
+ }
379
+ //# sourceMappingURL=job-board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-board.js","sourceRoot":"","sources":["../../src/core/job-board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import pino from 'pino';
2
+ declare const root: pino.Logger<never, boolean>;
3
+ export declare function generateTraceId(): string;
4
+ export declare function createLogger(bindings?: Record<string, unknown>): pino.Logger;
5
+ export { root as logger };
6
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,MAAM,CAAA;AAQvB,QAAA,MAAM,IAAI,6BAoCR,CAAA;AAEF,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED,wBAAgB,YAAY,CAAC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI,CAAC,MAAM,CAEhF;AAED,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,CAAA"}
@@ -0,0 +1,54 @@
1
+ // Structured logging with trace id support
2
+ import pino from 'pino';
3
+ import { randomUUID } from 'crypto';
4
+ const level = process.env.LOG_LEVEL || 'info';
5
+ const usePretty = process.env.LOG_FORMAT === 'pretty' || (process.env.LOG_FORMAT !== 'json' && process.stdout.isTTY);
6
+ const root = pino({
7
+ level,
8
+ ...(usePretty ? {
9
+ transport: {
10
+ target: 'pino-pretty',
11
+ options: {
12
+ colorize: true,
13
+ translateTime: 'yyyy-mm-dd HH:MM:ss.l',
14
+ ignore: 'pid,hostname',
15
+ },
16
+ },
17
+ } : {}),
18
+ serializers: {
19
+ token: () => '[REDACTED]',
20
+ botToken: () => '[REDACTED]',
21
+ bot_token: () => '[REDACTED]',
22
+ appSecret: () => '[REDACTED]',
23
+ app_secret: () => '[REDACTED]',
24
+ password: () => '[REDACTED]',
25
+ },
26
+ // serializers above only apply to top-level keys passed to log methods.
27
+ // redact.paths walks nested structures (config objects, error contexts)
28
+ // and is the line of defense against tokens that leaked into wrapped
29
+ // payloads, e.g. `log.info({ config: { botToken: '...' } })` or
30
+ // `log.warn({ err: { url: '...?token=...' } })`.
31
+ redact: {
32
+ paths: [
33
+ '*.token', '*.botToken', '*.bot_token',
34
+ '*.apiKey', '*.api_key',
35
+ '*.appSecret', '*.app_secret',
36
+ '*.password', '*.secret',
37
+ 'headers.authorization',
38
+ 'headers["x-im-hub-token"]',
39
+ ],
40
+ censor: '[REDACTED]',
41
+ },
42
+ });
43
+ export function generateTraceId() {
44
+ // 16 hex chars (≈ 2^64). 12 hex (≈ 2^48) collides ~once per 16M ids on
45
+ // average — visible at sustained > 1 K req/s. 16 hex pushes the
46
+ // expectation past the realistic lifetime of any single im-hub process
47
+ // without burning much log volume (4 extra chars per line).
48
+ return randomUUID().replace(/-/g, '').slice(0, 16);
49
+ }
50
+ export function createLogger(bindings = {}) {
51
+ return root.child(bindings);
52
+ }
53
+ export { root as logger };
54
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAA;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,CACvD,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAC1D,CAAA;AAED,MAAM,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK;IACL,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACd,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,uBAAuB;gBACtC,MAAM,EAAE,cAAc;aACvB;SACF;KACF,CAAC,CAAC,CAAC,EAAE,CAAC;IACP,WAAW,EAAE;QACX,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY;QACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY;QAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY;QAC7B,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY;QAC9B,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY;KAC7B;IACD,wEAAwE;IACxE,wEAAwE;IACxE,qEAAqE;IACrE,gEAAgE;IAChE,iDAAiD;IACjD,MAAM,EAAE;QACN,KAAK,EAAE;YACL,SAAS,EAAE,YAAY,EAAE,aAAa;YACtC,UAAU,EAAE,WAAW;YACvB,aAAa,EAAE,cAAc;YAC7B,YAAY,EAAE,UAAU;YACxB,uBAAuB;YACvB,2BAA2B;SAC5B;QACD,MAAM,EAAE,YAAY;KACrB;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,eAAe;IAC7B,uEAAuE;IACvE,gEAAgE;IAChE,uEAAuE;IACvE,4DAA4D;IAC5D,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAoC,EAAE;IACjE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC;AAED,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,CAAA"}
@@ -0,0 +1,55 @@
1
+ /** Increment when audit-log retention sweep fails. Exposed as a Prometheus
2
+ * counter; ops should alert on any non-zero rate. */
3
+ export declare function recordAuditPruneFailure(): void;
4
+ /** Increment when an agent's per-spawn cleanup hook throws. Exposed as a
5
+ * Prometheus counter so leaked tmpdirs (mcp-config etc.) become visible
6
+ * on /api/metrics rather than only in warn-level pino output. */
7
+ export declare function recordAgentCleanupFailure(): void;
8
+ /** Type for the optional approval-bus metrics snapshot pulled in at scrape
9
+ * time. Kept structural to avoid importing approval-bus at module load
10
+ * (would risk a circular). */
11
+ export interface ApprovalBusMetricsLike {
12
+ pending: number;
13
+ totalRequests: number;
14
+ totalResolved: number;
15
+ totalAllowed: number;
16
+ totalDenied: number;
17
+ totalTimedOut: number;
18
+ }
19
+ export declare function setApprovalBusSnapshotProvider(fn: (() => ApprovalBusMetricsLike) | null): void;
20
+ export interface RecordedInvocation {
21
+ agent: string;
22
+ intent: string;
23
+ platform: string;
24
+ durationMs: number;
25
+ cost: number;
26
+ success: boolean;
27
+ }
28
+ export declare function recordInvocation(rec: RecordedInvocation): void;
29
+ export interface MetricsSnapshot {
30
+ uptimeSec: number;
31
+ agents: Array<{
32
+ agent: string;
33
+ total: number;
34
+ success: number;
35
+ failure: number;
36
+ successRate: number;
37
+ costSum: number;
38
+ sampleCount: number;
39
+ p50Ms: number;
40
+ p95Ms: number;
41
+ p99Ms: number;
42
+ }>;
43
+ intentTotals: Record<string, number>;
44
+ platformTotals: Record<string, number>;
45
+ }
46
+ export declare function snapshot(): MetricsSnapshot;
47
+ /**
48
+ * Render the snapshot in Prometheus text exposition format. Keeps line
49
+ * count low and uses bare metric names without a HELP/TYPE preamble per
50
+ * line family (we emit one preamble each).
51
+ */
52
+ export declare function toPrometheus(): string;
53
+ /** Reset all counters. Test-only. */
54
+ export declare function reset(): void;
55
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"AA8HA;sDACsD;AACtD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;kEAEkE;AAClE,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;+BAE+B;AAC/B,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;CACtB;AAQD,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,CAAC,MAAM,sBAAsB,CAAC,GAAG,IAAI,GAAG,IAAI,CAE9F;AAuCD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAa9D;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;KACd,CAAC,CAAA;IACF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED,wBAAgB,QAAQ,IAAI,eAAe,CA0B1C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAqErC;AAED,qCAAqC;AACrC,wBAAgB,KAAK,IAAI,IAAI,CAM5B"}