@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,93 @@
1
+ // AI provider logo SVGs — regex-based matching for self-hosted model names
2
+ // Uses official logos from Simple Icons where available, custom minimal SVGs otherwise
3
+ // All SVGs use viewBox="0 0 24 24" fill="currentColor"
4
+
5
+ const _PROVIDERS = [
6
+ // Ollama
7
+ [/ollama|:11434/i,
8
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.5c-3.1 0-5.65 2.43-5.86 5.48A6.62 6.62 0 0 0 3 13.62C3 18 6.8 21.5 12 21.5s9-3.5 9-7.88a6.62 6.62 0 0 0-3.14-5.64C17.65 4.93 15.1 2.5 12 2.5Zm-2.7 8.25a1.15 1.15 0 1 1 0 2.3 1.15 1.15 0 0 1 0-2.3Zm5.4 0a1.15 1.15 0 1 1 0 2.3 1.15 1.15 0 0 1 0-2.3Zm-5.15 5.15c.75.7 1.55 1.04 2.45 1.04s1.7-.34 2.45-1.04c.26-.24.66-.23.9.03.24.26.23.66-.03.9-.98.91-2.08 1.37-3.32 1.37s-2.34-.46-3.32-1.37a.64.64 0 0 1-.03-.9.64.64 0 0 1 .9-.03Z"/></svg>'],
9
+
10
+ // OpenAI — GPT, o1, o3, dall-e, chatgpt
11
+ [/openai|gpt-|^o[13]-|chatgpt|dall-e/i,
12
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 10.696.453a6.023 6.023 0 0 0-5.75 4.172 6.061 6.061 0 0 0-3.946 2.945 6.024 6.024 0 0 0 .742 7.099 5.98 5.98 0 0 0 .516 4.911 6.046 6.046 0 0 0 6.51 2.9A5.996 5.996 0 0 0 13.26 23.547a6.023 6.023 0 0 0 5.75-4.172 6.061 6.061 0 0 0 3.946-2.945 6.024 6.024 0 0 0-.674-6.609zM13.26 21.047a4.508 4.508 0 0 1-2.886-1.041l.143-.082 4.793-2.769a.777.777 0 0 0 .391-.676V10.34l2.026 1.17a.072.072 0 0 1 .039.061v5.596a4.532 4.532 0 0 1-4.506 4.48zM3.968 17.64a4.473 4.473 0 0 1-.537-3.018l.143.086 4.793 2.769a.79.79 0 0 0 .782 0l5.852-3.379v2.34a.072.072 0 0 1-.029.062l-4.845 2.796a4.532 4.532 0 0 1-6.159-1.656zM2.804 7.922a4.49 4.49 0 0 1 2.348-1.973V11.6a.778.778 0 0 0 .391.676l5.852 3.378-2.026 1.17a.072.072 0 0 1-.068 0L4.456 14.03a4.532 4.532 0 0 1-1.652-6.108zm16.423 3.823L13.375 8.367l2.026-1.17a.072.072 0 0 1 .068 0l4.845 2.796a4.525 4.525 0 0 1-.7 8.08V12.42a.778.778 0 0 0-.387-.676zm2.015-3.025l-.143-.086-4.793-2.769a.79.79 0 0 0-.782 0L9.672 9.243V6.903a.072.072 0 0 1 .029-.062l4.845-2.796a4.525 4.525 0 0 1 6.696 4.675zM8.598 12.66L6.57 11.49a.072.072 0 0 1-.039-.061V5.833a4.525 4.525 0 0 1 7.413-3.48l-.143.082-4.793 2.769a.777.777 0 0 0-.391.676l-.019 6.78zm1.1-2.379l2.607-1.505 2.607 1.505v3.01l-2.607 1.505-2.607-1.505z"/></svg>'],
13
+
14
+ // OpenRouter
15
+ [/openrouter|open router/i,
16
+ '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="5" cy="12" r="2.5"/><circle cx="19" cy="6" r="2.5"/><circle cx="19" cy="18" r="2.5"/><path d="M7.5 12h4.5c2 0 2.5-6 4.5-6"/><path d="M12 12c2 0 2.5 6 4.5 6"/></svg>'],
17
+
18
+ // Ollama / Ollama Cloud
19
+ [/ollama/i,
20
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M7.4 10.2a4.8 4.8 0 0 1 9.1-1.9 4.1 4.1 0 0 1 1 .1A4.8 4.8 0 0 1 17 18H7.4a3.9 3.9 0 0 1 0-7.8Zm0 2a1.9 1.9 0 0 0 0 3.8H17a2.8 2.8 0 0 0 .2-5.6 2.7 2.7 0 0 0-1.3.2l-.9.4-.4-.9a2.8 2.8 0 0 0-5.4 1.1v1H7.4Z"/></svg>'],
21
+
22
+ // Anthropic — Claude (official Simple Icons)
23
+ [/anthropic|claude/i,
24
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z"/></svg>'],
25
+
26
+ // Google Gemini (official Simple Icons)
27
+ [/google|gemini|gemma/i,
28
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81"/></svg>'],
29
+
30
+ // Meta — Llama models (official Simple Icons). Exclude the llama.cpp / llama-cpp
31
+ // / llamacpp inference engine — that's an independent project (ggml), not Meta.
32
+ [/meta|llama(?![.\-_ ]?cpp)/i,
33
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z"/></svg>'],
34
+
35
+ // Mistral AI (official Simple Icons). Match Mixtral and Ministral too.
36
+ [/mi[sx]tral|ministral/i,
37
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M17.143 3.429v3.428h-3.429v3.429h-3.428V6.857H6.857V3.43H3.43v13.714H0v3.428h10.286v-3.428H6.857v-3.429h3.429v3.429h3.429v-3.429h3.428v3.429h-3.428v3.428H24v-3.428h-3.43V3.429z"/></svg>'],
38
+
39
+ // Qwen (Tongyi Qianwen) — official geometric hexagonal logo
40
+ [/qwen|alibaba/i,
41
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z"/></svg>'],
42
+
43
+ // DeepSeek (official whale logo from LobeHub icons)
44
+ [/deepseek/i,
45
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"/></svg>'],
46
+
47
+ // xAI — Grok (stylized X)
48
+ [/x-ai|xai|grok/i,
49
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/></svg>'],
50
+
51
+ // Cohere — Command (stylized C)
52
+ [/cohere|command-r/i,
53
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10c2.15 0 4.14-.68 5.77-1.83l-.01-.01A5.5 5.5 0 0 0 14 11.5c0-.99.26-1.92.72-2.72A4.5 4.5 0 0 1 12 7.5c-2.49 0-4.5 2.01-4.5 4.5s2.01 4.5 4.5 4.5c.89 0 1.72-.26 2.42-.71a5.45 5.45 0 0 0 1.04 2.34A7.97 7.97 0 0 1 12 19.5c-4.14 0-7.5-3.36-7.5-7.5S7.86 4.5 12 4.5s7.5 3.36 7.5 7.5c0 .71-.1 1.4-.29 2.05a5.5 5.5 0 0 0-1.1-1.8c.06-.4.09-.82.09-1.25 0-3.45-2.55-6.2-6.2-6.2z"/></svg>'],
54
+
55
+ // Perplexity (official Simple Icons)
56
+ [/perplexity|sonar/i,
57
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm12.7086.0248-5.7766-5.1509V9.0618l5.7766 5.7766v6.5588zm2.8882-5.0652h-1.733v-1.9723L13.3948 8.245h7.8478v8.087z"/></svg>'],
58
+
59
+ // Nous Research / Hermes
60
+ [/nous|hermes/i,
61
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" stroke="currentColor" stroke-width="1.5" fill="none"/></svg>'],
62
+
63
+ // Microsoft / Phi (four squares)
64
+ [/microsoft|phi-/i,
65
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M1 1h10v10H1zm12 0h10v10H13zM1 13h10v10H1zm12 0h10v10H13z"/></svg>'],
66
+
67
+ // Zhipu AI — GLM, ChatGLM (official Z logo)
68
+ [/zhipu|glm|chatglm/i,
69
+ '<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="19.44,5.68 10.51,18.32 4.56,18.32 13.49,5.68"/><path d="M12.38 5.68l-1.04 1.48a.86.86 0 0 1-.72.38H4.93V5.68h7.45z"/><path d="M11.62 18.32l1.05-1.49a.86.86 0 0 1 .72-.37h5.68v1.86h-7.45z"/></svg>'],
70
+
71
+ // MiniMax
72
+ [/minimax/i,
73
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M4 4h4v16H4zm6 4h4v12h-4zm6-4h4v16h-4z"/></svg>'],
74
+
75
+ // Kimi / Moonshot AI (crescent moon)
76
+ [/kimi|moonshot/i,
77
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 0-20zm0 2a8 8 0 0 1 0 16A6.5 6.5 0 0 0 12 4z"/></svg>'],
78
+
79
+ // NVIDIA / Nemotron (official Simple Icons)
80
+ [/nvidia|nemotron/i,
81
+ '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M8.948 8.798v-1.43a6.7 6.7 0 0 1 .424-.018c3.922-.124 6.493 3.374 6.493 3.374s-2.774 3.851-5.75 3.851c-.398 0-.787-.062-1.158-.185v-4.346c1.528.185 1.837.857 2.747 2.385l2.04-1.714s-1.492-1.952-4-1.952a6.016 6.016 0 0 0-.796.035m0-4.735v2.138l.424-.027c5.45-.185 9.01 4.47 9.01 4.47s-4.08 4.964-8.33 4.964c-.37 0-.733-.035-1.095-.097v1.325c.3.035.61.062.91.062 3.957 0 6.82-2.023 9.593-4.408.459.371 2.34 1.263 2.73 1.652-2.633 2.208-8.772 3.984-12.253 3.984-.335 0-.653-.018-.971-.053v1.864H24V4.063zm0 10.326v1.131c-3.657-.654-4.673-4.46-4.673-4.46s1.758-1.944 4.673-2.262v1.237H8.94c-1.528-.186-2.73 1.245-2.73 1.245s.68 2.412 2.739 3.11M2.456 10.9s2.164-3.197 6.5-3.533V6.201C4.153 6.59 0 10.653 0 10.653s2.35 6.802 8.948 7.42v-1.237c-4.84-.6-6.492-5.936-6.492-5.936z"/></svg>'],
82
+ ];
83
+
84
+ // Returns an SVG string for the given model ID, or null if no match
85
+ export function providerLogo(modelId) {
86
+ if (!modelId) return null;
87
+ for (const [re, svg] of _PROVIDERS) {
88
+ if (re.test(modelId)) return svg;
89
+ }
90
+ return null;
91
+ }
92
+
93
+ export default { providerLogo };
@@ -0,0 +1,177 @@
1
+ // static/js/rag.js
2
+
3
+ /**
4
+ * RAG (Retrieval Augmented Generation) management
5
+ */
6
+
7
+ import uiModule from './ui.js';
8
+ import spinnerModule from './spinner.js';
9
+
10
+ let API_BASE = '';
11
+
12
+ export function init(apiBase) {
13
+ API_BASE = apiBase;
14
+ _setupUploadZone();
15
+ }
16
+
17
+ function _humanSize(bytes) {
18
+ if (bytes < 1024) return bytes + ' B';
19
+ if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';
20
+ return (bytes / (1024 * 1024)).toFixed(1) + ' MB';
21
+ }
22
+
23
+ /**
24
+ * Load and display RAG documents with delete buttons
25
+ */
26
+ export async function loadPersonalDocs() {
27
+ const box = document.getElementById('docs-view');
28
+ if (!box) return;
29
+
30
+ box.innerHTML = '';
31
+ const { element: wpEl } = spinnerModule.createWhirlpool(24);
32
+ wpEl.title = 'Loading…';
33
+ box.appendChild(wpEl);
34
+
35
+ try {
36
+ const res = await fetch(`${API_BASE}/api/personal`, { credentials: 'same-origin' });
37
+ const data = await res.json();
38
+ const files = data.files || [];
39
+
40
+ box.innerHTML = '';
41
+
42
+ if (files.length === 0) {
43
+ const placeholder = document.createElement('div');
44
+ placeholder.textContent = 'Drop files above to add to RAG';
45
+ placeholder.style.cssText = 'color:var(--color-muted);font-size:12px;padding:4px 0;';
46
+ box.appendChild(placeholder);
47
+ return;
48
+ }
49
+
50
+ files.forEach(f => {
51
+ const row = document.createElement('div');
52
+ row.className = 'list-item';
53
+ row.style.cssText = 'display:flex;align-items:center;gap:4px;';
54
+
55
+ const name = document.createElement('span');
56
+ name.className = 'grow';
57
+ name.textContent = f.name.split('/').pop();
58
+ name.title = f.path || f.name;
59
+ name.style.cssText = 'overflow:hidden;text-overflow:ellipsis;white-space:nowrap;';
60
+ row.appendChild(name);
61
+
62
+ const size = document.createElement('span');
63
+ size.style.cssText = 'color:var(--color-muted);font-size:11px;flex-shrink:0;';
64
+ size.textContent = _humanSize(f.size);
65
+ row.appendChild(size);
66
+
67
+ const del = document.createElement('button');
68
+ del.className = 'rag-file-delete';
69
+ del.textContent = 'x';
70
+ del.title = 'Remove from RAG';
71
+ del.style.cssText = 'background:none;border:none;color:var(--color-error);cursor:pointer;padding:2px 4px;font-size:12px;flex-shrink:0;';
72
+ del.addEventListener('click', (e) => {
73
+ e.stopPropagation();
74
+ _deleteFile(f.path || f.name, f.name.split('/').pop());
75
+ });
76
+ row.appendChild(del);
77
+
78
+ box.appendChild(row);
79
+ });
80
+ } catch (e) {
81
+ console.error(e);
82
+ box.innerHTML = '';
83
+ const error = document.createElement('div');
84
+ error.textContent = 'Failed to load files';
85
+ error.style.color = 'var(--color-error)';
86
+ box.appendChild(error);
87
+ }
88
+ }
89
+
90
+ async function _deleteFile(filepath, displayName) {
91
+ if (!await uiModule.styledConfirm(`Remove "${displayName}" from RAG?`, { confirmText: 'Remove', danger: true })) return;
92
+ try {
93
+ const res = await fetch(`${API_BASE}/api/personal/file?filepath=${encodeURIComponent(filepath)}`, {
94
+ method: 'DELETE',
95
+ credentials: 'same-origin'
96
+ });
97
+ if (!res.ok) throw new Error(await res.text());
98
+ await loadPersonalDocs();
99
+ } catch (e) {
100
+ console.error('Delete failed:', e);
101
+ alert('Failed to delete file: ' + e.message);
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Upload files to RAG
107
+ */
108
+ export async function uploadRagFiles(fileList) {
109
+ if (!fileList || !fileList.length) return;
110
+
111
+ const zone = document.getElementById('rag-upload-zone');
112
+ if (zone) zone.textContent = 'Uploading…';
113
+
114
+ const fd = new FormData();
115
+ for (const file of fileList) {
116
+ fd.append('files', file);
117
+ }
118
+
119
+ try {
120
+ const res = await fetch(`${API_BASE}/api/personal/upload`, {
121
+ method: 'POST',
122
+ credentials: 'same-origin',
123
+ body: fd
124
+ });
125
+
126
+ if (!res.ok) throw new Error(await res.text());
127
+
128
+ const data = await res.json();
129
+ if (zone) zone.textContent = 'Drop files here or click to upload';
130
+ await loadPersonalDocs();
131
+ return data;
132
+ } catch (e) {
133
+ console.error('Upload failed:', e);
134
+ if (zone) zone.textContent = 'Drop files here or click to upload';
135
+ alert('Upload failed: ' + e.message);
136
+ }
137
+ }
138
+
139
+ function _setupUploadZone() {
140
+ const zone = document.getElementById('rag-upload-zone');
141
+ const input = document.getElementById('rag-file-input');
142
+ if (!zone || !input) return;
143
+
144
+ zone.addEventListener('click', () => input.click());
145
+
146
+ zone.addEventListener('dragover', (e) => {
147
+ e.preventDefault();
148
+ zone.classList.add('dragover');
149
+ });
150
+
151
+ zone.addEventListener('dragleave', () => {
152
+ zone.classList.remove('dragover');
153
+ });
154
+
155
+ zone.addEventListener('drop', (e) => {
156
+ e.preventDefault();
157
+ zone.classList.remove('dragover');
158
+ if (e.dataTransfer.files.length) {
159
+ uploadRagFiles(e.dataTransfer.files);
160
+ }
161
+ });
162
+
163
+ input.addEventListener('change', () => {
164
+ if (input.files.length) {
165
+ uploadRagFiles(input.files);
166
+ input.value = '';
167
+ }
168
+ });
169
+ }
170
+
171
+ const ragModule = {
172
+ init,
173
+ loadPersonalDocs,
174
+ uploadRagFiles
175
+ };
176
+
177
+ export default ragModule;
@@ -0,0 +1,335 @@
1
+ /**
2
+ * Research job queue — add, start, monitor, cancel research jobs.
3
+ */
4
+
5
+ let _jobs = [];
6
+ let _apiBase = '';
7
+ let _renderCb = null;
8
+ let _idCounter = 0;
9
+
10
+ // Dismissed-from-panel IDs persist across reloads so Clear actually sticks.
11
+ // (Items still live on disk and in the Library; this just hides them here.)
12
+ const _DISMISSED_KEY = 'zero-research-dismissed';
13
+ function _loadDismissed() {
14
+ try {
15
+ const raw = localStorage.getItem(_DISMISSED_KEY);
16
+ return new Set(raw ? JSON.parse(raw) : []);
17
+ } catch { return new Set(); }
18
+ }
19
+ function _saveDismissed(set) {
20
+ try { localStorage.setItem(_DISMISSED_KEY, JSON.stringify([...set])); } catch {}
21
+ }
22
+ function _isDismissed(id) { return _loadDismissed().has(id); }
23
+ function _markDismissed(ids) {
24
+ const set = _loadDismissed();
25
+ for (const id of ids) set.add(id);
26
+ _saveDismissed(set);
27
+ }
28
+
29
+ let _activePollInterval = null;
30
+
31
+ export function init(apiBase) {
32
+ _apiBase = apiBase;
33
+ _reconnectActive();
34
+ // Poll for active sessions periodically so research started elsewhere
35
+ // (e.g. by the agent via trigger_research) gets adopted into the
36
+ // sidebar — _reconnectActive only ran once at load before, so
37
+ // agent-started jobs never appeared until a page reload.
38
+ if (_activePollInterval) clearInterval(_activePollInterval);
39
+ _activePollInterval = setInterval(() => { _reconnectActive(); }, 12000);
40
+ }
41
+
42
+ // Allow an immediate adopt when the chat stream signals a new research
43
+ // session (research_started ui_event) — faster than the 12s poll.
44
+ export function adoptSession(sessionId) {
45
+ if (!sessionId || _jobs.some(j => j.id === sessionId)) return;
46
+ _reconnectActive();
47
+ }
48
+
49
+ async function _reconnectActive() {
50
+ try {
51
+ // Reconnect to running tasks
52
+ const res = await fetch(`${_apiBase}/api/research/active`, { credentials: 'same-origin' });
53
+ if (res.ok) {
54
+ const data = await res.json();
55
+ for (const task of (data.active || [])) {
56
+ if (_jobs.some(j => j.id === task.session_id)) continue;
57
+ const job = {
58
+ id: task.session_id, query: task.query, status: 'running',
59
+ progress: task.progress || {},
60
+ startedAt: task.started_at ? task.started_at * 1000 : Date.now(),
61
+ elapsed: task.started_at ? Date.now() - task.started_at * 1000 : 0,
62
+ result: null, sources: null, findings: null,
63
+ errorMsg: null, avgDuration: null, modelName: null,
64
+ settings: {}, _es: null, _timerInterval: null,
65
+ };
66
+ _jobs.push(job);
67
+ _connectStream(job);
68
+ }
69
+ }
70
+
71
+ // Load recent completed research from disk
72
+ const libRes = await fetch(`${_apiBase}/api/research/library?sort=recent&limit=20`, { credentials: 'same-origin' });
73
+ if (libRes.ok) {
74
+ const libData = await libRes.json();
75
+ const dismissed = _loadDismissed();
76
+ for (const item of (libData.research || [])) {
77
+ if (item.status !== 'done') continue;
78
+ if (dismissed.has(item.id)) continue;
79
+ if (_jobs.some(j => j.id === item.id)) continue;
80
+ const elapsed = item.duration ? _parseDuration(item.duration) : 0;
81
+ _jobs.push({
82
+ id: item.id, query: item.query, status: 'done',
83
+ progress: {}, startedAt: (item.started_at || 0) * 1000,
84
+ elapsed, result: null, sources: null, findings: null,
85
+ sourceCount: item.source_count || 0,
86
+ category: item.category || '',
87
+ errorMsg: null, avgDuration: null, modelName: null,
88
+ settings: { max_rounds: item.rounds || 8 },
89
+ _es: null, _timerInterval: null, _fromLibrary: true,
90
+ });
91
+ }
92
+ }
93
+
94
+ _notify();
95
+ } catch {}
96
+ }
97
+
98
+ function _parseDuration(s) {
99
+ if (!s) return 0;
100
+ const m = s.match(/(\d+)/);
101
+ return m ? parseInt(m[1], 10) * 1000 : 0;
102
+ }
103
+ export function setRenderCallback(cb) { _renderCb = cb; }
104
+ export function getJobs() { return _jobs; }
105
+
106
+ export function addToQueue(query, settings) {
107
+ const job = _makeJob(query, settings);
108
+ _jobs.push(job);
109
+ _notify();
110
+ return job;
111
+ }
112
+
113
+ export async function startJob(query, settings) {
114
+ const job = addToQueue(query, settings);
115
+ await _launchJob(job);
116
+ return job;
117
+ }
118
+
119
+ export async function startQueued(jobId) {
120
+ const job = _jobs.find(j => j.id === jobId);
121
+ if (!job || job.status !== 'queued') return;
122
+ await _launchJob(job);
123
+ }
124
+
125
+ export async function startAllQueued() {
126
+ const queued = _jobs.filter(j => j.status === 'queued');
127
+ await Promise.all(queued.map(j => _launchJob(j)));
128
+ }
129
+
130
+ /** Run queued jobs one at a time — waits for each to finish before launching
131
+ * the next. Useful when you want to avoid hammering the same model server. */
132
+ export async function startAllQueuedSequential() {
133
+ const queued = _jobs.filter(j => j.status === 'queued');
134
+ for (const job of queued) {
135
+ await _launchJob(job);
136
+ // Wait until this specific job is no longer running
137
+ await new Promise(resolve => {
138
+ const tick = setInterval(() => {
139
+ if (job.status !== 'running') { clearInterval(tick); resolve(); }
140
+ }, 1000);
141
+ });
142
+ }
143
+ }
144
+
145
+ export async function retryJob(jobId) {
146
+ const job = _jobs.find(j => j.id === jobId);
147
+ if (!job) return;
148
+ job.status = 'queued';
149
+ job.progress = {};
150
+ job.errorMsg = null;
151
+ job.result = null;
152
+ job.sources = null;
153
+ job.findings = null;
154
+ job.elapsed = 0;
155
+ job.avgDuration = null;
156
+ _notify();
157
+ await _launchJob(job);
158
+ }
159
+
160
+ export async function cancelJob(id) {
161
+ const job = _jobs.find(j => j.id === id);
162
+ if (!job) return;
163
+ if (job.status === 'queued') { job.status = 'cancelled'; _notify(); return; }
164
+ try { await fetch(`${_apiBase}/api/research/cancel/${id}`, { method: 'POST', credentials: 'same-origin' }); } catch {}
165
+ _finishJob(job, 'cancelled');
166
+ }
167
+
168
+ export function removeJob(id) {
169
+ const idx = _jobs.findIndex(j => j.id === id);
170
+ if (idx >= 0) {
171
+ const job = _jobs[idx];
172
+ // Persist dismissal so it doesn't reappear from the library on reload.
173
+ if (job.status === 'done') _markDismissed([id]);
174
+ _jobs.splice(idx, 1);
175
+ }
176
+ _notify();
177
+ }
178
+
179
+ export function clearAll() {
180
+ // Mark all completed jobs as dismissed so they don't reappear on reload.
181
+ const doneIds = _jobs.filter(j => j.status === 'done').map(j => j.id);
182
+ if (doneIds.length) _markDismissed(doneIds);
183
+ for (const job of _jobs) {
184
+ if (job._es) { job._es.close(); job._es = null; }
185
+ if (job._timerInterval) { clearInterval(job._timerInterval); job._timerInterval = null; }
186
+ }
187
+ _jobs = [];
188
+ _notify();
189
+ }
190
+
191
+ export function formatElapsed(ms) {
192
+ if (!ms) return '0:00';
193
+ const s = Math.floor(ms / 1000);
194
+ return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;
195
+ }
196
+
197
+ export function formatPhase(progress, maxRounds) {
198
+ if (!progress || !progress.phase) return 'Starting...';
199
+ const p = progress;
200
+ const rn = p.round ? (maxRounds ? `Round ${p.round}/${maxRounds}: ` : `Round ${p.round}: `) : '';
201
+ switch (p.phase) {
202
+ case 'probing': return 'Probing model...';
203
+ case 'planning': return 'Planning research strategy...';
204
+ case 'searching': return `${rn}Searching (${p.queries || 0} queries)`;
205
+ case 'reading': return `${rn}Reading ${p.total_sources || 0} sources`;
206
+ case 'analyzing': return `${rn}Analyzing ${p.total_findings || 0} findings`;
207
+ case 'writing': return `Writing report -- ${p.total_sources || 0} sources`;
208
+ default: return p.phase;
209
+ }
210
+ }
211
+
212
+ function _makeJob(query, settings) {
213
+ return {
214
+ id: `pending-${++_idCounter}`,
215
+ query, settings, status: 'queued',
216
+ progress: {}, startedAt: null, elapsed: 0,
217
+ result: null, sources: null, findings: null,
218
+ category: settings?.category || '',
219
+ errorMsg: null, avgDuration: null,
220
+ modelName: null, endpointName: null,
221
+ _es: null, _timerInterval: null,
222
+ };
223
+ }
224
+
225
+ async function _launchJob(job) {
226
+ const body = { query: job.query, ...job.settings };
227
+ let data;
228
+ try {
229
+ const res = await fetch(`${_apiBase}/api/research/start`, {
230
+ method: 'POST', credentials: 'same-origin',
231
+ headers: { 'Content-Type': 'application/json' },
232
+ body: JSON.stringify(body),
233
+ });
234
+ if (!res.ok) {
235
+ const txt = await res.text();
236
+ try { job.errorMsg = JSON.parse(txt).detail || txt; } catch { job.errorMsg = txt; }
237
+ job.status = 'error';
238
+ _notify();
239
+ return;
240
+ }
241
+ data = await res.json();
242
+ } catch (e) {
243
+ job.errorMsg = e.message;
244
+ job.status = 'error';
245
+ _notify();
246
+ return;
247
+ }
248
+ job.id = data.session_id;
249
+ job.status = 'running';
250
+ job.startedAt = Date.now();
251
+ _connectStream(job);
252
+ _notify();
253
+ }
254
+
255
+ function _connectStream(job) {
256
+ job._timerInterval = setInterval(() => {
257
+ job.elapsed = Date.now() - job.startedAt;
258
+ _notify();
259
+ }, 1000);
260
+
261
+ const es = new EventSource(`${_apiBase}/api/research/stream/${job.id}`);
262
+ job._es = es;
263
+
264
+ es.onmessage = (evt) => {
265
+ try {
266
+ const d = JSON.parse(evt.data);
267
+ if (d.status === 'not_found') { _finishJob(job, 'error'); return; }
268
+ job.progress = d;
269
+ if (d.model && !job.modelName) job.modelName = d.model;
270
+ if (d.final) {
271
+ if (d.error) job.errorMsg = d.error;
272
+ _finishJob(job, d.status === 'done' ? 'done' : d.status === 'cancelled' ? 'cancelled' : 'error');
273
+ if (d.status === 'done') _fetchResult(job);
274
+ return;
275
+ }
276
+ _notify();
277
+ } catch {}
278
+ };
279
+
280
+ es.onerror = () => {
281
+ es.close();
282
+ if (job.status === 'running') setTimeout(() => _pollFallback(job), 3000);
283
+ };
284
+ }
285
+
286
+ async function _pollFallback(job) {
287
+ if (job.status !== 'running') return;
288
+ try {
289
+ const res = await fetch(`${_apiBase}/api/research/status/${job.id}`, { credentials: 'same-origin' });
290
+ if (!res.ok) { _finishJob(job, 'error'); return; }
291
+ const d = await res.json();
292
+ job.progress = d.progress || {};
293
+ if (d.avg_duration) job.avgDuration = d.avg_duration;
294
+ if (d.status !== 'running') {
295
+ _finishJob(job, d.status === 'done' ? 'done' : 'error');
296
+ if (d.status === 'done') _fetchResult(job);
297
+ return;
298
+ }
299
+ setTimeout(() => _pollFallback(job), 2000);
300
+ } catch { _finishJob(job, 'error'); }
301
+ }
302
+
303
+ function _finishJob(job, status) {
304
+ job.status = status;
305
+ if (job._es) { job._es.close(); job._es = null; }
306
+ if (job._timerInterval) { clearInterval(job._timerInterval); job._timerInterval = null; }
307
+ job.elapsed = Date.now() - (job.startedAt || Date.now());
308
+ if (status === 'done') {
309
+ if ('Notification' in window && Notification.permission === 'granted') {
310
+ try { new Notification('Research Complete', { body: job.query.slice(0, 80) }); } catch {}
311
+ }
312
+ if (_onCompleteCb) _onCompleteCb(job);
313
+ }
314
+ _notify();
315
+ }
316
+
317
+ let _onCompleteCb = null;
318
+ export function onComplete(cb) { _onCompleteCb = cb; }
319
+
320
+ async function _fetchResult(job) {
321
+ try {
322
+ const res = await fetch(`${_apiBase}/api/research/result-peek/${job.id}`, {
323
+ method: 'POST', credentials: 'same-origin',
324
+ });
325
+ if (!res.ok) return;
326
+ const d = await res.json();
327
+ job.result = d.result;
328
+ job.sources = d.sources;
329
+ job.findings = d.raw_findings;
330
+ if (d.category && !job.category) job.category = d.category;
331
+ _notify();
332
+ } catch {}
333
+ }
334
+
335
+ function _notify() { if (_renderCb) _renderCb(); }