@chozzz/vargos 2.0.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 (429) hide show
  1. package/.templates/vargos/agent/extensions/anthropic-custom-payload.patch.json +34 -0
  2. package/.templates/vargos/agent/extensions/anthropic-custom-payload.ts +74 -0
  3. package/.templates/vargos/agent/mcp.json +9 -0
  4. package/.templates/vargos/agent/skills/skill-creator/SKILL.md +77 -0
  5. package/.templates/vargos/agent/skills/token-capture/SKILL.md +33 -0
  6. package/.templates/vargos/agent/skills/token-capture/scripts/capture-bearer-token.sh +139 -0
  7. package/.templates/vargos/agents/README +5 -0
  8. package/.templates/vargos/agents/default.md +7 -0
  9. package/.templates/vargos/config.json +1 -0
  10. package/.templates/vargos/cron/heartbeat.md +11 -0
  11. package/.templates/vargos/workspace/AGENTS.md +70 -0
  12. package/.templates/vargos/workspace/HEARTBEAT.md +26 -0
  13. package/.templates/vargos/workspace/MEMORY.md +15 -0
  14. package/.templates/vargos/workspace/SOUL.md +51 -0
  15. package/.templates/vargos/workspace/TOOLS.md +36 -0
  16. package/CHANGELOG.md +23 -0
  17. package/CODE_OF_CONDUCT.md +47 -0
  18. package/CONTRIBUTING.md +65 -0
  19. package/LICENSE +191 -0
  20. package/README.md +117 -0
  21. package/SECURITY.md +30 -0
  22. package/dist/.templates/vargos/agent/extensions/anthropic-custom-payload.patch.json +34 -0
  23. package/dist/.templates/vargos/agent/extensions/anthropic-custom-payload.ts +74 -0
  24. package/dist/.templates/vargos/agent/mcp.json +9 -0
  25. package/dist/.templates/vargos/agent/skills/skill-creator/SKILL.md +77 -0
  26. package/dist/.templates/vargos/agent/skills/token-capture/SKILL.md +33 -0
  27. package/dist/.templates/vargos/agent/skills/token-capture/scripts/capture-bearer-token.sh +139 -0
  28. package/dist/.templates/vargos/agents/README +5 -0
  29. package/dist/.templates/vargos/agents/default.md +7 -0
  30. package/dist/.templates/vargos/config.json +1 -0
  31. package/dist/.templates/vargos/cron/heartbeat.md +11 -0
  32. package/dist/.templates/vargos/workspace/AGENTS.md +70 -0
  33. package/dist/.templates/vargos/workspace/HEARTBEAT.md +26 -0
  34. package/dist/.templates/vargos/workspace/MEMORY.md +15 -0
  35. package/dist/.templates/vargos/workspace/SOUL.md +51 -0
  36. package/dist/.templates/vargos/workspace/TOOLS.md +36 -0
  37. package/dist/cli/onboard.d.ts +10 -0
  38. package/dist/cli/onboard.d.ts.map +1 -0
  39. package/dist/cli/onboard.js +207 -0
  40. package/dist/cli/onboard.js.map +1 -0
  41. package/dist/cli.d.ts +13 -0
  42. package/dist/cli.d.ts.map +1 -0
  43. package/dist/cli.js +118 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/edge/mcp/index.d.ts +33 -0
  46. package/dist/edge/mcp/index.d.ts.map +1 -0
  47. package/dist/edge/mcp/index.js +217 -0
  48. package/dist/edge/mcp/index.js.map +1 -0
  49. package/dist/edge/webhooks/index.d.ts +33 -0
  50. package/dist/edge/webhooks/index.d.ts.map +1 -0
  51. package/dist/edge/webhooks/index.js +231 -0
  52. package/dist/edge/webhooks/index.js.map +1 -0
  53. package/dist/edge/webhooks/transform.d.ts +8 -0
  54. package/dist/edge/webhooks/transform.d.ts.map +1 -0
  55. package/dist/edge/webhooks/transform.js +29 -0
  56. package/dist/edge/webhooks/transform.js.map +1 -0
  57. package/dist/gateway/bus.d.ts +48 -0
  58. package/dist/gateway/bus.d.ts.map +1 -0
  59. package/dist/gateway/bus.js +2 -0
  60. package/dist/gateway/bus.js.map +1 -0
  61. package/dist/gateway/decorators.d.ts +40 -0
  62. package/dist/gateway/decorators.d.ts.map +1 -0
  63. package/dist/gateway/decorators.js +43 -0
  64. package/dist/gateway/decorators.js.map +1 -0
  65. package/dist/gateway/emitter.d.ts +42 -0
  66. package/dist/gateway/emitter.d.ts.map +1 -0
  67. package/dist/gateway/emitter.js +259 -0
  68. package/dist/gateway/emitter.js.map +1 -0
  69. package/dist/gateway/events.d.ts +343 -0
  70. package/dist/gateway/events.d.ts.map +1 -0
  71. package/dist/gateway/events.js +7 -0
  72. package/dist/gateway/events.js.map +1 -0
  73. package/dist/gateway/tcp-server.d.ts +7 -0
  74. package/dist/gateway/tcp-server.d.ts.map +1 -0
  75. package/dist/gateway/tcp-server.js +115 -0
  76. package/dist/gateway/tcp-server.js.map +1 -0
  77. package/dist/index.d.ts +2 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +74 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/lib/async-handlers.d.ts +13 -0
  82. package/dist/lib/async-handlers.d.ts.map +1 -0
  83. package/dist/lib/async-handlers.js +6 -0
  84. package/dist/lib/async-handlers.js.map +1 -0
  85. package/dist/lib/error-store.d.ts +19 -0
  86. package/dist/lib/error-store.d.ts.map +1 -0
  87. package/dist/lib/error-store.js +19 -0
  88. package/dist/lib/error-store.js.map +1 -0
  89. package/dist/lib/error.d.ts +11 -0
  90. package/dist/lib/error.d.ts.map +1 -0
  91. package/dist/lib/error.js +41 -0
  92. package/dist/lib/error.js.map +1 -0
  93. package/dist/lib/frontmatter.d.ts +23 -0
  94. package/dist/lib/frontmatter.d.ts.map +1 -0
  95. package/dist/lib/frontmatter.js +136 -0
  96. package/dist/lib/frontmatter.js.map +1 -0
  97. package/dist/lib/glob.d.ts +14 -0
  98. package/dist/lib/glob.d.ts.map +1 -0
  99. package/dist/lib/glob.js +22 -0
  100. package/dist/lib/glob.js.map +1 -0
  101. package/dist/lib/heartbeat.d.ts +23 -0
  102. package/dist/lib/heartbeat.d.ts.map +1 -0
  103. package/dist/lib/heartbeat.js +62 -0
  104. package/dist/lib/heartbeat.js.map +1 -0
  105. package/dist/lib/html.d.ts +8 -0
  106. package/dist/lib/html.d.ts.map +1 -0
  107. package/dist/lib/html.js +28 -0
  108. package/dist/lib/html.js.map +1 -0
  109. package/dist/lib/http-validate.d.ts +12 -0
  110. package/dist/lib/http-validate.d.ts.map +1 -0
  111. package/dist/lib/http-validate.js +11 -0
  112. package/dist/lib/http-validate.js.map +1 -0
  113. package/dist/lib/id.d.ts +3 -0
  114. package/dist/lib/id.d.ts.map +1 -0
  115. package/dist/lib/id.js +5 -0
  116. package/dist/lib/id.js.map +1 -0
  117. package/dist/lib/logger.d.ts +12 -0
  118. package/dist/lib/logger.d.ts.map +1 -0
  119. package/dist/lib/logger.js +28 -0
  120. package/dist/lib/logger.js.map +1 -0
  121. package/dist/lib/media-transcribe.d.ts +57 -0
  122. package/dist/lib/media-transcribe.d.ts.map +1 -0
  123. package/dist/lib/media-transcribe.js +98 -0
  124. package/dist/lib/media-transcribe.js.map +1 -0
  125. package/dist/lib/media.d.ts +7 -0
  126. package/dist/lib/media.d.ts.map +1 -0
  127. package/dist/lib/media.js +18 -0
  128. package/dist/lib/media.js.map +1 -0
  129. package/dist/lib/mime.d.ts +6 -0
  130. package/dist/lib/mime.d.ts.map +1 -0
  131. package/dist/lib/mime.js +71 -0
  132. package/dist/lib/mime.js.map +1 -0
  133. package/dist/lib/paginate.d.ts +3 -0
  134. package/dist/lib/paginate.d.ts.map +1 -0
  135. package/dist/lib/paginate.js +5 -0
  136. package/dist/lib/paginate.js.map +1 -0
  137. package/dist/lib/paths.d.ts +14 -0
  138. package/dist/lib/paths.d.ts.map +1 -0
  139. package/dist/lib/paths.js +29 -0
  140. package/dist/lib/paths.js.map +1 -0
  141. package/dist/lib/provider-loader.d.ts +10 -0
  142. package/dist/lib/provider-loader.d.ts.map +1 -0
  143. package/dist/lib/provider-loader.js +24 -0
  144. package/dist/lib/provider-loader.js.map +1 -0
  145. package/dist/lib/retry.d.ts +20 -0
  146. package/dist/lib/retry.d.ts.map +1 -0
  147. package/dist/lib/retry.js +40 -0
  148. package/dist/lib/retry.js.map +1 -0
  149. package/dist/lib/safe-async.d.ts +27 -0
  150. package/dist/lib/safe-async.d.ts.map +1 -0
  151. package/dist/lib/safe-async.js +38 -0
  152. package/dist/lib/safe-async.js.map +1 -0
  153. package/dist/lib/skills.d.ts +9 -0
  154. package/dist/lib/skills.d.ts.map +1 -0
  155. package/dist/lib/skills.js +15 -0
  156. package/dist/lib/skills.js.map +1 -0
  157. package/dist/lib/sleep.d.ts +6 -0
  158. package/dist/lib/sleep.d.ts.map +1 -0
  159. package/dist/lib/sleep.js +22 -0
  160. package/dist/lib/sleep.js.map +1 -0
  161. package/dist/lib/strip-markdown.d.ts +7 -0
  162. package/dist/lib/strip-markdown.d.ts.map +1 -0
  163. package/dist/lib/strip-markdown.js +32 -0
  164. package/dist/lib/strip-markdown.js.map +1 -0
  165. package/dist/lib/subagent.d.ts +14 -0
  166. package/dist/lib/subagent.d.ts.map +1 -0
  167. package/dist/lib/subagent.js +25 -0
  168. package/dist/lib/subagent.js.map +1 -0
  169. package/dist/lib/templates.d.ts +8 -0
  170. package/dist/lib/templates.d.ts.map +1 -0
  171. package/dist/lib/templates.js +39 -0
  172. package/dist/lib/templates.js.map +1 -0
  173. package/dist/lib/timeout.d.ts +6 -0
  174. package/dist/lib/timeout.d.ts.map +1 -0
  175. package/dist/lib/timeout.js +11 -0
  176. package/dist/lib/timeout.js.map +1 -0
  177. package/dist/lib/truncate.d.ts +11 -0
  178. package/dist/lib/truncate.d.ts.map +1 -0
  179. package/dist/lib/truncate.js +17 -0
  180. package/dist/lib/truncate.js.map +1 -0
  181. package/dist/lib/url-expand.d.ts +22 -0
  182. package/dist/lib/url-expand.d.ts.map +1 -0
  183. package/dist/lib/url-expand.js +74 -0
  184. package/dist/lib/url-expand.js.map +1 -0
  185. package/dist/scripts/migrate-cron-sessions.d.ts +10 -0
  186. package/dist/scripts/migrate-cron-sessions.d.ts.map +1 -0
  187. package/dist/scripts/migrate-cron-sessions.js +139 -0
  188. package/dist/scripts/migrate-cron-sessions.js.map +1 -0
  189. package/dist/scripts/seed.d.ts +2 -0
  190. package/dist/scripts/seed.d.ts.map +1 -0
  191. package/dist/scripts/seed.js +4 -0
  192. package/dist/scripts/seed.js.map +1 -0
  193. package/dist/services/agent/directives.d.ts +14 -0
  194. package/dist/services/agent/directives.d.ts.map +1 -0
  195. package/dist/services/agent/directives.js +32 -0
  196. package/dist/services/agent/directives.js.map +1 -0
  197. package/dist/services/agent/index.d.ts +104 -0
  198. package/dist/services/agent/index.d.ts.map +1 -0
  199. package/dist/services/agent/index.js +534 -0
  200. package/dist/services/agent/index.js.map +1 -0
  201. package/dist/services/agent/persona.d.ts +15 -0
  202. package/dist/services/agent/persona.d.ts.map +1 -0
  203. package/dist/services/agent/persona.js +63 -0
  204. package/dist/services/agent/persona.js.map +1 -0
  205. package/dist/services/agent/prompt-interpolate.d.ts +41 -0
  206. package/dist/services/agent/prompt-interpolate.d.ts.map +1 -0
  207. package/dist/services/agent/prompt-interpolate.js +102 -0
  208. package/dist/services/agent/prompt-interpolate.js.map +1 -0
  209. package/dist/services/agent/schema.d.ts +10 -0
  210. package/dist/services/agent/schema.d.ts.map +1 -0
  211. package/dist/services/agent/schema.js +5 -0
  212. package/dist/services/agent/schema.js.map +1 -0
  213. package/dist/services/agent/tools.d.ts +26 -0
  214. package/dist/services/agent/tools.d.ts.map +1 -0
  215. package/dist/services/agent/tools.js +85 -0
  216. package/dist/services/agent/tools.js.map +1 -0
  217. package/dist/services/channels/base-adapter.d.ts +61 -0
  218. package/dist/services/channels/base-adapter.d.ts.map +1 -0
  219. package/dist/services/channels/base-adapter.js +181 -0
  220. package/dist/services/channels/base-adapter.js.map +1 -0
  221. package/dist/services/channels/contracts.d.ts +75 -0
  222. package/dist/services/channels/contracts.d.ts.map +1 -0
  223. package/dist/services/channels/contracts.js +6 -0
  224. package/dist/services/channels/contracts.js.map +1 -0
  225. package/dist/services/channels/debounce.d.ts +22 -0
  226. package/dist/services/channels/debounce.d.ts.map +1 -0
  227. package/dist/services/channels/debounce.js +53 -0
  228. package/dist/services/channels/debounce.js.map +1 -0
  229. package/dist/services/channels/dedupe.d.ts +19 -0
  230. package/dist/services/channels/dedupe.d.ts.map +1 -0
  231. package/dist/services/channels/dedupe.js +52 -0
  232. package/dist/services/channels/dedupe.js.map +1 -0
  233. package/dist/services/channels/delivery.d.ts +12 -0
  234. package/dist/services/channels/delivery.d.ts.map +1 -0
  235. package/dist/services/channels/delivery.js +53 -0
  236. package/dist/services/channels/delivery.js.map +1 -0
  237. package/dist/services/channels/index.d.ts +53 -0
  238. package/dist/services/channels/index.d.ts.map +1 -0
  239. package/dist/services/channels/index.js +405 -0
  240. package/dist/services/channels/index.js.map +1 -0
  241. package/dist/services/channels/link-expand.d.ts +8 -0
  242. package/dist/services/channels/link-expand.d.ts.map +1 -0
  243. package/dist/services/channels/link-expand.js +28 -0
  244. package/dist/services/channels/link-expand.js.map +1 -0
  245. package/dist/services/channels/media-extract.d.ts +7 -0
  246. package/dist/services/channels/media-extract.d.ts.map +1 -0
  247. package/dist/services/channels/media-extract.js +31 -0
  248. package/dist/services/channels/media-extract.js.map +1 -0
  249. package/dist/services/channels/pipeline.d.ts +29 -0
  250. package/dist/services/channels/pipeline.d.ts.map +1 -0
  251. package/dist/services/channels/pipeline.js +120 -0
  252. package/dist/services/channels/pipeline.js.map +1 -0
  253. package/dist/services/channels/provider-loader.d.ts +7 -0
  254. package/dist/services/channels/provider-loader.d.ts.map +1 -0
  255. package/dist/services/channels/provider-loader.js +13 -0
  256. package/dist/services/channels/provider-loader.js.map +1 -0
  257. package/dist/services/channels/providers/telegram/adapter.d.ts +34 -0
  258. package/dist/services/channels/providers/telegram/adapter.d.ts.map +1 -0
  259. package/dist/services/channels/providers/telegram/adapter.js +278 -0
  260. package/dist/services/channels/providers/telegram/adapter.js.map +1 -0
  261. package/dist/services/channels/providers/telegram/index.d.ts +11 -0
  262. package/dist/services/channels/providers/telegram/index.d.ts.map +1 -0
  263. package/dist/services/channels/providers/telegram/index.js +11 -0
  264. package/dist/services/channels/providers/telegram/index.js.map +1 -0
  265. package/dist/services/channels/providers/telegram/normalizer.d.ts +12 -0
  266. package/dist/services/channels/providers/telegram/normalizer.d.ts.map +1 -0
  267. package/dist/services/channels/providers/telegram/normalizer.js +50 -0
  268. package/dist/services/channels/providers/telegram/normalizer.js.map +1 -0
  269. package/dist/services/channels/providers/telegram/types.d.ts +72 -0
  270. package/dist/services/channels/providers/telegram/types.d.ts.map +1 -0
  271. package/dist/services/channels/providers/telegram/types.js +3 -0
  272. package/dist/services/channels/providers/telegram/types.js.map +1 -0
  273. package/dist/services/channels/providers/whatsapp/adapter.d.ts +36 -0
  274. package/dist/services/channels/providers/whatsapp/adapter.d.ts.map +1 -0
  275. package/dist/services/channels/providers/whatsapp/adapter.js +261 -0
  276. package/dist/services/channels/providers/whatsapp/adapter.js.map +1 -0
  277. package/dist/services/channels/providers/whatsapp/index.d.ts +11 -0
  278. package/dist/services/channels/providers/whatsapp/index.d.ts.map +1 -0
  279. package/dist/services/channels/providers/whatsapp/index.js +11 -0
  280. package/dist/services/channels/providers/whatsapp/index.js.map +1 -0
  281. package/dist/services/channels/providers/whatsapp/normalizer.d.ts +11 -0
  282. package/dist/services/channels/providers/whatsapp/normalizer.d.ts.map +1 -0
  283. package/dist/services/channels/providers/whatsapp/normalizer.js +47 -0
  284. package/dist/services/channels/providers/whatsapp/normalizer.js.map +1 -0
  285. package/dist/services/channels/providers/whatsapp/session.d.ts +9 -0
  286. package/dist/services/channels/providers/whatsapp/session.d.ts.map +1 -0
  287. package/dist/services/channels/providers/whatsapp/session.js +118 -0
  288. package/dist/services/channels/providers/whatsapp/session.js.map +1 -0
  289. package/dist/services/channels/providers/whatsapp/types.d.ts +23 -0
  290. package/dist/services/channels/providers/whatsapp/types.d.ts.map +1 -0
  291. package/dist/services/channels/providers/whatsapp/types.js +3 -0
  292. package/dist/services/channels/providers/whatsapp/types.js.map +1 -0
  293. package/dist/services/channels/reconnect.d.ts +23 -0
  294. package/dist/services/channels/reconnect.d.ts.map +1 -0
  295. package/dist/services/channels/reconnect.js +32 -0
  296. package/dist/services/channels/reconnect.js.map +1 -0
  297. package/dist/services/channels/status-reactions.d.ts +27 -0
  298. package/dist/services/channels/status-reactions.d.ts.map +1 -0
  299. package/dist/services/channels/status-reactions.js +63 -0
  300. package/dist/services/channels/status-reactions.js.map +1 -0
  301. package/dist/services/channels/types.d.ts +16 -0
  302. package/dist/services/channels/types.d.ts.map +1 -0
  303. package/dist/services/channels/types.js +2 -0
  304. package/dist/services/channels/types.js.map +1 -0
  305. package/dist/services/channels/typing-state.d.ts +22 -0
  306. package/dist/services/channels/typing-state.d.ts.map +1 -0
  307. package/dist/services/channels/typing-state.js +88 -0
  308. package/dist/services/channels/typing-state.js.map +1 -0
  309. package/dist/services/config/index.d.ts +2426 -0
  310. package/dist/services/config/index.d.ts.map +1 -0
  311. package/dist/services/config/index.js +232 -0
  312. package/dist/services/config/index.js.map +1 -0
  313. package/dist/services/config/schemas/agent.d.ts +720 -0
  314. package/dist/services/config/schemas/agent.d.ts.map +1 -0
  315. package/dist/services/config/schemas/agent.js +86 -0
  316. package/dist/services/config/schemas/agent.js.map +1 -0
  317. package/dist/services/config/schemas/auth.d.ts +60 -0
  318. package/dist/services/config/schemas/auth.d.ts.map +1 -0
  319. package/dist/services/config/schemas/auth.js +18 -0
  320. package/dist/services/config/schemas/auth.js.map +1 -0
  321. package/dist/services/config/schemas/channels.d.ts +117 -0
  322. package/dist/services/config/schemas/channels.d.ts.map +1 -0
  323. package/dist/services/config/schemas/channels.js +22 -0
  324. package/dist/services/config/schemas/channels.js.map +1 -0
  325. package/dist/services/config/schemas/cron.d.ts +97 -0
  326. package/dist/services/config/schemas/cron.d.ts.map +1 -0
  327. package/dist/services/config/schemas/cron.js +18 -0
  328. package/dist/services/config/schemas/cron.js.map +1 -0
  329. package/dist/services/config/schemas/features.d.ts +43 -0
  330. package/dist/services/config/schemas/features.d.ts.map +1 -0
  331. package/dist/services/config/schemas/features.js +20 -0
  332. package/dist/services/config/schemas/features.js.map +1 -0
  333. package/dist/services/config/schemas/index.d.ts +24 -0
  334. package/dist/services/config/schemas/index.d.ts.map +1 -0
  335. package/dist/services/config/schemas/index.js +24 -0
  336. package/dist/services/config/schemas/index.js.map +1 -0
  337. package/dist/services/config/schemas/mcp.d.ts +31 -0
  338. package/dist/services/config/schemas/mcp.d.ts.map +1 -0
  339. package/dist/services/config/schemas/mcp.js +39 -0
  340. package/dist/services/config/schemas/mcp.js.map +1 -0
  341. package/dist/services/config/schemas/primitives.d.ts +13 -0
  342. package/dist/services/config/schemas/primitives.d.ts.map +1 -0
  343. package/dist/services/config/schemas/primitives.js +17 -0
  344. package/dist/services/config/schemas/primitives.js.map +1 -0
  345. package/dist/services/config/schemas/providers.d.ts +335 -0
  346. package/dist/services/config/schemas/providers.d.ts.map +1 -0
  347. package/dist/services/config/schemas/providers.js +27 -0
  348. package/dist/services/config/schemas/providers.js.map +1 -0
  349. package/dist/services/config/schemas/storage.d.ts +16 -0
  350. package/dist/services/config/schemas/storage.d.ts.map +1 -0
  351. package/dist/services/config/schemas/storage.js +9 -0
  352. package/dist/services/config/schemas/storage.js.map +1 -0
  353. package/dist/services/config/schemas/webhooks.d.ts +25 -0
  354. package/dist/services/config/schemas/webhooks.d.ts.map +1 -0
  355. package/dist/services/config/schemas/webhooks.js +12 -0
  356. package/dist/services/config/schemas/webhooks.js.map +1 -0
  357. package/dist/services/cron/index.d.ts +50 -0
  358. package/dist/services/cron/index.d.ts.map +1 -0
  359. package/dist/services/cron/index.js +460 -0
  360. package/dist/services/cron/index.js.map +1 -0
  361. package/dist/services/log/index.d.ts +14 -0
  362. package/dist/services/log/index.d.ts.map +1 -0
  363. package/dist/services/log/index.js +137 -0
  364. package/dist/services/log/index.js.map +1 -0
  365. package/dist/services/mcp-client/index.d.ts +37 -0
  366. package/dist/services/mcp-client/index.d.ts.map +1 -0
  367. package/dist/services/mcp-client/index.js +258 -0
  368. package/dist/services/mcp-client/index.js.map +1 -0
  369. package/dist/services/media/extract-document.d.ts +8 -0
  370. package/dist/services/media/extract-document.d.ts.map +1 -0
  371. package/dist/services/media/extract-document.js +85 -0
  372. package/dist/services/media/extract-document.js.map +1 -0
  373. package/dist/services/media/index.d.ts +21 -0
  374. package/dist/services/media/index.d.ts.map +1 -0
  375. package/dist/services/media/index.js +116 -0
  376. package/dist/services/media/index.js.map +1 -0
  377. package/dist/services/media/providers/anthropic.d.ts +6 -0
  378. package/dist/services/media/providers/anthropic.d.ts.map +1 -0
  379. package/dist/services/media/providers/anthropic.js +38 -0
  380. package/dist/services/media/providers/anthropic.js.map +1 -0
  381. package/dist/services/media/providers/index.d.ts +6 -0
  382. package/dist/services/media/providers/index.d.ts.map +1 -0
  383. package/dist/services/media/providers/index.js +15 -0
  384. package/dist/services/media/providers/index.js.map +1 -0
  385. package/dist/services/media/providers/openai.d.ts +6 -0
  386. package/dist/services/media/providers/openai.d.ts.map +1 -0
  387. package/dist/services/media/providers/openai.js +48 -0
  388. package/dist/services/media/providers/openai.js.map +1 -0
  389. package/dist/services/media/providers/provider.d.ts +5 -0
  390. package/dist/services/media/providers/provider.d.ts.map +1 -0
  391. package/dist/services/media/providers/provider.js +2 -0
  392. package/dist/services/media/providers/provider.js.map +1 -0
  393. package/dist/services/memory/chunker.d.ts +7 -0
  394. package/dist/services/memory/chunker.d.ts.map +1 -0
  395. package/dist/services/memory/chunker.js +46 -0
  396. package/dist/services/memory/chunker.js.map +1 -0
  397. package/dist/services/memory/context.d.ts +68 -0
  398. package/dist/services/memory/context.d.ts.map +1 -0
  399. package/dist/services/memory/context.js +223 -0
  400. package/dist/services/memory/context.js.map +1 -0
  401. package/dist/services/memory/embedding.d.ts +9 -0
  402. package/dist/services/memory/embedding.d.ts.map +1 -0
  403. package/dist/services/memory/embedding.js +49 -0
  404. package/dist/services/memory/embedding.js.map +1 -0
  405. package/dist/services/memory/index.d.ts +24 -0
  406. package/dist/services/memory/index.d.ts.map +1 -0
  407. package/dist/services/memory/index.js +140 -0
  408. package/dist/services/memory/index.js.map +1 -0
  409. package/dist/services/memory/session-indexer.d.ts +5 -0
  410. package/dist/services/memory/session-indexer.d.ts.map +1 -0
  411. package/dist/services/memory/session-indexer.js +62 -0
  412. package/dist/services/memory/session-indexer.js.map +1 -0
  413. package/dist/services/memory/sqlite-storage.d.ts +23 -0
  414. package/dist/services/memory/sqlite-storage.d.ts.map +1 -0
  415. package/dist/services/memory/sqlite-storage.js +75 -0
  416. package/dist/services/memory/sqlite-storage.js.map +1 -0
  417. package/dist/services/memory/types.d.ts +31 -0
  418. package/dist/services/memory/types.d.ts.map +1 -0
  419. package/dist/services/memory/types.js +2 -0
  420. package/dist/services/memory/types.js.map +1 -0
  421. package/dist/services/web/index.d.ts +9 -0
  422. package/dist/services/web/index.d.ts.map +1 -0
  423. package/dist/services/web/index.js +101 -0
  424. package/dist/services/web/index.js.map +1 -0
  425. package/dist/vitest.config.d.ts +3 -0
  426. package/dist/vitest.config.d.ts.map +1 -0
  427. package/dist/vitest.config.js +9 -0
  428. package/dist/vitest.config.js.map +1 -0
  429. package/package.json +102 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Heartbeat utilities — pure functions for heartbeat poll logic
3
+ */
4
+ /**
5
+ * Returns true if HEARTBEAT.md content has no actionable tasks.
6
+ * Skips blank lines, markdown headers, empty list items, and HTML comments.
7
+ */
8
+ export function isHeartbeatContentEffectivelyEmpty(content) {
9
+ for (const line of content.split('\n')) {
10
+ const trimmed = line.trim();
11
+ if (!trimmed)
12
+ continue;
13
+ if (trimmed.startsWith('#'))
14
+ continue;
15
+ if (trimmed === '-' || trimmed === '- [ ]')
16
+ continue;
17
+ if (trimmed.startsWith('<!--') && trimmed.endsWith('-->'))
18
+ continue;
19
+ return false;
20
+ }
21
+ return true;
22
+ }
23
+ // Matches HEARTBEAT_OK with optional markdown wrapping (bold, backtick, strikethrough)
24
+ const HEARTBEAT_TOKEN_RE = /(?:\*{1,2}|`|~~)?HEARTBEAT_OK(?:\*{1,2}|`|~~)?/g;
25
+ /**
26
+ * Strip HEARTBEAT_OK token from response text.
27
+ * Returns null if the entire response was only the token (signal to skip delivery).
28
+ * Returns cleaned text otherwise.
29
+ */
30
+ export function stripHeartbeatToken(text) {
31
+ const stripped = text.replace(HEARTBEAT_TOKEN_RE, '').trim();
32
+ if (!stripped)
33
+ return null;
34
+ return stripped;
35
+ }
36
+ function currentHourInZone(timeZone) {
37
+ const parts = new Intl.DateTimeFormat('en-GB', {
38
+ timeZone,
39
+ hour: 'numeric',
40
+ hour12: false,
41
+ }).formatToParts(new Date());
42
+ const hourPart = parts.find(p => p.type === 'hour');
43
+ return parseInt(hourPart?.value ?? '0', 10);
44
+ }
45
+ /**
46
+ * Check if the current hour is within active hours.
47
+ * Returns true if no config (always active).
48
+ * Supports overnight ranges (e.g. 22→6).
49
+ *
50
+ * @param activeHours [startHour, endHour] (0–23). Interpreted in `timeZone` when set, else UTC.
51
+ */
52
+ export function isWithinActiveHours(activeHours, timeZone) {
53
+ if (!activeHours)
54
+ return true;
55
+ const [start, end] = activeHours;
56
+ const hour = timeZone ? currentHourInZone(timeZone) : new Date().getUTCHours();
57
+ if (start <= end)
58
+ return hour >= start && hour < end;
59
+ // Overnight: e.g. [22, 6] → active 22:00→06:00
60
+ return hour >= start || hour < end;
61
+ }
62
+ //# sourceMappingURL=heartbeat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../lib/heartbeat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,kCAAkC,CAAC,OAAe;IAChE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACtC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,OAAO;YAAE,SAAS;QACrD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,MAAM,kBAAkB,GAAG,iDAAiD,CAAC;AAE7E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC7C,QAAQ;QACR,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,KAAK;KACd,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAA8B,EAC9B,QAAiB;IAEjB,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/E,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC;IACrD,+CAA+C;IAC/C,OAAO,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC;AACrC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared HTML utilities backed by turndown.
3
+ * - stripHtml: simple tag stripping (for link expansion)
4
+ * - htmlToMarkdown: proper conversion preserving links, headings, lists (for web.fetch)
5
+ */
6
+ export declare function htmlToMarkdown(html: string): string;
7
+ export declare function stripHtml(html: string): string;
8
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../lib/html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY9C"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared HTML utilities backed by turndown.
3
+ * - stripHtml: simple tag stripping (for link expansion)
4
+ * - htmlToMarkdown: proper conversion preserving links, headings, lists (for web.fetch)
5
+ */
6
+ import TurndownService from 'turndown';
7
+ const turndown = new TurndownService({ headingStyle: 'atx', bulletListMarker: '-' });
8
+ turndown.remove(['script', 'style', 'noscript']);
9
+ export function htmlToMarkdown(html) {
10
+ const titleMatch = html.match(/<title[^>]*>([\s\S]*?)<\/title>/i);
11
+ const title = titleMatch?.[1]?.trim();
12
+ const text = turndown.turndown(html).replace(/\n{3,}/g, '\n\n').trim();
13
+ return title ? `# ${title}\n\n${text}` : text;
14
+ }
15
+ export function stripHtml(html) {
16
+ return html
17
+ .replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/gi, ' ')
18
+ .replace(/<[^>]+>/g, ' ')
19
+ .replace(/&amp;/g, '&')
20
+ .replace(/&lt;/g, '<')
21
+ .replace(/&gt;/g, '>')
22
+ .replace(/&quot;/g, '"')
23
+ .replace(/&#39;/g, "'")
24
+ .replace(/&nbsp;/g, ' ')
25
+ .replace(/\s+/g, ' ')
26
+ .trim();
27
+ }
28
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../lib/html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,eAAe,MAAM,UAAU,CAAC;AAEvC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;AACrF,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,OAAO,CAAC,uCAAuC,EAAE,GAAG,CAAC;SACrD,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** HTTP response validation utilities */
2
+ export interface HttpResponse {
3
+ ok: boolean;
4
+ status: number;
5
+ statusText?: string;
6
+ }
7
+ /**
8
+ * Validate HTTP response and throw with formatted error message.
9
+ * Extracts method/URL context from error message if available.
10
+ */
11
+ export declare function validateHttpResponse(res: HttpResponse, context: string): void;
12
+ //# sourceMappingURL=http-validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-validate.d.ts","sourceRoot":"","sources":["../../lib/http-validate.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,MAAM,GACd,IAAI,CAIN"}
@@ -0,0 +1,11 @@
1
+ /** HTTP response validation utilities */
2
+ /**
3
+ * Validate HTTP response and throw with formatted error message.
4
+ * Extracts method/URL context from error message if available.
5
+ */
6
+ export function validateHttpResponse(res, context) {
7
+ if (!res.ok) {
8
+ throw new Error(`${context} failed: ${res.status} ${res.statusText || 'error'}`);
9
+ }
10
+ }
11
+ //# sourceMappingURL=http-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-validate.js","sourceRoot":"","sources":["../../lib/http-validate.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAQzC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAiB,EACjB,OAAe;IAEf,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Generate a short unique ID with a prefix: `prefix-timestamp-random` */
2
+ export declare function generateId(prefix: string): string;
3
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../lib/id.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD"}
package/dist/lib/id.js ADDED
@@ -0,0 +1,5 @@
1
+ /** Generate a short unique ID with a prefix: `prefix-timestamp-random` */
2
+ export function generateId(prefix) {
3
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
4
+ }
5
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../lib/id.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Bus } from '../gateway/bus.js';
2
+ import type { Json } from '../gateway/events.js';
3
+ /** Called once by LogService.boot() to wire the global logger to the bus. */
4
+ export declare function setLoggerBus(bus: Bus): void;
5
+ export declare function ts(): string;
6
+ export declare function createLogger(service: string): {
7
+ debug: (msg: string, data?: Json) => void;
8
+ info: (msg: string, data?: Json) => void;
9
+ warn: (msg: string, data?: Json) => void;
10
+ error: (msg: string, data?: Json) => void;
11
+ };
12
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAIjD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAE3C;AAED,wBAAgB,EAAE,IAAI,MAAM,CAK3B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM;iBAU3B,MAAM,SAAS,IAAI;gBACnB,MAAM,SAAS,IAAI;gBACnB,MAAM,SAAS,IAAI;iBACnB,MAAM,SAAS,IAAI;EAEnC"}
@@ -0,0 +1,28 @@
1
+ let _bus = null;
2
+ /** Called once by LogService.boot() to wire the global logger to the bus. */
3
+ export function setLoggerBus(bus) {
4
+ _bus = bus;
5
+ }
6
+ export function ts() {
7
+ const d = new Date();
8
+ const pad = (n) => String(n).padStart(2, '0');
9
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ` +
10
+ `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}.${Math.floor(d.getMilliseconds() / 100)}`;
11
+ }
12
+ export function createLogger(service) {
13
+ function write(level, message, data) {
14
+ if (_bus) {
15
+ _bus.emit('log.onLog', { level, service, message, ...(data !== undefined ? { data } : {}) });
16
+ }
17
+ else {
18
+ console.error(`${ts()} [${service}] ${level.toUpperCase()} ${message}`, data ?? '');
19
+ }
20
+ }
21
+ return {
22
+ debug: (msg, data) => write('debug', msg, data),
23
+ info: (msg, data) => write('info', msg, data),
24
+ warn: (msg, data) => write('warn', msg, data),
25
+ error: (msg, data) => write('error', msg, data),
26
+ };
27
+ }
28
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAGA,IAAI,IAAI,GAAe,IAAI,CAAC;AAE5B,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,GAAQ;IACnC,IAAI,GAAG,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,EAAE;IAChB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG;QAClE,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,SAAS,KAAK,CAAC,KAA0C,EAAE,OAAe,EAAE,IAAW;QACrF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;QAC9D,IAAI,EAAG,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAG,GAAG,EAAE,IAAI,CAAC;QAC9D,IAAI,EAAG,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAG,GAAG,EAAE,IAAI,CAAC;QAC9D,KAAK,EAAE,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;KAC/D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Media utilities — constants and helpers for file operations
3
+ *
4
+ * Transcription is implemented in MediaService via the media.transcribeAudio bus event.
5
+ * Image vision APIs can be added to MediaService as needed.
6
+ */
7
+ export declare const WHISPER_EXTS: Set<string>;
8
+ export declare const MIME_TO_AUDIO_EXT: Record<string, string>;
9
+ export declare const MIME_EXT: Record<string, string>;
10
+ export declare const MEDIA_TYPE_MIME_DEFAULTS: Record<string, string>;
11
+ export declare const EXT_TO_MIME: Record<string, string>;
12
+ export declare const IMAGE_MIMES: {
13
+ readonly 'image/jpeg': true;
14
+ readonly 'image/png': true;
15
+ readonly 'image/gif': true;
16
+ readonly 'image/webp': true;
17
+ readonly 'image/bmp': true;
18
+ readonly 'image/svg+xml': true;
19
+ };
20
+ export declare const AUDIO_MIMES: {
21
+ readonly 'audio/ogg': true;
22
+ readonly 'audio/mpeg': true;
23
+ readonly 'audio/mp4': true;
24
+ readonly 'audio/wav': true;
25
+ readonly 'audio/webm': true;
26
+ readonly 'audio/flac': true;
27
+ readonly 'audio/x-m4a': true;
28
+ readonly 'audio/mp3': true;
29
+ };
30
+ export declare const VIDEO_MIMES: {
31
+ readonly 'video/mp4': true;
32
+ };
33
+ export declare const DOCUMENT_MIMES: {
34
+ readonly 'text/plain': true;
35
+ readonly 'text/markdown': true;
36
+ readonly 'application/pdf': true;
37
+ readonly 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': true;
38
+ readonly 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': true;
39
+ };
40
+ export type ImageMimeType = keyof typeof IMAGE_MIMES;
41
+ export type AudioMimeType = keyof typeof AUDIO_MIMES;
42
+ export type VideoMimeType = keyof typeof VIDEO_MIMES;
43
+ export type DocumentMimeType = keyof typeof DOCUMENT_MIMES;
44
+ /**
45
+ * Get file extension for MIME type
46
+ */
47
+ export declare function extFromMime(mimeType: string): string;
48
+ /**
49
+ * Get MIME type from file extension
50
+ */
51
+ export declare function getMimeTypeFromExt(ext: string): string;
52
+ /**
53
+ * Normalize API base URL by removing trailing /v1 (or /v1/)
54
+ * Supports both formats: 'https://api.openai.com' and 'https://api.openai.com/v1'
55
+ */
56
+ export declare function normalizeApiBaseUrl(baseUrl?: string): string;
57
+ //# sourceMappingURL=media-transcribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-transcribe.d.ts","sourceRoot":"","sources":["../../lib/media-transcribe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,YAAY,aAAgG,CAAC;AAG1H,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC;AAGF,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY3C,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK3D,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAS9C,CAAC;AAGF,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,eAAO,MAAM,WAAW;;CAEd,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC;AACrD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5D"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Media utilities — constants and helpers for file operations
3
+ *
4
+ * Transcription is implemented in MediaService via the media.transcribeAudio bus event.
5
+ * Image vision APIs can be added to MediaService as needed.
6
+ */
7
+ // Supported audio extensions for Whisper API
8
+ export const WHISPER_EXTS = new Set(['.flac', '.m4a', '.mp3', '.mp4', '.mpeg', '.mpga', '.oga', '.ogg', '.wav', '.webm']);
9
+ // MIME type to audio extension mapping
10
+ export const MIME_TO_AUDIO_EXT = {
11
+ 'audio/ogg': '.ogg', 'audio/mpeg': '.mp3', 'audio/mp4': '.m4a',
12
+ 'audio/wav': '.wav', 'audio/webm': '.webm', 'audio/flac': '.flac',
13
+ 'audio/x-m4a': '.m4a', 'audio/mp3': '.mp3',
14
+ };
15
+ // MIME type to file extension mapping (includes images and video)
16
+ export const MIME_EXT = {
17
+ 'image/jpeg': '.jpg',
18
+ 'image/png': '.png',
19
+ 'image/gif': '.gif',
20
+ 'image/webp': '.webp',
21
+ 'image/bmp': '.bmp',
22
+ 'image/svg+xml': '.svg',
23
+ 'audio/ogg': '.ogg',
24
+ 'audio/mpeg': '.mp3',
25
+ 'audio/mp4': '.m4a',
26
+ 'video/mp4': '.mp4',
27
+ 'application/pdf': '.pdf',
28
+ };
29
+ // Media type to default MIME type mapping (for fallback when MIME is unknown)
30
+ export const MEDIA_TYPE_MIME_DEFAULTS = {
31
+ image: 'image/jpeg',
32
+ audio: 'audio/ogg',
33
+ video: 'video/mp4',
34
+ document: 'application/pdf',
35
+ };
36
+ // Extension to MIME type mapping (inverse of MIME_EXT, includes common variations)
37
+ export const EXT_TO_MIME = {
38
+ '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',
39
+ '.png': 'image/png', '.gif': 'image/gif', '.webp': 'image/webp',
40
+ '.mp4': 'video/mp4', '.mp3': 'audio/mpeg',
41
+ '.ogg': 'audio/ogg', '.m4a': 'audio/mp4',
42
+ '.pdf': 'application/pdf',
43
+ '.txt': 'text/plain', '.md': 'text/markdown',
44
+ '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
45
+ '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
46
+ };
47
+ // Typed MIME constants by media type
48
+ export const IMAGE_MIMES = {
49
+ 'image/jpeg': true,
50
+ 'image/png': true,
51
+ 'image/gif': true,
52
+ 'image/webp': true,
53
+ 'image/bmp': true,
54
+ 'image/svg+xml': true,
55
+ };
56
+ export const AUDIO_MIMES = {
57
+ 'audio/ogg': true,
58
+ 'audio/mpeg': true,
59
+ 'audio/mp4': true,
60
+ 'audio/wav': true,
61
+ 'audio/webm': true,
62
+ 'audio/flac': true,
63
+ 'audio/x-m4a': true,
64
+ 'audio/mp3': true,
65
+ };
66
+ export const VIDEO_MIMES = {
67
+ 'video/mp4': true,
68
+ };
69
+ export const DOCUMENT_MIMES = {
70
+ 'text/plain': true,
71
+ 'text/markdown': true,
72
+ 'application/pdf': true,
73
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': true,
74
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': true,
75
+ };
76
+ /**
77
+ * Get file extension for MIME type
78
+ */
79
+ export function extFromMime(mimeType) {
80
+ return MIME_EXT[mimeType] || '.bin';
81
+ }
82
+ /**
83
+ * Get MIME type from file extension
84
+ */
85
+ export function getMimeTypeFromExt(ext) {
86
+ return EXT_TO_MIME[ext.toLowerCase()] || 'image/jpeg';
87
+ }
88
+ /**
89
+ * Normalize API base URL by removing trailing /v1 (or /v1/)
90
+ * Supports both formats: 'https://api.openai.com' and 'https://api.openai.com/v1'
91
+ */
92
+ export function normalizeApiBaseUrl(baseUrl) {
93
+ let url = baseUrl ?? 'https://api.openai.com';
94
+ // Remove trailing /v1 or /v1/ if present
95
+ url = url.replace(/\/v1\/?$/, '');
96
+ return url;
97
+ }
98
+ //# sourceMappingURL=media-transcribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-transcribe.js","sourceRoot":"","sources":["../../lib/media-transcribe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function saveMedia(params: {
2
+ buffer: Buffer;
3
+ sessionKey: string;
4
+ mimeType: string;
5
+ mediaDir: string;
6
+ }): Promise<string>;
7
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../lib/media.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,CAAC,MAAM,EAAE;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB"}
@@ -0,0 +1,18 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { mkdir, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { extFromMime } from './media-transcribe.js';
5
+ export async function saveMedia(params) {
6
+ const dir = path.join(params.mediaDir, params.sessionKey.replace(/:/g, '-'));
7
+ await mkdir(dir, { recursive: true });
8
+ const now = new Date();
9
+ const date = now.toISOString().slice(0, 10);
10
+ const time = now.toISOString().slice(11, 19).replace(/:/g, '');
11
+ const hash = createHash('sha256').update(params.buffer).digest('hex').slice(0, 4);
12
+ const ext = extFromMime(params.mimeType);
13
+ const filename = `${date}_${time}_${hash}${ext}`;
14
+ const filepath = path.join(dir, filename);
15
+ await writeFile(filepath, params.buffer);
16
+ return filepath;
17
+ }
18
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../lib/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAK/B;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MIME type detection from file buffer
3
+ * Simple implementation based on magic numbers
4
+ */
5
+ export declare function detectMimeType(buffer: Buffer): Promise<string>;
6
+ //# sourceMappingURL=mime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../lib/mime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EpE"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * MIME type detection from file buffer
3
+ * Simple implementation based on magic numbers
4
+ */
5
+ export async function detectMimeType(buffer) {
6
+ // Check magic numbers
7
+ if (buffer.length < 4) {
8
+ return 'application/octet-stream';
9
+ }
10
+ const hex = buffer.toString('hex', 0, 4);
11
+ // PNG
12
+ if (hex.startsWith('89504e47')) {
13
+ return 'image/png';
14
+ }
15
+ // JPEG
16
+ if (hex.startsWith('ffd8ff')) {
17
+ return 'image/jpeg';
18
+ }
19
+ // GIF
20
+ if (hex.startsWith('47494638')) {
21
+ return 'image/gif';
22
+ }
23
+ // WebP
24
+ if (hex.startsWith('52494646') && buffer.length >= 12) {
25
+ const webpHex = buffer.toString('hex', 8, 12);
26
+ if (webpHex.startsWith('57454250')) {
27
+ return 'image/webp';
28
+ }
29
+ }
30
+ // BMP
31
+ if (hex.startsWith('424d')) {
32
+ return 'image/bmp';
33
+ }
34
+ // SVG (check content)
35
+ const contentStart = buffer.toString('utf-8', 0, Math.min(100, buffer.length));
36
+ if (contentStart.includes('<?xml') && contentStart.includes('<svg')) {
37
+ return 'image/svg+xml';
38
+ }
39
+ if (contentStart.includes('<svg')) {
40
+ return 'image/svg+xml';
41
+ }
42
+ // Text files
43
+ const textContent = buffer.toString('utf-8', 0, Math.min(100, buffer.length));
44
+ if (textContent.includes('<?xml')) {
45
+ return 'application/xml';
46
+ }
47
+ if (textContent.includes('<!DOCTYPE html') || textContent.includes('<html')) {
48
+ return 'text/html';
49
+ }
50
+ if (textContent.includes('{') || textContent.includes('[')) {
51
+ // Might be JSON
52
+ try {
53
+ JSON.parse(textContent.slice(0, textContent.indexOf('\n')) || textContent);
54
+ return 'application/json';
55
+ }
56
+ catch {
57
+ // Not valid JSON
58
+ }
59
+ }
60
+ // Check if mostly printable (text)
61
+ const printable = buffer.slice(0, Math.min(100, buffer.length)).toString('utf-8');
62
+ const nonPrintable = [...printable].filter(c => {
63
+ const code = c.charCodeAt(0);
64
+ return code < 32 && code !== 9 && code !== 10 && code !== 13;
65
+ }).length;
66
+ if (nonPrintable === 0) {
67
+ return 'text/plain';
68
+ }
69
+ return 'application/octet-stream';
70
+ }
71
+ //# sourceMappingURL=mime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime.js","sourceRoot":"","sources":["../../lib/mime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Pagination } from '../gateway/events.js';
2
+ export declare function paginate<T>(items: T[], page?: number, limit?: number): Pagination<T>;
3
+ //# sourceMappingURL=paginate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginate.d.ts","sourceRoot":"","sources":["../../lib/paginate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,GAAE,MAAU,EAAE,KAAK,GAAE,MAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAG3F"}
@@ -0,0 +1,5 @@
1
+ export function paginate(items, page = 1, limit = 20) {
2
+ const start = (page - 1) * limit;
3
+ return { items: items.slice(start, start + limit), page, limit };
4
+ }
5
+ //# sourceMappingURL=paginate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginate.js","sourceRoot":"","sources":["../../lib/paginate.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAI,KAAU,EAAE,OAAe,CAAC,EAAE,QAAgB,EAAE;IAC1E,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACjC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface DataPaths {
2
+ dataDir: string;
3
+ workspaceDir: string;
4
+ sessionsDir: string;
5
+ channelsDir: string;
6
+ cronDir: string;
7
+ logsDir: string;
8
+ cacheDir: string;
9
+ configFile: string;
10
+ }
11
+ /** Cached singleton — reads $VARGOS_DATA_DIR or ~/.vargos on first call. */
12
+ export declare function getDataPaths(): DataPaths;
13
+ export declare function resetDataPaths(): void;
14
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../lib/paths.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,SAAS,CAyBxC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAAmB"}
@@ -0,0 +1,29 @@
1
+ import path from 'node:path';
2
+ import os from 'node:os';
3
+ let _cache = null;
4
+ /** Cached singleton — reads $VARGOS_DATA_DIR or ~/.vargos on first call. */
5
+ export function getDataPaths() {
6
+ if (_cache)
7
+ return _cache;
8
+ const env = process.env.VARGOS_DATA_DIR?.trim();
9
+ const dataDir = env
10
+ ? (env.startsWith('~') ? path.join(os.homedir(), env.slice(1)) : env)
11
+ : path.join(os.homedir(), '.vargos');
12
+ const xdg = process.env.XDG_CACHE_HOME?.trim();
13
+ const base = xdg
14
+ ? (xdg.startsWith('~') ? path.join(os.homedir(), xdg.slice(1)) : xdg)
15
+ : path.join(os.homedir(), '.cache');
16
+ _cache = {
17
+ dataDir,
18
+ workspaceDir: path.join(dataDir, 'workspace'),
19
+ sessionsDir: path.join(dataDir, 'sessions'),
20
+ channelsDir: path.join(dataDir, 'channels'),
21
+ cronDir: path.join(dataDir, 'cron'),
22
+ logsDir: path.join(dataDir, 'logs'),
23
+ cacheDir: path.join(base, 'vargos'),
24
+ configFile: path.join(dataDir, 'config.json'),
25
+ };
26
+ return _cache;
27
+ }
28
+ export function resetDataPaths() { _cache = null; }
29
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAazB,IAAI,MAAM,GAAqB,IAAI,CAAC;AAEpC,4EAA4E;AAC5E,MAAM,UAAU,YAAY;IAC1B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,GAAG;QACjB,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG;QACd,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEtC,MAAM,GAAG;QACP,OAAO;QACP,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAC3C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACnC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACnC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;KAC9C,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,KAAW,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Generic dynamic provider loader — reusable across services.
3
+ * Supports lazy-loaded providers with error handling and logging.
4
+ */
5
+ /**
6
+ * Loads and returns providers from a registry of lazy loaders.
7
+ * Logs warnings for failed providers, continues loading others.
8
+ */
9
+ export declare function loadProviders<T>(providerRegistry: Record<string, () => Promise<T>>): Promise<T[]>;
10
+ //# sourceMappingURL=provider-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-loader.d.ts","sourceRoot":"","sources":["../../lib/provider-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GACjD,OAAO,CAAC,CAAC,EAAE,CAAC,CAWd"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Generic dynamic provider loader — reusable across services.
3
+ * Supports lazy-loaded providers with error handling and logging.
4
+ */
5
+ import { createLogger } from './logger.js';
6
+ const log = createLogger('provider-loader');
7
+ /**
8
+ * Loads and returns providers from a registry of lazy loaders.
9
+ * Logs warnings for failed providers, continues loading others.
10
+ */
11
+ export async function loadProviders(providerRegistry) {
12
+ const loaded = [];
13
+ for (const [name, loader] of Object.entries(providerRegistry)) {
14
+ try {
15
+ const provider = await loader();
16
+ loaded.push(provider);
17
+ }
18
+ catch (err) {
19
+ log.warn(`failed to load provider "${name}": ${err instanceof Error ? err.message : String(err)}`);
20
+ }
21
+ }
22
+ return loaded;
23
+ }
24
+ //# sourceMappingURL=provider-loader.js.map