@axhub/genie 0.1.8 → 0.1.9

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 (397) hide show
  1. package/README.md +1 -1
  2. package/dist/api-docs.html +2 -2
  3. package/dist/assets/App-IUhj6pRQ.js +546 -0
  4. package/dist/assets/App-qxJ8_QYu.css +32 -0
  5. package/dist/assets/ReviewApp-B8aNlXpI.js +1 -0
  6. package/dist/assets/_basePickBy-DF_C8v-X.js +1 -0
  7. package/dist/assets/_baseUniq-Dl8X6bvw.js +1 -0
  8. package/dist/assets/abap-BdImnpbu.js +1 -0
  9. package/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
  10. package/dist/assets/ada-bCR0ucgS.js +1 -0
  11. package/dist/assets/andromeeda-C4gqWexZ.js +1 -0
  12. package/dist/assets/angular-html-CU67Zn6k.js +1 -0
  13. package/dist/assets/angular-ts-BwZT4LLn.js +1 -0
  14. package/dist/assets/apache-Pmp26Uib.js +1 -0
  15. package/dist/assets/apex-D8_7TLub.js +1 -0
  16. package/dist/assets/apl-dKokRX4l.js +1 -0
  17. package/dist/assets/applescript-Co6uUVPk.js +1 -0
  18. package/dist/assets/ara-BRHolxvo.js +1 -0
  19. package/dist/assets/arc-TwO_Ni8v.js +1 -0
  20. package/dist/assets/architectureDiagram-2XIMDMQ5-Dgm9kjQy.js +36 -0
  21. package/dist/assets/asciidoc-Ve4PFQV2.js +1 -0
  22. package/dist/assets/asm-D_Q5rh1f.js +1 -0
  23. package/dist/assets/astro-CbQHKStN.js +1 -0
  24. package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  25. package/dist/assets/awk-DMzUqQB5.js +1 -0
  26. package/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
  27. package/dist/assets/ayu-light-BA47KaF1.js +1 -0
  28. package/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
  29. package/dist/assets/ballerina-BFfxhgS-.js +1 -0
  30. package/dist/assets/bat-BkioyH1T.js +1 -0
  31. package/dist/assets/beancount-k_qm7-4y.js +1 -0
  32. package/dist/assets/berry-uYugtg8r.js +1 -0
  33. package/dist/assets/bibtex-CHM0blh-.js +1 -0
  34. package/dist/assets/bicep-Bmn6On1c.js +1 -0
  35. package/dist/assets/bird2-DPOp833l.js +1 -0
  36. package/dist/assets/blade-D4QpJJKB.js +1 -0
  37. package/dist/assets/blockDiagram-WCTKOSBZ-BhTxXYHE.js +132 -0
  38. package/dist/assets/bsl-BO_Y6i37.js +1 -0
  39. package/dist/assets/c-BIGW1oBm.js +1 -0
  40. package/dist/assets/c3-eo99z4R2.js +1 -0
  41. package/dist/assets/c4Diagram-IC4MRINW-D3xrrPyf.js +10 -0
  42. package/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  43. package/dist/assets/cairo-KRGpt6FW.js +1 -0
  44. package/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  45. package/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  46. package/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  47. package/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  48. package/dist/assets/channel-D6xYGBae.js +1 -0
  49. package/dist/assets/chunk-4BX2VUAB-Fb3wkGSX.js +1 -0
  50. package/dist/assets/chunk-55IACEB6-CQwPJLM_.js +1 -0
  51. package/dist/assets/chunk-FMBD7UC4-B3SocdK3.js +15 -0
  52. package/dist/assets/chunk-JSJVCQXG-4LjhKVWX.js +1 -0
  53. package/dist/assets/chunk-KX2RTZJC-B5NX8jxL.js +1 -0
  54. package/dist/assets/chunk-NQ4KR5QH-6puKzw3k.js +220 -0
  55. package/dist/assets/chunk-QZHKN3VN-CxscPgdC.js +1 -0
  56. package/dist/assets/chunk-WL4C6EOR-uBFUeI3B.js +189 -0
  57. package/dist/assets/clarity-D53aC0YG.js +1 -0
  58. package/dist/assets/classDiagram-VBA2DB6C-CAq2xBD7.js +1 -0
  59. package/dist/assets/classDiagram-v2-RAHNMMFH-CAq2xBD7.js +1 -0
  60. package/dist/assets/clojure-P80f7IUj.js +1 -0
  61. package/dist/assets/clone-Ci5Ji0hp.js +1 -0
  62. package/dist/assets/cmake-D1j8_8rp.js +1 -0
  63. package/dist/assets/cobol-nwyudZeR.js +1 -0
  64. package/dist/assets/codeowners-Bp6g37R7.js +1 -0
  65. package/dist/assets/codeql-DsOJ9woJ.js +1 -0
  66. package/dist/assets/coffee-Ch7k5sss.js +1 -0
  67. package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  68. package/dist/assets/coq-DkFqJrB1.js +1 -0
  69. package/dist/assets/cose-bilkent-S5V4N54A-DlbARPn2.js +1 -0
  70. package/dist/assets/cpp-CofmeUqb.js +1 -0
  71. package/dist/assets/crystal-tKQVLTB8.js +1 -0
  72. package/dist/assets/csharp-COcwbKMJ.js +1 -0
  73. package/dist/assets/css-DPfMkruS.js +1 -0
  74. package/dist/assets/csv-fuZLfV_i.js +1 -0
  75. package/dist/assets/cue-D82EKSYY.js +1 -0
  76. package/dist/assets/cypher-COkxafJQ.js +1 -0
  77. package/dist/assets/cytoscape.esm-2ZfV8NB5.js +331 -0
  78. package/dist/assets/d-85-TOEBH.js +1 -0
  79. package/dist/assets/dagre-KLK3FWXG-D5rHdqja.js +4 -0
  80. package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  81. package/dist/assets/dart-CF10PKvl.js +1 -0
  82. package/dist/assets/dax-CEL-wOlO.js +1 -0
  83. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  84. package/dist/assets/desktop-BmXAJ9_W.js +1 -0
  85. package/dist/assets/diagram-E7M64L7V-1UmM7jTs.js +24 -0
  86. package/dist/assets/diagram-IFDJBPK2-BiB8xLQb.js +43 -0
  87. package/dist/assets/diagram-P4PSJMXO-D0DHiPZv.js +24 -0
  88. package/dist/assets/diff-D97Zzqfu.js +1 -0
  89. package/dist/assets/docker-BcOcwvcX.js +1 -0
  90. package/dist/assets/dotenv-Da5cRb03.js +1 -0
  91. package/dist/assets/dracula-BzJJZx-M.js +1 -0
  92. package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  93. package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  94. package/dist/assets/edge-BkV0erSs.js +1 -0
  95. package/dist/assets/elixir-CDX3lj18.js +1 -0
  96. package/dist/assets/elm-DbKCFpqz.js +1 -0
  97. package/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
  98. package/dist/assets/erDiagram-INFDFZHY-CnRJ2Jix.js +70 -0
  99. package/dist/assets/erb-B12qg9BL.js +1 -0
  100. package/dist/assets/erlang-DsQrWhSR.js +1 -0
  101. package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  102. package/dist/assets/everforest-light-C8M2exoo.js +1 -0
  103. package/dist/assets/fennel-BYunw83y.js +1 -0
  104. package/dist/assets/fish-BvzEVeQv.js +1 -0
  105. package/dist/assets/flowDiagram-PKNHOUZH-CEgo6QRr.js +162 -0
  106. package/dist/assets/fluent-C4IJs8-o.js +1 -0
  107. package/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  108. package/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  109. package/dist/assets/fsharp-CXgrBDvD.js +1 -0
  110. package/dist/assets/ganttDiagram-A5KZAMGK-BIuQLJvD.js +292 -0
  111. package/dist/assets/gdresource-BOOCDP_w.js +1 -0
  112. package/dist/assets/gdscript-C5YyOfLZ.js +1 -0
  113. package/dist/assets/gdshader-DkwncUOv.js +1 -0
  114. package/dist/assets/genie-D0YGMca9.js +1 -0
  115. package/dist/assets/gherkin-DyxjwDmM.js +1 -0
  116. package/dist/assets/git-commit-F4YmCXRG.js +1 -0
  117. package/dist/assets/git-rebase-r7XF79zn.js +1 -0
  118. package/dist/assets/gitGraphDiagram-K3NZZRJ6-BgM4MazK.js +65 -0
  119. package/dist/assets/github-dark-DHJKELXO.js +1 -0
  120. package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  121. package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  122. package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  123. package/dist/assets/github-light-DAi9KRSo.js +1 -0
  124. package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  125. package/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  126. package/dist/assets/gleam-BspZqrRM.js +1 -0
  127. package/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
  128. package/dist/assets/glimmer-ts-U6CK756n.js +1 -0
  129. package/dist/assets/glsl-DplSGwfg.js +1 -0
  130. package/dist/assets/gn-n2N0HUVH.js +1 -0
  131. package/dist/assets/gnuplot-DdkO51Og.js +1 -0
  132. package/dist/assets/go-CxLEBnE3.js +1 -0
  133. package/dist/assets/graph-CAfp4sq_.js +1 -0
  134. package/dist/assets/graphql-ChdNCCLP.js +1 -0
  135. package/dist/assets/groovy-gcz8RCvz.js +1 -0
  136. package/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  137. package/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  138. package/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  139. package/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  140. package/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  141. package/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  142. package/dist/assets/hack-CaT9iCJl.js +1 -0
  143. package/dist/assets/haml-B8DHNrY2.js +1 -0
  144. package/dist/assets/handlebars-BL8al0AC.js +1 -0
  145. package/dist/assets/haskell-Df6bDoY_.js +1 -0
  146. package/dist/assets/haxe-CzTSHFRz.js +1 -0
  147. package/dist/assets/hcl-BWvSN4gD.js +1 -0
  148. package/dist/assets/highlighted-body-TPN3WLV5-qMmmT5JC.js +1 -0
  149. package/dist/assets/hjson-D5-asLiD.js +1 -0
  150. package/dist/assets/hlsl-D3lLCCz7.js +1 -0
  151. package/dist/assets/horizon-BUw7H-hv.js +1 -0
  152. package/dist/assets/horizon-bright-Cn-bp-IR.js +1 -0
  153. package/dist/assets/houston-DnULxvSX.js +1 -0
  154. package/dist/assets/html-GMplVEZG.js +1 -0
  155. package/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
  156. package/dist/assets/http-jrhK8wxY.js +1 -0
  157. package/dist/assets/hurl-irOxFIW8.js +1 -0
  158. package/dist/assets/hxml-Bvhsp5Yf.js +1 -0
  159. package/dist/assets/hy-DFXneXwc.js +1 -0
  160. package/dist/assets/imba-DGztddWO.js +1 -0
  161. package/dist/assets/index-DIJsxqXa.css +1 -0
  162. package/dist/assets/index-DLN_-tVh.js +2 -0
  163. package/dist/assets/infoDiagram-LFFYTUFH-CWSerJ0x.js +2 -0
  164. package/dist/assets/ini-BEwlwnbL.js +1 -0
  165. package/dist/assets/init-Gi6I4Gst.js +1 -0
  166. package/dist/assets/ishikawaDiagram-PHBUUO56-CzeVsiJ6.js +70 -0
  167. package/dist/assets/java-CylS5w8V.js +1 -0
  168. package/dist/assets/javascript-wDzz0qaB.js +1 -0
  169. package/dist/assets/jinja-4LBKfQ-Z.js +1 -0
  170. package/dist/assets/jison-wvAkD_A8.js +1 -0
  171. package/dist/assets/journeyDiagram-4ABVD52K-D_NYt9lf.js +139 -0
  172. package/dist/assets/json-Cp-IABpG.js +1 -0
  173. package/dist/assets/json5-C9tS-k6U.js +1 -0
  174. package/dist/assets/jsonc-Des-eS-w.js +1 -0
  175. package/dist/assets/jsonl-DcaNXYhu.js +1 -0
  176. package/dist/assets/jsonnet-DFQXde-d.js +1 -0
  177. package/dist/assets/jssm-C2t-YnRu.js +1 -0
  178. package/dist/assets/jsx-g9-lgVsj.js +1 -0
  179. package/dist/assets/julia-CxzCAyBv.js +1 -0
  180. package/dist/assets/just-Cw27pwNe.js +1 -0
  181. package/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  182. package/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  183. package/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
  184. package/dist/assets/kanban-definition-K7BYSVSG-CX7AUuup.js +89 -0
  185. package/dist/assets/kdl-DV7GczEv.js +1 -0
  186. package/dist/assets/kotlin-BdnUsdx6.js +1 -0
  187. package/dist/assets/kusto-DZf3V79B.js +1 -0
  188. package/dist/assets/laserwave-DUszq2jm.js +1 -0
  189. package/dist/assets/latex-CWtU0Tv5.js +1 -0
  190. package/dist/assets/layout-DSvVDs_y.js +1 -0
  191. package/dist/assets/lean-BZvkOJ9d.js +1 -0
  192. package/dist/assets/less-B1dDrJ26.js +1 -0
  193. package/dist/assets/light-plus-B7mTdjB0.js +1 -0
  194. package/dist/assets/linear-CVh3kWAl.js +1 -0
  195. package/dist/assets/liquid-DYVedYrR.js +1 -0
  196. package/dist/assets/llvm-DjAJT7YJ.js +1 -0
  197. package/dist/assets/log-2UxHyX5q.js +1 -0
  198. package/dist/assets/logo-BtOb2qkB.js +1 -0
  199. package/dist/assets/lua-BaeVxFsk.js +1 -0
  200. package/dist/assets/luau-C-HG3fhB.js +1 -0
  201. package/dist/assets/make-CHLpvVh8.js +1 -0
  202. package/dist/assets/markdown-Cvjx9yec.js +1 -0
  203. package/dist/assets/marko-CnJfTvn9.js +1 -0
  204. package/dist/assets/material-theme-D5KoaKCx.js +1 -0
  205. package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  206. package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  207. package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  208. package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  209. package/dist/assets/matlab-D7o27uSR.js +1 -0
  210. package/dist/assets/mdc-BMNejdWA.js +1 -0
  211. package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  212. package/dist/assets/mermaid-O7DHMXV3-CrPRD2Zy.js +964 -0
  213. package/dist/assets/mermaid-mWjccvbQ.js +1 -0
  214. package/dist/assets/min-dark-CafNBF8u.js +1 -0
  215. package/dist/assets/min-light-CTRr51gU.js +1 -0
  216. package/dist/assets/mindmap-definition-YRQLILUH-w_orDc4B.js +68 -0
  217. package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  218. package/dist/assets/mojo-rZm6bMo-.js +1 -0
  219. package/dist/assets/monokai-D4h5O-jR.js +1 -0
  220. package/dist/assets/moonbit-_H4v1dQx.js +1 -0
  221. package/dist/assets/move-IF9eRakj.js +1 -0
  222. package/dist/assets/narrat-DRg8JJMk.js +1 -0
  223. package/dist/assets/nextflow-Zz6hmt5N.js +1 -0
  224. package/dist/assets/nextflow-groovy-BeH2EWoN.js +1 -0
  225. package/dist/assets/nginx-BpAMiNFr.js +1 -0
  226. package/dist/assets/night-owl-C39BiMTA.js +1 -0
  227. package/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
  228. package/dist/assets/nim-CVrawwO9.js +1 -0
  229. package/dist/assets/nix-CwoSXNpI.js +1 -0
  230. package/dist/assets/nord-Ddv68eIx.js +1 -0
  231. package/dist/assets/nushell-Cz2AlsmD.js +1 -0
  232. package/dist/assets/objective-c-DXmwc3jG.js +1 -0
  233. package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  234. package/dist/assets/ocaml-C0hk2d4L.js +1 -0
  235. package/dist/assets/odin-BBf5iR-q.js +1 -0
  236. package/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  237. package/dist/assets/one-light-C3Wv6jpd.js +1 -0
  238. package/dist/assets/openscad-C4EeE6gA.js +1 -0
  239. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  240. package/dist/assets/pascal-D93ZcfNL.js +1 -0
  241. package/dist/assets/perl-C0TMdlhV.js +1 -0
  242. package/dist/assets/php-Dhbhpdrm.js +1 -0
  243. package/dist/assets/pieDiagram-SKSYHLDU-Ddit1h2q.js +30 -0
  244. package/dist/assets/pkl-u5AG7uiY.js +1 -0
  245. package/dist/assets/plastic-3e1v2bzS.js +1 -0
  246. package/dist/assets/plsql-ChMvpjG-.js +1 -0
  247. package/dist/assets/po-BTJTHyun.js +1 -0
  248. package/dist/assets/poimandres-CS3Unz2-.js +1 -0
  249. package/dist/assets/polar-C0HS_06l.js +1 -0
  250. package/dist/assets/postcss-CXtECtnM.js +1 -0
  251. package/dist/assets/powerquery-CEu0bR-o.js +1 -0
  252. package/dist/assets/powershell-Dpen1YoG.js +1 -0
  253. package/dist/assets/prisma-Dd19v3D-.js +1 -0
  254. package/dist/assets/prolog-CbFg5uaA.js +1 -0
  255. package/dist/assets/proto-C7zT0LnQ.js +1 -0
  256. package/dist/assets/pug-CGlum2m_.js +1 -0
  257. package/dist/assets/puppet-BMWR74SV.js +1 -0
  258. package/dist/assets/purescript-CklMAg4u.js +1 -0
  259. package/dist/assets/python-B6aJPvgy.js +1 -0
  260. package/dist/assets/qml-3beO22l8.js +1 -0
  261. package/dist/assets/qmldir-C8lEn-DE.js +1 -0
  262. package/dist/assets/qss-IeuSbFQv.js +1 -0
  263. package/dist/assets/quadrantDiagram-337W2JSQ-DVw1s8Ut.js +7 -0
  264. package/dist/assets/r-Dspwwk_N.js +1 -0
  265. package/dist/assets/racket-BqYA7rlc.js +1 -0
  266. package/dist/assets/raku-DXvB9xmW.js +1 -0
  267. package/dist/assets/razor-Uh8Bk_45.js +1 -0
  268. package/dist/assets/red-bN70gL4F.js +1 -0
  269. package/dist/assets/reg-C-SQnVFl.js +1 -0
  270. package/dist/assets/regexp-CDVJQ6XC.js +1 -0
  271. package/dist/assets/rel-C3B-1QV4.js +1 -0
  272. package/dist/assets/requirementDiagram-Z7DCOOCP-DQPZpp_9.js +73 -0
  273. package/dist/assets/riscv-BM1_JUlF.js +1 -0
  274. package/dist/assets/ron-D8l8udqQ.js +1 -0
  275. package/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  276. package/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  277. package/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
  278. package/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  279. package/dist/assets/rst-BrH8l1NY.js +1 -0
  280. package/dist/assets/ruby-Dw2BHqvy.js +1 -0
  281. package/dist/assets/rust-B1yitclQ.js +1 -0
  282. package/dist/assets/sankeyDiagram-WA2Y5GQK-CfbFynOx.js +10 -0
  283. package/dist/assets/sas-cz2c8ADy.js +1 -0
  284. package/dist/assets/sass-Cj5Yp3dK.js +1 -0
  285. package/dist/assets/scala-C151Ov-r.js +1 -0
  286. package/dist/assets/scheme-C98Dy4si.js +1 -0
  287. package/dist/assets/scss-OYdSNvt2.js +1 -0
  288. package/dist/assets/sdbl-DVxCFoDh.js +1 -0
  289. package/dist/assets/sequenceDiagram-2WXFIKYE-BO9n1wra.js +145 -0
  290. package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  291. package/dist/assets/shellscript-Yzrsuije.js +1 -0
  292. package/dist/assets/shellsession-BADoaaVG.js +1 -0
  293. package/dist/assets/slack-dark-BthQWCQV.js +1 -0
  294. package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  295. package/dist/assets/smalltalk-BERRCDM3.js +1 -0
  296. package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  297. package/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
  298. package/dist/assets/solarized-light-L9t79GZl.js +1 -0
  299. package/dist/assets/solidity-rGO070M0.js +1 -0
  300. package/dist/assets/soy-Brmx7dQM.js +1 -0
  301. package/dist/assets/sparql-rVzFXLq3.js +1 -0
  302. package/dist/assets/splunk-BtCnVYZw.js +1 -0
  303. package/dist/assets/sql-BLtJtn59.js +1 -0
  304. package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  305. package/dist/assets/stata-BH5u7GGu.js +1 -0
  306. package/dist/assets/stateDiagram-RAJIS63D-CRL3ceNd.js +1 -0
  307. package/dist/assets/stateDiagram-v2-FVOUBMTO-CZOgjDCg.js +1 -0
  308. package/dist/assets/stylus-BEDo0Tqx.js +1 -0
  309. package/dist/assets/surrealql-Bq5Q-fJD.js +1 -0
  310. package/dist/assets/svelte-C_ipcX3V.js +1 -0
  311. package/dist/assets/swift-D82vCrfD.js +1 -0
  312. package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  313. package/dist/assets/system-verilog-CnnmHF94.js +1 -0
  314. package/dist/assets/systemd-4A_iFExJ.js +1 -0
  315. package/dist/assets/talonscript-CkByrt1z.js +1 -0
  316. package/dist/assets/tasl-QIJgUcNo.js +1 -0
  317. package/dist/assets/tcl-dwOrl1Do.js +1 -0
  318. package/dist/assets/templ-P3uqSqPl.js +1 -0
  319. package/dist/assets/terraform-BETggiCN.js +1 -0
  320. package/dist/assets/tex-idrVyKtj.js +1 -0
  321. package/dist/assets/timeline-definition-YZTLITO2-BR7smGEM.js +61 -0
  322. package/dist/assets/tokyo-night-hegEt444.js +1 -0
  323. package/dist/assets/toml-vGWfd6FD.js +1 -0
  324. package/dist/assets/treemap-KZPCXAKY-DkR8x0Kw.js +162 -0
  325. package/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
  326. package/dist/assets/tsv-B_m7g4N7.js +1 -0
  327. package/dist/assets/tsx-COt5Ahok.js +1 -0
  328. package/dist/assets/turtle-BsS91CYL.js +1 -0
  329. package/dist/assets/twig-DNn4PbVi.js +1 -0
  330. package/dist/assets/typescript-BPQ3VLAy.js +1 -0
  331. package/dist/assets/typespec-BGHnOYBU.js +1 -0
  332. package/dist/assets/typst-DHCkPAjA.js +1 -0
  333. package/dist/assets/v-BcVCzyr7.js +1 -0
  334. package/dist/assets/vala-CsfeWuGM.js +1 -0
  335. package/dist/assets/vb-D17OF-Vu.js +1 -0
  336. package/dist/assets/{vendor-codemirror-B88_OPWf.js → vendor-codemirror-D5if-Qdt.js} +3 -3
  337. package/dist/assets/{vendor-react-C3RJLQGO.js → vendor-react-CSz7XC90.js} +11 -11
  338. package/dist/assets/vennDiagram-LZ73GAT5-DS7XpPV_.js +34 -0
  339. package/dist/assets/verilog-BQ8w6xss.js +1 -0
  340. package/dist/assets/vesper-DU1UobuO.js +1 -0
  341. package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  342. package/dist/assets/viml-CJc9bBzg.js +1 -0
  343. package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  344. package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  345. package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  346. package/dist/assets/vue-DN_0RTcg.js +1 -0
  347. package/dist/assets/vue-html-AaS7Mt5G.js +1 -0
  348. package/dist/assets/vue-vine-CQOfvN7w.js +1 -0
  349. package/dist/assets/vyper-CDx5xZoG.js +1 -0
  350. package/dist/assets/wasm-CG6Dc4jp.js +1 -0
  351. package/dist/assets/wasm-MzD3tlZU.js +1 -0
  352. package/dist/assets/wenyan-BV7otONQ.js +1 -0
  353. package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  354. package/dist/assets/wikitext-BhOHFoWU.js +1 -0
  355. package/dist/assets/wit-5i3qLPDT.js +1 -0
  356. package/dist/assets/wolfram-lXgVvXCa.js +1 -0
  357. package/dist/assets/xml-sdJ4AIDG.js +1 -0
  358. package/dist/assets/xsl-CtQFsRM5.js +1 -0
  359. package/dist/assets/xychartDiagram-JWTSCODW-BgjSBvNS.js +7 -0
  360. package/dist/assets/yaml-Buea-lGh.js +1 -0
  361. package/dist/assets/zenscript-DVFEvuxE.js +1 -0
  362. package/dist/assets/zig-VOosw3JB.js +1 -0
  363. package/dist/index.html +34 -20
  364. package/dist/sw.js +18 -46
  365. package/package.json +10 -7
  366. package/server/bin/codex-sdk-wrapper.js +49 -0
  367. package/server/channels/runtime/AgentRuntimeAdapter.js +2 -5
  368. package/server/channels/store/ChannelStore.js +73 -107
  369. package/server/claude-sdk.js +151 -3
  370. package/server/cli.js +21 -21
  371. package/server/database/db.js +438 -372
  372. package/server/gemini-cli.js +106 -19
  373. package/server/index.js +63 -105
  374. package/server/load-env.js +16 -13
  375. package/server/openai-codex.js +144 -9
  376. package/server/projects.js +340 -331
  377. package/server/routes/agent.js +424 -29
  378. package/server/routes/auth.js +14 -36
  379. package/server/routes/cli-auth.js +60 -113
  380. package/server/routes/commands.js +16 -26
  381. package/server/routes/git.js +5 -16
  382. package/server/routes/projects.js +2 -7
  383. package/server/routes/session-core.js +177 -0
  384. package/server/session-core/abortSession.js +48 -0
  385. package/server/session-core/eventStore.js +139 -0
  386. package/server/session-core/providerAdapters.js +84 -0
  387. package/server/session-core/providerDiscovery.js +235 -0
  388. package/server/session-core/runtimeWriter.js +55 -0
  389. package/server/utils/agentCallback.js +273 -0
  390. package/server/utils/codexPath.js +47 -0
  391. package/shared/conversationEvents.js +1031 -0
  392. package/shared/modelConstants.js +18 -24
  393. package/dist/assets/index-CVjMty4a.js +0 -902
  394. package/dist/assets/index-eo5scY_Z.css +0 -32
  395. package/server/cursor-cli.js +0 -276
  396. package/server/database/init.sql +0 -98
  397. package/server/routes/cursor.js +0 -795
@@ -1,6 +1,4 @@
1
- import crypto from 'crypto';
2
-
3
- import { db } from '../../database/db.js';
1
+ import { channelDb } from '../../database/db.js';
4
2
 
5
3
  const DEFAULT_CONFIGS = {
6
4
  lark: {
@@ -52,21 +50,32 @@ function getDefaultConfig(platform) {
52
50
  return { ...(DEFAULT_CONFIGS[normalizePlatform(platform)] || DEFAULT_CONFIGS.lark) };
53
51
  }
54
52
 
55
- function parseConfig(value, platform) {
56
- const defaults = getDefaultConfig(platform);
57
- if (!value) {
58
- return defaults;
59
- }
53
+ function mapAllowedUser(entry) {
54
+ if (!entry) return null;
55
+ return {
56
+ id: entry.id,
57
+ platformType: entry.platform_type,
58
+ userId: entry.user_id,
59
+ displayName: entry.display_name,
60
+ note: entry.note,
61
+ isActive: entry.is_active,
62
+ createdAt: entry.created_at,
63
+ updatedAt: entry.updated_at,
64
+ };
65
+ }
60
66
 
61
- try {
62
- const parsed = JSON.parse(value);
63
- return {
64
- ...defaults,
65
- ...(parsed || {}),
66
- };
67
- } catch {
68
- return defaults;
69
- }
67
+ function mapChannelSession(entry) {
68
+ if (!entry) return null;
69
+ return {
70
+ id: entry.id,
71
+ platformType: entry.platform_type,
72
+ userId: entry.user_id,
73
+ chatId: entry.chat_id,
74
+ backend: entry.backend,
75
+ providerSessionId: entry.provider_session_id,
76
+ projectPath: entry.project_path,
77
+ updatedAt: entry.updated_at,
78
+ };
70
79
  }
71
80
 
72
81
  export class ChannelStore {
@@ -79,14 +88,14 @@ export class ChannelStore {
79
88
  }
80
89
 
81
90
  getPluginConfig(pluginId = 'lark_default') {
82
- const row = db.prepare('SELECT * FROM channel_plugins WHERE id = ?').get(pluginId);
91
+ const row = channelDb.getPlugin(pluginId);
83
92
  const platform = resolvePlatformByPluginId(pluginId);
84
93
 
85
94
  if (!row) {
86
95
  return {
87
96
  id: pluginId,
88
97
  type: platform,
89
- enabled: 0,
98
+ enabled: false,
90
99
  status: 'stopped',
91
100
  config: getDefaultConfig(platform),
92
101
  };
@@ -95,9 +104,12 @@ export class ChannelStore {
95
104
  return {
96
105
  id: row.id,
97
106
  type: row.type || platform,
98
- enabled: row.enabled,
107
+ enabled: !!row.enabled,
99
108
  status: row.status,
100
- config: parseConfig(row.config_json, row.type || platform),
109
+ config: {
110
+ ...getDefaultConfig(row.type || platform),
111
+ ...(row.config || {}),
112
+ },
101
113
  updatedAt: row.updated_at,
102
114
  };
103
115
  }
@@ -105,30 +117,18 @@ export class ChannelStore {
105
117
  upsertPluginConfig(pluginId = 'lark_default', patch = {}) {
106
118
  const existing = this.getPluginConfig(pluginId);
107
119
  const type = resolvePlatformByPluginId(pluginId);
108
- const nextConfig = {
109
- ...existing.config,
110
- ...patch,
111
- };
112
120
 
113
- const updatedAt = now();
114
-
115
- db.prepare(`
116
- INSERT INTO channel_plugins (id, type, enabled, status, config_json, updated_at)
117
- VALUES (?, ?, ?, ?, ?, ?)
118
- ON CONFLICT(id) DO UPDATE SET
119
- type = excluded.type,
120
- enabled = excluded.enabled,
121
- status = excluded.status,
122
- config_json = excluded.config_json,
123
- updated_at = excluded.updated_at
124
- `).run(
125
- pluginId,
121
+ channelDb.upsertPlugin({
122
+ id: pluginId,
126
123
  type,
127
- existing.enabled || 0,
128
- existing.status || 'stopped',
129
- JSON.stringify(nextConfig),
130
- updatedAt
131
- );
124
+ enabled: !!existing.enabled,
125
+ status: existing.status || 'stopped',
126
+ config: {
127
+ ...existing.config,
128
+ ...patch,
129
+ },
130
+ updated_at: now(),
131
+ });
132
132
 
133
133
  return this.getPluginConfig(pluginId);
134
134
  }
@@ -136,35 +136,21 @@ export class ChannelStore {
136
136
  updatePluginRuntimeStatus(pluginId = 'lark_default', enabled, status) {
137
137
  const existing = this.getPluginConfig(pluginId);
138
138
  const type = resolvePlatformByPluginId(pluginId);
139
- const updatedAt = now();
140
-
141
- db.prepare(`
142
- INSERT INTO channel_plugins (id, type, enabled, status, config_json, updated_at)
143
- VALUES (?, ?, ?, ?, ?, ?)
144
- ON CONFLICT(id) DO UPDATE SET
145
- enabled = excluded.enabled,
146
- status = excluded.status,
147
- updated_at = excluded.updated_at
148
- `).run(
149
- pluginId,
139
+
140
+ channelDb.upsertPlugin({
141
+ id: pluginId,
150
142
  type,
151
- enabled ? 1 : 0,
143
+ enabled: !!enabled,
152
144
  status,
153
- JSON.stringify(existing.config),
154
- updatedAt
155
- );
145
+ config: existing.config,
146
+ updated_at: now(),
147
+ });
156
148
 
157
149
  return this.getPluginConfig(pluginId);
158
150
  }
159
151
 
160
152
  listAllowedUsers(platform = 'lark') {
161
- const normalizedPlatform = normalizePlatform(platform);
162
- return db.prepare(`
163
- SELECT id, platform_type AS platformType, user_id AS userId, display_name AS displayName, note, is_active AS isActive, created_at AS createdAt, updated_at AS updatedAt
164
- FROM channel_allowed_users
165
- WHERE platform_type = ?
166
- ORDER BY created_at DESC
167
- `).all(normalizedPlatform);
153
+ return channelDb.listAllowedUsers(normalizePlatform(platform)).map(mapAllowedUser);
168
154
  }
169
155
 
170
156
  addAllowedUser(platform = 'lark', { userId, displayName = null, note = null }) {
@@ -174,63 +160,43 @@ export class ChannelStore {
174
160
  throw new Error('userId is required');
175
161
  }
176
162
 
177
- const current = now();
178
-
179
- db.prepare(`
180
- INSERT INTO channel_allowed_users (platform_type, user_id, display_name, note, is_active, created_at, updated_at)
181
- VALUES (?, ?, ?, ?, 1, ?, ?)
182
- `).run(normalizedPlatform, trimmedUserId, displayName ? String(displayName).trim() : null, note ? String(note).trim() : null, current, current);
183
-
184
- return db.prepare(`
185
- SELECT id, platform_type AS platformType, user_id AS userId, display_name AS displayName, note, is_active AS isActive, created_at AS createdAt, updated_at AS updatedAt
186
- FROM channel_allowed_users
187
- WHERE platform_type = ? AND user_id = ?
188
- `).get(normalizedPlatform, trimmedUserId);
163
+ return mapAllowedUser(channelDb.addAllowedUser(normalizedPlatform, {
164
+ userId: trimmedUserId,
165
+ displayName: displayName ? String(displayName).trim() : null,
166
+ note: note ? String(note).trim() : null,
167
+ }));
189
168
  }
190
169
 
191
170
  removeAllowedUser(platform = 'lark', id) {
192
- const normalizedPlatform = normalizePlatform(platform);
193
- const result = db.prepare('DELETE FROM channel_allowed_users WHERE platform_type = ? AND id = ?').run(normalizedPlatform, id);
194
- return result.changes > 0;
171
+ return channelDb.removeAllowedUser(normalizePlatform(platform), id);
195
172
  }
196
173
 
197
174
  toggleAllowedUser(platform = 'lark', id, isActive) {
198
- const normalizedPlatform = normalizePlatform(platform);
199
- const result = db.prepare('UPDATE channel_allowed_users SET is_active = ?, updated_at = ? WHERE platform_type = ? AND id = ?').run(isActive ? 1 : 0, now(), normalizedPlatform, id);
200
- return result.changes > 0;
175
+ return channelDb.toggleAllowedUser(normalizePlatform(platform), id, isActive);
201
176
  }
202
177
 
203
178
  isAllowedUser(platform = 'lark', userId) {
204
- const normalizedPlatform = normalizePlatform(platform);
205
179
  if (!userId) return false;
206
- const row = db.prepare('SELECT id FROM channel_allowed_users WHERE platform_type = ? AND user_id = ? AND is_active = 1').get(normalizedPlatform, String(userId));
207
- return !!row;
180
+ return channelDb.isAllowedUser(normalizePlatform(platform), String(userId));
208
181
  }
209
182
 
210
183
  getChannelSession({ platform = 'lark', userId, chatId, backend }) {
211
- const normalizedPlatform = normalizePlatform(platform);
212
- return db.prepare(`
213
- SELECT id, platform_type AS platformType, user_id AS userId, chat_id AS chatId, backend, provider_session_id AS providerSessionId, project_path AS projectPath, updated_at AS updatedAt
214
- FROM channel_sessions
215
- WHERE platform_type = ? AND user_id = ? AND chat_id = ? AND backend = ?
216
- LIMIT 1
217
- `).get(normalizedPlatform, userId, chatId, backend) || null;
184
+ return mapChannelSession(channelDb.getChannelSession({
185
+ platform: normalizePlatform(platform),
186
+ userId,
187
+ chatId,
188
+ backend,
189
+ }));
218
190
  }
219
191
 
220
192
  upsertChannelSession({ platform = 'lark', userId, chatId, backend, providerSessionId, projectPath }) {
221
- const normalizedPlatform = normalizePlatform(platform);
222
- const id = crypto.randomUUID();
223
- const updatedAt = now();
224
-
225
- db.prepare(`
226
- INSERT INTO channel_sessions (id, platform_type, user_id, chat_id, backend, provider_session_id, project_path, updated_at)
227
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
228
- ON CONFLICT(platform_type, user_id, chat_id, backend) DO UPDATE SET
229
- provider_session_id = excluded.provider_session_id,
230
- project_path = excluded.project_path,
231
- updated_at = excluded.updated_at
232
- `).run(id, normalizedPlatform, userId, chatId, backend, providerSessionId || null, projectPath || null, updatedAt);
233
-
234
- return this.getChannelSession({ platform: normalizedPlatform, userId, chatId, backend });
193
+ return mapChannelSession(channelDb.upsertChannelSession({
194
+ platform: normalizePlatform(platform),
195
+ userId,
196
+ chatId,
197
+ backend,
198
+ providerSessionId,
199
+ projectPath,
200
+ }));
235
201
  }
236
202
  }
@@ -32,6 +32,8 @@ const pendingToolApprovals = new Map();
32
32
  // This does not change SDK limits; it only defines how long we wait for the UI,
33
33
  // introduced to avoid hanging the run when no decision arrives.
34
34
  const TOOL_APPROVAL_TIMEOUT_MS = parseInt(process.env.CLAUDE_TOOL_APPROVAL_TIMEOUT_MS, 10) || 55000;
35
+ const CLAUDE_STREAM_START_TIMEOUT_MS = parseInt(process.env.CLAUDE_STREAM_START_TIMEOUT_MS, 10) || 20000;
36
+ const CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS = parseInt(process.env.CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS, 10) || 45000;
35
37
 
36
38
  // Generate a stable request ID for UI approval flows.
37
39
  // This does not encode tool details or get shown to users; it exists so the UI
@@ -273,6 +275,48 @@ function transformMessage(sdkMessage) {
273
275
  return sdkMessage;
274
276
  }
275
277
 
278
+ function messageHasMeaningfulClaudeOutput(message) {
279
+ if (!message || typeof message !== 'object') {
280
+ return false;
281
+ }
282
+
283
+ if (message.type === 'system' && message.subtype === 'init') {
284
+ return false;
285
+ }
286
+
287
+ if (message.type === 'content_block_delta') {
288
+ return typeof message.delta?.text === 'string' && message.delta.text.trim().length > 0;
289
+ }
290
+
291
+ if (message.type === 'thinking') {
292
+ return typeof message.message?.content === 'string' && message.message.content.trim().length > 0;
293
+ }
294
+
295
+ if (message.type === 'tool_use' || message.type === 'tool_result') {
296
+ return true;
297
+ }
298
+
299
+ const contentParts = Array.isArray(message.content)
300
+ ? message.content
301
+ : Array.isArray(message.message?.content)
302
+ ? message.message.content
303
+ : null;
304
+
305
+ if (contentParts) {
306
+ return contentParts.some((part) => (
307
+ (part?.type === 'text' && typeof part.text === 'string' && part.text.trim().length > 0) ||
308
+ part?.type === 'tool_use' ||
309
+ part?.type === 'tool_result'
310
+ ));
311
+ }
312
+
313
+ if (typeof message.content === 'string' && message.content.trim().length > 0) {
314
+ return true;
315
+ }
316
+
317
+ return false;
318
+ }
319
+
276
320
  /**
277
321
  * Extracts token usage from SDK result messages
278
322
  * @param {Object} resultMessage - SDK result message
@@ -473,6 +517,75 @@ async function queryClaudeSDK(command, options = {}, ws) {
473
517
  let sessionCreatedSent = false;
474
518
  let tempImagePaths = [];
475
519
  let tempDir = null;
520
+ let queryInstance = null;
521
+ let startupTimeoutId = null;
522
+ let meaningfulOutputTimeoutId = null;
523
+ let timeoutTriggered = false;
524
+ let timeoutErrorMessage = null;
525
+
526
+ const clearStartupTimeout = () => {
527
+ if (startupTimeoutId) {
528
+ clearTimeout(startupTimeoutId);
529
+ startupTimeoutId = null;
530
+ }
531
+ };
532
+
533
+ const clearMeaningfulOutputTimeout = () => {
534
+ if (meaningfulOutputTimeoutId) {
535
+ clearTimeout(meaningfulOutputTimeoutId);
536
+ meaningfulOutputTimeoutId = null;
537
+ }
538
+ };
539
+
540
+ const interruptTimedOutQuery = () => {
541
+ if (!queryInstance || typeof queryInstance.interrupt !== 'function') {
542
+ return;
543
+ }
544
+
545
+ Promise.resolve(queryInstance.interrupt()).catch((interruptError) => {
546
+ console.warn('Failed to interrupt Claude SDK query after timeout:', interruptError);
547
+ });
548
+ };
549
+
550
+ const triggerStreamTimeout = (message) => {
551
+ if (timeoutTriggered) {
552
+ return;
553
+ }
554
+
555
+ timeoutTriggered = true;
556
+ timeoutErrorMessage = message;
557
+ interruptTimedOutQuery();
558
+ };
559
+
560
+ const armStartupTimeout = () => {
561
+ clearStartupTimeout();
562
+
563
+ if (!Number.isFinite(CLAUDE_STREAM_START_TIMEOUT_MS) || CLAUDE_STREAM_START_TIMEOUT_MS <= 0) {
564
+ return;
565
+ }
566
+
567
+ startupTimeoutId = setTimeout(() => {
568
+ triggerStreamTimeout(
569
+ `Claude did not produce any stream events within ${Math.round(CLAUDE_STREAM_START_TIMEOUT_MS / 1000)} seconds. ` +
570
+ 'This usually means the Claude client or upstream service is unavailable.'
571
+ );
572
+ }, CLAUDE_STREAM_START_TIMEOUT_MS);
573
+ };
574
+
575
+ const armMeaningfulOutputTimeout = () => {
576
+ clearMeaningfulOutputTimeout();
577
+
578
+ if (!Number.isFinite(CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS) || CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS <= 0) {
579
+ return;
580
+ }
581
+
582
+ meaningfulOutputTimeoutId = setTimeout(() => {
583
+ triggerStreamTimeout(
584
+ `Claude did not produce any assistant output within ${Math.round(CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS / 1000)} seconds. ` +
585
+ 'The upstream Claude service may be unavailable or stuck before the first response.'
586
+ );
587
+ }, CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS);
588
+ };
476
589
 
477
590
  try {
478
591
  // Map CLI options to SDK format
@@ -554,14 +667,29 @@ async function queryClaudeSDK(command, options = {}, ws) {
554
667
  sdkOptions.disallowedTools = sdkOptions.disallowedTools.filter(entry => entry !== decision.rememberEntry);
555
668
  }
556
669
  }
670
+ ws.send({
671
+ type: 'claude-permission-resolved',
672
+ requestId,
673
+ status: 'approved',
674
+ toolName,
675
+ sessionId: capturedSessionId || sessionId || null
676
+ });
557
677
  return { behavior: 'allow', updatedInput: decision.updatedInput ?? input };
558
678
  }
559
679
 
680
+ ws.send({
681
+ type: 'claude-permission-resolved',
682
+ requestId,
683
+ status: 'denied',
684
+ toolName,
685
+ message: decision.message ?? 'User denied tool use',
686
+ sessionId: capturedSessionId || sessionId || null
687
+ });
560
688
  return { behavior: 'deny', message: decision.message ?? 'User denied tool use' };
561
689
  };
562
690
 
563
691
  // Create SDK query instance
564
- const queryInstance = query({
692
+ queryInstance = query({
565
693
  prompt: finalCommand,
566
694
  options: sdkOptions
567
695
  });
@@ -573,7 +701,11 @@ async function queryClaudeSDK(command, options = {}, ws) {
573
701
 
574
702
  // Process streaming messages
575
703
  console.log('Starting async generator loop for session:', capturedSessionId || 'NEW');
704
+ armStartupTimeout();
705
+ armMeaningfulOutputTimeout();
576
706
  for await (const message of queryInstance) {
707
+ clearStartupTimeout();
708
+
577
709
  // Capture session ID from first message
578
710
  if (message.session_id && !capturedSessionId) {
579
711
 
@@ -590,7 +722,8 @@ async function queryClaudeSDK(command, options = {}, ws) {
590
722
  sessionCreatedSent = true;
591
723
  ws.send({
592
724
  type: 'session-created',
593
- sessionId: capturedSessionId
725
+ sessionId: capturedSessionId,
726
+ provider: 'claude'
594
727
  });
595
728
  } else {
596
729
  console.log('Not sending session-created. sessionId:', sessionId, 'sessionCreatedSent:', sessionCreatedSent);
@@ -604,9 +737,14 @@ async function queryClaudeSDK(command, options = {}, ws) {
604
737
  ws.send({
605
738
  type: 'claude-response',
606
739
  data: transformedMessage,
740
+ provider: 'claude',
607
741
  sessionId: capturedSessionId || sessionId || null
608
742
  });
609
743
 
744
+ if (messageHasMeaningfulClaudeOutput(message)) {
745
+ clearMeaningfulOutputTimeout();
746
+ }
747
+
610
748
  // Extract and send token budget updates from result messages
611
749
  if (message.type === 'result') {
612
750
  const tokenBudget = extractTokenBudget(message);
@@ -615,12 +753,17 @@ async function queryClaudeSDK(command, options = {}, ws) {
615
753
  ws.send({
616
754
  type: 'token-budget',
617
755
  data: tokenBudget,
756
+ provider: 'claude',
618
757
  sessionId: capturedSessionId || sessionId || null
619
758
  });
620
759
  }
621
760
  }
622
761
  }
623
762
 
763
+ if (timeoutTriggered) {
764
+ throw new Error(timeoutErrorMessage);
765
+ }
766
+
624
767
  // Clean up session on completion
625
768
  if (capturedSessionId) {
626
769
  removeSession(capturedSessionId);
@@ -633,6 +776,7 @@ async function queryClaudeSDK(command, options = {}, ws) {
633
776
  console.log('Streaming complete, sending claude-complete event');
634
777
  ws.send({
635
778
  type: 'claude-complete',
779
+ provider: 'claude',
636
780
  sessionId: capturedSessionId,
637
781
  exitCode: 0,
638
782
  isNewSession: !sessionId && !!command
@@ -653,11 +797,15 @@ async function queryClaudeSDK(command, options = {}, ws) {
653
797
  // Send error to WebSocket
654
798
  ws.send({
655
799
  type: 'claude-error',
656
- error: error.message,
800
+ error: timeoutErrorMessage || error.message,
801
+ provider: 'claude',
657
802
  sessionId: capturedSessionId || sessionId || null
658
803
  });
659
804
 
660
805
  throw error;
806
+ } finally {
807
+ clearStartupTimeout();
808
+ clearMeaningfulOutputTimeout();
661
809
  }
662
810
  }
663
811
 
package/server/cli.js CHANGED
@@ -72,10 +72,10 @@ function loadEnvFile() {
72
72
  }
73
73
  }
74
74
 
75
- // Get the database path (same logic as db.js)
76
- function getDatabasePath() {
75
+ // Get the data file path (same logic as db.js)
76
+ function getDataFilePath() {
77
77
  loadEnvFile();
78
- return process.env.DATABASE_PATH || path.join(__dirname, 'database', 'auth.db');
78
+ return process.env.DATA_FILE_PATH || path.join(__dirname, 'database', 'state.json');
79
79
  }
80
80
 
81
81
  // Get the installation directory
@@ -253,15 +253,15 @@ function showStatus(options = {}) {
253
253
  console.log(`\n${c.info('[INFO]')} Installation Directory:`);
254
254
  console.log(` ${c.dim(installDir)}`);
255
255
 
256
- // Database location
257
- const dbPath = getDatabasePath();
258
- const dbExists = fs.existsSync(dbPath);
259
- console.log(`\n${c.info('[INFO]')} Database Location:`);
260
- console.log(` ${c.dim(dbPath)}`);
261
- console.log(` Status: ${dbExists ? c.ok('[OK] Exists') : c.warn('[WARN] Not created yet (will be created on first run)')}`);
256
+ // Data file location
257
+ const dataFilePath = getDataFilePath();
258
+ const dataFileExists = fs.existsSync(dataFilePath);
259
+ console.log(`\n${c.info('[INFO]')} Data File Location:`);
260
+ console.log(` ${c.dim(dataFilePath)}`);
261
+ console.log(` Status: ${dataFileExists ? c.ok('[OK] Exists') : c.warn('[WARN] Not created yet (will be created on first run)')}`);
262
262
 
263
- if (dbExists) {
264
- const stats = fs.statSync(dbPath);
263
+ if (dataFileExists) {
264
+ const stats = fs.statSync(dataFilePath);
265
265
  console.log(` Size: ${c.dim((stats.size / 1024).toFixed(2) + ' KB')}`);
266
266
  console.log(` Modified: ${c.dim(stats.mtime.toLocaleString())}`);
267
267
  }
@@ -295,7 +295,7 @@ function showStatus(options = {}) {
295
295
  // Environment variables
296
296
  console.log(`\n${c.info('[INFO]')} Configuration:`);
297
297
  console.log(` PORT: ${c.bright(configuredPort)} ${c.dim(process.env.PORT ? '' : '(default)')}`);
298
- console.log(` DATABASE_PATH: ${c.dim(process.env.DATABASE_PATH || '(using default location)')}`);
298
+ console.log(` DATA_FILE_PATH: ${c.dim(process.env.DATA_FILE_PATH || '(using default location)')}`);
299
299
  console.log(` CLAUDE_CLI_PATH: ${c.dim(process.env.CLAUDE_CLI_PATH || 'claude (default)')}`);
300
300
  console.log(` CONTEXT_WINDOW: ${c.dim(process.env.CONTEXT_WINDOW || '160000 (default)')}`);
301
301
 
@@ -316,7 +316,7 @@ function showStatus(options = {}) {
316
316
  console.log('\n' + c.dim('═'.repeat(60)));
317
317
  console.log(`\n${c.tip('[TIP]')} Hints:`);
318
318
  console.log(` ${c.dim('>')} Use ${c.bright('axhub-genie --port 8080')} to run on a custom port`);
319
- console.log(` ${c.dim('>')} Use ${c.bright('axhub-genie --database-path /path/to/db')} for custom database`);
319
+ console.log(` ${c.dim('>')} Use ${c.bright('axhub-genie --data-file-path /path/to/state.json')} for custom data file`);
320
320
  console.log(` ${c.dim('>')} Run ${c.bright('axhub-genie help')} for all options`);
321
321
  console.log(` ${c.dim('>')} Access the UI at http://localhost:${displayPort}\n`);
322
322
  }
@@ -341,7 +341,7 @@ Commands:
341
341
 
342
342
  Options:
343
343
  -p, --port <port> Set server port (default: 32123)
344
- --database-path <path> Set custom database location
344
+ --data-file-path <path> Set custom data file location
345
345
  --json Output status as JSON (for scripts)
346
346
  -h, --help Show this help information
347
347
  -v, --version Show version information
@@ -357,7 +357,7 @@ Examples:
357
357
 
358
358
  Environment Variables:
359
359
  PORT Set server port (default: 32123)
360
- DATABASE_PATH Set custom database location
360
+ DATA_FILE_PATH Set custom data file location
361
361
  CLAUDE_CLI_PATH Set custom Claude CLI path
362
362
  CONTEXT_WINDOW Set context window size (default: 160000)
363
363
  AXHUB_GENIE_STATUS_PATH Set runtime status file path
@@ -453,10 +453,10 @@ function parseArgs(args) {
453
453
  parsed.options.port = args[++i];
454
454
  } else if (arg.startsWith('--port=')) {
455
455
  parsed.options.port = arg.split('=')[1];
456
- } else if (arg === '--database-path') {
457
- parsed.options.databasePath = args[++i];
458
- } else if (arg.startsWith('--database-path=')) {
459
- parsed.options.databasePath = arg.split('=')[1];
456
+ } else if (arg === '--data-file-path') {
457
+ parsed.options.dataFilePath = args[++i];
458
+ } else if (arg.startsWith('--data-file-path=')) {
459
+ parsed.options.dataFilePath = arg.split('=')[1];
460
460
  } else if (arg === '--json') {
461
461
  parsed.options.json = true;
462
462
  } else if (arg === '--help' || arg === '-h') {
@@ -482,8 +482,8 @@ async function main() {
482
482
  if (options.port) {
483
483
  process.env.PORT = options.port;
484
484
  }
485
- if (options.databasePath) {
486
- process.env.DATABASE_PATH = options.databasePath;
485
+ if (options.dataFilePath) {
486
+ process.env.DATA_FILE_PATH = options.dataFilePath;
487
487
  }
488
488
 
489
489
  switch (command) {