@zythum02/fello-server 0.1.51 → 0.1.52

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 (374) hide show
  1. package/out/renderer/assets/{_baseUniq-DdWCC-Go.js → _baseUniq-C0L-SxO8.js} +1 -1
  2. package/out/renderer/assets/_baseUniq-C0L-SxO8.js.br +0 -0
  3. package/out/renderer/assets/_baseUniq-C0L-SxO8.js.gz +0 -0
  4. package/out/renderer/assets/{arc-B_en4gJt.js → arc-bnlMIyYF.js} +1 -1
  5. package/out/renderer/assets/arc-bnlMIyYF.js.br +0 -0
  6. package/out/renderer/assets/arc-bnlMIyYF.js.gz +0 -0
  7. package/out/renderer/assets/{architectureDiagram-Q4EWVU46-W-l3dTvZ.js → architectureDiagram-Q4EWVU46-Cr0249Lu.js} +6 -6
  8. package/out/renderer/assets/architectureDiagram-Q4EWVU46-Cr0249Lu.js.br +0 -0
  9. package/out/renderer/assets/architectureDiagram-Q4EWVU46-Cr0249Lu.js.gz +0 -0
  10. package/out/renderer/assets/{arrow-left-BwbOF_G_.js → arrow-left-D589pHHA.js} +1 -1
  11. package/out/renderer/assets/{automation--izxbhlj.js → automation-CvjrkE9z.js} +8 -8
  12. package/out/renderer/assets/automation-CvjrkE9z.js.br +0 -0
  13. package/out/renderer/assets/automation-CvjrkE9z.js.gz +0 -0
  14. package/out/renderer/assets/{blockDiagram-DXYQGD6D-BdxXOr8Y.js → blockDiagram-DXYQGD6D-Cw6vh5dx.js} +7 -7
  15. package/out/renderer/assets/blockDiagram-DXYQGD6D-Cw6vh5dx.js.br +0 -0
  16. package/out/renderer/assets/blockDiagram-DXYQGD6D-Cw6vh5dx.js.gz +0 -0
  17. package/out/renderer/assets/{c4Diagram-AHTNJAMY-C_8XgPtT.js → c4Diagram-AHTNJAMY-BUrvcyv2.js} +3 -3
  18. package/out/renderer/assets/c4Diagram-AHTNJAMY-BUrvcyv2.js.br +0 -0
  19. package/out/renderer/assets/c4Diagram-AHTNJAMY-BUrvcyv2.js.gz +0 -0
  20. package/out/renderer/assets/{channel-BsSLbHzl.js → channel-DQr36qW5.js} +1 -1
  21. package/out/renderer/assets/{chunk-4BX2VUAB-CADGLBio.js → chunk-4BX2VUAB-DOsXCDD7.js} +1 -1
  22. package/out/renderer/assets/{chunk-4TB4RGXK-C7h57GNs.js → chunk-4TB4RGXK-D_fBnf0p.js} +5 -5
  23. package/out/renderer/assets/chunk-4TB4RGXK-D_fBnf0p.js.br +0 -0
  24. package/out/renderer/assets/chunk-4TB4RGXK-D_fBnf0p.js.gz +0 -0
  25. package/out/renderer/assets/{chunk-55IACEB6-Cw-dv2b3.js → chunk-55IACEB6-3ETNuedT.js} +1 -1
  26. package/out/renderer/assets/{chunk-EDXVE4YY-BPjYyS5o.js → chunk-EDXVE4YY-BJLqHaER.js} +1 -1
  27. package/out/renderer/assets/chunk-EDXVE4YY-BJLqHaER.js.br +0 -0
  28. package/out/renderer/assets/chunk-EDXVE4YY-BJLqHaER.js.gz +0 -0
  29. package/out/renderer/assets/{chunk-FMBD7UC4-DhJ5Z89u.js → chunk-FMBD7UC4-DP-WGTNG.js} +1 -1
  30. package/out/renderer/assets/{chunk-OYMX7WX6-D5Q5ZCl0.js → chunk-OYMX7WX6-CrS7loi7.js} +3 -3
  31. package/out/renderer/assets/chunk-OYMX7WX6-CrS7loi7.js.br +0 -0
  32. package/out/renderer/assets/chunk-OYMX7WX6-CrS7loi7.js.gz +0 -0
  33. package/out/renderer/assets/{chunk-QZHKN3VN-SsM-5KS-.js → chunk-QZHKN3VN-C53USs5W.js} +1 -1
  34. package/out/renderer/assets/{chunk-YZCP3GAM-AbfctYy8.js → chunk-YZCP3GAM-CMgdytZR.js} +1 -1
  35. package/out/renderer/assets/chunk-YZCP3GAM-CMgdytZR.js.br +0 -0
  36. package/out/renderer/assets/chunk-YZCP3GAM-CMgdytZR.js.gz +0 -0
  37. package/out/renderer/assets/{circle-x-CxFDvVH_.js → circle-x-OvXymUrf.js} +1 -1
  38. package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-7ZGV_42k.js → classDiagram-6PBFFD2Q-DIYtEiO5.js} +7 -7
  39. package/out/renderer/assets/{classDiagram-6PBFFD2Q-7ZGV_42k.js → classDiagram-v2-HSJHXN6E-DIYtEiO5.js} +7 -7
  40. package/out/renderer/assets/{clipboard-D6ZpW5GH.js → clipboard-xI9lExaB.js} +1 -1
  41. package/out/renderer/assets/{clone-D2_BL2Tz.js → clone-D45P7Iqc.js} +1 -1
  42. package/out/renderer/assets/{code-editor-cp9haQUT.js → code-editor-SuOcN-5B.js} +2 -2
  43. package/out/renderer/assets/code-editor-SuOcN-5B.js.br +0 -0
  44. package/out/renderer/assets/code-editor-SuOcN-5B.js.gz +0 -0
  45. package/out/renderer/assets/{collapsible-BHMUDZxc.js → collapsible-Bd85ZCyx.js} +1 -1
  46. package/out/renderer/assets/collapsible-Bd85ZCyx.js.br +0 -0
  47. package/out/renderer/assets/collapsible-Bd85ZCyx.js.gz +0 -0
  48. package/out/renderer/assets/{context-menu-K6z5uSmg.js → context-menu-BO9-4FYd.js} +1 -1
  49. package/out/renderer/assets/context-menu-BO9-4FYd.js.br +0 -0
  50. package/out/renderer/assets/context-menu-BO9-4FYd.js.gz +0 -0
  51. package/out/renderer/assets/{cose-bilkent-S5V4N54A-CVcE9aWV.js → cose-bilkent-S5V4N54A-Dq8VllNT.js} +2 -2
  52. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dq8VllNT.js.br +0 -0
  53. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dq8VllNT.js.gz +0 -0
  54. package/out/renderer/assets/{dagre-KV5264BT-zrX-TFsi.js → dagre-KV5264BT-Dec8q4UT.js} +7 -7
  55. package/out/renderer/assets/dagre-KV5264BT-Dec8q4UT.js.br +0 -0
  56. package/out/renderer/assets/dagre-KV5264BT-Dec8q4UT.js.gz +0 -0
  57. package/out/renderer/assets/{diagram-5BDNPKRD-Ct9NrJP9.js → diagram-5BDNPKRD-CzA2u_EN.js} +7 -7
  58. package/out/renderer/assets/diagram-5BDNPKRD-CzA2u_EN.js.br +0 -0
  59. package/out/renderer/assets/diagram-5BDNPKRD-CzA2u_EN.js.gz +0 -0
  60. package/out/renderer/assets/{diagram-G4DWMVQ6-tTGWcCd_.js → diagram-G4DWMVQ6-C8h3R7jD.js} +7 -7
  61. package/out/renderer/assets/diagram-G4DWMVQ6-C8h3R7jD.js.br +0 -0
  62. package/out/renderer/assets/diagram-G4DWMVQ6-C8h3R7jD.js.gz +0 -0
  63. package/out/renderer/assets/{diagram-MMDJMWI5-CpmcnN2B.js → diagram-MMDJMWI5-9tiXSF90.js} +6 -6
  64. package/out/renderer/assets/diagram-MMDJMWI5-9tiXSF90.js.br +0 -0
  65. package/out/renderer/assets/diagram-MMDJMWI5-9tiXSF90.js.gz +0 -0
  66. package/out/renderer/assets/{diagram-TYMM5635-DKTR2xS9.js → diagram-TYMM5635-BrarGJNf.js} +6 -6
  67. package/out/renderer/assets/diagram-TYMM5635-BrarGJNf.js.br +0 -0
  68. package/out/renderer/assets/diagram-TYMM5635-BrarGJNf.js.gz +0 -0
  69. package/out/renderer/assets/{ellipsis-8708fodN.js → ellipsis-BafkhboM.js} +1 -1
  70. package/out/renderer/assets/{erDiagram-SMLLAGMA-BW13EXAs.js → erDiagram-SMLLAGMA-1Q9StK7L.js} +5 -5
  71. package/out/renderer/assets/erDiagram-SMLLAGMA-1Q9StK7L.js.br +0 -0
  72. package/out/renderer/assets/erDiagram-SMLLAGMA-1Q9StK7L.js.gz +0 -0
  73. package/out/renderer/assets/{field-Be86bgEh.js → field-ohYLdnJa.js} +1 -1
  74. package/out/renderer/assets/field-ohYLdnJa.js.br +0 -0
  75. package/out/renderer/assets/field-ohYLdnJa.js.gz +0 -0
  76. package/out/renderer/assets/{file-text-CMw1QH-C.js → file-text-CshHuHgW.js} +1 -1
  77. package/out/renderer/assets/{flowDiagram-DWJPFMVM-C3oZAKxX.js → flowDiagram-DWJPFMVM-CpcXVOmj.js} +7 -7
  78. package/out/renderer/assets/flowDiagram-DWJPFMVM-CpcXVOmj.js.br +0 -0
  79. package/out/renderer/assets/flowDiagram-DWJPFMVM-CpcXVOmj.js.gz +0 -0
  80. package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-BARJrpDB.js → ganttDiagram-T4ZO3ILL-C7Da4JBG.js} +3 -3
  81. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-C7Da4JBG.js.br +0 -0
  82. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-C7Da4JBG.js.gz +0 -0
  83. package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-D0gl3Row.js → gitGraphDiagram-UUTBAWPF-COBL52q_.js} +7 -7
  84. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-COBL52q_.js.br +0 -0
  85. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-COBL52q_.js.gz +0 -0
  86. package/out/renderer/assets/{graph-DB7hnlLW.js → graph-vKaAs6sc.js} +2 -2
  87. package/out/renderer/assets/graph-vKaAs6sc.js.br +0 -0
  88. package/out/renderer/assets/graph-vKaAs6sc.js.gz +0 -0
  89. package/out/renderer/assets/{highlighted-body-OFNGDK62-J87DvYBX.js → highlighted-body-OFNGDK62-BGNnB1Ll.js} +2 -2
  90. package/out/renderer/assets/{index-Co8mzhyV.js → index-BJPggXxf.js} +66 -55
  91. package/out/renderer/assets/index-BJPggXxf.js.br +0 -0
  92. package/out/renderer/assets/index-BJPggXxf.js.gz +0 -0
  93. package/out/renderer/assets/index-DGML4zYf.css +382 -0
  94. package/out/renderer/assets/index-DGML4zYf.css.br +0 -0
  95. package/out/renderer/assets/index-DGML4zYf.css.gz +0 -0
  96. package/out/renderer/assets/{infoDiagram-42DDH7IO-BrfLG_LC.js → infoDiagram-42DDH7IO-z37e1cYq.js} +5 -5
  97. package/out/renderer/assets/infoDiagram-42DDH7IO-z37e1cYq.js.br +0 -0
  98. package/out/renderer/assets/infoDiagram-42DDH7IO-z37e1cYq.js.gz +0 -0
  99. package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-CO0cyvTq.js → ishikawaDiagram-UXIWVN3A-D0QTo3NZ.js} +2 -2
  100. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D0QTo3NZ.js.br +0 -0
  101. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D0QTo3NZ.js.gz +0 -0
  102. package/out/renderer/assets/{item-CvcokSWl.js → item-Cv-tnX8b.js} +1 -1
  103. package/out/renderer/assets/item-Cv-tnX8b.js.br +0 -0
  104. package/out/renderer/assets/item-Cv-tnX8b.js.gz +0 -0
  105. package/out/renderer/assets/{journeyDiagram-VCZTEJTY-D3F2Iu5P.js → journeyDiagram-VCZTEJTY-CQV0gdjM.js} +5 -5
  106. package/out/renderer/assets/journeyDiagram-VCZTEJTY-CQV0gdjM.js.br +0 -0
  107. package/out/renderer/assets/journeyDiagram-VCZTEJTY-CQV0gdjM.js.gz +0 -0
  108. package/out/renderer/assets/{kanban-definition-6JOO6SKY-CC_drlaB.js → kanban-definition-6JOO6SKY-DouRT6vc.js} +3 -3
  109. package/out/renderer/assets/kanban-definition-6JOO6SKY-DouRT6vc.js.br +0 -0
  110. package/out/renderer/assets/kanban-definition-6JOO6SKY-DouRT6vc.js.gz +0 -0
  111. package/out/renderer/assets/{layout-B_3n1To1.js → layout-BhbUjpvY.js} +4 -4
  112. package/out/renderer/assets/layout-BhbUjpvY.js.br +0 -0
  113. package/out/renderer/assets/layout-BhbUjpvY.js.gz +0 -0
  114. package/out/renderer/assets/{linear-AxwRZ_jw.js → linear-D1WO10JK.js} +1 -1
  115. package/out/renderer/assets/linear-D1WO10JK.js.br +0 -0
  116. package/out/renderer/assets/linear-D1WO10JK.js.gz +0 -0
  117. package/out/renderer/assets/{link-2-4A51Gs15.js → link-2-C5KPDK2L.js} +1 -1
  118. package/out/renderer/assets/{mermaid-GHXKKRXX-DFOJYe_t.js → mermaid-GHXKKRXX-KwA2c0l5.js} +36 -36
  119. package/out/renderer/assets/mermaid-GHXKKRXX-KwA2c0l5.js.br +0 -0
  120. package/out/renderer/assets/mermaid-GHXKKRXX-KwA2c0l5.js.gz +0 -0
  121. package/out/renderer/assets/{min-Dip7FmOo.js → min-BP2C7bzG.js} +2 -2
  122. package/out/renderer/assets/min-BP2C7bzG.js.br +0 -0
  123. package/out/renderer/assets/min-BP2C7bzG.js.gz +0 -0
  124. package/out/renderer/assets/{mindmap-definition-QFDTVHPH-D9aiLrpe.js → mindmap-definition-QFDTVHPH-CxLYrjVp.js} +4 -4
  125. package/out/renderer/assets/mindmap-definition-QFDTVHPH-CxLYrjVp.js.br +0 -0
  126. package/out/renderer/assets/mindmap-definition-QFDTVHPH-CxLYrjVp.js.gz +0 -0
  127. package/out/renderer/assets/{open-guide-KaWHLGYU.js → open-guide-UhaRhiI6.js} +1 -1
  128. package/out/renderer/assets/{package-search-CNALSYvi.js → package-search-DpyeQ5Lx.js} +1 -1
  129. package/out/renderer/assets/{pieDiagram-DEJITSTG-BX_34lAP.js → pieDiagram-DEJITSTG-D1LBRn_k.js} +7 -7
  130. package/out/renderer/assets/pieDiagram-DEJITSTG-D1LBRn_k.js.br +0 -0
  131. package/out/renderer/assets/pieDiagram-DEJITSTG-D1LBRn_k.js.gz +0 -0
  132. package/out/renderer/assets/{plus-DOVKq0d7.js → plus-CsV_3veW.js} +1 -1
  133. package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-G09qfNO8.js → quadrantDiagram-34T5L4WZ-89cdKeKP.js} +3 -3
  134. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-89cdKeKP.js.br +0 -0
  135. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-89cdKeKP.js.gz +0 -0
  136. package/out/renderer/assets/{refresh-cw-DGB7KSZ3.js → refresh-cw-CYW3HR-E.js} +1 -1
  137. package/out/renderer/assets/{requirementDiagram-MS252O5E-sJPY8r9J.js → requirementDiagram-MS252O5E-BPmX5cbr.js} +4 -4
  138. package/out/renderer/assets/requirementDiagram-MS252O5E-BPmX5cbr.js.br +0 -0
  139. package/out/renderer/assets/requirementDiagram-MS252O5E-BPmX5cbr.js.gz +0 -0
  140. package/out/renderer/assets/{resizable-C5jomC3Y.js → resizable-C_plViAK.js} +1 -1
  141. package/out/renderer/assets/resizable-C_plViAK.js.br +0 -0
  142. package/out/renderer/assets/resizable-C_plViAK.js.gz +0 -0
  143. package/out/renderer/assets/{sankeyDiagram-XADWPNL6-DHIS2ISZ.js → sankeyDiagram-XADWPNL6-Cy6CP9QU.js} +2 -2
  144. package/out/renderer/assets/sankeyDiagram-XADWPNL6-Cy6CP9QU.js.br +0 -0
  145. package/out/renderer/assets/sankeyDiagram-XADWPNL6-Cy6CP9QU.js.gz +0 -0
  146. package/out/renderer/assets/{schedule-BoqPUAOI.js → schedule-BRGzJU8Q.js} +10 -10
  147. package/out/renderer/assets/schedule-BRGzJU8Q.js.br +0 -0
  148. package/out/renderer/assets/schedule-BRGzJU8Q.js.gz +0 -0
  149. package/out/renderer/assets/{search-DdqhQVGJ.js → search-BHyqy--Q.js} +1 -1
  150. package/out/renderer/assets/{sequenceDiagram-FGHM5R23-Boc12Em2.js → sequenceDiagram-FGHM5R23-B3c7Za1w.js} +4 -4
  151. package/out/renderer/assets/sequenceDiagram-FGHM5R23-B3c7Za1w.js.br +0 -0
  152. package/out/renderer/assets/sequenceDiagram-FGHM5R23-B3c7Za1w.js.gz +0 -0
  153. package/out/renderer/assets/{session-DgU3TDDV.js → session-DAyi31xW.js} +855 -58
  154. package/out/renderer/assets/session-DAyi31xW.js.br +0 -0
  155. package/out/renderer/assets/session-DAyi31xW.js.gz +0 -0
  156. package/out/renderer/assets/{setting-dialog-4pmkQ7WP.js → setting-dialog-B9QpnCSy.js} +3 -3
  157. package/out/renderer/assets/setting-dialog-B9QpnCSy.js.br +0 -0
  158. package/out/renderer/assets/setting-dialog-B9QpnCSy.js.gz +0 -0
  159. package/out/renderer/assets/{settings-2-CI8inOtS.js → settings-2-DTnwbGMG.js} +1 -1
  160. package/out/renderer/assets/{settings-agents-C4u0s-iR.js → settings-agents-BrAPSjkm.js} +11 -11
  161. package/out/renderer/assets/settings-agents-BrAPSjkm.js.br +0 -0
  162. package/out/renderer/assets/settings-agents-BrAPSjkm.js.gz +0 -0
  163. package/out/renderer/assets/{settings-general-BkLSJoHB.js → settings-general-Ck2OiZjy.js} +2 -2
  164. package/out/renderer/assets/settings-general-Ck2OiZjy.js.br +0 -0
  165. package/out/renderer/assets/settings-general-Ck2OiZjy.js.gz +0 -0
  166. package/out/renderer/assets/{settings-ilink-6ZrgPpeO.js → settings-ilink-D0Br74W_.js} +3 -3
  167. package/out/renderer/assets/settings-ilink-D0Br74W_.js.br +0 -0
  168. package/out/renderer/assets/settings-ilink-D0Br74W_.js.gz +0 -0
  169. package/out/renderer/assets/{settings-image-generation-B6YIO6o_.js → settings-image-generation-BdyKoUUZ.js} +7 -7
  170. package/out/renderer/assets/settings-image-generation-BdyKoUUZ.js.br +0 -0
  171. package/out/renderer/assets/settings-image-generation-BdyKoUUZ.js.gz +0 -0
  172. package/out/renderer/assets/{settings-layout-Cf7GMXFZ.js → settings-layout-B7d1oQnz.js} +3 -3
  173. package/out/renderer/assets/settings-layout-B7d1oQnz.js.br +0 -0
  174. package/out/renderer/assets/settings-layout-B7d1oQnz.js.gz +0 -0
  175. package/out/renderer/assets/{settings-mcp-CJvL5Siz.js → settings-mcp-DtnVGpCh.js} +8 -8
  176. package/out/renderer/assets/settings-mcp-DtnVGpCh.js.br +0 -0
  177. package/out/renderer/assets/settings-mcp-DtnVGpCh.js.gz +0 -0
  178. package/out/renderer/assets/{settings-memory-CvkppfHy.js → settings-memory-Bff_D3Id.js} +3 -3
  179. package/out/renderer/assets/settings-memory-Bff_D3Id.js.br +0 -0
  180. package/out/renderer/assets/settings-memory-Bff_D3Id.js.gz +0 -0
  181. package/out/renderer/assets/{settings-snippets-CO_jL3O3.js → settings-snippets-CuwNZ684.js} +7 -7
  182. package/out/renderer/assets/settings-snippets-CuwNZ684.js.br +0 -0
  183. package/out/renderer/assets/settings-snippets-CuwNZ684.js.gz +0 -0
  184. package/out/renderer/assets/{settings-webui-5n5mI55N.js → settings-webui-CcjZQw6G.js} +2 -2
  185. package/out/renderer/assets/settings-webui-CcjZQw6G.js.br +0 -0
  186. package/out/renderer/assets/settings-webui-CcjZQw6G.js.gz +0 -0
  187. package/out/renderer/assets/{skills-installed-BqjN4mEl.js → skills-installed-BR3EmTKD.js} +4 -4
  188. package/out/renderer/assets/skills-installed-BR3EmTKD.js.br +0 -0
  189. package/out/renderer/assets/skills-installed-BR3EmTKD.js.gz +0 -0
  190. package/out/renderer/assets/{skills-layout-C8b-pe9X.js → skills-layout-Cgy95TdD.js} +2 -2
  191. package/out/renderer/assets/skills-layout-Cgy95TdD.js.br +0 -0
  192. package/out/renderer/assets/skills-layout-Cgy95TdD.js.gz +0 -0
  193. package/out/renderer/assets/{skills-skills-sh-Bh8KQ3PF.js → skills-skills-sh-7eO0Llg2.js} +4 -4
  194. package/out/renderer/assets/skills-skills-sh-7eO0Llg2.js.br +0 -0
  195. package/out/renderer/assets/skills-skills-sh-7eO0Llg2.js.gz +0 -0
  196. package/out/renderer/assets/{sortable.esm-DARmP-Qe.js → sortable.esm-BTWJnVbf.js} +1 -1
  197. package/out/renderer/assets/sortable.esm-BTWJnVbf.js.br +0 -0
  198. package/out/renderer/assets/sortable.esm-BTWJnVbf.js.gz +0 -0
  199. package/out/renderer/assets/{standard-schema-CtFhVVG9.js → standard-schema-Dk273X__.js} +1 -1
  200. package/out/renderer/assets/standard-schema-Dk273X__.js.br +0 -0
  201. package/out/renderer/assets/standard-schema-Dk273X__.js.gz +0 -0
  202. package/out/renderer/assets/{stateDiagram-FHFEXIEX-Da2gV_KD.js → stateDiagram-FHFEXIEX-C-7WuE0a.js} +9 -9
  203. package/out/renderer/assets/stateDiagram-FHFEXIEX-C-7WuE0a.js.br +0 -0
  204. package/out/renderer/assets/stateDiagram-FHFEXIEX-C-7WuE0a.js.gz +0 -0
  205. package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-D44mYiaY.js → stateDiagram-v2-QKLJ7IA2-IZRTgRo8.js} +5 -5
  206. package/out/renderer/assets/{task-Ca7ur8ku.js → task-Bd1x6VfK.js} +12 -12
  207. package/out/renderer/assets/task-Bd1x6VfK.js.br +0 -0
  208. package/out/renderer/assets/task-Bd1x6VfK.js.gz +0 -0
  209. package/out/renderer/assets/{textarea-BCC4Oh3S.js → textarea-CcqU8Ki7.js} +1 -1
  210. package/out/renderer/assets/{timeline-definition-GMOUNBTQ-egFv4rLM.js → timeline-definition-GMOUNBTQ-DVUMAatS.js} +3 -3
  211. package/out/renderer/assets/timeline-definition-GMOUNBTQ-DVUMAatS.js.br +0 -0
  212. package/out/renderer/assets/timeline-definition-GMOUNBTQ-DVUMAatS.js.gz +0 -0
  213. package/out/renderer/assets/{vennDiagram-DHZGUBPP-CnOs99wX.js → vennDiagram-DHZGUBPP-BtKdpgmE.js} +2 -2
  214. package/out/renderer/assets/vennDiagram-DHZGUBPP-BtKdpgmE.js.br +0 -0
  215. package/out/renderer/assets/vennDiagram-DHZGUBPP-BtKdpgmE.js.gz +0 -0
  216. package/out/renderer/assets/{wardley-RL74JXVD-Bb1llXhX.js → wardley-RL74JXVD-DRlpukah.js} +4 -4
  217. package/out/renderer/assets/wardley-RL74JXVD-DRlpukah.js.br +0 -0
  218. package/out/renderer/assets/wardley-RL74JXVD-DRlpukah.js.gz +0 -0
  219. package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-BupfUxsI.js → wardleyDiagram-NUSXRM2D-c_iDOO-3.js} +6 -6
  220. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-c_iDOO-3.js.br +0 -0
  221. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-c_iDOO-3.js.gz +0 -0
  222. package/out/renderer/assets/{wrench-Dj1S5dhM.js → wrench-C-pOIUrz.js} +1 -1
  223. package/out/renderer/assets/wrench-C-pOIUrz.js.br +0 -0
  224. package/out/renderer/assets/wrench-C-pOIUrz.js.gz +0 -0
  225. package/out/renderer/assets/{xlsx-view-DIarHecR.js → xlsx-view-Ca3bToM7.js} +10 -10
  226. package/out/renderer/assets/xlsx-view-Ca3bToM7.js.br +0 -0
  227. package/out/renderer/assets/xlsx-view-Ca3bToM7.js.gz +0 -0
  228. package/out/renderer/assets/{xychartDiagram-5P7HB3ND-CtPNxvT_.js → xychartDiagram-5P7HB3ND-D65drBbj.js} +3 -3
  229. package/out/renderer/assets/xychartDiagram-5P7HB3ND-D65drBbj.js.br +0 -0
  230. package/out/renderer/assets/xychartDiagram-5P7HB3ND-D65drBbj.js.gz +0 -0
  231. package/out/renderer/index.html +2 -2
  232. package/out/renderer/index.html.br +0 -0
  233. package/out/renderer/index.html.gz +0 -0
  234. package/out/server/main.js +356 -58
  235. package/package.json +2 -1
  236. package/out/renderer/assets/_baseUniq-DdWCC-Go.js.br +0 -0
  237. package/out/renderer/assets/_baseUniq-DdWCC-Go.js.gz +0 -0
  238. package/out/renderer/assets/arc-B_en4gJt.js.br +0 -0
  239. package/out/renderer/assets/arc-B_en4gJt.js.gz +0 -0
  240. package/out/renderer/assets/architectureDiagram-Q4EWVU46-W-l3dTvZ.js.br +0 -0
  241. package/out/renderer/assets/architectureDiagram-Q4EWVU46-W-l3dTvZ.js.gz +0 -0
  242. package/out/renderer/assets/automation--izxbhlj.js.br +0 -0
  243. package/out/renderer/assets/automation--izxbhlj.js.gz +0 -0
  244. package/out/renderer/assets/blockDiagram-DXYQGD6D-BdxXOr8Y.js.br +0 -0
  245. package/out/renderer/assets/blockDiagram-DXYQGD6D-BdxXOr8Y.js.gz +0 -0
  246. package/out/renderer/assets/c4Diagram-AHTNJAMY-C_8XgPtT.js.br +0 -0
  247. package/out/renderer/assets/c4Diagram-AHTNJAMY-C_8XgPtT.js.gz +0 -0
  248. package/out/renderer/assets/chunk-4TB4RGXK-C7h57GNs.js.br +0 -0
  249. package/out/renderer/assets/chunk-4TB4RGXK-C7h57GNs.js.gz +0 -0
  250. package/out/renderer/assets/chunk-EDXVE4YY-BPjYyS5o.js.br +0 -0
  251. package/out/renderer/assets/chunk-EDXVE4YY-BPjYyS5o.js.gz +0 -0
  252. package/out/renderer/assets/chunk-OYMX7WX6-D5Q5ZCl0.js.br +0 -0
  253. package/out/renderer/assets/chunk-OYMX7WX6-D5Q5ZCl0.js.gz +0 -0
  254. package/out/renderer/assets/chunk-YZCP3GAM-AbfctYy8.js.br +0 -0
  255. package/out/renderer/assets/chunk-YZCP3GAM-AbfctYy8.js.gz +0 -0
  256. package/out/renderer/assets/code-editor-cp9haQUT.js.br +0 -0
  257. package/out/renderer/assets/code-editor-cp9haQUT.js.gz +0 -0
  258. package/out/renderer/assets/collapsible-BHMUDZxc.js.br +0 -0
  259. package/out/renderer/assets/collapsible-BHMUDZxc.js.gz +0 -0
  260. package/out/renderer/assets/context-menu-K6z5uSmg.js.br +0 -0
  261. package/out/renderer/assets/context-menu-K6z5uSmg.js.gz +0 -0
  262. package/out/renderer/assets/cose-bilkent-S5V4N54A-CVcE9aWV.js.br +0 -0
  263. package/out/renderer/assets/cose-bilkent-S5V4N54A-CVcE9aWV.js.gz +0 -0
  264. package/out/renderer/assets/dagre-KV5264BT-zrX-TFsi.js.br +0 -0
  265. package/out/renderer/assets/dagre-KV5264BT-zrX-TFsi.js.gz +0 -0
  266. package/out/renderer/assets/diagram-5BDNPKRD-Ct9NrJP9.js.br +0 -0
  267. package/out/renderer/assets/diagram-5BDNPKRD-Ct9NrJP9.js.gz +0 -0
  268. package/out/renderer/assets/diagram-G4DWMVQ6-tTGWcCd_.js.br +0 -0
  269. package/out/renderer/assets/diagram-G4DWMVQ6-tTGWcCd_.js.gz +0 -0
  270. package/out/renderer/assets/diagram-MMDJMWI5-CpmcnN2B.js.br +0 -0
  271. package/out/renderer/assets/diagram-MMDJMWI5-CpmcnN2B.js.gz +0 -0
  272. package/out/renderer/assets/diagram-TYMM5635-DKTR2xS9.js.br +0 -0
  273. package/out/renderer/assets/diagram-TYMM5635-DKTR2xS9.js.gz +0 -0
  274. package/out/renderer/assets/erDiagram-SMLLAGMA-BW13EXAs.js.br +0 -0
  275. package/out/renderer/assets/erDiagram-SMLLAGMA-BW13EXAs.js.gz +0 -0
  276. package/out/renderer/assets/field-Be86bgEh.js.br +0 -0
  277. package/out/renderer/assets/field-Be86bgEh.js.gz +0 -0
  278. package/out/renderer/assets/flowDiagram-DWJPFMVM-C3oZAKxX.js.br +0 -0
  279. package/out/renderer/assets/flowDiagram-DWJPFMVM-C3oZAKxX.js.gz +0 -0
  280. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-BARJrpDB.js.br +0 -0
  281. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-BARJrpDB.js.gz +0 -0
  282. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-D0gl3Row.js.br +0 -0
  283. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-D0gl3Row.js.gz +0 -0
  284. package/out/renderer/assets/graph-DB7hnlLW.js.br +0 -0
  285. package/out/renderer/assets/graph-DB7hnlLW.js.gz +0 -0
  286. package/out/renderer/assets/index-Co8mzhyV.js.br +0 -0
  287. package/out/renderer/assets/index-Co8mzhyV.js.gz +0 -0
  288. package/out/renderer/assets/index-iHYS74sQ.css +0 -382
  289. package/out/renderer/assets/index-iHYS74sQ.css.br +0 -0
  290. package/out/renderer/assets/index-iHYS74sQ.css.gz +0 -0
  291. package/out/renderer/assets/infoDiagram-42DDH7IO-BrfLG_LC.js.br +0 -0
  292. package/out/renderer/assets/infoDiagram-42DDH7IO-BrfLG_LC.js.gz +0 -0
  293. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-CO0cyvTq.js.br +0 -0
  294. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-CO0cyvTq.js.gz +0 -0
  295. package/out/renderer/assets/item-CvcokSWl.js.br +0 -0
  296. package/out/renderer/assets/item-CvcokSWl.js.gz +0 -0
  297. package/out/renderer/assets/journeyDiagram-VCZTEJTY-D3F2Iu5P.js.br +0 -0
  298. package/out/renderer/assets/journeyDiagram-VCZTEJTY-D3F2Iu5P.js.gz +0 -0
  299. package/out/renderer/assets/kanban-definition-6JOO6SKY-CC_drlaB.js.br +0 -0
  300. package/out/renderer/assets/kanban-definition-6JOO6SKY-CC_drlaB.js.gz +0 -0
  301. package/out/renderer/assets/layout-B_3n1To1.js.br +0 -0
  302. package/out/renderer/assets/layout-B_3n1To1.js.gz +0 -0
  303. package/out/renderer/assets/linear-AxwRZ_jw.js.br +0 -0
  304. package/out/renderer/assets/linear-AxwRZ_jw.js.gz +0 -0
  305. package/out/renderer/assets/mermaid-GHXKKRXX-DFOJYe_t.js.br +0 -0
  306. package/out/renderer/assets/mermaid-GHXKKRXX-DFOJYe_t.js.gz +0 -0
  307. package/out/renderer/assets/min-Dip7FmOo.js.br +0 -0
  308. package/out/renderer/assets/min-Dip7FmOo.js.gz +0 -0
  309. package/out/renderer/assets/mindmap-definition-QFDTVHPH-D9aiLrpe.js.br +0 -0
  310. package/out/renderer/assets/mindmap-definition-QFDTVHPH-D9aiLrpe.js.gz +0 -0
  311. package/out/renderer/assets/pieDiagram-DEJITSTG-BX_34lAP.js.br +0 -0
  312. package/out/renderer/assets/pieDiagram-DEJITSTG-BX_34lAP.js.gz +0 -0
  313. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-G09qfNO8.js.br +0 -0
  314. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-G09qfNO8.js.gz +0 -0
  315. package/out/renderer/assets/requirementDiagram-MS252O5E-sJPY8r9J.js.br +0 -0
  316. package/out/renderer/assets/requirementDiagram-MS252O5E-sJPY8r9J.js.gz +0 -0
  317. package/out/renderer/assets/resizable-C5jomC3Y.js.br +0 -0
  318. package/out/renderer/assets/resizable-C5jomC3Y.js.gz +0 -0
  319. package/out/renderer/assets/sankeyDiagram-XADWPNL6-DHIS2ISZ.js.br +0 -0
  320. package/out/renderer/assets/sankeyDiagram-XADWPNL6-DHIS2ISZ.js.gz +0 -0
  321. package/out/renderer/assets/schedule-BoqPUAOI.js.br +0 -0
  322. package/out/renderer/assets/schedule-BoqPUAOI.js.gz +0 -0
  323. package/out/renderer/assets/sequenceDiagram-FGHM5R23-Boc12Em2.js.br +0 -0
  324. package/out/renderer/assets/sequenceDiagram-FGHM5R23-Boc12Em2.js.gz +0 -0
  325. package/out/renderer/assets/session-DgU3TDDV.js.br +0 -0
  326. package/out/renderer/assets/session-DgU3TDDV.js.gz +0 -0
  327. package/out/renderer/assets/setting-dialog-4pmkQ7WP.js.br +0 -0
  328. package/out/renderer/assets/setting-dialog-4pmkQ7WP.js.gz +0 -0
  329. package/out/renderer/assets/settings-agents-C4u0s-iR.js.br +0 -0
  330. package/out/renderer/assets/settings-agents-C4u0s-iR.js.gz +0 -0
  331. package/out/renderer/assets/settings-general-BkLSJoHB.js.br +0 -0
  332. package/out/renderer/assets/settings-general-BkLSJoHB.js.gz +0 -0
  333. package/out/renderer/assets/settings-ilink-6ZrgPpeO.js.br +0 -0
  334. package/out/renderer/assets/settings-ilink-6ZrgPpeO.js.gz +0 -0
  335. package/out/renderer/assets/settings-image-generation-B6YIO6o_.js.br +0 -0
  336. package/out/renderer/assets/settings-image-generation-B6YIO6o_.js.gz +0 -0
  337. package/out/renderer/assets/settings-layout-Cf7GMXFZ.js.br +0 -0
  338. package/out/renderer/assets/settings-layout-Cf7GMXFZ.js.gz +0 -0
  339. package/out/renderer/assets/settings-mcp-CJvL5Siz.js.br +0 -0
  340. package/out/renderer/assets/settings-mcp-CJvL5Siz.js.gz +0 -0
  341. package/out/renderer/assets/settings-memory-CvkppfHy.js.br +0 -0
  342. package/out/renderer/assets/settings-memory-CvkppfHy.js.gz +0 -0
  343. package/out/renderer/assets/settings-snippets-CO_jL3O3.js.br +0 -0
  344. package/out/renderer/assets/settings-snippets-CO_jL3O3.js.gz +0 -0
  345. package/out/renderer/assets/settings-webui-5n5mI55N.js.br +0 -0
  346. package/out/renderer/assets/settings-webui-5n5mI55N.js.gz +0 -0
  347. package/out/renderer/assets/skills-installed-BqjN4mEl.js.br +0 -0
  348. package/out/renderer/assets/skills-installed-BqjN4mEl.js.gz +0 -0
  349. package/out/renderer/assets/skills-layout-C8b-pe9X.js.br +0 -0
  350. package/out/renderer/assets/skills-layout-C8b-pe9X.js.gz +0 -0
  351. package/out/renderer/assets/skills-skills-sh-Bh8KQ3PF.js.br +0 -0
  352. package/out/renderer/assets/skills-skills-sh-Bh8KQ3PF.js.gz +0 -0
  353. package/out/renderer/assets/sortable.esm-DARmP-Qe.js.br +0 -0
  354. package/out/renderer/assets/sortable.esm-DARmP-Qe.js.gz +0 -0
  355. package/out/renderer/assets/standard-schema-CtFhVVG9.js.br +0 -0
  356. package/out/renderer/assets/standard-schema-CtFhVVG9.js.gz +0 -0
  357. package/out/renderer/assets/stateDiagram-FHFEXIEX-Da2gV_KD.js.br +0 -0
  358. package/out/renderer/assets/stateDiagram-FHFEXIEX-Da2gV_KD.js.gz +0 -0
  359. package/out/renderer/assets/task-Ca7ur8ku.js.br +0 -0
  360. package/out/renderer/assets/task-Ca7ur8ku.js.gz +0 -0
  361. package/out/renderer/assets/timeline-definition-GMOUNBTQ-egFv4rLM.js.br +0 -0
  362. package/out/renderer/assets/timeline-definition-GMOUNBTQ-egFv4rLM.js.gz +0 -0
  363. package/out/renderer/assets/vennDiagram-DHZGUBPP-CnOs99wX.js.br +0 -0
  364. package/out/renderer/assets/vennDiagram-DHZGUBPP-CnOs99wX.js.gz +0 -0
  365. package/out/renderer/assets/wardley-RL74JXVD-Bb1llXhX.js.br +0 -0
  366. package/out/renderer/assets/wardley-RL74JXVD-Bb1llXhX.js.gz +0 -0
  367. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-BupfUxsI.js.br +0 -0
  368. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-BupfUxsI.js.gz +0 -0
  369. package/out/renderer/assets/wrench-Dj1S5dhM.js.br +0 -0
  370. package/out/renderer/assets/wrench-Dj1S5dhM.js.gz +0 -0
  371. package/out/renderer/assets/xlsx-view-DIarHecR.js.br +0 -0
  372. package/out/renderer/assets/xlsx-view-DIarHecR.js.gz +0 -0
  373. package/out/renderer/assets/xychartDiagram-5P7HB3ND-CtPNxvT_.js.br +0 -0
  374. package/out/renderer/assets/xychartDiagram-5P7HB3ND-CtPNxvT_.js.gz +0 -0
Binary file
@@ -913,6 +913,35 @@ function readTerminalOutput(sessionIdOrSubSessionId, terminalId) {
913
913
  if (!existsSync3(filePath)) return null;
914
914
  return readFileSync3(filePath, "utf-8");
915
915
  }
916
+ function appendTokenUsage(sessionId, record) {
917
+ const dir = sessionDir(sessionId);
918
+ if (!dir) return;
919
+ mkdirSync3(dir, { recursive: true });
920
+ const filePath = join5(dir, "token-usage.jsonl");
921
+ appendFileSync(filePath, JSON.stringify(record) + "\n");
922
+ }
923
+ function isSessionTokenUsage(value) {
924
+ if (!value || typeof value !== "object") return false;
925
+ const record = value;
926
+ if (!record || typeof record.timestamp !== "number" || !record.usage) return false;
927
+ if (typeof record.usage !== "object") return false;
928
+ const usage = record.usage;
929
+ return typeof usage.totalTokens === "number" && typeof usage.inputTokens === "number" && typeof usage.outputTokens === "number";
930
+ }
931
+ function readTokenUsage(sessionId) {
932
+ const dir = sessionDir(sessionId);
933
+ if (!dir) return [];
934
+ const filePath = join5(dir, "token-usage.jsonl");
935
+ if (!existsSync3(filePath)) return [];
936
+ const content = readFileSync3(filePath, "utf-8");
937
+ return content.split("\n").filter((line) => line.trim()).map((line) => {
938
+ try {
939
+ return JSON.parse(line);
940
+ } catch {
941
+ return null;
942
+ }
943
+ }).filter((value) => isSessionTokenUsage(value));
944
+ }
916
945
  var storageOps = {
917
946
  getSettings,
918
947
  updateSettings,
@@ -932,7 +961,9 @@ var storageOps = {
932
961
  appendSessionMessage,
933
962
  readSessionMessages,
934
963
  appendTerminalOutput,
935
- readTerminalOutput
964
+ readTerminalOutput,
965
+ appendTokenUsage,
966
+ readTokenUsage
936
967
  };
937
968
 
938
969
  // src/backend/i18n.ts
@@ -5049,6 +5080,183 @@ Results from all sub-agents are returned when they all complete.`,
5049
5080
  };
5050
5081
  }
5051
5082
 
5083
+ // src/agents/token-breakdown.ts
5084
+ var _countTokens = null;
5085
+ var _formatFunctionDefinitions = null;
5086
+ async function getTokenizer() {
5087
+ if (!_countTokens) {
5088
+ const mod = await import("gpt-tokenizer");
5089
+ _countTokens = mod.countTokens;
5090
+ }
5091
+ if (!_formatFunctionDefinitions) {
5092
+ const mod = await import("gpt-tokenizer/esm/functionCalling");
5093
+ _formatFunctionDefinitions = mod.formatFunctionDefinitions;
5094
+ }
5095
+ return {
5096
+ countTokens: _countTokens,
5097
+ formatFunctionDefinitions: _formatFunctionDefinitions
5098
+ };
5099
+ }
5100
+ async function estimateToolsDefinitionTokens(tools) {
5101
+ const { countTokens, formatFunctionDefinitions } = await getTokenizer();
5102
+ const entries = Object.entries(tools);
5103
+ if (entries.length === 0) {
5104
+ return { total: 0, perTool: [] };
5105
+ }
5106
+ const functionDefs = entries.map(([name, tool4]) => ({
5107
+ name,
5108
+ description: typeof tool4.description === "string" ? tool4.description : void 0,
5109
+ parameters: extractJsonSchema(tool4)
5110
+ }));
5111
+ const totalFormatted = formatFunctionDefinitions(functionDefs);
5112
+ const total = countTokens(totalFormatted) + 9;
5113
+ const emptyNamespaceTokens = countTokens("namespace functions {\n\n} // namespace functions");
5114
+ const perTool = functionDefs.map((fn) => {
5115
+ const singleFormatted = formatFunctionDefinitions([fn]);
5116
+ const singleTotal = countTokens(singleFormatted) + 9;
5117
+ return {
5118
+ name: fn.name,
5119
+ tokens: Math.max(0, singleTotal - emptyNamespaceTokens)
5120
+ };
5121
+ });
5122
+ return { total, perTool };
5123
+ }
5124
+ async function estimateInputComposition(params) {
5125
+ const { countTokens } = await getTokenizer();
5126
+ const systemPromptTokens = countTokens(params.systemPrompt) + 3;
5127
+ const toolsDef = await estimateToolsDefinitionTokens(params.tools);
5128
+ const historyTokens = params.historyText ? countTokens(params.historyText) : 0;
5129
+ const userMessageTokens = countTokens(params.userMessageText) + 3;
5130
+ const estimatedTotal = systemPromptTokens + toolsDef.total + historyTokens + userMessageTokens + 3;
5131
+ return {
5132
+ systemPrompt: systemPromptTokens,
5133
+ toolsDefinition: toolsDef,
5134
+ history: historyTokens,
5135
+ userMessage: userMessageTokens,
5136
+ userMessageText: params.userMessageText,
5137
+ estimatedTotal,
5138
+ delta: params.actualInputTokens - estimatedTotal
5139
+ };
5140
+ }
5141
+ function buildStepBreakdown(steps) {
5142
+ const stepDetails = steps.map((step, idx) => {
5143
+ const next = steps[idx + 1];
5144
+ const usage = step.usage;
5145
+ const toolCallEstimates = buildToolCallEstimates(step, next);
5146
+ return {
5147
+ stepNumber: step.stepNumber,
5148
+ finishReason: step.finishReason,
5149
+ inputTokens: usage.inputTokens ?? 0,
5150
+ outputTokens: usage.outputTokens ?? 0,
5151
+ inputDetails: {
5152
+ cacheReadTokens: usage.inputTokenDetails?.cacheReadTokens ?? void 0,
5153
+ cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens ?? void 0,
5154
+ noCacheTokens: usage.inputTokenDetails?.noCacheTokens ?? void 0
5155
+ },
5156
+ outputDetails: {
5157
+ textTokens: usage.outputTokenDetails?.textTokens ?? void 0,
5158
+ reasoningTokens: usage.outputTokenDetails?.reasoningTokens ?? void 0
5159
+ },
5160
+ toolCalls: toolCallEstimates,
5161
+ performance: {
5162
+ stepTimeMs: step.performance.stepTimeMs,
5163
+ responseTimeMs: step.performance.responseTimeMs,
5164
+ timeToFirstOutputMs: step.performance.timeToFirstOutputMs ?? void 0,
5165
+ outputTokensPerSecond: step.performance.outputTokensPerSecond ?? void 0
5166
+ }
5167
+ };
5168
+ });
5169
+ const totalTimeMs = steps.reduce((sum, s) => sum + s.performance.stepTimeMs, 0);
5170
+ const lastStep = steps[steps.length - 1];
5171
+ const effectiveOutputTokensPerSecond = lastStep?.performance.effectiveOutputTokensPerSecond ?? 0;
5172
+ return {
5173
+ steps: stepDetails,
5174
+ performance: { totalTimeMs, effectiveOutputTokensPerSecond }
5175
+ };
5176
+ }
5177
+ function buildToolCallEstimates(step, next) {
5178
+ if (step.toolCalls.length === 0) return [];
5179
+ const usage = step.usage;
5180
+ const outputTokens = usage.outputTokens ?? 0;
5181
+ const textTokens = usage.outputTokenDetails?.textTokens ?? 0;
5182
+ const reasoningTokens = usage.outputTokenDetails?.reasoningTokens ?? 0;
5183
+ const totalToolCallOutput = Math.max(0, outputTokens - textTokens - reasoningTokens);
5184
+ let totalToolResultInput = 0;
5185
+ if (next) {
5186
+ const nextInput = next.usage.inputTokens ?? 0;
5187
+ const currentInput = usage.inputTokens ?? 0;
5188
+ const currentOutput = usage.outputTokens ?? 0;
5189
+ totalToolResultInput = Math.max(0, nextInput - currentInput - currentOutput);
5190
+ }
5191
+ const count = step.toolCalls.length;
5192
+ const toolExecutionMs = step.performance.toolExecutionMs;
5193
+ return step.toolCalls.map((tc) => ({
5194
+ toolName: tc.toolName,
5195
+ args: serializeToolCallArgs(tc.input),
5196
+ argumentsOutputTokens: Math.round(totalToolCallOutput / count),
5197
+ resultInputTokens: Math.round(totalToolResultInput / count),
5198
+ executionMs: toolExecutionMs?.[tc.toolCallId] ?? void 0
5199
+ }));
5200
+ }
5201
+ function serializeToolCallArgs(input) {
5202
+ if (input == null) return "";
5203
+ if (typeof input === "string") return input;
5204
+ try {
5205
+ return JSON.stringify(input);
5206
+ } catch {
5207
+ return String(input);
5208
+ }
5209
+ }
5210
+ function extractJsonSchema(tool4) {
5211
+ const schema = tool4.inputSchema;
5212
+ if (!schema) return void 0;
5213
+ if (typeof schema === "object" && schema !== null && "jsonSchema" in schema) {
5214
+ const jsonSchema = schema.jsonSchema;
5215
+ if (typeof jsonSchema === "object" && jsonSchema !== null) {
5216
+ return jsonSchema;
5217
+ }
5218
+ }
5219
+ if (typeof schema === "object" && schema !== null && "_def" in schema) {
5220
+ return void 0;
5221
+ }
5222
+ if (typeof schema === "object" && schema !== null) {
5223
+ return schema;
5224
+ }
5225
+ return void 0;
5226
+ }
5227
+ function serializeMessagesForCounting(messages) {
5228
+ const serializedMessages = [];
5229
+ for (const msg of messages) {
5230
+ const serializedParts = [];
5231
+ if (typeof msg.content === "string") {
5232
+ serializedParts.push(msg.content);
5233
+ } else if (Array.isArray(msg.content)) {
5234
+ for (const part of msg.content) {
5235
+ if (typeof part === "string") {
5236
+ serializedParts.push(part);
5237
+ continue;
5238
+ }
5239
+ if (part && typeof part === "object" && "text" in part) {
5240
+ serializedParts.push(String(part.text));
5241
+ continue;
5242
+ }
5243
+ if (part != null) {
5244
+ const serializedPart = JSON.stringify(part);
5245
+ if (serializedPart !== void 0) serializedParts.push(serializedPart);
5246
+ }
5247
+ }
5248
+ } else if (msg.content != null) {
5249
+ const serializedContent = JSON.stringify(msg.content);
5250
+ if (serializedContent !== void 0) serializedParts.push(serializedContent);
5251
+ }
5252
+ if (serializedParts.length > 0) {
5253
+ const role = msg.role ? `[${msg.role}] ` : "";
5254
+ serializedMessages.push(`${role}${serializedParts.join("\n")}`);
5255
+ }
5256
+ }
5257
+ return serializedMessages.join("\n");
5258
+ }
5259
+
5052
5260
  // src/agents/openai-compatible-agent.ts
5053
5261
  var MODEL_CONFIG_ID = "model";
5054
5262
  var THOUGHT_LEVEL_CONFIG_ID = "thought_level";
@@ -5145,6 +5353,12 @@ function buildSafeUserMessage(prompt) {
5145
5353
  var AVAILABLE_COMMANDS = [
5146
5354
  { name: "compact", description: "Compress conversation context" }
5147
5355
  ];
5356
+ var COMPACT_PROMPT = `Compress the conversation into a structured markdown summary.
5357
+ Include: key decisions, code changes (with file paths),
5358
+ technical context, and pending tasks.
5359
+ Use headings and bullet points for clarity.
5360
+ Detect the user's commonly used language from the conversation history and respond in that language.
5361
+ Output only the summary.`;
5148
5362
  var OpenaiCompatibleAgent = class {
5149
5363
  sessions = /* @__PURE__ */ new Map();
5150
5364
  provider;
@@ -5323,16 +5537,70 @@ var OpenaiCompatibleAgent = class {
5323
5537
  );
5324
5538
  }
5325
5539
  }
5326
- async pushAvailableCommands(sessionId) {
5540
+ async pushUsageUpdate(sessionId, usageUpdate) {
5541
+ if (!this.connection) return;
5542
+ await this.connection.sessionUpdate({
5543
+ sessionId,
5544
+ update: {
5545
+ sessionUpdate: "usage_update",
5546
+ ...usageUpdate
5547
+ }
5548
+ });
5549
+ }
5550
+ async pushAvailableCommands(sessionId, commands) {
5327
5551
  if (!this.connection) return;
5328
5552
  await this.connection.sessionUpdate({
5329
5553
  sessionId,
5330
5554
  update: {
5331
5555
  sessionUpdate: "available_commands_update",
5332
- availableCommands: AVAILABLE_COMMANDS
5556
+ availableCommands: commands
5333
5557
  }
5334
5558
  });
5335
5559
  }
5560
+ /**
5561
+ * Build per-turn token breakdown metadata (best-effort).
5562
+ * Shared by normal prompts and slash commands (e.g. /compact).
5563
+ * Must never throw — breakdown is optional metadata that must not fail the prompt.
5564
+ */
5565
+ async buildTokenBreakdown(params) {
5566
+ try {
5567
+ const stepBreakdown = buildStepBreakdown(params.steps);
5568
+ const historyText = serializeMessagesForCounting(params.history);
5569
+ const userMessageText = serializeMessagesForCounting([params.userMessage]);
5570
+ const inputComposition = await estimateInputComposition({
5571
+ systemPrompt: params.systemPrompt,
5572
+ tools: params.tools,
5573
+ historyText,
5574
+ userMessageText,
5575
+ actualInputTokens: params.steps[0]?.usage.inputTokens ?? 0
5576
+ });
5577
+ return {
5578
+ stepCount: params.steps.length,
5579
+ inputComposition,
5580
+ steps: stepBreakdown.steps,
5581
+ performance: stepBreakdown.performance
5582
+ };
5583
+ } catch (error) {
5584
+ const message = error instanceof Error ? error.message : String(error);
5585
+ console.warn(
5586
+ `[OpenaiCompatibleAgent] Failed to build token breakdown for a prompt: ${message}`
5587
+ );
5588
+ return {
5589
+ stepCount: params.steps.length,
5590
+ inputComposition: {
5591
+ systemPrompt: 0,
5592
+ toolsDefinition: { total: 0, perTool: [] },
5593
+ history: 0,
5594
+ userMessage: 0,
5595
+ userMessageText: "",
5596
+ estimatedTotal: 0,
5597
+ delta: 0
5598
+ },
5599
+ steps: [],
5600
+ performance: { totalTimeMs: 0, effectiveOutputTokensPerSecond: 0 }
5601
+ };
5602
+ }
5603
+ }
5336
5604
  async newSession(params) {
5337
5605
  const modelState = await this.getModels();
5338
5606
  const sessionId = randomUUID6();
@@ -5355,7 +5623,7 @@ var OpenaiCompatibleAgent = class {
5355
5623
  this.sessions.set(sessionId, session);
5356
5624
  await this.persistSessionState(session);
5357
5625
  setTimeout(() => {
5358
- this.pushAvailableCommands(sessionId).catch(() => {
5626
+ this.pushAvailableCommands(sessionId, AVAILABLE_COMMANDS).catch(() => {
5359
5627
  });
5360
5628
  }, 500);
5361
5629
  return {
@@ -5403,21 +5671,18 @@ var OpenaiCompatibleAgent = class {
5403
5671
  if (!currentModelExists) {
5404
5672
  active.modelId = modelState.currentModelId || null;
5405
5673
  }
5406
- if (persistedState) {
5407
- active.contextUsedTokens = persistedState.contextUsedTokens;
5408
- }
5409
- if (this.connection) {
5410
- await this.connection.sessionUpdate({
5411
- sessionId: params.sessionId,
5412
- update: {
5413
- sessionUpdate: "usage_update",
5414
- used: active.contextUsedTokens,
5415
- size: this.contextWindowTokens
5416
- }
5417
- });
5418
- }
5674
+ const contextUsageUpdate = {
5675
+ used: persistedState?.contextUsedTokens ?? 0,
5676
+ size: this.contextWindowTokens
5677
+ };
5678
+ active.contextUsedTokens = contextUsageUpdate.used;
5419
5679
  await this.persistSessionState(active);
5420
- await this.pushAvailableCommands(params.sessionId);
5680
+ setTimeout(() => {
5681
+ this.pushUsageUpdate(params.sessionId, contextUsageUpdate).catch(() => {
5682
+ });
5683
+ this.pushAvailableCommands(params.sessionId, AVAILABLE_COMMANDS).catch(() => {
5684
+ });
5685
+ }, 500);
5421
5686
  return {
5422
5687
  configOptions: await this.buildConfigOptions(active.modelId, active.thoughtLevel)
5423
5688
  };
@@ -5476,18 +5741,14 @@ var OpenaiCompatibleAgent = class {
5476
5741
  }
5477
5742
  return { stopReason: "end_turn" };
5478
5743
  }
5744
+ const historyBeforeCompact = session.history.slice();
5479
5745
  const summaryResult = await generateText2({
5480
5746
  model: this.provider.chatModel(session.modelId),
5481
5747
  messages: [
5482
- ...session.history,
5748
+ ...historyBeforeCompact,
5483
5749
  {
5484
5750
  role: "user",
5485
- content: `Compress the conversation into a structured markdown summary.
5486
- Include: key decisions, code changes (with file paths),
5487
- technical context, and pending tasks.
5488
- Use headings and bullet points for clarity.
5489
- Detect the user's commonly used language from the conversation history and respond in that language.
5490
- Output only the summary.`
5751
+ content: COMPACT_PROMPT
5491
5752
  }
5492
5753
  ],
5493
5754
  maxOutputTokens: 5e3
@@ -5516,18 +5777,28 @@ var OpenaiCompatibleAgent = class {
5516
5777
  const summaryUsage = summaryResult.finalStep.usage;
5517
5778
  const outputTokens = summaryUsage.outputTokens ?? 0;
5518
5779
  session.contextUsedTokens = outputTokens;
5519
- if (this.connection) {
5520
- await this.connection.sessionUpdate({
5521
- sessionId,
5522
- update: {
5523
- sessionUpdate: "usage_update",
5524
- used: session.contextUsedTokens,
5525
- size: this.contextWindowTokens
5526
- }
5527
- });
5528
- }
5780
+ await this.pushUsageUpdate(sessionId, {
5781
+ used: session.contextUsedTokens,
5782
+ size: this.contextWindowTokens
5783
+ });
5529
5784
  await this.persistSessionState(session);
5530
- return { stopReason: "end_turn" };
5785
+ const tokenBreakdown = await this.buildTokenBreakdown({
5786
+ systemPrompt: "",
5787
+ tools: {},
5788
+ history: historyBeforeCompact,
5789
+ userMessage: { role: "user", content: COMPACT_PROMPT },
5790
+ steps: summaryResult.steps
5791
+ });
5792
+ const usage = {
5793
+ totalTokens: summaryUsage.totalTokens ?? 0,
5794
+ inputTokens: summaryUsage.inputTokens ?? 0,
5795
+ outputTokens: summaryUsage.outputTokens ?? 0,
5796
+ thoughtTokens: summaryUsage.outputTokenDetails?.reasoningTokens,
5797
+ cachedReadTokens: summaryUsage.inputTokenDetails?.cacheReadTokens,
5798
+ cachedWriteTokens: summaryUsage.inputTokenDetails?.cacheWriteTokens,
5799
+ _meta: { fello: { tokenBreakdown } }
5800
+ };
5801
+ return { stopReason: "end_turn", usage };
5531
5802
  }
5532
5803
  async prompt(params) {
5533
5804
  const session = this.sessions.get(params.sessionId);
@@ -5626,15 +5897,16 @@ var OpenaiCompatibleAgent = class {
5626
5897
  getModel: () => this.provider.chatModel(session.modelId),
5627
5898
  parentSignal: abortController.signal
5628
5899
  });
5900
+ const allTools = {
5901
+ ...sharedTools,
5902
+ ...subagentTool,
5903
+ ...imageAnalysisTool
5904
+ };
5629
5905
  const result = streamText2({
5630
5906
  model: this.provider.chatModel(session.modelId),
5631
5907
  system: systemPrompt,
5632
5908
  messages: [...session.history, userMessage],
5633
- tools: {
5634
- ...sharedTools,
5635
- ...subagentTool,
5636
- ...imageAnalysisTool
5637
- },
5909
+ tools: allTools,
5638
5910
  stopWhen: isStepCount2(128),
5639
5911
  abortSignal: abortController.signal,
5640
5912
  providerOptions: {
@@ -5690,30 +5962,38 @@ var OpenaiCompatibleAgent = class {
5690
5962
  });
5691
5963
  }
5692
5964
  }
5693
- const response = await result.response;
5694
- session.history.push(userMessage, ...response.messages);
5695
- await this.appendSessionHistory(session.id, userMessage, ...response.messages);
5696
- const [turnUsage, finalStep] = await Promise.all([result.usage, result.finalStep]);
5965
+ const [turnUsage, finalStep, steps, responseMessages] = await Promise.all([
5966
+ result.usage,
5967
+ result.finalStep,
5968
+ result.steps,
5969
+ result.responseMessages
5970
+ ]);
5697
5971
  const finalStepUsage = finalStep.usage;
5698
- session.contextUsedTokens = (finalStepUsage.inputTokens ?? 0) + (finalStepUsage.outputTokens ?? 0);
5972
+ const contextUsedTokens = (finalStepUsage.inputTokens ?? 0) + (finalStepUsage.outputTokens ?? 0);
5973
+ const historyBeforeTurn = session.history.slice();
5974
+ session.history.push(userMessage, ...responseMessages);
5975
+ await this.appendSessionHistory(session.id, userMessage, ...responseMessages);
5976
+ session.contextUsedTokens = contextUsedTokens;
5977
+ const tokenBreakdown = await this.buildTokenBreakdown({
5978
+ systemPrompt,
5979
+ tools: allTools,
5980
+ history: historyBeforeTurn,
5981
+ userMessage,
5982
+ steps
5983
+ });
5699
5984
  const usage = {
5700
5985
  totalTokens: turnUsage.totalTokens ?? 0,
5701
5986
  inputTokens: turnUsage.inputTokens ?? 0,
5702
5987
  outputTokens: turnUsage.outputTokens ?? 0,
5703
5988
  thoughtTokens: turnUsage.outputTokenDetails?.reasoningTokens,
5704
5989
  cachedReadTokens: turnUsage.inputTokenDetails?.cacheReadTokens,
5705
- cachedWriteTokens: turnUsage.inputTokenDetails?.cacheWriteTokens
5990
+ cachedWriteTokens: turnUsage.inputTokenDetails?.cacheWriteTokens,
5991
+ _meta: { fello: { tokenBreakdown } }
5706
5992
  };
5707
- if (this.connection) {
5708
- await this.connection.sessionUpdate({
5709
- sessionId: params.sessionId,
5710
- update: {
5711
- sessionUpdate: "usage_update",
5712
- used: session.contextUsedTokens,
5713
- size: this.contextWindowTokens
5714
- }
5715
- });
5716
- }
5993
+ await this.pushUsageUpdate(params.sessionId, {
5994
+ used: session.contextUsedTokens,
5995
+ size: this.contextWindowTokens
5996
+ });
5717
5997
  return {
5718
5998
  stopReason: "end_turn",
5719
5999
  usage
@@ -9246,6 +9526,11 @@ function createSessionModule(ctx, deps) {
9246
9526
  if (!session) throw new Error("Session does not exist");
9247
9527
  return { messages: notif.mergeNotifications(storage.readSessionMessages(sessionId)) };
9248
9528
  }
9529
+ async function getSessionTokenUsage({ sessionId }) {
9530
+ const session = storage.getSession(sessionId);
9531
+ if (!session) throw new Error("Session does not exist");
9532
+ return { records: storage.readTokenUsage(sessionId) };
9533
+ }
9249
9534
  async function sendPrompt({
9250
9535
  sessionId,
9251
9536
  contents
@@ -9356,6 +9641,15 @@ function createSessionModule(ctx, deps) {
9356
9641
  isStreaming: false,
9357
9642
  ...promptResponse?.usage ? { lastTurnUsage: promptResponse.usage } : {}
9358
9643
  });
9644
+ if (promptResponse?.usage?._meta) {
9645
+ try {
9646
+ storage.appendTokenUsage(sessionId, {
9647
+ timestamp: Date.now(),
9648
+ usage: promptResponse.usage
9649
+ });
9650
+ } catch {
9651
+ }
9652
+ }
9359
9653
  const updated2 = storage.getSession(sessionId);
9360
9654
  if (updated2) sendEvent("session-changed", { session: updated2 });
9361
9655
  const bridge = ilinkState.getBridge();
@@ -9629,6 +9923,7 @@ function createSessionModule(ctx, deps) {
9629
9923
  newSession,
9630
9924
  loadSession,
9631
9925
  getSessionHistory,
9926
+ getSessionTokenUsage,
9632
9927
  sendPrompt,
9633
9928
  cancelPrompt,
9634
9929
  updateSession: updateSession2,
@@ -11666,6 +11961,9 @@ function initBackend(emitter) {
11666
11961
  async getSessionHistory(params) {
11667
11962
  return session.getSessionHistory(params);
11668
11963
  },
11964
+ async getSessionTokenUsage(params) {
11965
+ return session.getSessionTokenUsage(params);
11966
+ },
11669
11967
  async sendPrompt(params) {
11670
11968
  return session.sendPrompt(params);
11671
11969
  },
@@ -11912,7 +12210,7 @@ function initBackend(emitter) {
11912
12210
  }
11913
12211
 
11914
12212
  // package.json
11915
- var version = "0.1.51";
12213
+ var version = "0.1.52";
11916
12214
 
11917
12215
  // src/server/main.ts
11918
12216
  var port;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zythum02/fello-server",
3
- "version": "0.1.51",
3
+ "version": "0.1.52",
4
4
  "description": "Fello Server — standalone headless AI agent server",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,6 +26,7 @@
26
26
  "es-toolkit": "^1.50.0",
27
27
  "fuse.js": "^7.5.0",
28
28
  "globby": "^16.2.3",
29
+ "gpt-tokenizer": "^4.0.0",
29
30
  "i18next": "^26.3.6",
30
31
  "launch-editor": "^2.14.1",
31
32
  "mime-types": "^3.0.2",