@yoda.digital/iris-gateway 1.13.3

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 (596) hide show
  1. package/CHANGELOG.md +515 -0
  2. package/README.md +282 -0
  3. package/dist/auto-reply/engine.d.ts +13 -0
  4. package/dist/auto-reply/engine.d.ts.map +1 -0
  5. package/dist/auto-reply/engine.js +70 -0
  6. package/dist/auto-reply/engine.js.map +1 -0
  7. package/dist/auto-reply/types.d.ts +37 -0
  8. package/dist/auto-reply/types.d.ts.map +1 -0
  9. package/dist/auto-reply/types.js +2 -0
  10. package/dist/auto-reply/types.js.map +1 -0
  11. package/dist/bridge/circuit-breaker.d.ts +40 -0
  12. package/dist/bridge/circuit-breaker.d.ts.map +1 -0
  13. package/dist/bridge/circuit-breaker.js +82 -0
  14. package/dist/bridge/circuit-breaker.js.map +1 -0
  15. package/dist/bridge/event-handler.d.ts +18 -0
  16. package/dist/bridge/event-handler.d.ts.map +1 -0
  17. package/dist/bridge/event-handler.js +128 -0
  18. package/dist/bridge/event-handler.js.map +1 -0
  19. package/dist/bridge/message-queue.d.ts +50 -0
  20. package/dist/bridge/message-queue.d.ts.map +1 -0
  21. package/dist/bridge/message-queue.js +110 -0
  22. package/dist/bridge/message-queue.js.map +1 -0
  23. package/dist/bridge/message-router.d.ts +37 -0
  24. package/dist/bridge/message-router.d.ts.map +1 -0
  25. package/dist/bridge/message-router.js +329 -0
  26. package/dist/bridge/message-router.js.map +1 -0
  27. package/dist/bridge/opencode-client.d.ts +55 -0
  28. package/dist/bridge/opencode-client.d.ts.map +1 -0
  29. package/dist/bridge/opencode-client.js +282 -0
  30. package/dist/bridge/opencode-client.js.map +1 -0
  31. package/dist/bridge/routers/channels.d.ts +11 -0
  32. package/dist/bridge/routers/channels.d.ts.map +1 -0
  33. package/dist/bridge/routers/channels.js +164 -0
  34. package/dist/bridge/routers/channels.js.map +1 -0
  35. package/dist/bridge/routers/cli.d.ts +11 -0
  36. package/dist/bridge/routers/cli.d.ts.map +1 -0
  37. package/dist/bridge/routers/cli.js +31 -0
  38. package/dist/bridge/routers/cli.js.map +1 -0
  39. package/dist/bridge/routers/governance.d.ts +13 -0
  40. package/dist/bridge/routers/governance.d.ts.map +1 -0
  41. package/dist/bridge/routers/governance.js +115 -0
  42. package/dist/bridge/routers/governance.js.map +1 -0
  43. package/dist/bridge/routers/intelligence.d.ts +23 -0
  44. package/dist/bridge/routers/intelligence.d.ts.map +1 -0
  45. package/dist/bridge/routers/intelligence.js +165 -0
  46. package/dist/bridge/routers/intelligence.js.map +1 -0
  47. package/dist/bridge/routers/skills-handlers.d.ts +122 -0
  48. package/dist/bridge/routers/skills-handlers.d.ts.map +1 -0
  49. package/dist/bridge/routers/skills-handlers.js +396 -0
  50. package/dist/bridge/routers/skills-handlers.js.map +1 -0
  51. package/dist/bridge/routers/skills-router.d.ts +5 -0
  52. package/dist/bridge/routers/skills-router.d.ts.map +1 -0
  53. package/dist/bridge/routers/skills-router.js +22 -0
  54. package/dist/bridge/routers/skills-router.js.map +1 -0
  55. package/dist/bridge/routers/skills.d.ts +2 -0
  56. package/dist/bridge/routers/skills.d.ts.map +1 -0
  57. package/dist/bridge/routers/skills.js +4 -0
  58. package/dist/bridge/routers/skills.js.map +1 -0
  59. package/dist/bridge/routers/system.d.ts +29 -0
  60. package/dist/bridge/routers/system.d.ts.map +1 -0
  61. package/dist/bridge/routers/system.js +132 -0
  62. package/dist/bridge/routers/system.js.map +1 -0
  63. package/dist/bridge/routers/vault.d.ts +11 -0
  64. package/dist/bridge/routers/vault.d.ts.map +1 -0
  65. package/dist/bridge/routers/vault.js +97 -0
  66. package/dist/bridge/routers/vault.js.map +1 -0
  67. package/dist/bridge/session-map.d.ts +24 -0
  68. package/dist/bridge/session-map.d.ts.map +1 -0
  69. package/dist/bridge/session-map.js +78 -0
  70. package/dist/bridge/session-map.js.map +1 -0
  71. package/dist/bridge/stream-coalescer.d.ts +26 -0
  72. package/dist/bridge/stream-coalescer.d.ts.map +1 -0
  73. package/dist/bridge/stream-coalescer.js +82 -0
  74. package/dist/bridge/stream-coalescer.js.map +1 -0
  75. package/dist/bridge/supervisor.d.ts +50 -0
  76. package/dist/bridge/supervisor.d.ts.map +1 -0
  77. package/dist/bridge/supervisor.js +139 -0
  78. package/dist/bridge/supervisor.js.map +1 -0
  79. package/dist/bridge/tool-server.d.ts +73 -0
  80. package/dist/bridge/tool-server.d.ts.map +1 -0
  81. package/dist/bridge/tool-server.js +209 -0
  82. package/dist/bridge/tool-server.js.map +1 -0
  83. package/dist/canvas/components.d.ts +71 -0
  84. package/dist/canvas/components.d.ts.map +1 -0
  85. package/dist/canvas/components.js +2 -0
  86. package/dist/canvas/components.js.map +1 -0
  87. package/dist/canvas/renderer.d.ts +2 -0
  88. package/dist/canvas/renderer.d.ts.map +1 -0
  89. package/dist/canvas/renderer.js +240 -0
  90. package/dist/canvas/renderer.js.map +1 -0
  91. package/dist/canvas/server.d.ts +24 -0
  92. package/dist/canvas/server.d.ts.map +1 -0
  93. package/dist/canvas/server.js +134 -0
  94. package/dist/canvas/server.js.map +1 -0
  95. package/dist/canvas/session.d.ts +23 -0
  96. package/dist/canvas/session.d.ts.map +1 -0
  97. package/dist/canvas/session.js +64 -0
  98. package/dist/canvas/session.js.map +1 -0
  99. package/dist/channels/adapter.d.ts +90 -0
  100. package/dist/channels/adapter.d.ts.map +1 -0
  101. package/dist/channels/adapter.js +2 -0
  102. package/dist/channels/adapter.js.map +1 -0
  103. package/dist/channels/discord/client.d.ts +3 -0
  104. package/dist/channels/discord/client.d.ts.map +1 -0
  105. package/dist/channels/discord/client.js +13 -0
  106. package/dist/channels/discord/client.js.map +1 -0
  107. package/dist/channels/discord/index.d.ts +41 -0
  108. package/dist/channels/discord/index.d.ts.map +1 -0
  109. package/dist/channels/discord/index.js +113 -0
  110. package/dist/channels/discord/index.js.map +1 -0
  111. package/dist/channels/discord/normalize.d.ts +4 -0
  112. package/dist/channels/discord/normalize.d.ts.map +1 -0
  113. package/dist/channels/discord/normalize.js +20 -0
  114. package/dist/channels/discord/normalize.js.map +1 -0
  115. package/dist/channels/discord/send.d.ts +13 -0
  116. package/dist/channels/discord/send.d.ts.map +1 -0
  117. package/dist/channels/discord/send.js +54 -0
  118. package/dist/channels/discord/send.js.map +1 -0
  119. package/dist/channels/mention-gating.d.ts +13 -0
  120. package/dist/channels/mention-gating.d.ts.map +1 -0
  121. package/dist/channels/mention-gating.js +42 -0
  122. package/dist/channels/mention-gating.js.map +1 -0
  123. package/dist/channels/message-cache.d.ts +17 -0
  124. package/dist/channels/message-cache.d.ts.map +1 -0
  125. package/dist/channels/message-cache.js +43 -0
  126. package/dist/channels/message-cache.js.map +1 -0
  127. package/dist/channels/registry.d.ts +9 -0
  128. package/dist/channels/registry.d.ts.map +1 -0
  129. package/dist/channels/registry.js +19 -0
  130. package/dist/channels/registry.js.map +1 -0
  131. package/dist/channels/slack/index.d.ts +38 -0
  132. package/dist/channels/slack/index.d.ts.map +1 -0
  133. package/dist/channels/slack/index.js +105 -0
  134. package/dist/channels/slack/index.js.map +1 -0
  135. package/dist/channels/slack/normalize.d.ts +14 -0
  136. package/dist/channels/slack/normalize.d.ts.map +1 -0
  137. package/dist/channels/slack/normalize.js +23 -0
  138. package/dist/channels/slack/normalize.js.map +1 -0
  139. package/dist/channels/slack/send.d.ts +13 -0
  140. package/dist/channels/slack/send.d.ts.map +1 -0
  141. package/dist/channels/slack/send.js +48 -0
  142. package/dist/channels/slack/send.js.map +1 -0
  143. package/dist/channels/telegram/index.d.ts +42 -0
  144. package/dist/channels/telegram/index.d.ts.map +1 -0
  145. package/dist/channels/telegram/index.js +125 -0
  146. package/dist/channels/telegram/index.js.map +1 -0
  147. package/dist/channels/telegram/normalize.d.ts +4 -0
  148. package/dist/channels/telegram/normalize.d.ts.map +1 -0
  149. package/dist/channels/telegram/normalize.js +25 -0
  150. package/dist/channels/telegram/normalize.js.map +1 -0
  151. package/dist/channels/telegram/send.d.ts +13 -0
  152. package/dist/channels/telegram/send.d.ts.map +1 -0
  153. package/dist/channels/telegram/send.js +55 -0
  154. package/dist/channels/telegram/send.js.map +1 -0
  155. package/dist/channels/webchat/index.d.ts +20 -0
  156. package/dist/channels/webchat/index.d.ts.map +1 -0
  157. package/dist/channels/webchat/index.js +42 -0
  158. package/dist/channels/webchat/index.js.map +1 -0
  159. package/dist/channels/whatsapp/connection.d.ts +43 -0
  160. package/dist/channels/whatsapp/connection.d.ts.map +1 -0
  161. package/dist/channels/whatsapp/connection.js +76 -0
  162. package/dist/channels/whatsapp/connection.js.map +1 -0
  163. package/dist/channels/whatsapp/index.d.ts +38 -0
  164. package/dist/channels/whatsapp/index.d.ts.map +1 -0
  165. package/dist/channels/whatsapp/index.js +99 -0
  166. package/dist/channels/whatsapp/index.js.map +1 -0
  167. package/dist/channels/whatsapp/normalize.d.ts +4 -0
  168. package/dist/channels/whatsapp/normalize.d.ts.map +1 -0
  169. package/dist/channels/whatsapp/normalize.js +31 -0
  170. package/dist/channels/whatsapp/normalize.js.map +1 -0
  171. package/dist/channels/whatsapp/send.d.ts +12 -0
  172. package/dist/channels/whatsapp/send.d.ts.map +1 -0
  173. package/dist/channels/whatsapp/send.js +48 -0
  174. package/dist/channels/whatsapp/send.js.map +1 -0
  175. package/dist/cli/banner.d.ts +2 -0
  176. package/dist/cli/banner.d.ts.map +1 -0
  177. package/dist/cli/banner.js +18 -0
  178. package/dist/cli/banner.js.map +1 -0
  179. package/dist/cli/commands/config-cmd.d.ts +13 -0
  180. package/dist/cli/commands/config-cmd.d.ts.map +1 -0
  181. package/dist/cli/commands/config-cmd.js +76 -0
  182. package/dist/cli/commands/config-cmd.js.map +1 -0
  183. package/dist/cli/commands/cron-cmd.d.ts +23 -0
  184. package/dist/cli/commands/cron-cmd.d.ts.map +1 -0
  185. package/dist/cli/commands/cron-cmd.js +88 -0
  186. package/dist/cli/commands/cron-cmd.js.map +1 -0
  187. package/dist/cli/commands/doctor.d.ts +7 -0
  188. package/dist/cli/commands/doctor.d.ts.map +1 -0
  189. package/dist/cli/commands/doctor.js +88 -0
  190. package/dist/cli/commands/doctor.js.map +1 -0
  191. package/dist/cli/commands/gateway.d.ts +8 -0
  192. package/dist/cli/commands/gateway.d.ts.map +1 -0
  193. package/dist/cli/commands/gateway.js +33 -0
  194. package/dist/cli/commands/gateway.js.map +1 -0
  195. package/dist/cli/commands/init.d.ts +7 -0
  196. package/dist/cli/commands/init.d.ts.map +1 -0
  197. package/dist/cli/commands/init.js +308 -0
  198. package/dist/cli/commands/init.js.map +1 -0
  199. package/dist/cli/commands/pairing.d.ts +19 -0
  200. package/dist/cli/commands/pairing.d.ts.map +1 -0
  201. package/dist/cli/commands/pairing.js +70 -0
  202. package/dist/cli/commands/pairing.js.map +1 -0
  203. package/dist/cli/commands/scan.d.ts +8 -0
  204. package/dist/cli/commands/scan.d.ts.map +1 -0
  205. package/dist/cli/commands/scan.js +39 -0
  206. package/dist/cli/commands/scan.js.map +1 -0
  207. package/dist/cli/commands/security.d.ts +15 -0
  208. package/dist/cli/commands/security.d.ts.map +1 -0
  209. package/dist/cli/commands/security.js +49 -0
  210. package/dist/cli/commands/security.js.map +1 -0
  211. package/dist/cli/commands/send.d.ts +10 -0
  212. package/dist/cli/commands/send.d.ts.map +1 -0
  213. package/dist/cli/commands/send.js +64 -0
  214. package/dist/cli/commands/send.js.map +1 -0
  215. package/dist/cli/commands/session.d.ts +13 -0
  216. package/dist/cli/commands/session.d.ts.map +1 -0
  217. package/dist/cli/commands/session.js +48 -0
  218. package/dist/cli/commands/session.js.map +1 -0
  219. package/dist/cli/commands/status.d.ts +7 -0
  220. package/dist/cli/commands/status.d.ts.map +1 -0
  221. package/dist/cli/commands/status.js +43 -0
  222. package/dist/cli/commands/status.js.map +1 -0
  223. package/dist/cli/executor.d.ts +19 -0
  224. package/dist/cli/executor.d.ts.map +1 -0
  225. package/dist/cli/executor.js +75 -0
  226. package/dist/cli/executor.js.map +1 -0
  227. package/dist/cli/program.d.ts +3 -0
  228. package/dist/cli/program.d.ts.map +1 -0
  229. package/dist/cli/program.js +49 -0
  230. package/dist/cli/program.js.map +1 -0
  231. package/dist/cli/registry.d.ts +15 -0
  232. package/dist/cli/registry.d.ts.map +1 -0
  233. package/dist/cli/registry.js +64 -0
  234. package/dist/cli/registry.js.map +1 -0
  235. package/dist/cli/types.d.ts +40 -0
  236. package/dist/cli/types.d.ts.map +1 -0
  237. package/dist/cli/types.js +2 -0
  238. package/dist/cli/types.js.map +1 -0
  239. package/dist/config/loader.d.ts +4 -0
  240. package/dist/config/loader.d.ts.map +1 -0
  241. package/dist/config/loader.js +31 -0
  242. package/dist/config/loader.js.map +1 -0
  243. package/dist/config/paths.d.ts +4 -0
  244. package/dist/config/paths.d.ts.map +1 -0
  245. package/dist/config/paths.js +14 -0
  246. package/dist/config/paths.js.map +1 -0
  247. package/dist/config/schema.d.ts +1414 -0
  248. package/dist/config/schema.d.ts.map +1 -0
  249. package/dist/config/schema.js +256 -0
  250. package/dist/config/schema.js.map +1 -0
  251. package/dist/config/types.d.ts +176 -0
  252. package/dist/config/types.d.ts.map +1 -0
  253. package/dist/config/types.js +2 -0
  254. package/dist/config/types.js.map +1 -0
  255. package/dist/cron/run-log.d.ts +14 -0
  256. package/dist/cron/run-log.d.ts.map +1 -0
  257. package/dist/cron/run-log.js +16 -0
  258. package/dist/cron/run-log.js.map +1 -0
  259. package/dist/cron/service.d.ts +29 -0
  260. package/dist/cron/service.d.ts.map +1 -0
  261. package/dist/cron/service.js +98 -0
  262. package/dist/cron/service.js.map +1 -0
  263. package/dist/cron/store.d.ts +20 -0
  264. package/dist/cron/store.d.ts.map +1 -0
  265. package/dist/cron/store.js +61 -0
  266. package/dist/cron/store.js.map +1 -0
  267. package/dist/gateway/adapters.d.ts +37 -0
  268. package/dist/gateway/adapters.d.ts.map +1 -0
  269. package/dist/gateway/adapters.js +83 -0
  270. package/dist/gateway/adapters.js.map +1 -0
  271. package/dist/gateway/health.d.ts +19 -0
  272. package/dist/gateway/health.d.ts.map +1 -0
  273. package/dist/gateway/health.js +117 -0
  274. package/dist/gateway/health.js.map +1 -0
  275. package/dist/gateway/intelligence-wiring.d.ts +38 -0
  276. package/dist/gateway/intelligence-wiring.d.ts.map +1 -0
  277. package/dist/gateway/intelligence-wiring.js +49 -0
  278. package/dist/gateway/intelligence-wiring.js.map +1 -0
  279. package/dist/gateway/lifecycle.d.ts +71 -0
  280. package/dist/gateway/lifecycle.d.ts.map +1 -0
  281. package/dist/gateway/lifecycle.js +318 -0
  282. package/dist/gateway/lifecycle.js.map +1 -0
  283. package/dist/gateway/metrics.d.ts +27 -0
  284. package/dist/gateway/metrics.d.ts.map +1 -0
  285. package/dist/gateway/metrics.js +99 -0
  286. package/dist/gateway/metrics.js.map +1 -0
  287. package/dist/gateway/security-wiring.d.ts +16 -0
  288. package/dist/gateway/security-wiring.d.ts.map +1 -0
  289. package/dist/gateway/security-wiring.js +18 -0
  290. package/dist/gateway/security-wiring.js.map +1 -0
  291. package/dist/gateway/shutdown.d.ts +37 -0
  292. package/dist/gateway/shutdown.d.ts.map +1 -0
  293. package/dist/gateway/shutdown.js +60 -0
  294. package/dist/gateway/shutdown.js.map +1 -0
  295. package/dist/governance/engine.d.ts +11 -0
  296. package/dist/governance/engine.d.ts.map +1 -0
  297. package/dist/governance/engine.js +57 -0
  298. package/dist/governance/engine.js.map +1 -0
  299. package/dist/governance/policy.d.ts +68 -0
  300. package/dist/governance/policy.d.ts.map +1 -0
  301. package/dist/governance/policy.js +300 -0
  302. package/dist/governance/policy.js.map +1 -0
  303. package/dist/governance/types.d.ts +18 -0
  304. package/dist/governance/types.d.ts.map +1 -0
  305. package/dist/governance/types.js +2 -0
  306. package/dist/governance/types.js.map +1 -0
  307. package/dist/heartbeat/active-hours.d.ts +7 -0
  308. package/dist/heartbeat/active-hours.d.ts.map +1 -0
  309. package/dist/heartbeat/active-hours.js +38 -0
  310. package/dist/heartbeat/active-hours.js.map +1 -0
  311. package/dist/heartbeat/activity.d.ts +16 -0
  312. package/dist/heartbeat/activity.d.ts.map +1 -0
  313. package/dist/heartbeat/activity.js +41 -0
  314. package/dist/heartbeat/activity.js.map +1 -0
  315. package/dist/heartbeat/checkers.d.ts +34 -0
  316. package/dist/heartbeat/checkers.d.ts.map +1 -0
  317. package/dist/heartbeat/checkers.js +161 -0
  318. package/dist/heartbeat/checkers.js.map +1 -0
  319. package/dist/heartbeat/coalesce.d.ts +16 -0
  320. package/dist/heartbeat/coalesce.d.ts.map +1 -0
  321. package/dist/heartbeat/coalesce.js +36 -0
  322. package/dist/heartbeat/coalesce.js.map +1 -0
  323. package/dist/heartbeat/empty-check.d.ts +12 -0
  324. package/dist/heartbeat/empty-check.d.ts.map +1 -0
  325. package/dist/heartbeat/empty-check.js +24 -0
  326. package/dist/heartbeat/empty-check.js.map +1 -0
  327. package/dist/heartbeat/engine.d.ts +39 -0
  328. package/dist/heartbeat/engine.d.ts.map +1 -0
  329. package/dist/heartbeat/engine.js +235 -0
  330. package/dist/heartbeat/engine.js.map +1 -0
  331. package/dist/heartbeat/store.d.ts +32 -0
  332. package/dist/heartbeat/store.d.ts.map +1 -0
  333. package/dist/heartbeat/store.js +127 -0
  334. package/dist/heartbeat/store.js.map +1 -0
  335. package/dist/heartbeat/types.d.ts +74 -0
  336. package/dist/heartbeat/types.d.ts.map +1 -0
  337. package/dist/heartbeat/types.js +2 -0
  338. package/dist/heartbeat/types.js.map +1 -0
  339. package/dist/heartbeat/visibility.d.ts +8 -0
  340. package/dist/heartbeat/visibility.d.ts.map +1 -0
  341. package/dist/heartbeat/visibility.js +13 -0
  342. package/dist/heartbeat/visibility.js.map +1 -0
  343. package/dist/index.d.ts +2 -0
  344. package/dist/index.d.ts.map +1 -0
  345. package/dist/index.js +4 -0
  346. package/dist/index.js.map +1 -0
  347. package/dist/instance/coordinator.d.ts +30 -0
  348. package/dist/instance/coordinator.d.ts.map +1 -0
  349. package/dist/instance/coordinator.js +113 -0
  350. package/dist/instance/coordinator.js.map +1 -0
  351. package/dist/intelligence/arcs/detector.d.ts +57 -0
  352. package/dist/intelligence/arcs/detector.d.ts.map +1 -0
  353. package/dist/intelligence/arcs/detector.js +140 -0
  354. package/dist/intelligence/arcs/detector.js.map +1 -0
  355. package/dist/intelligence/arcs/lifecycle.d.ts +39 -0
  356. package/dist/intelligence/arcs/lifecycle.d.ts.map +1 -0
  357. package/dist/intelligence/arcs/lifecycle.js +87 -0
  358. package/dist/intelligence/arcs/lifecycle.js.map +1 -0
  359. package/dist/intelligence/arcs/store.d.ts +30 -0
  360. package/dist/intelligence/arcs/store.d.ts.map +1 -0
  361. package/dist/intelligence/arcs/store.js +117 -0
  362. package/dist/intelligence/arcs/store.js.map +1 -0
  363. package/dist/intelligence/bus.d.ts +21 -0
  364. package/dist/intelligence/bus.d.ts.map +1 -0
  365. package/dist/intelligence/bus.js +26 -0
  366. package/dist/intelligence/bus.js.map +1 -0
  367. package/dist/intelligence/cross-channel/resolver.d.ts +43 -0
  368. package/dist/intelligence/cross-channel/resolver.d.ts.map +1 -0
  369. package/dist/intelligence/cross-channel/resolver.js +129 -0
  370. package/dist/intelligence/cross-channel/resolver.js.map +1 -0
  371. package/dist/intelligence/goals/lifecycle.d.ts +66 -0
  372. package/dist/intelligence/goals/lifecycle.d.ts.map +1 -0
  373. package/dist/intelligence/goals/lifecycle.js +135 -0
  374. package/dist/intelligence/goals/lifecycle.js.map +1 -0
  375. package/dist/intelligence/goals/store.d.ts +30 -0
  376. package/dist/intelligence/goals/store.d.ts.map +1 -0
  377. package/dist/intelligence/goals/store.js +105 -0
  378. package/dist/intelligence/goals/store.js.map +1 -0
  379. package/dist/intelligence/health/gate.d.ts +41 -0
  380. package/dist/intelligence/health/gate.d.ts.map +1 -0
  381. package/dist/intelligence/health/gate.js +140 -0
  382. package/dist/intelligence/health/gate.js.map +1 -0
  383. package/dist/intelligence/health/trend-detector.d.ts +43 -0
  384. package/dist/intelligence/health/trend-detector.d.ts.map +1 -0
  385. package/dist/intelligence/health/trend-detector.js +160 -0
  386. package/dist/intelligence/health/trend-detector.js.map +1 -0
  387. package/dist/intelligence/inference/engine.d.ts +32 -0
  388. package/dist/intelligence/inference/engine.d.ts.map +1 -0
  389. package/dist/intelligence/inference/engine.js +98 -0
  390. package/dist/intelligence/inference/engine.js.map +1 -0
  391. package/dist/intelligence/inference/rules/engagement-trend.d.ts +9 -0
  392. package/dist/intelligence/inference/rules/engagement-trend.d.ts.map +1 -0
  393. package/dist/intelligence/inference/rules/engagement-trend.js +50 -0
  394. package/dist/intelligence/inference/rules/engagement-trend.js.map +1 -0
  395. package/dist/intelligence/inference/rules/index.d.ts +3 -0
  396. package/dist/intelligence/inference/rules/index.d.ts.map +1 -0
  397. package/dist/intelligence/inference/rules/index.js +13 -0
  398. package/dist/intelligence/inference/rules/index.js.map +1 -0
  399. package/dist/intelligence/inference/rules/language-stability.d.ts +9 -0
  400. package/dist/intelligence/inference/rules/language-stability.d.ts.map +1 -0
  401. package/dist/intelligence/inference/rules/language-stability.js +68 -0
  402. package/dist/intelligence/inference/rules/language-stability.js.map +1 -0
  403. package/dist/intelligence/inference/rules/response-cadence.d.ts +9 -0
  404. package/dist/intelligence/inference/rules/response-cadence.d.ts.map +1 -0
  405. package/dist/intelligence/inference/rules/response-cadence.js +53 -0
  406. package/dist/intelligence/inference/rules/response-cadence.js.map +1 -0
  407. package/dist/intelligence/inference/rules/session-pattern.d.ts +9 -0
  408. package/dist/intelligence/inference/rules/session-pattern.d.ts.map +1 -0
  409. package/dist/intelligence/inference/rules/session-pattern.js +53 -0
  410. package/dist/intelligence/inference/rules/session-pattern.js.map +1 -0
  411. package/dist/intelligence/inference/rules/timezone-from-hours.d.ts +3 -0
  412. package/dist/intelligence/inference/rules/timezone-from-hours.d.ts.map +1 -0
  413. package/dist/intelligence/inference/rules/timezone-from-hours.js +93 -0
  414. package/dist/intelligence/inference/rules/timezone-from-hours.js.map +1 -0
  415. package/dist/intelligence/inference/store.d.ts +21 -0
  416. package/dist/intelligence/inference/store.d.ts.map +1 -0
  417. package/dist/intelligence/inference/store.js +82 -0
  418. package/dist/intelligence/inference/store.js.map +1 -0
  419. package/dist/intelligence/outcomes/analyzer.d.ts +52 -0
  420. package/dist/intelligence/outcomes/analyzer.d.ts.map +1 -0
  421. package/dist/intelligence/outcomes/analyzer.js +103 -0
  422. package/dist/intelligence/outcomes/analyzer.js.map +1 -0
  423. package/dist/intelligence/outcomes/categorizer.d.ts +12 -0
  424. package/dist/intelligence/outcomes/categorizer.d.ts.map +1 -0
  425. package/dist/intelligence/outcomes/categorizer.js +19 -0
  426. package/dist/intelligence/outcomes/categorizer.js.map +1 -0
  427. package/dist/intelligence/outcomes/store.d.ts +21 -0
  428. package/dist/intelligence/outcomes/store.d.ts.map +1 -0
  429. package/dist/intelligence/outcomes/store.js +107 -0
  430. package/dist/intelligence/outcomes/store.js.map +1 -0
  431. package/dist/intelligence/prompt-assembler.d.ts +39 -0
  432. package/dist/intelligence/prompt-assembler.d.ts.map +1 -0
  433. package/dist/intelligence/prompt-assembler.js +99 -0
  434. package/dist/intelligence/prompt-assembler.js.map +1 -0
  435. package/dist/intelligence/store.d.ts +50 -0
  436. package/dist/intelligence/store.d.ts.map +1 -0
  437. package/dist/intelligence/store.js +102 -0
  438. package/dist/intelligence/store.js.map +1 -0
  439. package/dist/intelligence/triggers/evaluator.d.ts +27 -0
  440. package/dist/intelligence/triggers/evaluator.d.ts.map +1 -0
  441. package/dist/intelligence/triggers/evaluator.js +81 -0
  442. package/dist/intelligence/triggers/evaluator.js.map +1 -0
  443. package/dist/intelligence/triggers/rules.d.ts +10 -0
  444. package/dist/intelligence/triggers/rules.d.ts.map +1 -0
  445. package/dist/intelligence/triggers/rules.js +186 -0
  446. package/dist/intelligence/triggers/rules.js.map +1 -0
  447. package/dist/intelligence/types.d.ts +182 -0
  448. package/dist/intelligence/types.d.ts.map +1 -0
  449. package/dist/intelligence/types.js +3 -0
  450. package/dist/intelligence/types.js.map +1 -0
  451. package/dist/logging/logger.d.ts +5 -0
  452. package/dist/logging/logger.d.ts.map +1 -0
  453. package/dist/logging/logger.js +20 -0
  454. package/dist/logging/logger.js.map +1 -0
  455. package/dist/media/compress.d.ts +13 -0
  456. package/dist/media/compress.d.ts.map +1 -0
  457. package/dist/media/compress.js +38 -0
  458. package/dist/media/compress.js.map +1 -0
  459. package/dist/media/fetch.d.ts +18 -0
  460. package/dist/media/fetch.d.ts.map +1 -0
  461. package/dist/media/fetch.js +62 -0
  462. package/dist/media/fetch.js.map +1 -0
  463. package/dist/media/mime.d.ts +11 -0
  464. package/dist/media/mime.d.ts.map +1 -0
  465. package/dist/media/mime.js +112 -0
  466. package/dist/media/mime.js.map +1 -0
  467. package/dist/media/parse.d.ts +20 -0
  468. package/dist/media/parse.d.ts.map +1 -0
  469. package/dist/media/parse.js +52 -0
  470. package/dist/media/parse.js.map +1 -0
  471. package/dist/media/server.d.ts +17 -0
  472. package/dist/media/server.d.ts.map +1 -0
  473. package/dist/media/server.js +76 -0
  474. package/dist/media/server.js.map +1 -0
  475. package/dist/media/store.d.ts +26 -0
  476. package/dist/media/store.d.ts.map +1 -0
  477. package/dist/media/store.js +100 -0
  478. package/dist/media/store.js.map +1 -0
  479. package/dist/onboarding/enricher.d.ts +25 -0
  480. package/dist/onboarding/enricher.d.ts.map +1 -0
  481. package/dist/onboarding/enricher.js +151 -0
  482. package/dist/onboarding/enricher.js.map +1 -0
  483. package/dist/onboarding/signals.d.ts +13 -0
  484. package/dist/onboarding/signals.d.ts.map +1 -0
  485. package/dist/onboarding/signals.js +79 -0
  486. package/dist/onboarding/signals.js.map +1 -0
  487. package/dist/onboarding/types.d.ts +28 -0
  488. package/dist/onboarding/types.d.ts.map +1 -0
  489. package/dist/onboarding/types.js +2 -0
  490. package/dist/onboarding/types.js.map +1 -0
  491. package/dist/plugins/hook-bus.d.ts +7 -0
  492. package/dist/plugins/hook-bus.d.ts.map +1 -0
  493. package/dist/plugins/hook-bus.js +25 -0
  494. package/dist/plugins/hook-bus.js.map +1 -0
  495. package/dist/plugins/loader.d.ts +14 -0
  496. package/dist/plugins/loader.d.ts.map +1 -0
  497. package/dist/plugins/loader.js +108 -0
  498. package/dist/plugins/loader.js.map +1 -0
  499. package/dist/plugins/registry.d.ts +13 -0
  500. package/dist/plugins/registry.d.ts.map +1 -0
  501. package/dist/plugins/registry.js +32 -0
  502. package/dist/plugins/registry.js.map +1 -0
  503. package/dist/plugins/types.d.ts +67 -0
  504. package/dist/plugins/types.d.ts.map +1 -0
  505. package/dist/plugins/types.js +2 -0
  506. package/dist/plugins/types.js.map +1 -0
  507. package/dist/proactive/engine.d.ts +46 -0
  508. package/dist/proactive/engine.d.ts.map +1 -0
  509. package/dist/proactive/engine.js +238 -0
  510. package/dist/proactive/engine.js.map +1 -0
  511. package/dist/proactive/store.d.ts +35 -0
  512. package/dist/proactive/store.d.ts.map +1 -0
  513. package/dist/proactive/store.js +186 -0
  514. package/dist/proactive/store.js.map +1 -0
  515. package/dist/proactive/types.d.ts +91 -0
  516. package/dist/proactive/types.d.ts.map +1 -0
  517. package/dist/proactive/types.js +2 -0
  518. package/dist/proactive/types.js.map +1 -0
  519. package/dist/sdk/client.d.ts +222 -0
  520. package/dist/sdk/client.d.ts.map +1 -0
  521. package/dist/sdk/client.js +108 -0
  522. package/dist/sdk/client.js.map +1 -0
  523. package/dist/security/allowlist-store.d.ts +17 -0
  524. package/dist/security/allowlist-store.d.ts.map +1 -0
  525. package/dist/security/allowlist-store.js +52 -0
  526. package/dist/security/allowlist-store.js.map +1 -0
  527. package/dist/security/dm-policy.d.ts +32 -0
  528. package/dist/security/dm-policy.d.ts.map +1 -0
  529. package/dist/security/dm-policy.js +67 -0
  530. package/dist/security/dm-policy.js.map +1 -0
  531. package/dist/security/pairing-store.d.ts +25 -0
  532. package/dist/security/pairing-store.d.ts.map +1 -0
  533. package/dist/security/pairing-store.js +103 -0
  534. package/dist/security/pairing-store.js.map +1 -0
  535. package/dist/security/rate-limiter.d.ts +17 -0
  536. package/dist/security/rate-limiter.d.ts.map +1 -0
  537. package/dist/security/rate-limiter.js +43 -0
  538. package/dist/security/rate-limiter.js.map +1 -0
  539. package/dist/security/scan-rules.d.ts +3 -0
  540. package/dist/security/scan-rules.d.ts.map +1 -0
  541. package/dist/security/scan-rules.js +79 -0
  542. package/dist/security/scan-rules.js.map +1 -0
  543. package/dist/security/scan-types.d.ts +27 -0
  544. package/dist/security/scan-types.d.ts.map +1 -0
  545. package/dist/security/scan-types.js +2 -0
  546. package/dist/security/scan-types.js.map +1 -0
  547. package/dist/security/scanner.d.ts +8 -0
  548. package/dist/security/scanner.d.ts.map +1 -0
  549. package/dist/security/scanner.js +105 -0
  550. package/dist/security/scanner.js.map +1 -0
  551. package/dist/usage/tracker.d.ts +13 -0
  552. package/dist/usage/tracker.d.ts.map +1 -0
  553. package/dist/usage/tracker.js +66 -0
  554. package/dist/usage/tracker.js.map +1 -0
  555. package/dist/usage/types.d.ts +28 -0
  556. package/dist/usage/types.d.ts.map +1 -0
  557. package/dist/usage/types.js +2 -0
  558. package/dist/usage/types.js.map +1 -0
  559. package/dist/utils/file-lock.d.ts +2 -0
  560. package/dist/utils/file-lock.d.ts.map +1 -0
  561. package/dist/utils/file-lock.js +15 -0
  562. package/dist/utils/file-lock.js.map +1 -0
  563. package/dist/utils/retry.d.ts +8 -0
  564. package/dist/utils/retry.d.ts.map +1 -0
  565. package/dist/utils/retry.js +35 -0
  566. package/dist/utils/retry.js.map +1 -0
  567. package/dist/utils/text-chunker.d.ts +3 -0
  568. package/dist/utils/text-chunker.d.ts.map +1 -0
  569. package/dist/utils/text-chunker.js +58 -0
  570. package/dist/utils/text-chunker.js.map +1 -0
  571. package/dist/utils/typed-emitter.d.ts +14 -0
  572. package/dist/utils/typed-emitter.d.ts.map +1 -0
  573. package/dist/utils/typed-emitter.js +27 -0
  574. package/dist/utils/typed-emitter.js.map +1 -0
  575. package/dist/utils/types.d.ts +22 -0
  576. package/dist/utils/types.d.ts.map +1 -0
  577. package/dist/utils/types.js +13 -0
  578. package/dist/utils/types.js.map +1 -0
  579. package/dist/vault/db.d.ts +19 -0
  580. package/dist/vault/db.d.ts.map +1 -0
  581. package/dist/vault/db.js +201 -0
  582. package/dist/vault/db.js.map +1 -0
  583. package/dist/vault/search.d.ts +16 -0
  584. package/dist/vault/search.d.ts.map +1 -0
  585. package/dist/vault/search.js +75 -0
  586. package/dist/vault/search.js.map +1 -0
  587. package/dist/vault/store.d.ts +68 -0
  588. package/dist/vault/store.d.ts.map +1 -0
  589. package/dist/vault/store.js +170 -0
  590. package/dist/vault/store.js.map +1 -0
  591. package/dist/vault/types.d.ts +50 -0
  592. package/dist/vault/types.d.ts.map +1 -0
  593. package/dist/vault/types.js +2 -0
  594. package/dist/vault/types.js.map +1 -0
  595. package/docs/sdk/getting-started.md +133 -0
  596. package/package.json +87 -0
@@ -0,0 +1,8 @@
1
+ import { Command } from "clipanion";
2
+ export declare class GatewayRunCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ config: string | undefined;
6
+ execute(): Promise<void>;
7
+ }
8
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAO5C,qBAAa,iBAAkB,SAAQ,OAAO;IAC5C,OAAgB,KAAK,aAAyC;IAE9D,OAAgB,KAAK,4BAMlB;IAEH,MAAM,qBAGH;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAY/B"}
@@ -0,0 +1,33 @@
1
+ import { Command, Option } from "clipanion";
2
+ import { createRequire } from "node:module";
3
+ const require = createRequire(import.meta.url);
4
+ const pkg = require("../../../package.json");
5
+ import { startGateway } from "../../gateway/lifecycle.js";
6
+ import { printBanner } from "../banner.js";
7
+ export class GatewayRunCommand extends Command {
8
+ static paths = [["gateway", "run"], Command.Default];
9
+ static usage = Command.Usage({
10
+ description: "Start the Iris messaging gateway",
11
+ examples: [
12
+ ["Start with default config", "iris gateway run"],
13
+ ["Start with custom config", "iris gateway run --config ./my-config.json"],
14
+ ],
15
+ });
16
+ config = Option.String("--config,-c", {
17
+ description: "Path to config file",
18
+ required: false,
19
+ });
20
+ async execute() {
21
+ printBanner(pkg.version);
22
+ try {
23
+ const _ctx = await startGateway(this.config);
24
+ // Gateway is running, wait for shutdown signal
25
+ await new Promise(() => { }); // Block forever until signal
26
+ }
27
+ catch (err) {
28
+ console.error("Failed to start gateway:", err);
29
+ process.exit(1);
30
+ }
31
+ }
32
+ }
33
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAwB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,OAAO,iBAAkB,SAAQ,OAAO;IAC5C,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE;YACR,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;YACjD,CAAC,0BAA0B,EAAE,4CAA4C,CAAC;SAC3E;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;QACpC,WAAW,EAAE,qBAAqB;QAClC,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO;QACX,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,+CAA+C;YAC/C,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,6BAA6B;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Command } from "clipanion";
2
+ export declare class InitCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ execute(): Promise<number>;
6
+ }
7
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAc;IAEnC,OAAgB,KAAK,4BAGlB;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CA0PjC"}
@@ -0,0 +1,308 @@
1
+ import { Command } from "clipanion";
2
+ import * as p from "@clack/prompts";
3
+ import { writeFile, readFile, access } from "node:fs/promises";
4
+ import { execSync, spawnSync } from "node:child_process";
5
+ import { resolve } from "node:path";
6
+ import * as os from "node:os";
7
+ // ─── helpers ─────────────────────────────────────────────────────────────────
8
+ function detectOpenCode() {
9
+ for (const bin of ["opencode", "opencode-ai"]) {
10
+ try {
11
+ const result = spawnSync("which", [bin], { encoding: "utf-8" });
12
+ if (result.status === 0 && result.stdout.trim())
13
+ return result.stdout.trim();
14
+ }
15
+ catch {
16
+ /* ignore */
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ async function validateTelegramToken(token) {
22
+ try {
23
+ const res = await fetch(`https://api.telegram.org/bot${token}/getMe`);
24
+ const json = (await res.json());
25
+ return json.ok === true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ async function validateDiscordToken(token) {
32
+ try {
33
+ const res = await fetch("https://discord.com/api/v10/users/@me", {
34
+ headers: { Authorization: `Bot ${token}` },
35
+ });
36
+ return res.ok;
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ async function validateSlackAppToken(token) {
43
+ try {
44
+ const res = await fetch("https://slack.com/api/apps.connections.open", {
45
+ method: "POST",
46
+ headers: {
47
+ Authorization: `Bearer ${token}`,
48
+ "Content-Type": "application/json",
49
+ },
50
+ });
51
+ const json = (await res.json());
52
+ return json.ok === true;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ // ─── command ─────────────────────────────────────────────────────────────────
59
+ export class InitCommand extends Command {
60
+ static paths = [["init"]];
61
+ static usage = Command.Usage({
62
+ description: "Interactive setup wizard — get from zero to running in under 10 minutes",
63
+ examples: [["Run the setup wizard", "iris init"]],
64
+ });
65
+ async execute() {
66
+ p.intro("🌸 Iris Setup Wizard");
67
+ // ── 1. channels ──────────────────────────────────────────────────────────
68
+ const channelsResult = await p.multiselect({
69
+ message: "Which channels do you want to enable?",
70
+ options: [
71
+ { value: "telegram", label: "Telegram", hint: "requires bot token from @BotFather" },
72
+ { value: "whatsapp", label: "WhatsApp", hint: "QR-code pairing, no token needed" },
73
+ { value: "discord", label: "Discord", hint: "requires bot token from Discord Dev Portal" },
74
+ { value: "slack", label: "Slack", hint: "requires App-Level & Bot tokens" },
75
+ ],
76
+ required: true,
77
+ });
78
+ if (p.isCancel(channelsResult)) {
79
+ p.cancel("Setup cancelled.");
80
+ return 1;
81
+ }
82
+ const channels = channelsResult;
83
+ // ── 2. per-channel tokens ─────────────────────────────────────────────────
84
+ const env = {};
85
+ const channelConfig = {};
86
+ if (channels.includes("telegram")) {
87
+ const token = await p.text({
88
+ message: "Enter your Telegram bot token:",
89
+ placeholder: "123456:ABC-DEF… (get one from @BotFather)",
90
+ validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
91
+ });
92
+ if (p.isCancel(token)) {
93
+ p.cancel("Setup cancelled.");
94
+ return 1;
95
+ }
96
+ const spin = p.spinner();
97
+ spin.start("Validating Telegram token…");
98
+ const ok = await validateTelegramToken(token);
99
+ spin.stop(ok ? "✓ Token valid" : "⚠ Could not validate — saved anyway");
100
+ env["TELEGRAM_BOT_TOKEN"] = token;
101
+ channelConfig["telegram"] = {
102
+ type: "telegram",
103
+ enabled: true,
104
+ token: "${env:TELEGRAM_BOT_TOKEN}",
105
+ };
106
+ }
107
+ if (channels.includes("whatsapp")) {
108
+ channelConfig["whatsapp"] = { type: "whatsapp", enabled: true };
109
+ p.note("WhatsApp uses QR-code pairing on first run — no token needed.", "WhatsApp");
110
+ }
111
+ if (channels.includes("discord")) {
112
+ const token = await p.text({
113
+ message: "Enter your Discord bot token:",
114
+ placeholder: "MTI3… (Discord Developer Portal → Bot → Token)",
115
+ validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
116
+ });
117
+ if (p.isCancel(token)) {
118
+ p.cancel("Setup cancelled.");
119
+ return 1;
120
+ }
121
+ const spin = p.spinner();
122
+ spin.start("Validating Discord token…");
123
+ const ok = await validateDiscordToken(token);
124
+ spin.stop(ok ? "✓ Token valid" : "⚠ Could not validate — saved anyway");
125
+ env["DISCORD_BOT_TOKEN"] = token;
126
+ channelConfig["discord"] = {
127
+ type: "discord",
128
+ enabled: true,
129
+ token: "${env:DISCORD_BOT_TOKEN}",
130
+ };
131
+ }
132
+ if (channels.includes("slack")) {
133
+ const appToken = await p.text({
134
+ message: "Enter your Slack App-Level token (xapp-…):",
135
+ validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
136
+ });
137
+ if (p.isCancel(appToken)) {
138
+ p.cancel("Setup cancelled.");
139
+ return 1;
140
+ }
141
+ const botToken = await p.text({
142
+ message: "Enter your Slack Bot token (xoxb-…):",
143
+ validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
144
+ });
145
+ if (p.isCancel(botToken)) {
146
+ p.cancel("Setup cancelled.");
147
+ return 1;
148
+ }
149
+ const spin = p.spinner();
150
+ spin.start("Validating Slack App token…");
151
+ const ok = await validateSlackAppToken(appToken);
152
+ spin.stop(ok ? "✓ App token valid" : "⚠ Could not validate — saved anyway");
153
+ env["SLACK_APP_TOKEN"] = appToken;
154
+ env["SLACK_BOT_TOKEN"] = botToken;
155
+ channelConfig["slack"] = {
156
+ type: "slack",
157
+ enabled: true,
158
+ appToken: "${env:SLACK_APP_TOKEN}",
159
+ botToken: "${env:SLACK_BOT_TOKEN}",
160
+ };
161
+ }
162
+ // ── 3. AI model ───────────────────────────────────────────────────────────
163
+ const modelResult = await p.select({
164
+ message: "Which AI model do you want to use?",
165
+ options: [
166
+ {
167
+ value: "openrouter/arcee-ai/arcee-spotlight:free",
168
+ label: "Arcee Spotlight (free)",
169
+ hint: "OpenRouter — no API key required",
170
+ },
171
+ {
172
+ value: "openrouter/arcee-ai/trinity-large-preview:free",
173
+ label: "Arcee Trinity Large (free)",
174
+ hint: "OpenRouter — no API key required",
175
+ },
176
+ {
177
+ value: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
178
+ label: "Llama 3.3 70B Instruct (free)",
179
+ hint: "OpenRouter — no API key required",
180
+ },
181
+ {
182
+ value: "openrouter/mistralai/mistral-7b-instruct:free",
183
+ label: "Mistral 7B Instruct (free)",
184
+ hint: "OpenRouter — no API key required",
185
+ },
186
+ { value: "__custom__", label: "Custom", hint: "enter model identifier manually" },
187
+ ],
188
+ });
189
+ if (p.isCancel(modelResult)) {
190
+ p.cancel("Setup cancelled.");
191
+ return 1;
192
+ }
193
+ let finalModel = modelResult;
194
+ if (finalModel === "__custom__") {
195
+ const customModel = await p.text({
196
+ message: "Enter model identifier:",
197
+ placeholder: "e.g. openrouter/meta-llama/llama-3-8b-instruct:free",
198
+ validate: (v) => (v.trim() === "" ? "Cannot be empty" : undefined),
199
+ });
200
+ if (p.isCancel(customModel)) {
201
+ p.cancel("Setup cancelled.");
202
+ return 1;
203
+ }
204
+ finalModel = customModel;
205
+ }
206
+ if (finalModel.startsWith("openai/")) {
207
+ const apiKey = await p.text({
208
+ message: "Enter your OpenAI API key:",
209
+ validate: (v) => (v.trim() === "" ? "Key cannot be empty" : undefined),
210
+ });
211
+ if (p.isCancel(apiKey)) {
212
+ p.cancel("Setup cancelled.");
213
+ return 1;
214
+ }
215
+ env["OPENAI_API_KEY"] = apiKey;
216
+ }
217
+ else if (finalModel.startsWith("anthropic/")) {
218
+ const apiKey = await p.text({
219
+ message: "Enter your Anthropic API key:",
220
+ validate: (v) => (v.trim() === "" ? "Key cannot be empty" : undefined),
221
+ });
222
+ if (p.isCancel(apiKey)) {
223
+ p.cancel("Setup cancelled.");
224
+ return 1;
225
+ }
226
+ env["ANTHROPIC_API_KEY"] = apiKey;
227
+ }
228
+ // ── 4. OpenCode CLI ───────────────────────────────────────────────────────
229
+ const ocPath = detectOpenCode();
230
+ if (ocPath) {
231
+ p.note(`Detected at ${ocPath}`, "OpenCode CLI ✓");
232
+ }
233
+ else {
234
+ const installOc = await p.confirm({
235
+ message: "OpenCode CLI not found. Install it now? (npm i -g opencode-ai)",
236
+ initialValue: true,
237
+ });
238
+ if (p.isCancel(installOc)) {
239
+ p.cancel("Setup cancelled.");
240
+ return 1;
241
+ }
242
+ if (installOc) {
243
+ const spin = p.spinner();
244
+ spin.start("Installing OpenCode CLI…");
245
+ try {
246
+ execSync("npm install -g opencode-ai", { stdio: "pipe" });
247
+ spin.stop("✓ OpenCode CLI installed");
248
+ }
249
+ catch (err) {
250
+ const msg = err instanceof Error ? err.message : String(err);
251
+ const hint = msg.includes("EACCES") || msg.includes("permission")
252
+ ? "Permission denied. Try: sudo npm i -g opencode-ai"
253
+ : "Run manually: npm i -g opencode-ai";
254
+ spin.stop(`⚠ Install failed — ${hint}`);
255
+ }
256
+ }
257
+ else {
258
+ p.note("Install later with: npm i -g opencode-ai", "Skipped");
259
+ }
260
+ }
261
+ // ── 5. generate config ────────────────────────────────────────────────────
262
+ const configPath = resolve(process.cwd(), "iris.config.json");
263
+ const envPath = resolve(process.cwd(), ".env");
264
+ let baseConfig = {};
265
+ try {
266
+ const examplePath = resolve(process.cwd(), "iris.config.example.json");
267
+ await access(examplePath);
268
+ baseConfig = JSON.parse(await readFile(examplePath, "utf-8"));
269
+ }
270
+ catch {
271
+ /* start fresh if no example file */
272
+ }
273
+ const config = {
274
+ ...baseConfig,
275
+ channels: channelConfig,
276
+ models: {
277
+ ...(typeof baseConfig.models === "object" && baseConfig.models !== null
278
+ ? baseConfig.models
279
+ : {}),
280
+ primary: finalModel,
281
+ small: finalModel,
282
+ },
283
+ };
284
+ const spin2 = p.spinner();
285
+ spin2.start("Writing config files…");
286
+ await writeFile(configPath, JSON.stringify(config, null, 2) + os.EOL, "utf-8");
287
+ const envLines = Object.entries(env)
288
+ .map(([k, v]) => `${k}=${v}`)
289
+ .join(os.EOL);
290
+ if (envLines) {
291
+ await writeFile(envPath, envLines + os.EOL, "utf-8");
292
+ }
293
+ spin2.stop("Done");
294
+ // ── 6. summary ────────────────────────────────────────────────────────────
295
+ p.note([
296
+ `✓ iris.config.json → ${configPath}`,
297
+ envLines ? `✓ .env → ${envPath}` : "",
298
+ "",
299
+ "Next step:",
300
+ " iris gateway run",
301
+ ]
302
+ .filter(Boolean)
303
+ .join("\n"), "Setup complete 🎉");
304
+ p.outro("You're ready. Run: iris gateway run");
305
+ return 0;
306
+ }
307
+ }
308
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Command } from "clipanion";
2
+ export declare class PairingApproveCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ code: string;
6
+ execute(): Promise<void>;
7
+ }
8
+ export declare class PairingListCommand extends Command {
9
+ static paths: string[][];
10
+ static usage: import("clipanion").Usage;
11
+ execute(): Promise<void>;
12
+ }
13
+ export declare class PairingRevokeCommand extends Command {
14
+ static paths: string[][];
15
+ static usage: import("clipanion").Usage;
16
+ code: string;
17
+ execute(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=pairing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pairing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAK5C,qBAAa,qBAAsB,SAAQ,OAAO;IAChD,OAAgB,KAAK,aAA4B;IAEjD,OAAgB,KAAK,4BAGlB;IAEH,IAAI,SAAmD;IAEjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB/B;AAED,qBAAa,kBAAmB,SAAQ,OAAO;IAC7C,OAAgB,KAAK,aAAyB;IAE9C,OAAgB,KAAK,4BAGlB;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB/B;AAED,qBAAa,oBAAqB,SAAQ,OAAO;IAC/C,OAAgB,KAAK,aAA2B;IAEhD,OAAgB,KAAK,4BAGlB;IAEH,IAAI,SAAmD;IAEjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAe/B"}
@@ -0,0 +1,70 @@
1
+ import { Command, Option } from "clipanion";
2
+ import { getStateDir } from "../../config/paths.js";
3
+ import { PairingStore } from "../../security/pairing-store.js";
4
+ import { AllowlistStore } from "../../security/allowlist-store.js";
5
+ export class PairingApproveCommand extends Command {
6
+ static paths = [["pairing", "approve"]];
7
+ static usage = Command.Usage({
8
+ description: "Approve a pairing code and add the sender to the allowlist",
9
+ examples: [["Approve a pairing code", "iris pairing approve ABCD1234"]],
10
+ });
11
+ code = Option.String({ name: "code", required: true });
12
+ async execute() {
13
+ const stateDir = getStateDir();
14
+ const pairingStore = new PairingStore(stateDir);
15
+ const allowlistStore = new AllowlistStore(stateDir);
16
+ const result = await pairingStore.approveCode(this.code);
17
+ if (!result) {
18
+ this.context.stdout.write(`No pending pairing request found for code: ${this.code}\n`);
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ await allowlistStore.add(result.channelId, result.senderId, "cli");
23
+ this.context.stdout.write(`Approved pairing code ${this.code}\n` +
24
+ ` Channel: ${result.channelId}\n` +
25
+ ` Sender: ${result.senderId}\n` +
26
+ `Added to allowlist.\n`);
27
+ }
28
+ }
29
+ export class PairingListCommand extends Command {
30
+ static paths = [["pairing", "list"]];
31
+ static usage = Command.Usage({
32
+ description: "List pending pairing requests",
33
+ examples: [["List all pending requests", "iris pairing list"]],
34
+ });
35
+ async execute() {
36
+ const stateDir = getStateDir();
37
+ const pairingStore = new PairingStore(stateDir);
38
+ const pending = await pairingStore.listPending();
39
+ if (pending.length === 0) {
40
+ this.context.stdout.write("No pending pairing requests.\n");
41
+ return;
42
+ }
43
+ this.context.stdout.write(`Pending pairing requests (${pending.length}):\n`);
44
+ for (const req of pending) {
45
+ const expiresIn = Math.max(0, Math.round((req.expiresAt - Date.now()) / 1000));
46
+ this.context.stdout.write(` ${req.code} channel=${req.channelId} sender=${req.senderId} expires in ${expiresIn}s\n`);
47
+ }
48
+ }
49
+ }
50
+ export class PairingRevokeCommand extends Command {
51
+ static paths = [["pairing", "revoke"]];
52
+ static usage = Command.Usage({
53
+ description: "Revoke a pending pairing code",
54
+ examples: [["Revoke a code", "iris pairing revoke ABCD1234"]],
55
+ });
56
+ code = Option.String({ name: "code", required: true });
57
+ async execute() {
58
+ const stateDir = getStateDir();
59
+ const pairingStore = new PairingStore(stateDir);
60
+ const revoked = await pairingStore.revokeCode(this.code);
61
+ if (revoked) {
62
+ this.context.stdout.write(`Revoked pairing code: ${this.code}\n`);
63
+ }
64
+ else {
65
+ this.context.stdout.write(`No pending pairing request found for code: ${this.code}\n`);
66
+ process.exitCode = 1;
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../../src/cli/commands/pairing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from "clipanion";
2
+ export declare class ScanCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ targetDir: string | undefined;
6
+ execute(): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAc;IAEnC,OAAgB,KAAK,4BAMlB;IAEH,SAAS,qBAAsC;IAEzC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAiCjC"}
@@ -0,0 +1,39 @@
1
+ import { Command, Option } from "clipanion";
2
+ import { resolve } from "node:path";
3
+ import { SecurityScanner } from "../../security/scanner.js";
4
+ export class ScanCommand extends Command {
5
+ static paths = [["scan"]];
6
+ static usage = Command.Usage({
7
+ description: "Scan a directory for security issues",
8
+ examples: [
9
+ ["Scan current directory", "iris scan"],
10
+ ["Scan a plugin directory", "iris scan ./plugins/my-plugin"],
11
+ ],
12
+ });
13
+ targetDir = Option.String({ required: false });
14
+ async execute() {
15
+ const targetPath = resolve(this.targetDir ?? ".");
16
+ const scanner = new SecurityScanner();
17
+ this.context.stdout.write(`Scanning ${targetPath}...\n`);
18
+ const result = await scanner.scanDirectory(targetPath);
19
+ this.context.stdout.write(`\nScanned ${result.scannedFiles} files\n`);
20
+ if (result.findings.length === 0) {
21
+ this.context.stdout.write("No issues found.\n");
22
+ return 0;
23
+ }
24
+ this.context.stdout.write(`\nFindings: ${result.critical} critical, ${result.warn} warnings, ${result.info} info\n\n`);
25
+ for (const finding of result.findings) {
26
+ const severity = finding.severity === "critical"
27
+ ? "\x1b[31mCRITICAL\x1b[0m"
28
+ : finding.severity === "warn"
29
+ ? "\x1b[33mWARN\x1b[0m"
30
+ : "\x1b[34mINFO\x1b[0m";
31
+ this.context.stdout.write(` ${severity} ${finding.ruleId}\n` +
32
+ ` ${finding.file}:${finding.line}\n` +
33
+ ` ${finding.message}\n` +
34
+ ` > ${finding.evidence}\n\n`);
35
+ }
36
+ return result.safe ? 0 : 1;
37
+ }
38
+ }
39
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnC,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,sCAAsC;QACnD,QAAQ,EAAE;YACR,CAAC,wBAAwB,EAAE,WAAW,CAAC;YACvC,CAAC,yBAAyB,EAAE,+BAA+B,CAAC;SAC7D;KACF,CAAC,CAAC;IAEH,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/C,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,UAAU,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAEvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,YAAY,UAAU,CAAC,CAAC;QAEtE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAChD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC;QAEvH,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,UAAU;gBAC9C,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM;oBAC3B,CAAC,CAAC,qBAAqB;oBACvB,CAAC,CAAC,qBAAqB,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,QAAQ,KAAK,OAAO,CAAC,MAAM,IAAI;gBACpC,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI;gBACvC,OAAO,OAAO,CAAC,OAAO,IAAI;gBAC1B,SAAS,OAAO,CAAC,QAAQ,MAAM,CAChC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Command } from "clipanion";
2
+ export declare class SecurityAllowlistListCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ channel: string;
6
+ execute(): Promise<void>;
7
+ }
8
+ export declare class SecurityAllowlistAddCommand extends Command {
9
+ static paths: string[][];
10
+ static usage: import("clipanion").Usage;
11
+ channel: string;
12
+ senderId: string;
13
+ execute(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,qBAAa,4BAA6B,SAAQ,OAAO;IACvD,OAAgB,KAAK,aAAuC;IAE5D,OAAgB,KAAK,4BAKlB;IAEH,OAAO,SAAsD;IAEvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB/B;AAED,qBAAa,2BAA4B,SAAQ,OAAO;IACtD,OAAgB,KAAK,aAAsC;IAE3D,OAAgB,KAAK,4BAQlB;IAEH,OAAO,SAAsD;IAC7D,QAAQ,SAAuD;IAEzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAU/B"}
@@ -0,0 +1,49 @@
1
+ import { Command, Option } from "clipanion";
2
+ import { getStateDir } from "../../config/paths.js";
3
+ import { AllowlistStore } from "../../security/allowlist-store.js";
4
+ export class SecurityAllowlistListCommand extends Command {
5
+ static paths = [["security", "allowlist", "list"]];
6
+ static usage = Command.Usage({
7
+ description: "Show the allowlist for a specific channel",
8
+ examples: [
9
+ ["List telegram allowlist", "iris security allowlist list telegram"],
10
+ ],
11
+ });
12
+ channel = Option.String({ name: "channel", required: true });
13
+ async execute() {
14
+ const stateDir = getStateDir();
15
+ const store = new AllowlistStore(stateDir);
16
+ const entries = await store.list(this.channel);
17
+ if (entries.length === 0) {
18
+ this.context.stdout.write(`No allowlist entries for channel: ${this.channel}\n`);
19
+ return;
20
+ }
21
+ this.context.stdout.write(`Allowlist for ${this.channel} (${entries.length}):\n`);
22
+ for (const entry of entries) {
23
+ const approvedAt = new Date(entry.approvedAt).toISOString();
24
+ const approvedBy = entry.approvedBy ?? "unknown";
25
+ this.context.stdout.write(` ${entry.senderId} approved-by=${approvedBy} at=${approvedAt}\n`);
26
+ }
27
+ }
28
+ }
29
+ export class SecurityAllowlistAddCommand extends Command {
30
+ static paths = [["security", "allowlist", "add"]];
31
+ static usage = Command.Usage({
32
+ description: "Add a sender to the allowlist for a channel",
33
+ examples: [
34
+ [
35
+ "Allow a telegram user",
36
+ "iris security allowlist add telegram 123456789",
37
+ ],
38
+ ],
39
+ });
40
+ channel = Option.String({ name: "channel", required: true });
41
+ senderId = Option.String({ name: "senderId", required: true });
42
+ async execute() {
43
+ const stateDir = getStateDir();
44
+ const store = new AllowlistStore(stateDir);
45
+ await store.add(this.channel, this.senderId, "cli");
46
+ this.context.stdout.write(`Added ${this.senderId} to allowlist for channel ${this.channel}\n`);
47
+ }
48
+ }
49
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/cli/commands/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,OAAO,4BAA6B,SAAQ,OAAO;IACvD,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,2CAA2C;QACxD,QAAQ,EAAE;YACR,CAAC,yBAAyB,EAAE,uCAAuC,CAAC;SACrE;KACF,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,qCAAqC,IAAI,CAAC,OAAO,IAAI,CACtD,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,iBAAiB,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,MAAM,CACvD,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,KAAK,CAAC,QAAQ,iBAAiB,UAAU,QAAQ,UAAU,IAAI,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;;AAGH,MAAM,OAAO,2BAA4B,SAAQ,OAAO;IACtD,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAE3D,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,6CAA6C;QAC1D,QAAQ,EAAE;YACR;gBACE,uBAAuB;gBACvB,gDAAgD;aACjD;SACF;KACF,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,SAAS,IAAI,CAAC,QAAQ,6BAA6B,IAAI,CAAC,OAAO,IAAI,CACpE,CAAC;IACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Command } from "clipanion";
2
+ export declare class SendCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ channel: string;
6
+ target: string;
7
+ message: string;
8
+ execute(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=send.d.ts.map