@fraziym/axoniz 0.1.0

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 (512) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/dist/agents/definition.d.ts +15 -0
  4. package/dist/agents/definition.d.ts.map +1 -0
  5. package/dist/agents/definition.js +41 -0
  6. package/dist/agents/definition.js.map +1 -0
  7. package/dist/agents/index.d.ts +12 -0
  8. package/dist/agents/index.d.ts.map +1 -0
  9. package/dist/agents/index.js +11 -0
  10. package/dist/agents/index.js.map +1 -0
  11. package/dist/agents/registry.d.ts +17 -0
  12. package/dist/agents/registry.d.ts.map +1 -0
  13. package/dist/agents/registry.js +23 -0
  14. package/dist/agents/registry.js.map +1 -0
  15. package/dist/agents/specialized.d.ts +31 -0
  16. package/dist/agents/specialized.d.ts.map +1 -0
  17. package/dist/agents/specialized.js +75 -0
  18. package/dist/agents/specialized.js.map +1 -0
  19. package/dist/awareness/index.d.ts +14 -0
  20. package/dist/awareness/index.d.ts.map +1 -0
  21. package/dist/awareness/index.js +22 -0
  22. package/dist/awareness/index.js.map +1 -0
  23. package/dist/awareness/service.d.ts +180 -0
  24. package/dist/awareness/service.d.ts.map +1 -0
  25. package/dist/awareness/service.js +789 -0
  26. package/dist/awareness/service.js.map +1 -0
  27. package/dist/cli/entry.d.ts +13 -0
  28. package/dist/cli/entry.d.ts.map +1 -0
  29. package/dist/cli/entry.js +35 -0
  30. package/dist/cli/entry.js.map +1 -0
  31. package/dist/comms/telegram.d.ts +41 -0
  32. package/dist/comms/telegram.d.ts.map +1 -0
  33. package/dist/comms/telegram.js +332 -0
  34. package/dist/comms/telegram.js.map +1 -0
  35. package/dist/core/agent.d.ts +252 -0
  36. package/dist/core/agent.d.ts.map +1 -0
  37. package/dist/core/agent.js +1399 -0
  38. package/dist/core/agent.js.map +1 -0
  39. package/dist/core/auth.d.ts +23 -0
  40. package/dist/core/auth.d.ts.map +1 -0
  41. package/dist/core/auth.js +113 -0
  42. package/dist/core/auth.js.map +1 -0
  43. package/dist/core/authority.d.ts +118 -0
  44. package/dist/core/authority.d.ts.map +1 -0
  45. package/dist/core/authority.js +402 -0
  46. package/dist/core/authority.js.map +1 -0
  47. package/dist/core/backend/async_queue.d.ts +17 -0
  48. package/dist/core/backend/async_queue.d.ts.map +1 -0
  49. package/dist/core/backend/async_queue.js +66 -0
  50. package/dist/core/backend/async_queue.js.map +1 -0
  51. package/dist/core/backend/index.d.ts +24 -0
  52. package/dist/core/backend/index.d.ts.map +1 -0
  53. package/dist/core/backend/index.js +128 -0
  54. package/dist/core/backend/index.js.map +1 -0
  55. package/dist/core/backend/llama_server.d.ts +39 -0
  56. package/dist/core/backend/llama_server.d.ts.map +1 -0
  57. package/dist/core/backend/llama_server.js +182 -0
  58. package/dist/core/backend/llama_server.js.map +1 -0
  59. package/dist/core/backend/llamacpp.d.ts +40 -0
  60. package/dist/core/backend/llamacpp.d.ts.map +1 -0
  61. package/dist/core/backend/llamacpp.js +200 -0
  62. package/dist/core/backend/llamacpp.js.map +1 -0
  63. package/dist/core/backend/lmstudio.d.ts +53 -0
  64. package/dist/core/backend/lmstudio.d.ts.map +1 -0
  65. package/dist/core/backend/lmstudio.js +274 -0
  66. package/dist/core/backend/lmstudio.js.map +1 -0
  67. package/dist/core/backend/ollama.d.ts +25 -0
  68. package/dist/core/backend/ollama.d.ts.map +1 -0
  69. package/dist/core/backend/ollama.js +86 -0
  70. package/dist/core/backend/ollama.js.map +1 -0
  71. package/dist/core/backend/openai.d.ts +27 -0
  72. package/dist/core/backend/openai.d.ts.map +1 -0
  73. package/dist/core/backend/openai.js +84 -0
  74. package/dist/core/backend/openai.js.map +1 -0
  75. package/dist/core/backend/types.d.ts +73 -0
  76. package/dist/core/backend/types.d.ts.map +1 -0
  77. package/dist/core/backend/types.js +137 -0
  78. package/dist/core/backend/types.js.map +1 -0
  79. package/dist/core/chat_store.d.ts +77 -0
  80. package/dist/core/chat_store.d.ts.map +1 -0
  81. package/dist/core/chat_store.js +332 -0
  82. package/dist/core/chat_store.js.map +1 -0
  83. package/dist/core/cli.d.ts +82 -0
  84. package/dist/core/cli.d.ts.map +1 -0
  85. package/dist/core/cli.js +602 -0
  86. package/dist/core/cli.js.map +1 -0
  87. package/dist/core/config.d.ts +127 -0
  88. package/dist/core/config.d.ts.map +1 -0
  89. package/dist/core/config.js +295 -0
  90. package/dist/core/config.js.map +1 -0
  91. package/dist/core/debug.d.ts +8 -0
  92. package/dist/core/debug.d.ts.map +1 -0
  93. package/dist/core/debug.js +8 -0
  94. package/dist/core/debug.js.map +1 -0
  95. package/dist/core/downloader.d.ts +31 -0
  96. package/dist/core/downloader.d.ts.map +1 -0
  97. package/dist/core/downloader.js +180 -0
  98. package/dist/core/downloader.js.map +1 -0
  99. package/dist/core/errors.d.ts +80 -0
  100. package/dist/core/errors.d.ts.map +1 -0
  101. package/dist/core/errors.js +134 -0
  102. package/dist/core/errors.js.map +1 -0
  103. package/dist/core/extras.d.ts +160 -0
  104. package/dist/core/extras.d.ts.map +1 -0
  105. package/dist/core/extras.js +553 -0
  106. package/dist/core/extras.js.map +1 -0
  107. package/dist/core/health.d.ts +27 -0
  108. package/dist/core/health.d.ts.map +1 -0
  109. package/dist/core/health.js +96 -0
  110. package/dist/core/health.js.map +1 -0
  111. package/dist/core/history.d.ts +50 -0
  112. package/dist/core/history.d.ts.map +1 -0
  113. package/dist/core/history.js +276 -0
  114. package/dist/core/history.js.map +1 -0
  115. package/dist/core/index.d.ts +6 -0
  116. package/dist/core/index.d.ts.map +1 -0
  117. package/dist/core/index.js +6 -0
  118. package/dist/core/index.js.map +1 -0
  119. package/dist/core/intelligence/ast_index.d.ts +255 -0
  120. package/dist/core/intelligence/ast_index.d.ts.map +1 -0
  121. package/dist/core/intelligence/ast_index.js +1369 -0
  122. package/dist/core/intelligence/ast_index.js.map +1 -0
  123. package/dist/core/intelligence/confidence.d.ts +113 -0
  124. package/dist/core/intelligence/confidence.d.ts.map +1 -0
  125. package/dist/core/intelligence/confidence.js +298 -0
  126. package/dist/core/intelligence/confidence.js.map +1 -0
  127. package/dist/core/intelligence/context_compressor.d.ts +80 -0
  128. package/dist/core/intelligence/context_compressor.d.ts.map +1 -0
  129. package/dist/core/intelligence/context_compressor.js +245 -0
  130. package/dist/core/intelligence/context_compressor.js.map +1 -0
  131. package/dist/core/intelligence/daemon.d.ts +247 -0
  132. package/dist/core/intelligence/daemon.d.ts.map +1 -0
  133. package/dist/core/intelligence/daemon.js +842 -0
  134. package/dist/core/intelligence/daemon.js.map +1 -0
  135. package/dist/core/intelligence/index.d.ts +60 -0
  136. package/dist/core/intelligence/index.d.ts.map +1 -0
  137. package/dist/core/intelligence/index.js +101 -0
  138. package/dist/core/intelligence/index.js.map +1 -0
  139. package/dist/core/intelligence/predictor.d.ts +246 -0
  140. package/dist/core/intelligence/predictor.d.ts.map +1 -0
  141. package/dist/core/intelligence/predictor.js +590 -0
  142. package/dist/core/intelligence/predictor.js.map +1 -0
  143. package/dist/core/intelligence/reflex.d.ts +84 -0
  144. package/dist/core/intelligence/reflex.d.ts.map +1 -0
  145. package/dist/core/intelligence/reflex.js +344 -0
  146. package/dist/core/intelligence/reflex.js.map +1 -0
  147. package/dist/core/intelligence/self_correction.d.ts +121 -0
  148. package/dist/core/intelligence/self_correction.d.ts.map +1 -0
  149. package/dist/core/intelligence/self_correction.js +327 -0
  150. package/dist/core/intelligence/self_correction.js.map +1 -0
  151. package/dist/core/intelligence/skill_distiller.d.ts +100 -0
  152. package/dist/core/intelligence/skill_distiller.d.ts.map +1 -0
  153. package/dist/core/intelligence/skill_distiller.js +246 -0
  154. package/dist/core/intelligence/skill_distiller.js.map +1 -0
  155. package/dist/core/intelligence/swarm.d.ts +330 -0
  156. package/dist/core/intelligence/swarm.d.ts.map +1 -0
  157. package/dist/core/intelligence/swarm.js +1064 -0
  158. package/dist/core/intelligence/swarm.js.map +1 -0
  159. package/dist/core/intelligence/trajectory.d.ts +107 -0
  160. package/dist/core/intelligence/trajectory.d.ts.map +1 -0
  161. package/dist/core/intelligence/trajectory.js +330 -0
  162. package/dist/core/intelligence/trajectory.js.map +1 -0
  163. package/dist/core/logger.d.ts +111 -0
  164. package/dist/core/logger.d.ts.map +1 -0
  165. package/dist/core/logger.js +640 -0
  166. package/dist/core/logger.js.map +1 -0
  167. package/dist/core/loop.d.ts +123 -0
  168. package/dist/core/loop.d.ts.map +1 -0
  169. package/dist/core/loop.js +423 -0
  170. package/dist/core/loop.js.map +1 -0
  171. package/dist/core/memory.d.ts +81 -0
  172. package/dist/core/memory.d.ts.map +1 -0
  173. package/dist/core/memory.js +328 -0
  174. package/dist/core/memory.js.map +1 -0
  175. package/dist/core/metrics.d.ts +29 -0
  176. package/dist/core/metrics.d.ts.map +1 -0
  177. package/dist/core/metrics.js +109 -0
  178. package/dist/core/metrics.js.map +1 -0
  179. package/dist/core/models.d.ts +51 -0
  180. package/dist/core/models.d.ts.map +1 -0
  181. package/dist/core/models.js +146 -0
  182. package/dist/core/models.js.map +1 -0
  183. package/dist/core/optimizer.d.ts +34 -0
  184. package/dist/core/optimizer.d.ts.map +1 -0
  185. package/dist/core/optimizer.js +131 -0
  186. package/dist/core/optimizer.js.map +1 -0
  187. package/dist/core/persona.d.ts +35 -0
  188. package/dist/core/persona.d.ts.map +1 -0
  189. package/dist/core/persona.js +126 -0
  190. package/dist/core/persona.js.map +1 -0
  191. package/dist/core/rate_limit.d.ts +23 -0
  192. package/dist/core/rate_limit.d.ts.map +1 -0
  193. package/dist/core/rate_limit.js +62 -0
  194. package/dist/core/rate_limit.js.map +1 -0
  195. package/dist/core/runner.d.ts +63 -0
  196. package/dist/core/runner.d.ts.map +1 -0
  197. package/dist/core/runner.js +671 -0
  198. package/dist/core/runner.js.map +1 -0
  199. package/dist/core/stream_parser.d.ts +43 -0
  200. package/dist/core/stream_parser.d.ts.map +1 -0
  201. package/dist/core/stream_parser.js +140 -0
  202. package/dist/core/stream_parser.js.map +1 -0
  203. package/dist/core/tool_schemas.d.ts +26 -0
  204. package/dist/core/tool_schemas.d.ts.map +1 -0
  205. package/dist/core/tool_schemas.js +124 -0
  206. package/dist/core/tool_schemas.js.map +1 -0
  207. package/dist/core/which.d.ts +2 -0
  208. package/dist/core/which.d.ts.map +1 -0
  209. package/dist/core/which.js +35 -0
  210. package/dist/core/which.js.map +1 -0
  211. package/dist/goals/index.d.ts +9 -0
  212. package/dist/goals/index.d.ts.map +1 -0
  213. package/dist/goals/index.js +17 -0
  214. package/dist/goals/index.js.map +1 -0
  215. package/dist/goals/service.d.ts +115 -0
  216. package/dist/goals/service.d.ts.map +1 -0
  217. package/dist/goals/service.js +415 -0
  218. package/dist/goals/service.js.map +1 -0
  219. package/dist/goals/types.d.ts +47 -0
  220. package/dist/goals/types.d.ts.map +1 -0
  221. package/dist/goals/types.js +66 -0
  222. package/dist/goals/types.js.map +1 -0
  223. package/dist/index.d.ts +22 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +22 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/integrations/autonomous_startup.d.ts +51 -0
  228. package/dist/integrations/autonomous_startup.d.ts.map +1 -0
  229. package/dist/integrations/autonomous_startup.js +419 -0
  230. package/dist/integrations/autonomous_startup.js.map +1 -0
  231. package/dist/integrations/goose.d.ts +105 -0
  232. package/dist/integrations/goose.d.ts.map +1 -0
  233. package/dist/integrations/goose.js +408 -0
  234. package/dist/integrations/goose.js.map +1 -0
  235. package/dist/integrations/index.d.ts +21 -0
  236. package/dist/integrations/index.d.ts.map +1 -0
  237. package/dist/integrations/index.js +17 -0
  238. package/dist/integrations/index.js.map +1 -0
  239. package/dist/integrations/mcp.d.ts +73 -0
  240. package/dist/integrations/mcp.d.ts.map +1 -0
  241. package/dist/integrations/mcp.js +307 -0
  242. package/dist/integrations/mcp.js.map +1 -0
  243. package/dist/integrations/mempalace.d.ts +18 -0
  244. package/dist/integrations/mempalace.d.ts.map +1 -0
  245. package/dist/integrations/mempalace.js +25 -0
  246. package/dist/integrations/mempalace.js.map +1 -0
  247. package/dist/integrations/multi_agent.d.ts +82 -0
  248. package/dist/integrations/multi_agent.d.ts.map +1 -0
  249. package/dist/integrations/multi_agent.js +280 -0
  250. package/dist/integrations/multi_agent.js.map +1 -0
  251. package/dist/integrations/unified_memory.d.ts +415 -0
  252. package/dist/integrations/unified_memory.d.ts.map +1 -0
  253. package/dist/integrations/unified_memory.js +1489 -0
  254. package/dist/integrations/unified_memory.js.map +1 -0
  255. package/dist/roles/beru.yaml +48 -0
  256. package/dist/sidecar/client.d.ts +63 -0
  257. package/dist/sidecar/client.d.ts.map +1 -0
  258. package/dist/sidecar/client.js +222 -0
  259. package/dist/sidecar/client.js.map +1 -0
  260. package/dist/sidecar/index.d.ts +7 -0
  261. package/dist/sidecar/index.d.ts.map +1 -0
  262. package/dist/sidecar/index.js +6 -0
  263. package/dist/sidecar/index.js.map +1 -0
  264. package/dist/startup.d.ts +22 -0
  265. package/dist/startup.d.ts.map +1 -0
  266. package/dist/startup.js +194 -0
  267. package/dist/startup.js.map +1 -0
  268. package/dist/tools/_internal.d.ts +90 -0
  269. package/dist/tools/_internal.d.ts.map +1 -0
  270. package/dist/tools/_internal.js +375 -0
  271. package/dist/tools/_internal.js.map +1 -0
  272. package/dist/tools/_smoke.d.ts +2 -0
  273. package/dist/tools/_smoke.d.ts.map +1 -0
  274. package/dist/tools/_smoke.js +203 -0
  275. package/dist/tools/_smoke.js.map +1 -0
  276. package/dist/tools/axodex_tools.d.ts +51 -0
  277. package/dist/tools/axodex_tools.d.ts.map +1 -0
  278. package/dist/tools/axodex_tools.js +181 -0
  279. package/dist/tools/axodex_tools.js.map +1 -0
  280. package/dist/tools/code_tools.d.ts +33 -0
  281. package/dist/tools/code_tools.d.ts.map +1 -0
  282. package/dist/tools/code_tools.js +191 -0
  283. package/dist/tools/code_tools.js.map +1 -0
  284. package/dist/tools/computer_tools.d.ts +59 -0
  285. package/dist/tools/computer_tools.d.ts.map +1 -0
  286. package/dist/tools/computer_tools.js +348 -0
  287. package/dist/tools/computer_tools.js.map +1 -0
  288. package/dist/tools/file_tools.d.ts +51 -0
  289. package/dist/tools/file_tools.d.ts.map +1 -0
  290. package/dist/tools/file_tools.js +424 -0
  291. package/dist/tools/file_tools.js.map +1 -0
  292. package/dist/tools/index.d.ts +13 -0
  293. package/dist/tools/index.d.ts.map +1 -0
  294. package/dist/tools/index.js +13 -0
  295. package/dist/tools/index.js.map +1 -0
  296. package/dist/tools/shell_tools.d.ts +39 -0
  297. package/dist/tools/shell_tools.d.ts.map +1 -0
  298. package/dist/tools/shell_tools.js +163 -0
  299. package/dist/tools/shell_tools.js.map +1 -0
  300. package/dist/tools/web_tools.d.ts +31 -0
  301. package/dist/tools/web_tools.d.ts.map +1 -0
  302. package/dist/tools/web_tools.js +117 -0
  303. package/dist/tools/web_tools.js.map +1 -0
  304. package/dist/voice/index.d.ts +41 -0
  305. package/dist/voice/index.d.ts.map +1 -0
  306. package/dist/voice/index.js +58 -0
  307. package/dist/voice/index.js.map +1 -0
  308. package/dist/voice/light_daemon.d.ts +197 -0
  309. package/dist/voice/light_daemon.d.ts.map +1 -0
  310. package/dist/voice/light_daemon.js +746 -0
  311. package/dist/voice/light_daemon.js.map +1 -0
  312. package/dist/voice/setup.d.ts +63 -0
  313. package/dist/voice/setup.d.ts.map +1 -0
  314. package/dist/voice/setup.js +443 -0
  315. package/dist/voice/setup.js.map +1 -0
  316. package/dist/voice/stt.d.ts +148 -0
  317. package/dist/voice/stt.d.ts.map +1 -0
  318. package/dist/voice/stt.js +361 -0
  319. package/dist/voice/stt.js.map +1 -0
  320. package/dist/voice/tts.d.ts +168 -0
  321. package/dist/voice/tts.d.ts.map +1 -0
  322. package/dist/voice/tts.js +698 -0
  323. package/dist/voice/tts.js.map +1 -0
  324. package/dist/voice/voice_loop.d.ts +101 -0
  325. package/dist/voice/voice_loop.d.ts.map +1 -0
  326. package/dist/voice/voice_loop.js +463 -0
  327. package/dist/voice/voice_loop.js.map +1 -0
  328. package/dist/voice/wake_word.d.ts +153 -0
  329. package/dist/voice/wake_word.d.ts.map +1 -0
  330. package/dist/voice/wake_word.js +458 -0
  331. package/dist/voice/wake_word.js.map +1 -0
  332. package/dist/voice/wav.d.ts +99 -0
  333. package/dist/voice/wav.d.ts.map +1 -0
  334. package/dist/voice/wav.js +306 -0
  335. package/dist/voice/wav.js.map +1 -0
  336. package/dist/web/broker.d.ts +33 -0
  337. package/dist/web/broker.d.ts.map +1 -0
  338. package/dist/web/broker.js +58 -0
  339. package/dist/web/broker.js.map +1 -0
  340. package/dist/web/open_browser.d.ts +2 -0
  341. package/dist/web/open_browser.d.ts.map +1 -0
  342. package/dist/web/open_browser.js +42 -0
  343. package/dist/web/open_browser.js.map +1 -0
  344. package/dist/web/server.d.ts +54 -0
  345. package/dist/web/server.d.ts.map +1 -0
  346. package/dist/web/server.js +831 -0
  347. package/dist/web/server.js.map +1 -0
  348. package/dist/web/static/app.js +4121 -0
  349. package/dist/web/static/index.html +2281 -0
  350. package/dist/web/static/js/MODULE_SUMMARY.md +124 -0
  351. package/dist/web/static/js/a11y.js +165 -0
  352. package/dist/web/static/js/admin.js +2145 -0
  353. package/dist/web/static/js/assistant.js +475 -0
  354. package/dist/web/static/js/calendar/reminders.js +114 -0
  355. package/dist/web/static/js/calendar/utils.js +166 -0
  356. package/dist/web/static/js/calendar.js +3348 -0
  357. package/dist/web/static/js/censor.js +356 -0
  358. package/dist/web/static/js/chat.js +4546 -0
  359. package/dist/web/static/js/chatRenderer.js +2294 -0
  360. package/dist/web/static/js/chatStream.js +276 -0
  361. package/dist/web/static/js/codeRunner.js +398 -0
  362. package/dist/web/static/js/color/hex.js +14 -0
  363. package/dist/web/static/js/colorPicker.js +453 -0
  364. package/dist/web/static/js/compare/icons.js +77 -0
  365. package/dist/web/static/js/compare/index.js +1482 -0
  366. package/dist/web/static/js/compare/models.js +104 -0
  367. package/dist/web/static/js/compare/panes.js +817 -0
  368. package/dist/web/static/js/compare/probe.js +78 -0
  369. package/dist/web/static/js/compare/scoreboard.js +223 -0
  370. package/dist/web/static/js/compare/selector.js +1335 -0
  371. package/dist/web/static/js/compare/state.js +58 -0
  372. package/dist/web/static/js/compare/stream.js +695 -0
  373. package/dist/web/static/js/compare/vote.js +254 -0
  374. package/dist/web/static/js/cookbook-diagnosis.js +694 -0
  375. package/dist/web/static/js/cookbook-hwfit.js +1888 -0
  376. package/dist/web/static/js/cookbook.js +2093 -0
  377. package/dist/web/static/js/cookbookDownload.js +633 -0
  378. package/dist/web/static/js/cookbookProgressSignal.js +29 -0
  379. package/dist/web/static/js/cookbookRunning.js +3506 -0
  380. package/dist/web/static/js/cookbookServe.js +2128 -0
  381. package/dist/web/static/js/document.js +9731 -0
  382. package/dist/web/static/js/documentLibrary.js +3376 -0
  383. package/dist/web/static/js/dragSort.js +265 -0
  384. package/dist/web/static/js/editor/ai-inpaint.js +374 -0
  385. package/dist/web/static/js/editor/ai-models.js +273 -0
  386. package/dist/web/static/js/editor/ai-rembg.js +230 -0
  387. package/dist/web/static/js/editor/ai-tool-runner.js +147 -0
  388. package/dist/web/static/js/editor/ai-tools-misc.js +216 -0
  389. package/dist/web/static/js/editor/build/controls.js +366 -0
  390. package/dist/web/static/js/editor/build/popups.js +112 -0
  391. package/dist/web/static/js/editor/build/right-panel.js +200 -0
  392. package/dist/web/static/js/editor/build/toolbar.js +73 -0
  393. package/dist/web/static/js/editor/build/topbar.js +131 -0
  394. package/dist/web/static/js/editor/build/transform-popup.js +109 -0
  395. package/dist/web/static/js/editor/canvas-coords.js +21 -0
  396. package/dist/web/static/js/editor/canvas-events.js +197 -0
  397. package/dist/web/static/js/editor/canvas-transforms.js +132 -0
  398. package/dist/web/static/js/editor/checkerboard.js +24 -0
  399. package/dist/web/static/js/editor/clipboard-and-drop.js +133 -0
  400. package/dist/web/static/js/editor/composite-helpers.js +83 -0
  401. package/dist/web/static/js/editor/filters/blur.js +118 -0
  402. package/dist/web/static/js/editor/filters/edge-feather.js +70 -0
  403. package/dist/web/static/js/editor/fx/adj-popup.js +677 -0
  404. package/dist/web/static/js/editor/fx/filter-string.js +38 -0
  405. package/dist/web/static/js/editor/fx/histogram.js +67 -0
  406. package/dist/web/static/js/editor/fx/pixel-pass.js +249 -0
  407. package/dist/web/static/js/editor/harmonize-masks.js +116 -0
  408. package/dist/web/static/js/editor/history-panel.js +176 -0
  409. package/dist/web/static/js/editor/keyboard-shortcuts.js +271 -0
  410. package/dist/web/static/js/editor/layer-helpers.js +131 -0
  411. package/dist/web/static/js/editor/layer-panel.js +600 -0
  412. package/dist/web/static/js/editor/mask-utils.js +91 -0
  413. package/dist/web/static/js/editor/shortcuts-popover.js +149 -0
  414. package/dist/web/static/js/editor/slider-ux.js +191 -0
  415. package/dist/web/static/js/editor/snap.js +107 -0
  416. package/dist/web/static/js/editor/state.js +257 -0
  417. package/dist/web/static/js/editor/stroke-pipeline.js +162 -0
  418. package/dist/web/static/js/editor/stroke-tool-sliders.js +64 -0
  419. package/dist/web/static/js/editor/tools/clone.js +81 -0
  420. package/dist/web/static/js/editor/tools/crop.js +137 -0
  421. package/dist/web/static/js/editor/tools/flood-fill.js +72 -0
  422. package/dist/web/static/js/editor/tools/lasso-mask.js +171 -0
  423. package/dist/web/static/js/editor/tools/lasso.js +65 -0
  424. package/dist/web/static/js/editor/tools/move.js +79 -0
  425. package/dist/web/static/js/editor/tools/stroke.js +123 -0
  426. package/dist/web/static/js/editor/tools/transform-drag.js +174 -0
  427. package/dist/web/static/js/editor/tools/transform-handles.js +271 -0
  428. package/dist/web/static/js/editor/tools/transform-session.js +381 -0
  429. package/dist/web/static/js/editor/tools/wand.js +46 -0
  430. package/dist/web/static/js/editor/wire-import.js +148 -0
  431. package/dist/web/static/js/editor/wire-inpaint-controls.js +164 -0
  432. package/dist/web/static/js/editor/wire-merge-buttons.js +103 -0
  433. package/dist/web/static/js/editor/wire-selection-controls.js +170 -0
  434. package/dist/web/static/js/editor/wire-topbar-menus.js +174 -0
  435. package/dist/web/static/js/editor/wire-topbar-overflow.js +49 -0
  436. package/dist/web/static/js/editor/wire-topbar.js +188 -0
  437. package/dist/web/static/js/emailInbox.js +1245 -0
  438. package/dist/web/static/js/emailLibrary/replyRecipients.js +27 -0
  439. package/dist/web/static/js/emailLibrary/signatureFold.js +339 -0
  440. package/dist/web/static/js/emailLibrary/state.js +34 -0
  441. package/dist/web/static/js/emailLibrary/utils.js +202 -0
  442. package/dist/web/static/js/emailLibrary.js +5217 -0
  443. package/dist/web/static/js/emojiPicker.js +311 -0
  444. package/dist/web/static/js/escMenuStack.js +102 -0
  445. package/dist/web/static/js/fileHandler.js +295 -0
  446. package/dist/web/static/js/gallery.js +2835 -0
  447. package/dist/web/static/js/galleryEditor.js +3798 -0
  448. package/dist/web/static/js/group.js +955 -0
  449. package/dist/web/static/js/init.js +405 -0
  450. package/dist/web/static/js/keyboard-shortcuts.js +292 -0
  451. package/dist/web/static/js/langIcons.js +187 -0
  452. package/dist/web/static/js/markdown/tableRow.js +19 -0
  453. package/dist/web/static/js/markdown.js +806 -0
  454. package/dist/web/static/js/memory.js +1418 -0
  455. package/dist/web/static/js/modalManager.js +1552 -0
  456. package/dist/web/static/js/modalSnap.js +782 -0
  457. package/dist/web/static/js/model/matchKey.js +19 -0
  458. package/dist/web/static/js/modelPicker.js +695 -0
  459. package/dist/web/static/js/modelSort.js +33 -0
  460. package/dist/web/static/js/models.js +642 -0
  461. package/dist/web/static/js/notes.js +5054 -0
  462. package/dist/web/static/js/package.json +1 -0
  463. package/dist/web/static/js/platform.js +47 -0
  464. package/dist/web/static/js/presets.js +1110 -0
  465. package/dist/web/static/js/providers.js +93 -0
  466. package/dist/web/static/js/rag.js +177 -0
  467. package/dist/web/static/js/research/jobs.js +335 -0
  468. package/dist/web/static/js/research/panel.js +1233 -0
  469. package/dist/web/static/js/researchSynapse.js +225 -0
  470. package/dist/web/static/js/search-chat.js +201 -0
  471. package/dist/web/static/js/search.js +52 -0
  472. package/dist/web/static/js/section-management.js +260 -0
  473. package/dist/web/static/js/sessions.js +3108 -0
  474. package/dist/web/static/js/settings.js +4991 -0
  475. package/dist/web/static/js/sidebar-layout.js +573 -0
  476. package/dist/web/static/js/signature.js +504 -0
  477. package/dist/web/static/js/skills.js +1908 -0
  478. package/dist/web/static/js/slashAutocomplete.js +267 -0
  479. package/dist/web/static/js/slashCommands.js +6099 -0
  480. package/dist/web/static/js/spinner.js +406 -0
  481. package/dist/web/static/js/storage.js +123 -0
  482. package/dist/web/static/js/tasks.js +2699 -0
  483. package/dist/web/static/js/theme.js +2086 -0
  484. package/dist/web/static/js/tileManager.js +386 -0
  485. package/dist/web/static/js/tourAutoplay.js +133 -0
  486. package/dist/web/static/js/tourHints.js +179 -0
  487. package/dist/web/static/js/tts-ai.js +521 -0
  488. package/dist/web/static/js/ui.js +1288 -0
  489. package/dist/web/static/js/util/ordinal.js +13 -0
  490. package/dist/web/static/js/voiceRecorder.js +283 -0
  491. package/dist/web/static/js/windowDrag.js +326 -0
  492. package/dist/web/static/js/windowResize.js +233 -0
  493. package/dist/web/static/landing.html +824 -0
  494. package/dist/web/static/lib/docx.umd.min.js +20116 -0
  495. package/dist/web/static/lib/highlight.min.js +1213 -0
  496. package/dist/web/static/lib/html2pdf.bundle.min.js +3 -0
  497. package/dist/web/static/lib/mammoth.browser.min.js +21 -0
  498. package/dist/web/static/lib/qrcode.min.js +8 -0
  499. package/dist/web/static/lib/xlsx.full.min.js +24 -0
  500. package/dist/web/static/login.html +582 -0
  501. package/dist/web/static/manifest.json +15 -0
  502. package/dist/web/static/style.css +35733 -0
  503. package/dist/web/static/sw.js +144 -0
  504. package/dist/workflows/engine.d.ts +162 -0
  505. package/dist/workflows/engine.d.ts.map +1 -0
  506. package/dist/workflows/engine.js +625 -0
  507. package/dist/workflows/engine.js.map +1 -0
  508. package/dist/workflows/index.d.ts +8 -0
  509. package/dist/workflows/index.d.ts.map +1 -0
  510. package/dist/workflows/index.js +14 -0
  511. package/dist/workflows/index.js.map +1 -0
  512. package/package.json +112 -0
@@ -0,0 +1,99 @@
1
+ /**
2
+ * src/voice/wav.ts
3
+ * =================
4
+ * Shared low-level audio primitives for the BERU voice stack.
5
+ *
6
+ * The Python stack leaned on `soundfile` / `scipy.io.wavfile` / `wave` for file
7
+ * I/O and on `sounddevice` / `pyaudio` for live device I/O. Neither exists in
8
+ * Node.js here, so this module provides:
9
+ *
10
+ * 1. A hand-rolled 44-byte RIFF/PCM WAV writer + reader (`node:fs` only).
11
+ * 2. The pluggable audio-driver registry used for live capture/playback.
12
+ *
13
+ * TODO(port): live mic capture and speaker playback need a native driver.
14
+ * Recommended replacements (verify install on this machine first):
15
+ * - `naudiodon2` / `audify` / `speaker` / `node-record-lpcm16` (PortAudio)
16
+ * Until one is registered via `setAudioInputDriver()` / `setAudioOutputDriver()`
17
+ * every entry point returns a descriptive `[ERROR] ...` string and never throws.
18
+ *
19
+ * This file is an internal helper for `src/voice/*` — it is not part of the
20
+ * public `__init__.py` export surface.
21
+ */
22
+ /** Kokoro/Moonshine/Whisper/edge-tts all agree on 16 kHz mono for BERU's mic path. */
23
+ export declare const SAMPLE_RATE = 16000;
24
+ /** RIFF header is exactly 44 bytes for a canonical PCM WAV. */
25
+ export declare const WAV_HEADER_BYTES = 44;
26
+ /**
27
+ * Build a complete 16-bit PCM mono WAV file image in memory.
28
+ * Mirrors what Python's `wave` module + `numpy.tobytes()` produced.
29
+ */
30
+ export declare function encodeWavPcm16(pcm: Buffer, sampleRate?: number, channels?: number): Buffer;
31
+ /** Convert a float32 sample array ([-1, 1]) into little-endian 16-bit PCM bytes. */
32
+ export declare function floatToPcm16(samples: Float32Array): Buffer;
33
+ /** Convert little-endian 16-bit PCM bytes into a float32 sample array. */
34
+ export declare function pcm16ToFloat(pcm: Buffer): Float32Array;
35
+ /**
36
+ * Write a 16-bit PCM WAV file.
37
+ * Handles both `Float32Array` (float samples in [-1,1]) and raw PCM `Buffer`.
38
+ */
39
+ export declare function writeWav(filePath: string, samples: Float32Array | Int16Array | Buffer, sampleRate?: number, channels?: number): void;
40
+ export interface DecodedWav {
41
+ samples: Float32Array;
42
+ sampleRate: number;
43
+ channels: number;
44
+ bitsPerSample: number;
45
+ }
46
+ /**
47
+ * Decode a PCM WAV file. Walks the chunk list rather than assuming 44 bytes so
48
+ * files with LIST/fact chunks still load. Returns `null` when the file is not a
49
+ * readable PCM WAV (mirrors `soundfile.read` raising + the Python `try/except`).
50
+ */
51
+ export declare function readWav(filePath: string): DecodedWav | null;
52
+ /** Mean absolute amplitude of 16-bit PCM in [0, 32767] — Python `sum(abs(s))/n`. */
53
+ export declare function pcm16MeanAbs(pcm: Buffer): number;
54
+ /** Root-mean-square of float samples — Python `np.sqrt(np.mean(chunk ** 2))`. */
55
+ export declare function rmsFloat(samples: Float32Array): number;
56
+ export interface AudioRecordOptions {
57
+ /** Maximum number of seconds to capture. */
58
+ maxSeconds: number;
59
+ /** 16-bit mono PCM sample rate. */
60
+ sampleRate: number;
61
+ /** Stop after this many seconds of continuous near-silence. */
62
+ silenceSeconds?: number;
63
+ /** Mean-absolute-amplitude threshold (0..32767) counted as speech. */
64
+ energyThreshold?: number;
65
+ /** Cooperative cancellation. */
66
+ signal?: AbortSignal;
67
+ }
68
+ export interface AudioInputDriver {
69
+ readonly name: string;
70
+ /** Capture raw 16-bit 16 kHz mono PCM. Empty buffer == nothing heard. */
71
+ record(options: AudioRecordOptions): Promise<Buffer>;
72
+ }
73
+ export interface AudioOutputDriver {
74
+ readonly name: string;
75
+ /** Play a WAV (or any file the OS codec handles). Resolves when playback ends. */
76
+ playFile(filePath: string): Promise<void>;
77
+ }
78
+ export declare function setAudioInputDriver(driver: AudioInputDriver | null): void;
79
+ export declare function getAudioInputDriver(): AudioInputDriver | null;
80
+ export declare function setAudioOutputDriver(driver: AudioOutputDriver | null): void;
81
+ /**
82
+ * Playback driver, if one is available.
83
+ *
84
+ * TODO(port): there is no in-process audio I/O dependency. The fallbacks below
85
+ * shell out to OS players, which is what the Python `_play_file()` did after
86
+ * `sounddevice` failed. Recommended real replacement: `speaker` or `audify`.
87
+ */
88
+ export declare function getAudioOutputDriver(): AudioOutputDriver | null;
89
+ export declare const AUDIO_INPUT_MISSING_ERROR: string;
90
+ export declare const AUDIO_OUTPUT_MISSING_ERROR: string;
91
+ /** Run an external command, resolving with `{ code, stdout, stderr }` (never rejects). */
92
+ export declare function runCommand(cmd: string, args: string[], timeoutMs?: number, stdin?: Buffer): Promise<{
93
+ code: number;
94
+ stdout: string;
95
+ stderr: string;
96
+ }>;
97
+ /** Escape a value for a single-quoted PowerShell string literal. */
98
+ export declare function psQuote(s: string): string;
99
+ //# sourceMappingURL=wav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wav.d.ts","sourceRoot":"","sources":["../../src/voice/wav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,sFAAsF;AACtF,eAAO,MAAM,WAAW,QAAS,CAAC;AAElC,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAanC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,MAAoB,EAAE,QAAQ,SAAI,GAAG,MAAM,CAoBlG;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAI1D;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAKtD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,EAC3C,UAAU,GAAE,MAAoB,EAChC,QAAQ,SAAI,GACX,IAAI,CAYN;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA2C3D;AAMD,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAKtD;AAMD,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAKD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAEzE;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAM/D;AAED,eAAO,MAAM,yBAAyB,QAGgC,CAAC;AAEvE,eAAO,MAAM,0BAA0B,QAGkB,CAAC;AAE1D,0FAA0F;AAC1F,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,SAAS,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8C3D;AAED,oEAAoE;AACpE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC"}
@@ -0,0 +1,306 @@
1
+ /**
2
+ * src/voice/wav.ts
3
+ * =================
4
+ * Shared low-level audio primitives for the BERU voice stack.
5
+ *
6
+ * The Python stack leaned on `soundfile` / `scipy.io.wavfile` / `wave` for file
7
+ * I/O and on `sounddevice` / `pyaudio` for live device I/O. Neither exists in
8
+ * Node.js here, so this module provides:
9
+ *
10
+ * 1. A hand-rolled 44-byte RIFF/PCM WAV writer + reader (`node:fs` only).
11
+ * 2. The pluggable audio-driver registry used for live capture/playback.
12
+ *
13
+ * TODO(port): live mic capture and speaker playback need a native driver.
14
+ * Recommended replacements (verify install on this machine first):
15
+ * - `naudiodon2` / `audify` / `speaker` / `node-record-lpcm16` (PortAudio)
16
+ * Until one is registered via `setAudioInputDriver()` / `setAudioOutputDriver()`
17
+ * every entry point returns a descriptive `[ERROR] ...` string and never throws.
18
+ *
19
+ * This file is an internal helper for `src/voice/*` — it is not part of the
20
+ * public `__init__.py` export surface.
21
+ */
22
+ import fs from "node:fs";
23
+ import path from "node:path";
24
+ import { whichSync } from "../core/which.js";
25
+ /** Kokoro/Moonshine/Whisper/edge-tts all agree on 16 kHz mono for BERU's mic path. */
26
+ export const SAMPLE_RATE = 16_000;
27
+ /** RIFF header is exactly 44 bytes for a canonical PCM WAV. */
28
+ export const WAV_HEADER_BYTES = 44;
29
+ /* ────────────────────────────────────────────────────────────────────────────
30
+ * WAV encode / decode (replaces `soundfile` + Python `wave`)
31
+ * ──────────────────────────────────────────────────────────────────────────── */
32
+ /** Clamp a float sample in [-1, 1] to a signed 16-bit integer. */
33
+ function toInt16(sample) {
34
+ const v = Math.max(-1, Math.min(1, sample));
35
+ // 32767 for positive, 32768 for negative — matches numpy's astype(int16) edge.
36
+ return v < 0 ? Math.round(v * 0x8000) : Math.round(v * 0x7fff);
37
+ }
38
+ /**
39
+ * Build a complete 16-bit PCM mono WAV file image in memory.
40
+ * Mirrors what Python's `wave` module + `numpy.tobytes()` produced.
41
+ */
42
+ export function encodeWavPcm16(pcm, sampleRate = SAMPLE_RATE, channels = 1) {
43
+ const header = Buffer.alloc(WAV_HEADER_BYTES);
44
+ const byteRate = sampleRate * channels * 2;
45
+ const blockAlign = channels * 2;
46
+ header.write("RIFF", 0, "ascii");
47
+ header.writeUInt32LE(36 + pcm.length, 4); // RIFF chunk size
48
+ header.write("WAVE", 8, "ascii");
49
+ header.write("fmt ", 12, "ascii");
50
+ header.writeUInt32LE(16, 16); // fmt chunk size (PCM)
51
+ header.writeUInt16LE(1, 20); // audio format = PCM
52
+ header.writeUInt16LE(channels, 22);
53
+ header.writeUInt32LE(sampleRate, 24);
54
+ header.writeUInt32LE(byteRate, 28);
55
+ header.writeUInt16LE(blockAlign, 32);
56
+ header.writeUInt16LE(16, 34); // bits per sample
57
+ header.write("data", 36, "ascii");
58
+ header.writeUInt32LE(pcm.length, 40);
59
+ return Buffer.concat([header, pcm]);
60
+ }
61
+ /** Convert a float32 sample array ([-1, 1]) into little-endian 16-bit PCM bytes. */
62
+ export function floatToPcm16(samples) {
63
+ const out = Buffer.alloc(samples.length * 2);
64
+ for (let i = 0; i < samples.length; i++)
65
+ out.writeInt16LE(toInt16(samples[i] ?? 0), i * 2);
66
+ return out;
67
+ }
68
+ /** Convert little-endian 16-bit PCM bytes into a float32 sample array. */
69
+ export function pcm16ToFloat(pcm) {
70
+ const n = Math.floor(pcm.length / 2);
71
+ const out = new Float32Array(n);
72
+ for (let i = 0; i < n; i++)
73
+ out[i] = pcm.readInt16LE(i * 2) / 32768;
74
+ return out;
75
+ }
76
+ /**
77
+ * Write a 16-bit PCM WAV file.
78
+ * Handles both `Float32Array` (float samples in [-1,1]) and raw PCM `Buffer`.
79
+ */
80
+ export function writeWav(filePath, samples, sampleRate = SAMPLE_RATE, channels = 1) {
81
+ let pcm;
82
+ if (Buffer.isBuffer(samples)) {
83
+ pcm = samples;
84
+ }
85
+ else if (samples instanceof Float32Array) {
86
+ pcm = floatToPcm16(samples);
87
+ }
88
+ else {
89
+ pcm = Buffer.alloc(samples.length * 2);
90
+ for (let i = 0; i < samples.length; i++)
91
+ pcm.writeInt16LE(samples[i] ?? 0, i * 2);
92
+ }
93
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
94
+ fs.writeFileSync(filePath, encodeWavPcm16(pcm, sampleRate, channels));
95
+ }
96
+ /**
97
+ * Decode a PCM WAV file. Walks the chunk list rather than assuming 44 bytes so
98
+ * files with LIST/fact chunks still load. Returns `null` when the file is not a
99
+ * readable PCM WAV (mirrors `soundfile.read` raising + the Python `try/except`).
100
+ */
101
+ export function readWav(filePath) {
102
+ let buf;
103
+ try {
104
+ buf = fs.readFileSync(filePath);
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ if (buf.length < WAV_HEADER_BYTES)
110
+ return null;
111
+ if (buf.toString("ascii", 0, 4) !== "RIFF" || buf.toString("ascii", 8, 12) !== "WAVE")
112
+ return null;
113
+ let offset = 12;
114
+ let sampleRate = SAMPLE_RATE;
115
+ let channels = 1;
116
+ let bitsPerSample = 16;
117
+ let audioFormat = 1;
118
+ let dataStart = -1;
119
+ let dataLength = 0;
120
+ while (offset + 8 <= buf.length) {
121
+ const id = buf.toString("ascii", offset, offset + 4);
122
+ const size = buf.readUInt32LE(offset + 4);
123
+ const body = offset + 8;
124
+ if (id === "fmt " && size >= 16 && body + 16 <= buf.length) {
125
+ audioFormat = buf.readUInt16LE(body);
126
+ channels = Math.max(1, buf.readUInt16LE(body + 2));
127
+ sampleRate = buf.readUInt32LE(body + 4);
128
+ bitsPerSample = buf.readUInt16LE(body + 14);
129
+ }
130
+ else if (id === "data") {
131
+ dataStart = body;
132
+ dataLength = Math.min(size, buf.length - body);
133
+ break;
134
+ }
135
+ offset = body + size + (size % 2); // chunks are word aligned
136
+ }
137
+ if (dataStart < 0)
138
+ return null;
139
+ if (audioFormat !== 1 || bitsPerSample !== 16) {
140
+ // Only 16-bit PCM is produced by this stack; anything else is unsupported.
141
+ return null;
142
+ }
143
+ const pcm = buf.subarray(dataStart, dataStart + dataLength);
144
+ return { samples: pcm16ToFloat(pcm), sampleRate, channels, bitsPerSample };
145
+ }
146
+ /* ────────────────────────────────────────────────────────────────────────────
147
+ * Energy helpers (used by VAD in stt.ts / light_daemon.ts)
148
+ * ──────────────────────────────────────────────────────────────────────────── */
149
+ /** Mean absolute amplitude of 16-bit PCM in [0, 32767] — Python `sum(abs(s))/n`. */
150
+ export function pcm16MeanAbs(pcm) {
151
+ const n = Math.floor(pcm.length / 2);
152
+ if (n === 0)
153
+ return 0;
154
+ let acc = 0;
155
+ for (let i = 0; i < n; i++)
156
+ acc += Math.abs(pcm.readInt16LE(i * 2));
157
+ return acc / n;
158
+ }
159
+ /** Root-mean-square of float samples — Python `np.sqrt(np.mean(chunk ** 2))`. */
160
+ export function rmsFloat(samples) {
161
+ if (samples.length === 0)
162
+ return 0;
163
+ let acc = 0;
164
+ for (let i = 0; i < samples.length; i++)
165
+ acc += samples[i] * samples[i];
166
+ return Math.sqrt(acc / samples.length);
167
+ }
168
+ let _inputDriver = null;
169
+ let _outputDriver = null;
170
+ export function setAudioInputDriver(driver) {
171
+ _inputDriver = driver;
172
+ }
173
+ export function getAudioInputDriver() {
174
+ return _inputDriver;
175
+ }
176
+ export function setAudioOutputDriver(driver) {
177
+ _outputDriver = driver;
178
+ }
179
+ /**
180
+ * Playback driver, if one is available.
181
+ *
182
+ * TODO(port): there is no in-process audio I/O dependency. The fallbacks below
183
+ * shell out to OS players, which is what the Python `_play_file()` did after
184
+ * `sounddevice` failed. Recommended real replacement: `speaker` or `audify`.
185
+ */
186
+ export function getAudioOutputDriver() {
187
+ if (_outputDriver)
188
+ return _outputDriver;
189
+ const cli = detectCliPlayer();
190
+ if (cli)
191
+ return cli;
192
+ if (process.platform === "win32")
193
+ return powershellPlayer;
194
+ return null;
195
+ }
196
+ export const AUDIO_INPUT_MISSING_ERROR = "[ERROR] no audio input driver registered — microphone capture unavailable. " +
197
+ "Register one with setAudioInputDriver() from src/voice/wav.ts, or install a " +
198
+ "PortAudio binding (e.g. naudiodon2 / audify / node-record-lpcm16).";
199
+ export const AUDIO_OUTPUT_MISSING_ERROR = "[ERROR] no audio output driver available — playback unavailable. " +
200
+ "Register one with setAudioOutputDriver() from src/voice/wav.ts, or install a " +
201
+ "speaker backend (e.g. speaker / audify / naudiodon2).";
202
+ /** Run an external command, resolving with `{ code, stdout, stderr }` (never rejects). */
203
+ export async function runCommand(cmd, args, timeoutMs = 60_000, stdin) {
204
+ const { spawn } = await import("node:child_process");
205
+ return new Promise((resolve) => {
206
+ let child;
207
+ try {
208
+ child = spawn(cmd, args, { windowsHide: true });
209
+ }
210
+ catch (e) {
211
+ resolve({ code: -1, stdout: "", stderr: String(e) });
212
+ return;
213
+ }
214
+ let stdout = "";
215
+ let stderr = "";
216
+ let done = false;
217
+ const finish = (code) => {
218
+ if (done)
219
+ return;
220
+ done = true;
221
+ clearTimeout(timer);
222
+ resolve({ code, stdout, stderr });
223
+ };
224
+ const timer = setTimeout(() => {
225
+ try {
226
+ child.kill();
227
+ }
228
+ catch {
229
+ /* best effort */
230
+ }
231
+ finish(-1);
232
+ }, timeoutMs);
233
+ child.stdout?.on("data", (d) => {
234
+ stdout += d.toString("utf8");
235
+ });
236
+ child.stderr?.on("data", (d) => {
237
+ stderr += d.toString("utf8");
238
+ });
239
+ child.on("error", (e) => {
240
+ stderr += String(e);
241
+ finish(-1);
242
+ });
243
+ child.on("close", (code) => finish(code ?? -1));
244
+ if (stdin) {
245
+ try {
246
+ child.stdin?.end(stdin);
247
+ }
248
+ catch {
249
+ /* best effort */
250
+ }
251
+ }
252
+ });
253
+ }
254
+ /** Escape a value for a single-quoted PowerShell string literal. */
255
+ export function psQuote(s) {
256
+ return s.replace(/'/g, "''");
257
+ }
258
+ /**
259
+ * Windows playback via WPF MediaPlayer — handles mp3 and wav, no extra install.
260
+ * This is the Node analogue of the Python `PowerShell MediaPlayer` fallback.
261
+ */
262
+ const powershellPlayer = {
263
+ name: "powershell-mediaplayer",
264
+ async playFile(filePath) {
265
+ const secs = Math.max(1, fileSize(filePath) / 32_768 + 1);
266
+ const ps = `$p=New-Object System.Windows.Media.MediaPlayer;` +
267
+ `$p.Open([Uri]::new('${psQuote(path.resolve(filePath))}'));` +
268
+ `$p.Play(); Start-Sleep -Milliseconds ${Math.round(secs * 1000)}; $p.Close()`;
269
+ await runCommand("powershell", ["-NoProfile", "-c", ps], 120_000);
270
+ },
271
+ };
272
+ function detectCliPlayer() {
273
+ const platform = process.platform;
274
+ const candidates = platform === "darwin"
275
+ ? [{ bin: "afplay", args: (p) => [p] }]
276
+ : platform === "win32"
277
+ ? []
278
+ : [
279
+ { bin: "mpg123", args: (p) => ["-q", p] },
280
+ { bin: "ffplay", args: (p) => ["-nodisp", "-autoexit", "-loglevel", "quiet", p] },
281
+ { bin: "aplay", args: (p) => [p] },
282
+ { bin: "paplay", args: (p) => [p] },
283
+ ];
284
+ for (const c of candidates) {
285
+ if (!whichSync(c.bin))
286
+ continue;
287
+ const bin = c.bin;
288
+ const argsFor = c.args;
289
+ return {
290
+ name: `${bin}-cli`,
291
+ async playFile(p) {
292
+ await runCommand(bin, argsFor(p), 60_000);
293
+ },
294
+ };
295
+ }
296
+ return null;
297
+ }
298
+ function fileSize(p) {
299
+ try {
300
+ return fs.statSync(p).size;
301
+ }
302
+ catch {
303
+ return 0;
304
+ }
305
+ }
306
+ //# sourceMappingURL=wav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wav.js","sourceRoot":"","sources":["../../src/voice/wav.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Server-Sent Events broker.
3
+ * Port of `SSEBroker` from axoniz/web/server.py.
4
+ *
5
+ * Each connected client gets an async queue; `broadcast` fans an event out to
6
+ * every subscriber. The broker is a singleton (`broker`) because the agent,
7
+ * swarm and daemon all publish to it.
8
+ */
9
+ import { AsyncQueue } from "../core/backend/async_queue.js";
10
+ export interface SseEvent {
11
+ type: string;
12
+ data: unknown;
13
+ ts: number;
14
+ }
15
+ export declare class SSEBroker {
16
+ private clients;
17
+ /** Ring buffer of recent events, useful for late subscribers and the UI. */
18
+ private recent;
19
+ private readonly maxRecent;
20
+ addClient(): AsyncQueue<SseEvent>;
21
+ removeClient(q: AsyncQueue<SseEvent>): void;
22
+ broadcast(eventType: string, data: unknown): number;
23
+ /** Alias compatible with the Python `_broker.broadcast(...)` call sites. */
24
+ get clientCount(): number;
25
+ getRecent(n?: number): SseEvent[];
26
+ closeAll(): void;
27
+ }
28
+ export declare const broker: SSEBroker;
29
+ /** Named export matching the Python import site `from ... import _broker`. */
30
+ export declare const _broker: SSEBroker;
31
+ /** Format an event as an SSE wire frame. */
32
+ export declare function formatSse(ev: SseEvent): string;
33
+ //# sourceMappingURL=broker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/web/broker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAmC;IAClD,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IAEjC,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,CAIhC;IAED,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAG1C;IAED,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAYlD;IAED,4EAA4E;IAC5E,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,SAAS,CAAC,CAAC,SAAK,GAAG,QAAQ,EAAE,CAE5B;IAED,QAAQ,IAAI,IAAI,CAGf;CACF;AAGD,eAAO,MAAM,MAAM,WAAkB,CAAC;AAEtC,8EAA8E;AAC9E,eAAO,MAAM,OAAO,WAAS,CAAC;AAE9B,4CAA4C;AAC5C,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Server-Sent Events broker.
3
+ * Port of `SSEBroker` from axoniz/web/server.py.
4
+ *
5
+ * Each connected client gets an async queue; `broadcast` fans an event out to
6
+ * every subscriber. The broker is a singleton (`broker`) because the agent,
7
+ * swarm and daemon all publish to it.
8
+ */
9
+ import { AsyncQueue } from "../core/backend/async_queue.js";
10
+ export class SSEBroker {
11
+ clients = new Set();
12
+ /** Ring buffer of recent events, useful for late subscribers and the UI. */
13
+ recent = [];
14
+ maxRecent = 200;
15
+ addClient() {
16
+ const q = new AsyncQueue();
17
+ this.clients.add(q);
18
+ return q;
19
+ }
20
+ removeClient(q) {
21
+ this.clients.delete(q);
22
+ q.close();
23
+ }
24
+ broadcast(eventType, data) {
25
+ const ev = { type: eventType, data, ts: Date.now() / 1000 };
26
+ this.recent.push(ev);
27
+ if (this.recent.length > this.maxRecent) {
28
+ this.recent.splice(0, this.recent.length - this.maxRecent);
29
+ }
30
+ let delivered = 0;
31
+ for (const q of this.clients) {
32
+ q.push(ev);
33
+ delivered += 1;
34
+ }
35
+ return delivered;
36
+ }
37
+ /** Alias compatible with the Python `_broker.broadcast(...)` call sites. */
38
+ get clientCount() {
39
+ return this.clients.size;
40
+ }
41
+ getRecent(n = 50) {
42
+ return this.recent.slice(-n);
43
+ }
44
+ closeAll() {
45
+ for (const q of this.clients)
46
+ q.close();
47
+ this.clients.clear();
48
+ }
49
+ }
50
+ /* Module-level singleton (mirrors the Python `_broker`) */
51
+ export const broker = new SSEBroker();
52
+ /** Named export matching the Python import site `from ... import _broker`. */
53
+ export const _broker = broker;
54
+ /** Format an event as an SSE wire frame. */
55
+ export function formatSse(ev) {
56
+ return `event: ${ev.type}\ndata: ${JSON.stringify(ev.data)}\n\n`;
57
+ }
58
+ //# sourceMappingURL=broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/web/broker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAQ5D,MAAM,OAAO,SAAS;IACZ,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,4EAA4E;IACpE,MAAM,GAAe,EAAE,CAAC;IACf,SAAS,GAAG,GAAG,CAAC;IAEjC,SAAS;QACP,MAAM,CAAC,GAAG,IAAI,UAAU,EAAY,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,YAAY,CAAC,CAAuB;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC;IAED,SAAS,CAAC,SAAiB,EAAE,IAAa;QACxC,MAAM,EAAE,GAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACX,SAAS,IAAI,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4EAA4E;IAC5E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,CAAC,GAAG,EAAE;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,QAAQ;QACN,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAEtC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC;AAE9B,4CAA4C;AAC5C,MAAM,UAAU,SAAS,CAAC,EAAY;IACpC,OAAO,UAAU,EAAE,CAAC,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACnE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function openInBrowser(url: string): Promise<void>;
2
+ //# sourceMappingURL=open_browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open_browser.d.ts","sourceRoot":"","sources":["../../src/web/open_browser.ts"],"names":[],"mappings":"AASA,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC9D"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Cross-platform "open this URL in the default browser" helper.
3
+ * Uses the `open` package when available, falling back to platform commands.
4
+ *
5
+ * On Windows the empty `""` argument after `start` is required, otherwise the
6
+ * URL is interpreted as the console window title.
7
+ */
8
+ import { spawn } from "node:child_process";
9
+ export async function openInBrowser(url) {
10
+ try {
11
+ const mod = (await import("open"));
12
+ await mod.default(url);
13
+ return;
14
+ }
15
+ catch {
16
+ /* fall through to the platform command */
17
+ }
18
+ const platform = process.platform;
19
+ let cmd;
20
+ let args;
21
+ if (platform === "win32") {
22
+ cmd = "cmd";
23
+ args = ["/c", "start", "", url];
24
+ }
25
+ else if (platform === "darwin") {
26
+ cmd = "open";
27
+ args = [url];
28
+ }
29
+ else {
30
+ cmd = "xdg-open";
31
+ args = [url];
32
+ }
33
+ await new Promise((resolve, reject) => {
34
+ const child = spawn(cmd, args, { stdio: "ignore", detached: true, windowsHide: true });
35
+ child.on("error", reject);
36
+ child.on("spawn", () => {
37
+ child.unref();
38
+ resolve();
39
+ });
40
+ });
41
+ }
42
+ //# sourceMappingURL=open_browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open_browser.js","sourceRoot":"","sources":["../../src/web/open_browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAA8D,CAAC;QAChG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,GAAW,CAAC;IAChB,IAAI,IAAc,CAAC;IAEnB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,GAAG,GAAG,KAAK,CAAC;QACZ,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,GAAG,GAAG,MAAM,CAAC;QACb,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,UAAU,CAAC;QACjB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { type Express } from "express";
2
+ import { error as logError } from "../core/debug.js";
3
+ import { broker, _broker } from "./broker.js";
4
+ import type { Agent } from "../core/agent.js";
5
+ declare class Stats {
6
+ requests: number;
7
+ chat_turns: number;
8
+ agent_runs: number;
9
+ goal_runs: number;
10
+ tool_calls: number;
11
+ model_switches: number;
12
+ readonly start_time: number;
13
+ inc(field: keyof Omit<Stats, "start_time" | "inc" | "snapshot">, n?: number): void;
14
+ snapshot(): Record<string, number>;
15
+ }
16
+ export declare const stats: Stats;
17
+ export declare function getModelSearchDirs(): string[];
18
+ export declare function resolveStatic(urlPath: string): {
19
+ full: string;
20
+ mime: string;
21
+ } | null;
22
+ export interface WebServerOptions {
23
+ agent: Agent | null;
24
+ host?: string;
25
+ port?: number;
26
+ }
27
+ export declare class WebServer {
28
+ agent: Agent | null;
29
+ readonly host: string;
30
+ readonly port: number;
31
+ private app;
32
+ private server;
33
+ /** Abort flags keyed by request id, so the UI can cancel a running turn. */
34
+ private aborts;
35
+ constructor(opts: WebServerOptions);
36
+ private usersFileExists;
37
+ private authenticate;
38
+ private build;
39
+ private openSse;
40
+ private writeSse;
41
+ private chatSse;
42
+ private agentSse;
43
+ private runAgentTaskBg;
44
+ private recordRequest;
45
+ /** Start listening. Resolves once the socket is bound. */
46
+ listen(): Promise<string>;
47
+ /** Start the server and optionally open a browser. Blocks forever. */
48
+ start(openBrowser?: boolean): Promise<void>;
49
+ close(): Promise<void>;
50
+ get expressApp(): Express;
51
+ }
52
+ export { broker, _broker };
53
+ export { logError };
54
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAgBA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAS7E,OAAO,EAAc,KAAK,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,kBAAkB,CAAC;AAWzD,cAAM,KAAK;IACT,QAAQ,SAAK;IACb,UAAU,SAAK;IACf,UAAU,SAAK;IACf,SAAS,SAAK;IACd,UAAU,SAAK;IACf,cAAc,SAAK;IACnB,QAAQ,CAAC,UAAU,SAAqB;IAExC,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,SAAI,GAAG,IAAI,CAE5E;IAED,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUjC;CACF;AAED,eAAO,MAAM,KAAK,OAAc,CAAC;AAIjC,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAiB7C;AAoED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAapF;AAID,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,SAAS;IACpB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAA8C;IAC5D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAgC;IAE9C,YAAY,IAAI,EAAE,gBAAgB,EAKjC;IAID,OAAO,CAAC,eAAe;YAQT,YAAY;IAW1B,OAAO,CAAC,KAAK;IAobb,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,QAAQ;YASF,OAAO;YAYP,QAAQ;YA0BR,cAAc;IAkH5B,OAAO,CAAC,aAAa;IAOrB,0DAA0D;IACpD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAW9B;IAED,sEAAsE;IAChE,KAAK,CAAC,WAAW,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAO3B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;CACF;AAgBD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC"}