@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
@@ -0,0 +1,1031 @@
1
+ export const SUPPORTED_PROVIDERS = ['claude', 'codex', 'gemini', 'opencode'];
2
+
3
+ export const SESSION_STATES = [
4
+ 'discovering_history',
5
+ 'hydrating',
6
+ 'idle',
7
+ 'streaming',
8
+ 'awaiting_approval',
9
+ 'completed',
10
+ 'aborted',
11
+ 'errored'
12
+ ];
13
+
14
+ export const CONVERSATION_EVENT_KINDS = {
15
+ USER_MESSAGE: 'user_message',
16
+ ASSISTANT_TEXT_START: 'assistant_text_start',
17
+ ASSISTANT_TEXT_DELTA: 'assistant_text_delta',
18
+ ASSISTANT_TEXT_END: 'assistant_text_end',
19
+ REASONING_START: 'reasoning_start',
20
+ REASONING_DELTA: 'reasoning_delta',
21
+ REASONING_END: 'reasoning_end',
22
+ TOOL_CALL_START: 'tool_call_start',
23
+ TOOL_CALL_INPUT: 'tool_call_input',
24
+ TOOL_CALL_END: 'tool_call_end',
25
+ TOOL_RESULT: 'tool_result',
26
+ APPROVAL_REQUEST: 'approval_request',
27
+ APPROVAL_RESOLVED: 'approval_resolved',
28
+ ARTIFACT_CREATED: 'artifact_created',
29
+ SESSION_STATE_CHANGED: 'session_state_changed',
30
+ SYSTEM_NOTICE: 'system_notice',
31
+ ERROR: 'error'
32
+ };
33
+
34
+ function createEventId(prefix = 'evt') {
35
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
36
+ return `${prefix}:${crypto.randomUUID()}`;
37
+ }
38
+ return `${prefix}:${Date.now()}:${Math.random().toString(36).slice(2, 10)}`;
39
+ }
40
+
41
+ function normalizeTimestamp(timestamp) {
42
+ if (!timestamp) return new Date().toISOString();
43
+ if (timestamp instanceof Date) return timestamp.toISOString();
44
+ const parsed = new Date(timestamp);
45
+ if (Number.isNaN(parsed.getTime())) return new Date().toISOString();
46
+ return parsed.toISOString();
47
+ }
48
+
49
+ export function createConversationEvent({
50
+ kind,
51
+ provider = 'claude',
52
+ sessionId = null,
53
+ timestamp,
54
+ payload = {},
55
+ extensions = {},
56
+ rawRef = null,
57
+ eventId = null
58
+ }) {
59
+ return {
60
+ eventId: eventId || createEventId(kind),
61
+ kind,
62
+ provider,
63
+ sessionId,
64
+ timestamp: normalizeTimestamp(timestamp),
65
+ payload,
66
+ extensions,
67
+ rawRef
68
+ };
69
+ }
70
+
71
+ export function isConversationEvent(value) {
72
+ return !!(
73
+ value &&
74
+ typeof value === 'object' &&
75
+ typeof value.kind === 'string' &&
76
+ typeof value.eventId === 'string'
77
+ );
78
+ }
79
+
80
+ export function createTextSpanEvents({
81
+ kindPrefix = 'assistant_text',
82
+ text,
83
+ provider,
84
+ sessionId,
85
+ timestamp,
86
+ messageId,
87
+ extensions = {},
88
+ rawRef = null
89
+ }) {
90
+ if (typeof text !== 'string' || !text.trim()) return [];
91
+ const id = messageId || createEventId(kindPrefix);
92
+ const normalizedExtensions = { ...extensions, messageId: id };
93
+
94
+ return [
95
+ createConversationEvent({
96
+ kind: `${kindPrefix}_start`,
97
+ provider,
98
+ sessionId,
99
+ timestamp,
100
+ payload: { messageId: id },
101
+ extensions: normalizedExtensions,
102
+ rawRef
103
+ }),
104
+ createConversationEvent({
105
+ kind: `${kindPrefix}_delta`,
106
+ provider,
107
+ sessionId,
108
+ timestamp,
109
+ payload: { messageId: id, text },
110
+ extensions: normalizedExtensions,
111
+ rawRef
112
+ }),
113
+ createConversationEvent({
114
+ kind: `${kindPrefix}_end`,
115
+ provider,
116
+ sessionId,
117
+ timestamp,
118
+ payload: { messageId: id },
119
+ extensions: normalizedExtensions,
120
+ rawRef
121
+ })
122
+ ];
123
+ }
124
+
125
+ function createTextDeltaEvents({
126
+ kindPrefix = 'assistant_text',
127
+ text,
128
+ provider,
129
+ sessionId,
130
+ timestamp,
131
+ messageId,
132
+ extensions = {},
133
+ rawRef = null
134
+ }) {
135
+ if (typeof text !== 'string' || !text) return [];
136
+ const id = messageId || createEventId(kindPrefix);
137
+ const normalizedExtensions = { ...extensions, messageId: id };
138
+
139
+ return [
140
+ createConversationEvent({
141
+ kind: `${kindPrefix}_start`,
142
+ provider,
143
+ sessionId,
144
+ timestamp,
145
+ payload: { messageId: id },
146
+ extensions: normalizedExtensions,
147
+ rawRef
148
+ }),
149
+ createConversationEvent({
150
+ kind: `${kindPrefix}_delta`,
151
+ provider,
152
+ sessionId,
153
+ timestamp,
154
+ payload: { messageId: id, text },
155
+ extensions: normalizedExtensions,
156
+ rawRef
157
+ })
158
+ ];
159
+ }
160
+
161
+ function createTextEndEvent({
162
+ kindPrefix = 'assistant_text',
163
+ provider,
164
+ sessionId,
165
+ timestamp,
166
+ messageId,
167
+ extensions = {},
168
+ rawRef = null
169
+ }) {
170
+ if (!messageId) return [];
171
+ return [
172
+ createConversationEvent({
173
+ kind: `${kindPrefix}_end`,
174
+ provider,
175
+ sessionId,
176
+ timestamp,
177
+ payload: { messageId },
178
+ extensions: { ...extensions, messageId },
179
+ rawRef
180
+ })
181
+ ];
182
+ }
183
+
184
+ function isHiddenSystemContextContent(value) {
185
+ const text = String(value || '').trim();
186
+ if (!text) return true;
187
+ return text.startsWith('[System Context]') || text.startsWith('[Attached Context]') || text.startsWith('[Dynamic Context]') || text.startsWith('[Hidden Context]');
188
+ }
189
+
190
+ function stringifyToolContent(value) {
191
+ if (typeof value === 'string') return value;
192
+ if (value == null) return '';
193
+ try {
194
+ return JSON.stringify(value);
195
+ } catch {
196
+ return String(value);
197
+ }
198
+ }
199
+
200
+ function collectClaudeToolResults(rawMessages) {
201
+ const toolResults = new Map();
202
+ for (const msg of rawMessages || []) {
203
+ if (msg?.message?.role !== 'user' || !Array.isArray(msg?.message?.content)) continue;
204
+ for (const part of msg.message.content) {
205
+ if (part?.type === 'tool_result' && part.tool_use_id) {
206
+ toolResults.set(part.tool_use_id, {
207
+ content: part.content,
208
+ isError: !!part.is_error,
209
+ timestamp: msg.timestamp,
210
+ toolUseResult: msg.toolUseResult || null
211
+ });
212
+ }
213
+ }
214
+ }
215
+ return toolResults;
216
+ }
217
+
218
+ function findLatestTimelineMessageIndex(messages, predicate) {
219
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
220
+ if (predicate(messages[index], index)) {
221
+ return index;
222
+ }
223
+ }
224
+ return -1;
225
+ }
226
+
227
+ function appendDeltaText(existing = '', delta = '') {
228
+ if (!delta) return existing;
229
+ if (!existing) return delta;
230
+ if (existing.endsWith(delta)) return existing;
231
+ return `${existing}${delta}`;
232
+ }
233
+
234
+ function ensureStreamingTextMessage(messages, {
235
+ messageId,
236
+ timestamp,
237
+ provider,
238
+ isThinking = false,
239
+ kind = 'assistant'
240
+ }) {
241
+ const index = findLatestTimelineMessageIndex(messages, (message) => (
242
+ message?.eventMessageId === messageId &&
243
+ !!message?.isStreaming &&
244
+ !message.isToolUse &&
245
+ !!message.isThinking === !!isThinking
246
+ ));
247
+
248
+ if (index >= 0) {
249
+ const existing = { ...messages[index] };
250
+ existing.isStreaming = true;
251
+ if (provider) existing.provider = provider;
252
+ if (timestamp) existing.timestamp = existing.timestamp || timestamp;
253
+ messages[index] = existing;
254
+ return { messages, index };
255
+ }
256
+
257
+ const nextMessage = {
258
+ type: kind,
259
+ content: '',
260
+ timestamp,
261
+ provider,
262
+ isStreaming: true,
263
+ eventMessageId: messageId
264
+ };
265
+
266
+ if (isThinking) {
267
+ nextMessage.isThinking = true;
268
+ }
269
+
270
+ messages.push(nextMessage);
271
+ return { messages, index: messages.length - 1 };
272
+ }
273
+
274
+ function ensureToolMessage(messages, {
275
+ toolCallId,
276
+ toolName,
277
+ timestamp,
278
+ provider
279
+ }) {
280
+ const index = findLatestTimelineMessageIndex(messages, (message) => (
281
+ message?.isToolUse &&
282
+ (message.toolId === toolCallId || message.toolCallId === toolCallId)
283
+ ));
284
+
285
+ if (index >= 0) {
286
+ const existing = { ...messages[index] };
287
+ if (toolName) existing.toolName = toolName;
288
+ if (provider) existing.provider = provider;
289
+ if (timestamp && !existing.timestamp) existing.timestamp = timestamp;
290
+ messages[index] = existing;
291
+ return { messages, index };
292
+ }
293
+
294
+ messages.push({
295
+ type: 'assistant',
296
+ content: '',
297
+ timestamp,
298
+ provider,
299
+ isToolUse: true,
300
+ toolName: toolName || 'Unknown Tool',
301
+ toolId: toolCallId,
302
+ toolCallId
303
+ });
304
+
305
+ return { messages, index: messages.length - 1 };
306
+ }
307
+
308
+ export function normalizeLegacyHistoryEntries(rawMessages = [], provider = 'claude', sessionId = null) {
309
+ if (!Array.isArray(rawMessages)) return [];
310
+
311
+ const events = [];
312
+ const toolResults = collectClaudeToolResults(rawMessages);
313
+
314
+ for (const msg of rawMessages) {
315
+ const timestamp = normalizeTimestamp(msg?.timestamp);
316
+ const rawRef = { provider, timestamp, type: msg?.type || msg?.message?.role || 'unknown' };
317
+
318
+ if (msg?.message?.role === 'user' && msg?.message?.content) {
319
+ let content = '';
320
+ if (Array.isArray(msg.message.content)) {
321
+ content = msg.message.content.filter((part) => part?.type === 'text').map((part) => part?.text || '').join('\n');
322
+ } else {
323
+ content = typeof msg.message.content === 'string' ? msg.message.content : String(msg.message.content || '');
324
+ }
325
+
326
+ if (!isHiddenSystemContextContent(content)) {
327
+ events.push(createConversationEvent({
328
+ kind: CONVERSATION_EVENT_KINDS.USER_MESSAGE,
329
+ provider,
330
+ sessionId,
331
+ timestamp,
332
+ payload: { text: content },
333
+ rawRef
334
+ }));
335
+ }
336
+ continue;
337
+ }
338
+
339
+ if (msg?.type === 'thinking' && msg?.message?.content) {
340
+ events.push(...createTextSpanEvents({ kindPrefix: 'reasoning', text: msg.message.content, provider, sessionId, timestamp, rawRef }));
341
+ continue;
342
+ }
343
+
344
+ if (msg?.type === 'tool_use' && msg?.toolName) {
345
+ const toolCallId = msg.toolCallId || createEventId('tool');
346
+ const result = msg.toolResult || null;
347
+ events.push(createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: msg.toolName }, rawRef }));
348
+ events.push(createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: msg.toolInput || '' }, rawRef }));
349
+ events.push(createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: msg.toolName }, rawRef }));
350
+ if (result) {
351
+ events.push(createConversationEvent({
352
+ kind: CONVERSATION_EVENT_KINDS.TOOL_RESULT,
353
+ provider,
354
+ sessionId,
355
+ timestamp: result.timestamp || timestamp,
356
+ payload: { toolCallId, content: stringifyToolContent(result.content), isError: !!result.isError, toolUseResult: result.toolUseResult || null },
357
+ rawRef
358
+ }));
359
+ }
360
+ continue;
361
+ }
362
+
363
+ if (msg?.type === 'tool_result') {
364
+ events.push(createConversationEvent({
365
+ kind: CONVERSATION_EVENT_KINDS.TOOL_RESULT,
366
+ provider,
367
+ sessionId,
368
+ timestamp,
369
+ payload: { toolCallId: msg.toolCallId || null, content: stringifyToolContent(msg.output || ''), isError: false },
370
+ rawRef
371
+ }));
372
+ continue;
373
+ }
374
+
375
+ if (msg?.message?.role === 'assistant' && msg?.message?.content) {
376
+ if (Array.isArray(msg.message.content)) {
377
+ for (const part of msg.message.content) {
378
+ if (part?.type === 'text' && !isHiddenSystemContextContent(part.text)) {
379
+ events.push(...createTextSpanEvents({ text: part.text, provider, sessionId, timestamp, rawRef }));
380
+ } else if (part?.type === 'tool_use') {
381
+ const toolCallId = part.id || createEventId('tool');
382
+ const result = toolResults.get(part.id);
383
+ events.push(createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: part.name }, rawRef }));
384
+ events.push(createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: stringifyToolContent(part.input || {}) }, rawRef }));
385
+ events.push(createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: part.name }, rawRef }));
386
+ if (result) {
387
+ events.push(createConversationEvent({
388
+ kind: CONVERSATION_EVENT_KINDS.TOOL_RESULT,
389
+ provider,
390
+ sessionId,
391
+ timestamp: result.timestamp || timestamp,
392
+ payload: { toolCallId, content: stringifyToolContent(result.content), isError: !!result.isError, toolUseResult: result.toolUseResult || null },
393
+ rawRef
394
+ }));
395
+ }
396
+ }
397
+ }
398
+ } else if (!isHiddenSystemContextContent(msg.message.content)) {
399
+ events.push(...createTextSpanEvents({ text: msg.message.content, provider, sessionId, timestamp, rawRef }));
400
+ }
401
+ continue;
402
+ }
403
+
404
+ if (msg?.type && /error/i.test(msg.type)) {
405
+ events.push(createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.ERROR, provider, sessionId, timestamp, payload: { message: msg.error || msg.message || 'Provider error' }, rawRef }));
406
+ }
407
+ }
408
+
409
+ return events.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));
410
+ }
411
+
412
+ export function applyConversationEventToTimelineMessages(messages = [], event, sessionProvider = 'claude') {
413
+ const nextMessages = Array.isArray(messages) ? [...messages] : [];
414
+ if (!isConversationEvent(event)) return nextMessages;
415
+
416
+ const provider = event.provider || sessionProvider;
417
+ const timestamp = event.timestamp || new Date().toISOString();
418
+ const payload = event.payload || {};
419
+
420
+ switch (event.kind) {
421
+ case CONVERSATION_EVENT_KINDS.USER_MESSAGE:
422
+ nextMessages.push({
423
+ type: 'user',
424
+ content: payload.text || '',
425
+ timestamp,
426
+ provider
427
+ });
428
+ break;
429
+
430
+ case CONVERSATION_EVENT_KINDS.ASSISTANT_TEXT_START: {
431
+ const messageId = payload.messageId || event.extensions?.messageId || createEventId('assistant_text');
432
+ ensureStreamingTextMessage(nextMessages, { messageId, timestamp, provider, isThinking: false });
433
+ break;
434
+ }
435
+
436
+ case CONVERSATION_EVENT_KINDS.ASSISTANT_TEXT_DELTA: {
437
+ const messageId = payload.messageId || event.extensions?.messageId || createEventId('assistant_text');
438
+ const { index } = ensureStreamingTextMessage(nextMessages, { messageId, timestamp, provider, isThinking: false });
439
+ const target = { ...nextMessages[index] };
440
+ target.content = appendDeltaText(target.content || '', payload.text || '');
441
+ target.timestamp = target.timestamp || timestamp;
442
+ target.provider = target.provider || provider;
443
+ nextMessages[index] = target;
444
+ break;
445
+ }
446
+
447
+ case CONVERSATION_EVENT_KINDS.ASSISTANT_TEXT_END: {
448
+ const messageId = payload.messageId || event.extensions?.messageId;
449
+ if (!messageId) break;
450
+ const index = findLatestTimelineMessageIndex(nextMessages, (message) => (
451
+ message?.eventMessageId === messageId && !message.isToolUse && !message.isThinking
452
+ ));
453
+ if (index >= 0) {
454
+ nextMessages[index] = { ...nextMessages[index], isStreaming: false };
455
+ }
456
+ break;
457
+ }
458
+
459
+ case CONVERSATION_EVENT_KINDS.REASONING_START: {
460
+ const messageId = payload.messageId || event.extensions?.messageId || createEventId('reasoning');
461
+ ensureStreamingTextMessage(nextMessages, { messageId, timestamp, provider, isThinking: true });
462
+ break;
463
+ }
464
+
465
+ case CONVERSATION_EVENT_KINDS.REASONING_DELTA: {
466
+ const messageId = payload.messageId || event.extensions?.messageId || createEventId('reasoning');
467
+ const { index } = ensureStreamingTextMessage(nextMessages, { messageId, timestamp, provider, isThinking: true });
468
+ const target = { ...nextMessages[index] };
469
+ target.content = appendDeltaText(target.content || '', payload.text || '');
470
+ target.timestamp = target.timestamp || timestamp;
471
+ target.provider = target.provider || provider;
472
+ target.isThinking = true;
473
+ nextMessages[index] = target;
474
+ break;
475
+ }
476
+
477
+ case CONVERSATION_EVENT_KINDS.REASONING_END: {
478
+ const messageId = payload.messageId || event.extensions?.messageId;
479
+ if (!messageId) break;
480
+ const index = findLatestTimelineMessageIndex(nextMessages, (message) => (
481
+ message?.eventMessageId === messageId && !!message.isThinking
482
+ ));
483
+ if (index >= 0) {
484
+ nextMessages[index] = { ...nextMessages[index], isStreaming: false, isThinking: true };
485
+ }
486
+ break;
487
+ }
488
+
489
+ case CONVERSATION_EVENT_KINDS.TOOL_CALL_START: {
490
+ const toolCallId = payload.toolCallId || createEventId('tool');
491
+ const { index } = ensureToolMessage(nextMessages, {
492
+ toolCallId,
493
+ toolName: payload.toolName,
494
+ timestamp,
495
+ provider
496
+ });
497
+ nextMessages[index] = { ...nextMessages[index], toolName: payload.toolName || nextMessages[index].toolName };
498
+ break;
499
+ }
500
+
501
+ case CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT: {
502
+ const toolCallId = payload.toolCallId || createEventId('tool');
503
+ const { index } = ensureToolMessage(nextMessages, {
504
+ toolCallId,
505
+ toolName: payload.toolName,
506
+ timestamp,
507
+ provider
508
+ });
509
+ nextMessages[index] = {
510
+ ...nextMessages[index],
511
+ toolInput: stringifyToolContent(payload.input || ''),
512
+ provider: nextMessages[index].provider || provider
513
+ };
514
+ break;
515
+ }
516
+
517
+ case CONVERSATION_EVENT_KINDS.TOOL_CALL_END: {
518
+ const toolCallId = payload.toolCallId || event.extensions?.toolCallId;
519
+ if (!toolCallId) break;
520
+ const { index } = ensureToolMessage(nextMessages, {
521
+ toolCallId,
522
+ toolName: payload.toolName,
523
+ timestamp,
524
+ provider
525
+ });
526
+ nextMessages[index] = { ...nextMessages[index], toolName: payload.toolName || nextMessages[index].toolName };
527
+ break;
528
+ }
529
+
530
+ case CONVERSATION_EVENT_KINDS.TOOL_RESULT: {
531
+ const toolCallId = payload.toolCallId || event.extensions?.toolCallId || createEventId('tool');
532
+ const { index } = ensureToolMessage(nextMessages, {
533
+ toolCallId,
534
+ toolName: payload.toolName,
535
+ timestamp,
536
+ provider
537
+ });
538
+ nextMessages[index] = {
539
+ ...nextMessages[index],
540
+ toolResult: {
541
+ content: stringifyToolContent(payload.content || ''),
542
+ isError: !!payload.isError,
543
+ toolUseResult: payload.toolUseResult || null,
544
+ timestamp
545
+ },
546
+ toolError: !!payload.isError,
547
+ provider: nextMessages[index].provider || provider
548
+ };
549
+ break;
550
+ }
551
+
552
+ case CONVERSATION_EVENT_KINDS.APPROVAL_REQUEST:
553
+ if (payload.message) {
554
+ nextMessages.push({
555
+ type: 'assistant',
556
+ content: payload.message,
557
+ timestamp,
558
+ provider,
559
+ isApprovalRequest: true,
560
+ approvalRequest: payload
561
+ });
562
+ }
563
+ break;
564
+
565
+ case CONVERSATION_EVENT_KINDS.APPROVAL_RESOLVED:
566
+ if (payload.message) {
567
+ nextMessages.push({
568
+ type: 'assistant',
569
+ content: payload.message,
570
+ timestamp,
571
+ provider,
572
+ approvalResolution: payload
573
+ });
574
+ }
575
+ break;
576
+
577
+ case CONVERSATION_EVENT_KINDS.SYSTEM_NOTICE:
578
+ if (payload.message) {
579
+ const last = nextMessages[nextMessages.length - 1];
580
+ if (!(last && last.type === 'assistant' && !last.isToolUse && (last.content || '').trim() === String(payload.message).trim())) {
581
+ nextMessages.push({
582
+ type: 'assistant',
583
+ content: payload.message,
584
+ timestamp,
585
+ provider,
586
+ isSystemNotice: true
587
+ });
588
+ }
589
+ }
590
+ break;
591
+
592
+ case CONVERSATION_EVENT_KINDS.ERROR:
593
+ nextMessages.push({
594
+ type: 'error',
595
+ content: payload.message || 'Provider error',
596
+ timestamp,
597
+ provider,
598
+ rawRef: event.rawRef || null,
599
+ extensions: event.extensions || {}
600
+ });
601
+ break;
602
+
603
+ case CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED:
604
+ case CONVERSATION_EVENT_KINDS.ARTIFACT_CREATED:
605
+ default:
606
+ break;
607
+ }
608
+
609
+ return nextMessages;
610
+ }
611
+
612
+ export function conversationEventsToTimelineMessages(events = [], sessionProvider = 'claude') {
613
+ if (!Array.isArray(events)) return [];
614
+ if (events.length > 0 && !isConversationEvent(events[0])) {
615
+ return conversationEventsToTimelineMessages(normalizeLegacyHistoryEntries(events, sessionProvider), sessionProvider);
616
+ }
617
+
618
+ return events.reduce(
619
+ (messages, event) => applyConversationEventToTimelineMessages(messages, event, sessionProvider),
620
+ []
621
+ );
622
+ }
623
+
624
+ function inferRealtimeMessageId(payload, provider, sessionId, kindPrefix = 'assistant_text') {
625
+ const data = payload?.data || {};
626
+ const idCandidate =
627
+ data.itemId ||
628
+ data.messageId ||
629
+ data.id ||
630
+ data.contentBlockId ||
631
+ data.blockId ||
632
+ (data.index !== undefined ? `${kindPrefix}:${data.index}` : null) ||
633
+ `${kindPrefix}:main`;
634
+
635
+ return `${provider}:${sessionId || 'pending'}:${idCandidate}`;
636
+ }
637
+
638
+ function mapCodexStructuredItemToEvents({ provider, sessionId, timestamp, data, rawRef }) {
639
+ const toolCallId = `${provider}:${sessionId || 'pending'}:${data.itemType || 'item'}:${timestamp}`;
640
+
641
+ switch (data.itemType) {
642
+ case 'command_execution':
643
+ return [
644
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'Bash' }, rawRef }),
645
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: data.command || '' }, rawRef }),
646
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'Bash' }, rawRef }),
647
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_RESULT, provider, sessionId, timestamp, payload: { toolCallId, content: data.output || `Exit code: ${data.exitCode ?? 'unknown'}`, isError: data.status === 'failed' || Number(data.exitCode) > 0 }, rawRef })
648
+ ];
649
+
650
+ case 'file_change':
651
+ return [
652
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'FileChanges' }, rawRef }),
653
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: data.changes || [] }, rawRef }),
654
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'FileChanges' }, rawRef }),
655
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_RESULT, provider, sessionId, timestamp, payload: { toolCallId, content: `Status: ${data.status || 'completed'}`, isError: false }, rawRef })
656
+ ];
657
+
658
+ case 'mcp_tool_call':
659
+ return [
660
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: `${data.server}:${data.tool}` }, rawRef }),
661
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: data.arguments || {} }, rawRef }),
662
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: `${data.server}:${data.tool}` }, rawRef }),
663
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_RESULT, provider, sessionId, timestamp, payload: { toolCallId, content: data.result || data.error?.message || '', isError: !!data.error }, rawRef })
664
+ ];
665
+
666
+ case 'web_search':
667
+ return [
668
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'WebSearch' }, rawRef }),
669
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: data.query || '' }, rawRef }),
670
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'WebSearch' }, rawRef })
671
+ ];
672
+
673
+ case 'todo_list':
674
+ return [
675
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'TodoList' }, rawRef }),
676
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: data.items || [] }, rawRef }),
677
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: 'TodoList' }, rawRef })
678
+ ];
679
+
680
+ case 'error':
681
+ return [
682
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.ERROR, provider, sessionId, timestamp, payload: { message: data.message?.content || 'Codex error' }, rawRef })
683
+ ];
684
+
685
+ default:
686
+ return [];
687
+ }
688
+ }
689
+
690
+ export function normalizeRealtimePayloadToConversationEvents(payload, fallbackProvider = 'claude') {
691
+ if (!payload || typeof payload !== 'object') return [];
692
+
693
+ const provider = payload.provider || (String(payload.type || '').startsWith('codex') ? 'codex' : fallbackProvider);
694
+ const sessionId = payload.sessionId || null;
695
+ const timestamp = normalizeTimestamp(payload.timestamp);
696
+ const rawRef = { type: payload.type };
697
+
698
+ if (payload.type === 'session-created') {
699
+ return [
700
+ createConversationEvent({
701
+ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
702
+ provider,
703
+ sessionId,
704
+ timestamp,
705
+ payload: { state: 'queued', created: true },
706
+ rawRef
707
+ })
708
+ ];
709
+ }
710
+
711
+ if (payload.type === 'claude-permission-request') {
712
+ return [
713
+ createConversationEvent({
714
+ kind: CONVERSATION_EVENT_KINDS.APPROVAL_REQUEST,
715
+ provider,
716
+ sessionId,
717
+ timestamp,
718
+ payload: {
719
+ requestId: payload.requestId || null,
720
+ toolName: payload.toolName,
721
+ input: payload.input ?? payload.toolInput,
722
+ context: payload.context || null,
723
+ sessionId,
724
+ message: payload.message || `Approval required for ${payload.toolName || 'tool execution'}`
725
+ },
726
+ extensions: {
727
+ requestId: payload.requestId || null
728
+ },
729
+ rawRef
730
+ })
731
+ ];
732
+ }
733
+
734
+ if (payload.type === 'claude-permission-cancelled') {
735
+ return [
736
+ createConversationEvent({
737
+ kind: CONVERSATION_EVENT_KINDS.APPROVAL_RESOLVED,
738
+ provider,
739
+ sessionId,
740
+ timestamp,
741
+ payload: {
742
+ requestId: payload.requestId || null,
743
+ status: 'cancelled',
744
+ reason: payload.reason || null,
745
+ message: payload.message || 'Approval request cancelled'
746
+ },
747
+ extensions: {
748
+ requestId: payload.requestId || null
749
+ },
750
+ rawRef
751
+ })
752
+ ];
753
+ }
754
+
755
+ if (payload.type === 'claude-permission-resolved') {
756
+ return [
757
+ createConversationEvent({
758
+ kind: CONVERSATION_EVENT_KINDS.APPROVAL_RESOLVED,
759
+ provider,
760
+ sessionId,
761
+ timestamp,
762
+ payload: {
763
+ requestId: payload.requestId || null,
764
+ status: payload.status || 'resolved',
765
+ toolName: payload.toolName || null,
766
+ message: payload.message || null
767
+ },
768
+ extensions: {
769
+ requestId: payload.requestId || null
770
+ },
771
+ rawRef
772
+ })
773
+ ];
774
+ }
775
+
776
+ if (payload.type === 'session-aborted') {
777
+ return [
778
+ createConversationEvent({
779
+ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
780
+ provider,
781
+ sessionId,
782
+ timestamp,
783
+ payload: {
784
+ state: 'aborted',
785
+ success: payload.success !== false
786
+ },
787
+ rawRef
788
+ })
789
+ ];
790
+ }
791
+
792
+ if (payload.type === 'session-status') {
793
+ return [
794
+ createConversationEvent({
795
+ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
796
+ provider,
797
+ sessionId,
798
+ timestamp,
799
+ payload: {
800
+ state: payload.isProcessing ? 'streaming' : 'idle'
801
+ },
802
+ rawRef
803
+ })
804
+ ];
805
+ }
806
+
807
+ if (payload.type === 'claude-response') {
808
+ const data = payload.data || {};
809
+
810
+ if (data.type === 'content_block_delta' && typeof data.delta?.text === 'string') {
811
+ const isReasoning = !!data.isReasoning || data.itemType === 'reasoning' || data.delta?.type === 'thinking_delta';
812
+ const kindPrefix = isReasoning ? 'reasoning' : 'assistant_text';
813
+ return createTextDeltaEvents({
814
+ kindPrefix,
815
+ text: data.delta.text,
816
+ provider,
817
+ sessionId,
818
+ timestamp,
819
+ messageId: inferRealtimeMessageId(payload, provider, sessionId, kindPrefix),
820
+ rawRef
821
+ });
822
+ }
823
+
824
+ if (data.type === 'content_block_stop') {
825
+ const isReasoning = !!data.isReasoning || data.itemType === 'reasoning';
826
+ const kindPrefix = isReasoning ? 'reasoning' : 'assistant_text';
827
+ return createTextEndEvent({
828
+ kindPrefix,
829
+ provider,
830
+ sessionId,
831
+ timestamp,
832
+ messageId: inferRealtimeMessageId(payload, provider, sessionId, kindPrefix),
833
+ rawRef
834
+ });
835
+ }
836
+
837
+ if (data.type === 'thinking' && data.message?.content) {
838
+ return createTextSpanEvents({
839
+ kindPrefix: 'reasoning',
840
+ text: data.message.content,
841
+ provider,
842
+ sessionId,
843
+ timestamp,
844
+ rawRef
845
+ });
846
+ }
847
+
848
+ if (Array.isArray(data.content)) {
849
+ return data.content.flatMap((part) => {
850
+ if (part?.type === 'text' && !isHiddenSystemContextContent(part.text)) {
851
+ return createTextSpanEvents({
852
+ text: part.text,
853
+ provider,
854
+ sessionId,
855
+ timestamp,
856
+ messageId: part.id ? `${provider}:${sessionId || 'pending'}:${part.id}` : undefined,
857
+ rawRef
858
+ });
859
+ }
860
+
861
+ if (part?.type === 'tool_use') {
862
+ const toolCallId = part.id || createEventId('tool');
863
+ return [
864
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_START, provider, sessionId, timestamp, payload: { toolCallId, toolName: part.name }, rawRef }),
865
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_INPUT, provider, sessionId, timestamp, payload: { toolCallId, input: part.input || {} }, rawRef }),
866
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.TOOL_CALL_END, provider, sessionId, timestamp, payload: { toolCallId, toolName: part.name }, rawRef })
867
+ ];
868
+ }
869
+
870
+ return [];
871
+ });
872
+ }
873
+
874
+ if (data.role === 'user' && Array.isArray(data.content)) {
875
+ return data.content.flatMap((part) => (
876
+ part?.type === 'tool_result'
877
+ ? [createConversationEvent({
878
+ kind: CONVERSATION_EVENT_KINDS.TOOL_RESULT,
879
+ provider,
880
+ sessionId,
881
+ timestamp,
882
+ payload: {
883
+ toolCallId: part.tool_use_id || createEventId('tool'),
884
+ content: part.content,
885
+ isError: !!part.is_error
886
+ },
887
+ rawRef
888
+ })]
889
+ : []
890
+ ));
891
+ }
892
+
893
+ if (typeof data.content === 'string' && data.content.trim() && !isHiddenSystemContextContent(data.content)) {
894
+ return createTextSpanEvents({ text: data.content, provider, sessionId, timestamp, rawRef });
895
+ }
896
+
897
+ return [];
898
+ }
899
+
900
+ if (payload.type === 'claude-output') {
901
+ const content = String(payload.data || '').trim();
902
+ if (!content) return [];
903
+ return [
904
+ createConversationEvent({
905
+ kind: CONVERSATION_EVENT_KINDS.SYSTEM_NOTICE,
906
+ provider,
907
+ sessionId,
908
+ timestamp,
909
+ payload: { message: content },
910
+ rawRef
911
+ })
912
+ ];
913
+ }
914
+
915
+ if (payload.type === 'codex-response') {
916
+ const data = payload.data || {};
917
+
918
+ if (data.type === 'provider_notice' && typeof data.message === 'string' && data.message.trim()) {
919
+ return [
920
+ createConversationEvent({
921
+ kind: CONVERSATION_EVENT_KINDS.SYSTEM_NOTICE,
922
+ provider: payload.provider || 'codex',
923
+ sessionId,
924
+ timestamp,
925
+ payload: { message: data.message.trim() },
926
+ rawRef
927
+ })
928
+ ];
929
+ }
930
+
931
+ if (data.type === 'item_delta' && typeof data.delta === 'string') {
932
+ const kindPrefix = (data.isReasoning || data.itemType === 'reasoning') ? 'reasoning' : 'assistant_text';
933
+ return createTextDeltaEvents({
934
+ kindPrefix,
935
+ text: data.delta,
936
+ provider: payload.provider || 'codex',
937
+ sessionId,
938
+ timestamp,
939
+ messageId: data.itemId ? `${provider}:${sessionId || 'pending'}:${data.itemId}` : inferRealtimeMessageId(payload, provider, sessionId, kindPrefix),
940
+ rawRef
941
+ });
942
+ }
943
+
944
+ if (data.type === 'item_done') {
945
+ const kindPrefix = (data.isReasoning || data.itemType === 'reasoning') ? 'reasoning' : 'assistant_text';
946
+ return createTextEndEvent({
947
+ kindPrefix,
948
+ provider: payload.provider || 'codex',
949
+ sessionId,
950
+ timestamp,
951
+ messageId: data.itemId ? `${provider}:${sessionId || 'pending'}:${data.itemId}` : inferRealtimeMessageId(payload, provider, sessionId, kindPrefix),
952
+ rawRef
953
+ });
954
+ }
955
+
956
+ if (data.type === 'item') {
957
+ return mapCodexStructuredItemToEvents({ provider: payload.provider || 'codex', sessionId, timestamp, data, rawRef });
958
+ }
959
+
960
+ if (data.type === 'turn_complete') {
961
+ return [
962
+ createConversationEvent({
963
+ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
964
+ provider: payload.provider || 'codex',
965
+ sessionId,
966
+ timestamp,
967
+ payload: { state: 'completed' },
968
+ rawRef
969
+ })
970
+ ];
971
+ }
972
+
973
+ if (data.type === 'turn_failed') {
974
+ return [
975
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.ERROR, provider: payload.provider || 'codex', sessionId, timestamp, payload: { message: data.error?.message || 'Codex turn failed' }, rawRef }),
976
+ createConversationEvent({ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED, provider: payload.provider || 'codex', sessionId, timestamp, payload: { state: 'errored' }, rawRef })
977
+ ];
978
+ }
979
+
980
+ return [];
981
+ }
982
+
983
+ if (payload.type === 'gemini-result') {
984
+ return [
985
+ createConversationEvent({
986
+ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
987
+ provider,
988
+ sessionId,
989
+ timestamp,
990
+ payload: { state: 'completed' },
991
+ rawRef
992
+ })
993
+ ];
994
+ }
995
+
996
+ if (payload.type === 'claude-complete' || payload.type === 'codex-complete') {
997
+ return [
998
+ createConversationEvent({
999
+ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
1000
+ provider,
1001
+ sessionId,
1002
+ timestamp,
1003
+ payload: { state: 'completed', exitCode: payload.exitCode ?? 0 },
1004
+ rawRef
1005
+ })
1006
+ ];
1007
+ }
1008
+
1009
+ if (/error/i.test(payload.type || '')) {
1010
+ return [
1011
+ createConversationEvent({
1012
+ kind: CONVERSATION_EVENT_KINDS.ERROR,
1013
+ provider,
1014
+ sessionId,
1015
+ timestamp,
1016
+ payload: { message: payload.error || 'Provider error' },
1017
+ rawRef
1018
+ }),
1019
+ createConversationEvent({
1020
+ kind: CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
1021
+ provider,
1022
+ sessionId,
1023
+ timestamp,
1024
+ payload: { state: 'errored' },
1025
+ rawRef
1026
+ })
1027
+ ];
1028
+ }
1029
+
1030
+ return [];
1031
+ }