@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
package/README.md ADDED
@@ -0,0 +1,282 @@
1
+ # Iris Gateway
2
+
3
+ **Your self-hosted AI assistant that talks to you on Telegram, WhatsApp, Discord, and Slack — powered entirely by free AI models.**
4
+
5
+ Run a personal AI with memory, goals, and proactive nudges on your own server, at zero model cost, using [OpenRouter's free tier](https://openrouter.ai).
6
+
7
+ [![npm](https://img.shields.io/npm/v/@yoda.digital/iris-gateway)](https://www.npmjs.com/package/@yoda.digital/iris-gateway)
8
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
9
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D22-brightgreen)](https://nodejs.org)
10
+ [![Coverage](https://img.shields.io/badge/coverage-%3E75%25-brightgreen)](docs/configuration.md)
11
+
12
+ - 💸 **Free models only** — four pre-vetted OpenRouter free-tier presets in the init wizard. No paid API keys required to run.
13
+ - 🧠 **Intelligence layer** — derives language, timezone, engagement patterns, and arc state from every conversation without you touching config
14
+ - 📱 **All your channels, one brain** — Telegram, WhatsApp, Discord, Slack, WebChat share a single SQLite vault
15
+ - 🎯 **Goal and arc tracking** — remembers what you're working on, sets next-action deadlines, follows up when relevant
16
+ - 🔧 **40+ built-in tools** — calendar, email, contacts, tasks, web search, vault search out of the box
17
+ - 📊 **Execution traces** — turn-grouped audit logs with step indexing for debugging multi-tool workflows
18
+ - 🛡️ **Self-healing health monitor** — linear regression trend detection, predictive threshold breach, health-aware throttling
19
+ - 🔒 **Master policy enforcement** — structural ceiling for tool access, agent modes, and permission grants — config-driven, immutable at runtime
20
+ - 🔌 **Extensible** — write plugins, add CLI tools, create custom skills with trigger-based activation
21
+ - 📦 **SDK client** — typed HTTP client for building external integrations against tool-server API
22
+ - 🔀 **Multi-instance support** — run multiple nodes against the same SQLite database with automatic leader election
23
+
24
+ ---
25
+
26
+ ## Quick Start
27
+
28
+ ### Install from npm (recommended)
29
+
30
+ ```bash
31
+ npm install -g @yoda.digital/iris-gateway
32
+ # or
33
+ pnpm add -g @yoda.digital/iris-gateway
34
+
35
+ iris init # interactive setup wizard
36
+ iris gateway run # start the gateway
37
+ ```
38
+
39
+ ### Clone and run from source
40
+
41
+ ```bash
42
+ # 1. Clone and install
43
+ git clone https://github.com/yoda-digital/iris-gateway.git iris && cd iris
44
+ pnpm install
45
+
46
+ # 2. Interactive setup (recommended)
47
+ iris init
48
+
49
+ # 3. Build and run
50
+ pnpm run build && pnpm start
51
+
52
+ # 4. Verify
53
+ curl http://127.0.0.1:19876/health
54
+ ```
55
+
56
+ **Telegram bot token:** [@BotFather](https://t.me/botfather) → `/newbot`
57
+ **Free AI models:** Sign up at [openrouter.ai/keys](https://openrouter.ai/keys) — no credit card required for free tier
58
+ **Full config reference:** [docs/configuration.md](docs/configuration.md)
59
+
60
+ ### Init Wizard
61
+
62
+ `iris init` walks you through every required setting interactively:
63
+
64
+ ```
65
+ $ iris init
66
+
67
+ ◆ Config output path: iris.config.json
68
+ ◆ Which AI model? › Arcee Trinity Large (free) — OpenRouter, no API key required
69
+ ◆ OpenCode CLI detected at /usr/local/bin/opencode ✓
70
+ ◆ Enable Telegram? › Yes
71
+ ◆ Telegram bot token: ████████████████████
72
+ ◆ Enable Discord? › No
73
+ ◆ Writing iris.config.json... done.
74
+ ```
75
+
76
+ Free model options: Arcee Spotlight, Arcee Trinity Large, Llama 3.3 70B, Mistral 7B — or enter any custom model string.
77
+
78
+ ### Docker (even faster)
79
+
80
+ ```bash
81
+ cp iris.config.example.json iris.config.json
82
+ # Edit iris.config.json — set your bot token and model
83
+ docker-compose up -d
84
+ ```
85
+
86
+ ---
87
+
88
+ ## Why Iris?
89
+
90
+ | | **Iris** | DIY Bot | n8n |
91
+ |---|:---:|:---:|:---:|
92
+ | Free AI models | ✅ | ❌ | ❌ |
93
+ | Multi-channel (one brain) | ✅ | manual | ✅ |
94
+ | Intelligence layer | ✅ | ❌ | ❌ |
95
+ | Goal & arc tracking | ✅ | ❌ | ❌ |
96
+ | Master policy enforcement | ✅ | ❌ | ❌ |
97
+ | Multi-instance (leader election) | ✅ | ❌ | ✅ |
98
+ | Self-hosted | ✅ | ✅ | ✅ |
99
+ | Setup time | ~10 min | days | hours |
100
+
101
+ ---
102
+
103
+ ## What People Use It For
104
+
105
+ **Personal AI assistant** — Replace generic chatbots with something that knows your name, remembers your projects, and follows up when a deadline is approaching. Works across all your messaging apps simultaneously.
106
+
107
+ **Smart home / server automation** — Send messages from cron jobs, get AI-summarized alerts, ask questions about your infrastructure in plain language from your phone.
108
+
109
+ **Team assistant** — Deploy to a Discord or Slack server, configure per-channel policies, add custom tools, and give your team an AI that respects governance rules you define.
110
+
111
+ ---
112
+
113
+ ## Architecture
114
+
115
+ Two cooperating processes connected via HTTP IPC:
116
+
117
+ 1. **Iris Gateway** (Node.js) — manages channels, security, vault, governance, and a tool server on port 19877
118
+ 2. **OpenCode CLI** (AI backend) — auto-spawned or external on port 4096. A single plugin exposes all 40+ Iris tools to the AI via HTTP callbacks
119
+
120
+ ```
121
+ Telegram ─┐
122
+ WhatsApp ─┼── Adapters ──► Auto-Reply ──► Router ──► OpenCode ──► AI Model
123
+ Discord ─┤ │ Engine Bridge
124
+ Slack ─┤ ▼ Plugin SDK
125
+ WebChat ─┘ Security (40+ tools)
126
+ Gate
127
+
128
+
129
+ ┌──────┴──────────────────────────────────────────┐
130
+ │ Vault Policy Govern. Proact. Heart. CLI │
131
+ │ (SQLite) Engine Engine Engine Engine Exec │
132
+ └──────┬──────────────────────────────┬────────────┘
133
+ │ │
134
+ Intelligence Layer Health Layer
135
+ ┌──────┴──────────┐ ┌────────┴────────┐
136
+ │ Arcs Goals │ │ TrendDetector │
137
+ │ Inference │ │ HealthGate │
138
+ │ Triggers │ │ OutcomeAnalyzer │
139
+ │ CrossChannel │ └─────────────────┘
140
+ └─────────────────┘
141
+ ```
142
+
143
+ **Inbound flow:**
144
+ ```
145
+ platform message
146
+ → adapter normalize
147
+ → security gate (pairing / allowlist / rate-limit)
148
+ → auto-reply check
149
+ → onboarding enrichment
150
+ → inference engine (timezone / language / engagement)
151
+ → trigger evaluator
152
+ → OpenCode prompt
153
+ → streaming coalesce
154
+ → deliver
155
+ ```
156
+
157
+ ### Intelligence Layer
158
+
159
+ Seven deterministic subsystems — zero LLM cost, pure Node.js + SQLite:
160
+
161
+ | Subsystem | What it does |
162
+ |-----------|-------------|
163
+ | **Signal Inference Engine** | Derives timezone, language, engagement trend, session patterns from raw signals |
164
+ | **Event-Driven Triggers** | Structural pattern detection: temporal markers, dormancy, engagement drops. Language-agnostic. |
165
+ | **Outcome-Aware Proactive Loop** | Tracks engagement by category (task/work/health/hobby/social). AI-assigned, not keyword-guessed. |
166
+ | **Memory Arcs** | Temporal threads tracking evolving situations. Auto-stale after 14 days, configurable. |
167
+ | **Goal Tracking** | Persistent goals with state machine, success criteria, next-action queue, due-date alerts |
168
+ | **Cross-Channel Intelligence** | Unified presence detection across all channels |
169
+ | **Self-Tuning Heartbeat** | Linear regression trend detection, predictive threshold breach, health-aware proactive throttling |
170
+
171
+ ### Multi-Instance Support
172
+
173
+ Iris supports running multiple instances against the same SQLite database via WAL mode and advisory leader election:
174
+
175
+ ```bash
176
+ IRIS_INSTANCE_ID=node-1 pnpm start &
177
+ IRIS_INSTANCE_ID=node-2 pnpm start &
178
+ ```
179
+
180
+ One instance holds the leader lease and drives proactive/heartbeat engines. Others serve requests in read-write mode. Leader failover is automatic within one election interval (~30s).
181
+
182
+ See [docs/deployment/multi-instance.md](docs/deployment/multi-instance.md) for full configuration.
183
+
184
+ ### Security
185
+
186
+ Four DM policy modes:
187
+
188
+ | Mode | Behavior |
189
+ |------|----------|
190
+ | `open` | Any user can start a conversation |
191
+ | `pairing` _(default)_ | New users get a pairing code you approve via `iris pairing approve` |
192
+ | `allowlist` | Only explicitly listed user IDs can interact |
193
+ | `disabled` | All DMs rejected |
194
+
195
+ Rate limiting per user per channel. Groups support `requireMention` gating so Iris only responds when mentioned.
196
+
197
+ ### Master Policy
198
+
199
+ The `policy` config section defines a structural ceiling for the entire system — immutable at runtime:
200
+
201
+ ```json
202
+ {
203
+ "policy": {
204
+ "enabled": true,
205
+ "tools": { "denied": ["rules_update"] },
206
+ "permissions": { "bash": "deny", "edit": "deny" },
207
+ "agents": { "allowedModes": ["subagent"], "maxSteps": 25 },
208
+ "enforcement": { "blockUnknownTools": true }
209
+ }
210
+ }
211
+ ```
212
+
213
+ Agents and skills can only narrow within the policy — never widen it. See [docs/configuration.md#policy-config](docs/configuration.md#policy-config) for full reference.
214
+
215
+ ---
216
+
217
+ ## CLI
218
+
219
+ ```bash
220
+ iris init # Interactive setup wizard — generates iris.config.json
221
+ iris gateway run # Start the gateway
222
+ iris doctor # Diagnostic checks (config, OpenCode, channel connectivity)
223
+ iris status # Gateway status (instances, channels, model)
224
+ iris pairing list|approve # Manage user pairing codes
225
+ iris session list|reset # Manage channel sessions
226
+ iris config validate # Validate config file (exits non-zero on error)
227
+ iris config show # Show resolved config with secrets redacted
228
+ iris send <ch> <to> <msg> # One-shot message without starting the gateway
229
+ ```
230
+
231
+ ---
232
+
233
+ ## Documentation
234
+
235
+ | Doc | Contents |
236
+ |-----|----------|
237
+ | [docs/configuration.md](docs/configuration.md) | Full config reference — every field, type, default, and example |
238
+ | [docs/cookbook.md](docs/cookbook.md) | Patterns: policy, governance, vault hooks, skills, cron jobs |
239
+ | [docs/deployment.md](docs/deployment.md) | Docker, systemd, nginx reverse proxy, Prometheus metrics |
240
+ | [docs/deployment/multi-instance.md](docs/deployment/multi-instance.md) | Multi-instance leader election, WAL mode, instance identity |
241
+ | [docs/iris-model-reference.md](docs/iris-model-reference.md) | Model capabilities matrix, fallback chains, speed profiles |
242
+ | [docs/sdk/getting-started.md](docs/sdk/getting-started.md) | SDK client — build external plugins in under 30 minutes |
243
+ | [docs/tool-api.md](docs/tool-api.md) | Tool-server API reference — every endpoint with request/response types |
244
+ | [CHANGELOG.md](CHANGELOG.md) | Full version history |
245
+
246
+ ---
247
+
248
+ ## SDK
249
+
250
+ Build external plugins and integrations using the typed HTTP client:
251
+
252
+ ```bash
253
+ npm install @yoda.digital/iris-gateway
254
+ # or
255
+ pnpm add @yoda.digital/iris-gateway
256
+ ```
257
+
258
+ ```typescript
259
+ import IrisClient from "@yoda.digital/iris-gateway/sdk";
260
+
261
+ const iris = new IrisClient({ baseUrl: "http://localhost:19877" });
262
+
263
+ // Search vault
264
+ const { results } = await iris.vault.search({ query: "project goals", limit: 5 });
265
+
266
+ // Send a message
267
+ await iris.channels.sendMessage({ channel: "telegram", to: "123456", text: "Hello!" });
268
+
269
+ // Check execution traces
270
+ const trace = await iris.governance.getTraces("turn-abc-123");
271
+ ```
272
+
273
+ Full SDK documentation: [docs/sdk/getting-started.md](docs/sdk/getting-started.md)
274
+
275
+ Tool-server API reference: [docs/tool-api.md](docs/tool-api.md)
276
+
277
+ ---
278
+
279
+ ## License
280
+
281
+ MIT
282
+
@@ -0,0 +1,13 @@
1
+ import type { InboundMessage } from "../channels/adapter.js";
2
+ import type { AutoReplyTemplate, TemplateMatch } from "./types.js";
3
+ export declare class TemplateEngine {
4
+ private readonly templates;
5
+ private readonly cooldowns;
6
+ private readonly onceFired;
7
+ constructor(templates: AutoReplyTemplate[]);
8
+ match(msg: InboundMessage): TemplateMatch | null;
9
+ private triggerMatches;
10
+ private scheduleActive;
11
+ private render;
12
+ }
13
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/auto-reply/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBAEnC,SAAS,EAAE,iBAAiB,EAAE;IAI1C,KAAK,CAAC,GAAG,EAAE,cAAc,GAAG,aAAa,GAAG,IAAI;IAwBhD,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,MAAM;CAQf"}
@@ -0,0 +1,70 @@
1
+ export class TemplateEngine {
2
+ templates;
3
+ cooldowns = new Map();
4
+ onceFired = new Set();
5
+ constructor(templates) {
6
+ this.templates = [...templates].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
7
+ }
8
+ match(msg) {
9
+ const text = msg.text ?? "";
10
+ for (const tpl of this.templates) {
11
+ if (tpl.channels && !tpl.channels.includes(msg.channelId))
12
+ continue;
13
+ if (tpl.chatTypes && !tpl.chatTypes.includes(msg.chatType))
14
+ continue;
15
+ const coolKey = `${tpl.id}:${msg.senderId}`;
16
+ if (tpl.cooldown) {
17
+ const last = this.cooldowns.get(coolKey);
18
+ if (last && Date.now() - last < tpl.cooldown * 1000)
19
+ continue;
20
+ }
21
+ if (tpl.once && this.onceFired.has(coolKey))
22
+ continue;
23
+ if (!this.triggerMatches(tpl.trigger, text))
24
+ continue;
25
+ // Match found
26
+ if (tpl.cooldown)
27
+ this.cooldowns.set(coolKey, Date.now());
28
+ if (tpl.once)
29
+ this.onceFired.add(coolKey);
30
+ return { template: tpl, response: this.render(tpl.response, msg) };
31
+ }
32
+ return null;
33
+ }
34
+ triggerMatches(trigger, text) {
35
+ switch (trigger.type) {
36
+ case "exact":
37
+ return text.toLowerCase().trim() === trigger.pattern.toLowerCase().trim();
38
+ case "regex":
39
+ return new RegExp(trigger.pattern, "i").test(text);
40
+ case "keyword":
41
+ return trigger.words.some((w) => text.toLowerCase().includes(w.toLowerCase()));
42
+ case "command":
43
+ return text.trim().toLowerCase().startsWith(`/${trigger.name.toLowerCase()}`);
44
+ case "schedule":
45
+ return this.scheduleActive(trigger.when);
46
+ }
47
+ }
48
+ scheduleActive(when) {
49
+ const now = new Date();
50
+ if (when.hours) {
51
+ const hour = now.getHours();
52
+ if (hour < when.hours[0] || hour >= when.hours[1])
53
+ return false;
54
+ }
55
+ if (when.days) {
56
+ if (!when.days.includes(now.getDay()))
57
+ return false;
58
+ }
59
+ return true;
60
+ }
61
+ render(template, msg) {
62
+ return template
63
+ .replace(/\{sender\.name\}/g, msg.senderName ?? "there")
64
+ .replace(/\{sender\.id\}/g, msg.senderId)
65
+ .replace(/\{channel\}/g, msg.channelId)
66
+ .replace(/\{time\}/g, new Date().toLocaleTimeString())
67
+ .replace(/\{date\}/g, new Date().toLocaleDateString());
68
+ }
69
+ }
70
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/auto-reply/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface AutoReplyTemplate {
2
+ readonly id: string;
3
+ readonly trigger: TemplateTrigger;
4
+ readonly response: string;
5
+ readonly priority?: number;
6
+ readonly cooldown?: number;
7
+ readonly once?: boolean;
8
+ readonly channels?: string[];
9
+ readonly chatTypes?: ("dm" | "group")[];
10
+ readonly forwardToAi?: boolean;
11
+ }
12
+ export type TemplateTrigger = {
13
+ readonly type: "exact";
14
+ readonly pattern: string;
15
+ } | {
16
+ readonly type: "regex";
17
+ readonly pattern: string;
18
+ } | {
19
+ readonly type: "keyword";
20
+ readonly words: string[];
21
+ } | {
22
+ readonly type: "command";
23
+ readonly name: string;
24
+ } | {
25
+ readonly type: "schedule";
26
+ readonly when: ScheduleCondition;
27
+ };
28
+ export interface ScheduleCondition {
29
+ readonly hours?: [number, number];
30
+ readonly days?: number[];
31
+ readonly timezone?: string;
32
+ }
33
+ export interface TemplateMatch {
34
+ readonly template: AutoReplyTemplate;
35
+ readonly response: string;
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auto-reply/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auto-reply/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Circuit breaker for OpenCode bridge reliability.
3
+ *
4
+ * States:
5
+ * CLOSED - normal operation, requests pass through
6
+ * OPEN - bridge is down, reject immediately with user-visible message
7
+ * HALF_OPEN - testing recovery, let one request through
8
+ */
9
+ export type CircuitState = "CLOSED" | "OPEN" | "HALF_OPEN";
10
+ export interface CircuitBreakerOptions {
11
+ /** Number of consecutive failures before opening the circuit. Default: 3 */
12
+ failureThreshold?: number;
13
+ /** How long (ms) to stay OPEN before attempting HALF_OPEN. Default: 10_000 */
14
+ recoveryTimeoutMs?: number;
15
+ /** Message sent to users when circuit is OPEN. */
16
+ unavailableMessage?: string;
17
+ }
18
+ export declare class CircuitBreaker {
19
+ private state;
20
+ private consecutiveFailures;
21
+ private openedAt;
22
+ private halfOpenInFlight;
23
+ private readonly failureThreshold;
24
+ private readonly recoveryTimeoutMs;
25
+ readonly unavailableMessage: string;
26
+ constructor(opts?: CircuitBreakerOptions);
27
+ /** Returns true if the request should proceed. */
28
+ allowRequest(): boolean;
29
+ onSuccess(): void;
30
+ onFailure(): void;
31
+ /**
32
+ * Returns the effective circuit state.
33
+ * Pure — no mutations. If OPEN and recovery timeout has elapsed,
34
+ * returns HALF_OPEN to reflect that a probe would be allowed,
35
+ * but does NOT set halfOpenInFlight (that happens in allowRequest()).
36
+ */
37
+ getState(): CircuitState;
38
+ reset(): void;
39
+ }
40
+ //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/bridge/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBAExB,IAAI,GAAE,qBAA0B;IAQ5C,kDAAkD;IAClD,YAAY,IAAI,OAAO;IAuBvB,SAAS,IAAI,IAAI;IAOjB,SAAS,IAAI,IAAI;IASjB;;;;;OAKG;IACH,QAAQ,IAAI,YAAY;IASxB,KAAK,IAAI,IAAI;CAMd"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Circuit breaker for OpenCode bridge reliability.
3
+ *
4
+ * States:
5
+ * CLOSED - normal operation, requests pass through
6
+ * OPEN - bridge is down, reject immediately with user-visible message
7
+ * HALF_OPEN - testing recovery, let one request through
8
+ */
9
+ export class CircuitBreaker {
10
+ state = "CLOSED";
11
+ consecutiveFailures = 0;
12
+ openedAt = null;
13
+ halfOpenInFlight = false;
14
+ failureThreshold;
15
+ recoveryTimeoutMs;
16
+ unavailableMessage;
17
+ constructor(opts = {}) {
18
+ this.failureThreshold = opts.failureThreshold ?? 3;
19
+ this.recoveryTimeoutMs = opts.recoveryTimeoutMs ?? 10_000;
20
+ this.unavailableMessage =
21
+ opts.unavailableMessage ??
22
+ "\u26a0\ufe0f I am temporarily unavailable \u2014 my AI backend is restarting. I'll respond shortly.";
23
+ }
24
+ /** Returns true if the request should proceed. */
25
+ allowRequest() {
26
+ if (this.state === "CLOSED")
27
+ return true;
28
+ if (this.state === "OPEN") {
29
+ const elapsed = Date.now() - (this.openedAt ?? 0);
30
+ if (elapsed >= this.recoveryTimeoutMs) {
31
+ this.state = "HALF_OPEN";
32
+ this.halfOpenInFlight = false;
33
+ }
34
+ else {
35
+ return false;
36
+ }
37
+ }
38
+ // HALF_OPEN - allow exactly one probe request
39
+ if (this.state === "HALF_OPEN") {
40
+ if (this.halfOpenInFlight)
41
+ return false;
42
+ this.halfOpenInFlight = true;
43
+ return true;
44
+ }
45
+ return false;
46
+ }
47
+ onSuccess() {
48
+ this.consecutiveFailures = 0;
49
+ this.openedAt = null;
50
+ this.halfOpenInFlight = false;
51
+ this.state = "CLOSED";
52
+ }
53
+ onFailure() {
54
+ this.halfOpenInFlight = false;
55
+ this.consecutiveFailures++;
56
+ if (this.consecutiveFailures >= this.failureThreshold || this.state === "HALF_OPEN") {
57
+ this.state = "OPEN";
58
+ this.openedAt = Date.now();
59
+ }
60
+ }
61
+ /**
62
+ * Returns the effective circuit state.
63
+ * Pure — no mutations. If OPEN and recovery timeout has elapsed,
64
+ * returns HALF_OPEN to reflect that a probe would be allowed,
65
+ * but does NOT set halfOpenInFlight (that happens in allowRequest()).
66
+ */
67
+ getState() {
68
+ if (this.state === "OPEN" && this.openedAt !== null) {
69
+ if (Date.now() - this.openedAt >= this.recoveryTimeoutMs) {
70
+ return "HALF_OPEN";
71
+ }
72
+ }
73
+ return this.state;
74
+ }
75
+ reset() {
76
+ this.state = "CLOSED";
77
+ this.consecutiveFailures = 0;
78
+ this.openedAt = null;
79
+ this.halfOpenInFlight = false;
80
+ }
81
+ }
82
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/bridge/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,OAAO,cAAc;IACjB,KAAK,GAAiB,QAAQ,CAAC;IAC/B,mBAAmB,GAAG,CAAC,CAAC;IACxB,QAAQ,GAAkB,IAAI,CAAC;IAC/B,gBAAgB,GAAG,KAAK,CAAC;IAEhB,gBAAgB,CAAS;IACzB,iBAAiB,CAAS;IAClC,kBAAkB,CAAS;IAEpC,YAAY,OAA8B,EAAE;QAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC;QAC1D,IAAI,CAAC,kBAAkB;YACrB,IAAI,CAAC,kBAAkB;gBACvB,qGAAqG,CAAC;IAC1G,CAAC;IAED,kDAAkD;IAClD,YAAY;QACV,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEzC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;YAClD,IAAI,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;gBACzB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,gBAAgB;gBAAE,OAAO,KAAK,CAAC;YACxC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;QACP,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;IACxB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACpF,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzD,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { OpenCodeEvent } from "./opencode-client.js";
2
+ import { TypedEventEmitter } from "../utils/typed-emitter.js";
3
+ export interface EventHandlerEvents {
4
+ response: (sessionId: string, text: string) => void;
5
+ partial: (sessionId: string, delta: string) => void;
6
+ error: (sessionId: string, error: unknown) => void;
7
+ toolCall: (sessionId: string, toolName: string, input: unknown) => void;
8
+ }
9
+ export declare class EventHandler {
10
+ readonly events: TypedEventEmitter<EventHandlerEvents>;
11
+ private readonly accumulator;
12
+ private cleanupTimer;
13
+ constructor();
14
+ dispose(): void;
15
+ handleEvent(event: OpenCodeEvent): void;
16
+ private pruneStale;
17
+ }
18
+ //# sourceMappingURL=event-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../src/bridge/event-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAQ,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACzE;AAsCD,qBAAa,YAAY;IACvB,QAAQ,CAAC,MAAM,wCAA+C;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6F;IACzH,OAAO,CAAC,YAAY,CAA+C;;IAOnE,OAAO,IAAI,IAAI;IAQf,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA2EvC,OAAO,CAAC,UAAU;CAQnB"}