@zythum02/fello-server 0.1.51 → 0.1.53
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.
- package/out/renderer/assets/{_baseUniq-DdWCC-Go.js → _baseUniq-CJr3HkLS.js} +1 -1
- package/out/renderer/assets/_baseUniq-CJr3HkLS.js.br +0 -0
- package/out/renderer/assets/_baseUniq-CJr3HkLS.js.gz +0 -0
- package/out/renderer/assets/{arc-B_en4gJt.js → arc-POsBroTF.js} +1 -1
- package/out/renderer/assets/arc-POsBroTF.js.br +0 -0
- package/out/renderer/assets/arc-POsBroTF.js.gz +0 -0
- package/out/renderer/assets/{architectureDiagram-Q4EWVU46-W-l3dTvZ.js → architectureDiagram-Q4EWVU46-CmToUhDb.js} +6 -6
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-CmToUhDb.js.br +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-CmToUhDb.js.gz +0 -0
- package/out/renderer/assets/{arrow-left-BwbOF_G_.js → arrow-left-CxS1t3f7.js} +1 -1
- package/out/renderer/assets/{automation--izxbhlj.js → automation-Cyz3eLWp.js} +7 -8
- package/out/renderer/assets/automation-Cyz3eLWp.js.br +0 -0
- package/out/renderer/assets/automation-Cyz3eLWp.js.gz +0 -0
- package/out/renderer/assets/{blockDiagram-DXYQGD6D-BdxXOr8Y.js → blockDiagram-DXYQGD6D-M2nnTg9f.js} +7 -7
- package/out/renderer/assets/blockDiagram-DXYQGD6D-M2nnTg9f.js.br +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-M2nnTg9f.js.gz +0 -0
- package/out/renderer/assets/{c4Diagram-AHTNJAMY-C_8XgPtT.js → c4Diagram-AHTNJAMY-CwLtsy_0.js} +3 -3
- package/out/renderer/assets/c4Diagram-AHTNJAMY-CwLtsy_0.js.br +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-CwLtsy_0.js.gz +0 -0
- package/out/renderer/assets/{channel-BsSLbHzl.js → channel-BUNDMqpH.js} +1 -1
- package/out/renderer/assets/{chunk-4BX2VUAB-CADGLBio.js → chunk-4BX2VUAB-B2qXmkDT.js} +1 -1
- package/out/renderer/assets/{chunk-4TB4RGXK-C7h57GNs.js → chunk-4TB4RGXK-DXLZpPY5.js} +5 -5
- package/out/renderer/assets/chunk-4TB4RGXK-DXLZpPY5.js.br +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-DXLZpPY5.js.gz +0 -0
- package/out/renderer/assets/{chunk-55IACEB6-Cw-dv2b3.js → chunk-55IACEB6-CJeyefxI.js} +1 -1
- package/out/renderer/assets/{chunk-EDXVE4YY-BPjYyS5o.js → chunk-EDXVE4YY-CNjJEQfY.js} +1 -1
- package/out/renderer/assets/chunk-EDXVE4YY-CNjJEQfY.js.br +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-CNjJEQfY.js.gz +0 -0
- package/out/renderer/assets/{chunk-FMBD7UC4-DhJ5Z89u.js → chunk-FMBD7UC4-DOAOsjRu.js} +1 -1
- package/out/renderer/assets/{chunk-OYMX7WX6-D5Q5ZCl0.js → chunk-OYMX7WX6-BG4B1VQ7.js} +3 -3
- package/out/renderer/assets/chunk-OYMX7WX6-BG4B1VQ7.js.br +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-BG4B1VQ7.js.gz +0 -0
- package/out/renderer/assets/{chunk-QZHKN3VN-SsM-5KS-.js → chunk-QZHKN3VN-B9zfXYIQ.js} +1 -1
- package/out/renderer/assets/{chunk-YZCP3GAM-AbfctYy8.js → chunk-YZCP3GAM-jeoI2tsD.js} +1 -1
- package/out/renderer/assets/chunk-YZCP3GAM-jeoI2tsD.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-jeoI2tsD.js.gz +0 -0
- package/out/renderer/assets/{circle-x-CxFDvVH_.js → circle-x-B1kBsMlS.js} +1 -1
- package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-7ZGV_42k.js → classDiagram-6PBFFD2Q-DWPFF3Yt.js} +7 -7
- package/out/renderer/assets/{classDiagram-6PBFFD2Q-7ZGV_42k.js → classDiagram-v2-HSJHXN6E-DWPFF3Yt.js} +7 -7
- package/out/renderer/assets/{clone-D2_BL2Tz.js → clone-Dcvr9oKv.js} +1 -1
- package/out/renderer/assets/{code-editor-cp9haQUT.js → code-editor-CEXlC4aV.js} +2 -2
- package/out/renderer/assets/code-editor-CEXlC4aV.js.br +0 -0
- package/out/renderer/assets/code-editor-CEXlC4aV.js.gz +0 -0
- package/out/renderer/assets/{collapsible-BHMUDZxc.js → collapsible-CMuCJUWG.js} +1 -1
- package/out/renderer/assets/collapsible-CMuCJUWG.js.br +0 -0
- package/out/renderer/assets/collapsible-CMuCJUWG.js.gz +0 -0
- package/out/renderer/assets/{cose-bilkent-S5V4N54A-CVcE9aWV.js → cose-bilkent-S5V4N54A-B3bgImVS.js} +2 -2
- package/out/renderer/assets/cose-bilkent-S5V4N54A-B3bgImVS.js.br +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-B3bgImVS.js.gz +0 -0
- package/out/renderer/assets/{dagre-KV5264BT-zrX-TFsi.js → dagre-KV5264BT-DTbumBA_.js} +7 -7
- package/out/renderer/assets/dagre-KV5264BT-DTbumBA_.js.br +0 -0
- package/out/renderer/assets/dagre-KV5264BT-DTbumBA_.js.gz +0 -0
- package/out/renderer/assets/{diagram-5BDNPKRD-Ct9NrJP9.js → diagram-5BDNPKRD-B34Y6e8q.js} +7 -7
- package/out/renderer/assets/diagram-5BDNPKRD-B34Y6e8q.js.br +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-B34Y6e8q.js.gz +0 -0
- package/out/renderer/assets/{diagram-G4DWMVQ6-tTGWcCd_.js → diagram-G4DWMVQ6-BBiBmFR4.js} +7 -7
- package/out/renderer/assets/diagram-G4DWMVQ6-BBiBmFR4.js.br +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-BBiBmFR4.js.gz +0 -0
- package/out/renderer/assets/{diagram-MMDJMWI5-CpmcnN2B.js → diagram-MMDJMWI5-P-YslDjG.js} +6 -6
- package/out/renderer/assets/diagram-MMDJMWI5-P-YslDjG.js.br +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-P-YslDjG.js.gz +0 -0
- package/out/renderer/assets/{diagram-TYMM5635-DKTR2xS9.js → diagram-TYMM5635-D_cLard_.js} +6 -6
- package/out/renderer/assets/diagram-TYMM5635-D_cLard_.js.br +0 -0
- package/out/renderer/assets/diagram-TYMM5635-D_cLard_.js.gz +0 -0
- package/out/renderer/assets/{ellipsis-8708fodN.js → ellipsis-D1agTYu1.js} +1 -1
- package/out/renderer/assets/{erDiagram-SMLLAGMA-BW13EXAs.js → erDiagram-SMLLAGMA-C1MHqKvC.js} +5 -5
- package/out/renderer/assets/erDiagram-SMLLAGMA-C1MHqKvC.js.br +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-C1MHqKvC.js.gz +0 -0
- package/out/renderer/assets/{field-Be86bgEh.js → field-DR3J0r9e.js} +1 -1
- package/out/renderer/assets/field-DR3J0r9e.js.br +0 -0
- package/out/renderer/assets/field-DR3J0r9e.js.gz +0 -0
- package/out/renderer/assets/{file-text-CMw1QH-C.js → file-text-nGCW6zu1.js} +1 -1
- package/out/renderer/assets/{flowDiagram-DWJPFMVM-C3oZAKxX.js → flowDiagram-DWJPFMVM-DprlEc3Z.js} +7 -7
- package/out/renderer/assets/flowDiagram-DWJPFMVM-DprlEc3Z.js.br +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-DprlEc3Z.js.gz +0 -0
- package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-BARJrpDB.js → ganttDiagram-T4ZO3ILL-CbTdumBm.js} +3 -3
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CbTdumBm.js.br +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CbTdumBm.js.gz +0 -0
- package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-D0gl3Row.js → gitGraphDiagram-UUTBAWPF-06bme-w8.js} +7 -7
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-06bme-w8.js.br +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-06bme-w8.js.gz +0 -0
- package/out/renderer/assets/{graph-DB7hnlLW.js → graph-BZhxluo9.js} +2 -2
- package/out/renderer/assets/graph-BZhxluo9.js.br +0 -0
- package/out/renderer/assets/graph-BZhxluo9.js.gz +0 -0
- package/out/renderer/assets/{highlighted-body-OFNGDK62-J87DvYBX.js → highlighted-body-OFNGDK62-CvDMJtXf.js} +2 -2
- package/out/renderer/assets/{index-Co8mzhyV.js → index-LmYTNvdF.js} +913 -453
- package/out/renderer/assets/index-LmYTNvdF.js.br +0 -0
- package/out/renderer/assets/index-LmYTNvdF.js.gz +0 -0
- package/out/renderer/assets/index-aGJ_yZib.css +382 -0
- package/out/renderer/assets/index-aGJ_yZib.css.br +0 -0
- package/out/renderer/assets/index-aGJ_yZib.css.gz +0 -0
- package/out/renderer/assets/{infoDiagram-42DDH7IO-BrfLG_LC.js → infoDiagram-42DDH7IO-DqivEzWL.js} +5 -5
- package/out/renderer/assets/infoDiagram-42DDH7IO-DqivEzWL.js.br +0 -0
- package/out/renderer/assets/infoDiagram-42DDH7IO-DqivEzWL.js.gz +0 -0
- package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-CO0cyvTq.js → ishikawaDiagram-UXIWVN3A-BKcg_z4w.js} +2 -2
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-BKcg_z4w.js.br +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-BKcg_z4w.js.gz +0 -0
- package/out/renderer/assets/{item-CvcokSWl.js → item-BHEUMM9H.js} +1 -1
- package/out/renderer/assets/item-BHEUMM9H.js.br +0 -0
- package/out/renderer/assets/item-BHEUMM9H.js.gz +0 -0
- package/out/renderer/assets/{journeyDiagram-VCZTEJTY-D3F2Iu5P.js → journeyDiagram-VCZTEJTY-Bvv8xuxQ.js} +5 -5
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-Bvv8xuxQ.js.br +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-Bvv8xuxQ.js.gz +0 -0
- package/out/renderer/assets/{kanban-definition-6JOO6SKY-CC_drlaB.js → kanban-definition-6JOO6SKY-C-gRMpeM.js} +3 -3
- package/out/renderer/assets/kanban-definition-6JOO6SKY-C-gRMpeM.js.br +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-C-gRMpeM.js.gz +0 -0
- package/out/renderer/assets/{layout-B_3n1To1.js → layout-B4dSyItA.js} +4 -4
- package/out/renderer/assets/layout-B4dSyItA.js.br +0 -0
- package/out/renderer/assets/layout-B4dSyItA.js.gz +0 -0
- package/out/renderer/assets/{linear-AxwRZ_jw.js → linear-CoVhuer7.js} +1 -1
- package/out/renderer/assets/linear-CoVhuer7.js.br +0 -0
- package/out/renderer/assets/linear-CoVhuer7.js.gz +0 -0
- package/out/renderer/assets/{link-2-4A51Gs15.js → link-2-DHUPzNSt.js} +1 -1
- package/out/renderer/assets/{mermaid-GHXKKRXX-DFOJYe_t.js → mermaid-GHXKKRXX-CZqkhGx7.js} +54 -54
- package/out/renderer/assets/mermaid-GHXKKRXX-CZqkhGx7.js.br +0 -0
- package/out/renderer/assets/mermaid-GHXKKRXX-CZqkhGx7.js.gz +0 -0
- package/out/renderer/assets/mic-BgSvicCB.js +22 -0
- package/out/renderer/assets/{min-Dip7FmOo.js → min-emzuJjmk.js} +2 -2
- package/out/renderer/assets/min-emzuJjmk.js.br +0 -0
- package/out/renderer/assets/min-emzuJjmk.js.gz +0 -0
- package/out/renderer/assets/{mindmap-definition-QFDTVHPH-D9aiLrpe.js → mindmap-definition-QFDTVHPH-DQ4JNECm.js} +4 -4
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-DQ4JNECm.js.br +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-DQ4JNECm.js.gz +0 -0
- package/out/renderer/assets/{open-guide-KaWHLGYU.js → open-guide-CfLO-Sdk.js} +1 -1
- package/out/renderer/assets/{package-search-CNALSYvi.js → package-search-CrF2Iegl.js} +1 -1
- package/out/renderer/assets/{pieDiagram-DEJITSTG-BX_34lAP.js → pieDiagram-DEJITSTG-0H6CGQQt.js} +7 -7
- package/out/renderer/assets/pieDiagram-DEJITSTG-0H6CGQQt.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-0H6CGQQt.js.gz +0 -0
- package/out/renderer/assets/{plus-DOVKq0d7.js → plus-YNCXW-GD.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-G09qfNO8.js → quadrantDiagram-34T5L4WZ-D0aPKp5z.js} +3 -3
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-D0aPKp5z.js.br +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-D0aPKp5z.js.gz +0 -0
- package/out/renderer/assets/{refresh-cw-DGB7KSZ3.js → refresh-cw-Bvm578nW.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-MS252O5E-sJPY8r9J.js → requirementDiagram-MS252O5E-BkzwapW_.js} +4 -4
- package/out/renderer/assets/requirementDiagram-MS252O5E-BkzwapW_.js.br +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-BkzwapW_.js.gz +0 -0
- package/out/renderer/assets/{resizable-C5jomC3Y.js → resizable-cStzNJ8V.js} +1 -1
- package/out/renderer/assets/resizable-cStzNJ8V.js.br +0 -0
- package/out/renderer/assets/resizable-cStzNJ8V.js.gz +0 -0
- package/out/renderer/assets/{sankeyDiagram-XADWPNL6-DHIS2ISZ.js → sankeyDiagram-XADWPNL6-Dbde7usj.js} +2 -2
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-Dbde7usj.js.br +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-Dbde7usj.js.gz +0 -0
- package/out/renderer/assets/{schedule-BoqPUAOI.js → schedule-DNMCsk-G.js} +9 -10
- package/out/renderer/assets/schedule-DNMCsk-G.js.br +0 -0
- package/out/renderer/assets/schedule-DNMCsk-G.js.gz +0 -0
- package/out/renderer/assets/{search-DdqhQVGJ.js → search-BEY9yGF_.js} +1 -1
- package/out/renderer/assets/{sequenceDiagram-FGHM5R23-Boc12Em2.js → sequenceDiagram-FGHM5R23-DI8l1pSL.js} +4 -4
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-DI8l1pSL.js.br +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-DI8l1pSL.js.gz +0 -0
- package/out/renderer/assets/{session-DgU3TDDV.js → session-Bn5k9ScR.js} +1540 -182
- package/out/renderer/assets/session-Bn5k9ScR.js.br +0 -0
- package/out/renderer/assets/session-Bn5k9ScR.js.gz +0 -0
- package/out/renderer/assets/{setting-dialog-4pmkQ7WP.js → setting-dialog-sqfPfGsy.js} +3 -3
- package/out/renderer/assets/setting-dialog-sqfPfGsy.js.br +0 -0
- package/out/renderer/assets/setting-dialog-sqfPfGsy.js.gz +0 -0
- package/out/renderer/assets/{settings-2-CI8inOtS.js → settings-2-DRhoXOO8.js} +1 -1
- package/out/renderer/assets/{settings-agents-C4u0s-iR.js → settings-agents-Bntc31Nn.js} +10 -11
- package/out/renderer/assets/settings-agents-Bntc31Nn.js.br +0 -0
- package/out/renderer/assets/settings-agents-Bntc31Nn.js.gz +0 -0
- package/out/renderer/assets/{settings-general-BkLSJoHB.js → settings-general-DhbLb9cP.js} +2 -2
- package/out/renderer/assets/settings-general-DhbLb9cP.js.br +0 -0
- package/out/renderer/assets/settings-general-DhbLb9cP.js.gz +0 -0
- package/out/renderer/assets/{settings-ilink-6ZrgPpeO.js → settings-ilink-C7nGGjwT.js} +3 -3
- package/out/renderer/assets/settings-ilink-C7nGGjwT.js.br +0 -0
- package/out/renderer/assets/settings-ilink-C7nGGjwT.js.gz +0 -0
- package/out/renderer/assets/{settings-image-generation-B6YIO6o_.js → settings-image-generation-H2dgqG7Y.js} +6 -7
- package/out/renderer/assets/settings-image-generation-H2dgqG7Y.js.br +0 -0
- package/out/renderer/assets/settings-image-generation-H2dgqG7Y.js.gz +0 -0
- package/out/renderer/assets/{settings-layout-Cf7GMXFZ.js → settings-layout-ATto1xpJ.js} +9 -3
- package/out/renderer/assets/settings-layout-ATto1xpJ.js.br +0 -0
- package/out/renderer/assets/settings-layout-ATto1xpJ.js.gz +0 -0
- package/out/renderer/assets/{settings-mcp-CJvL5Siz.js → settings-mcp-DUdMuoJ-.js} +7 -8
- package/out/renderer/assets/settings-mcp-DUdMuoJ-.js.br +0 -0
- package/out/renderer/assets/settings-mcp-DUdMuoJ-.js.gz +0 -0
- package/out/renderer/assets/{settings-memory-CvkppfHy.js → settings-memory-CJLG4aHW.js} +3 -3
- package/out/renderer/assets/settings-memory-CJLG4aHW.js.br +0 -0
- package/out/renderer/assets/settings-memory-CJLG4aHW.js.gz +0 -0
- package/out/renderer/assets/{settings-snippets-CO_jL3O3.js → settings-snippets-B4VcnD5Z.js} +6 -7
- package/out/renderer/assets/settings-snippets-B4VcnD5Z.js.br +0 -0
- package/out/renderer/assets/settings-snippets-B4VcnD5Z.js.gz +0 -0
- package/out/renderer/assets/settings-speech-to-text-DQ7lfkTu.js +1054 -0
- package/out/renderer/assets/settings-speech-to-text-DQ7lfkTu.js.br +0 -0
- package/out/renderer/assets/settings-speech-to-text-DQ7lfkTu.js.gz +0 -0
- package/out/renderer/assets/{settings-webui-5n5mI55N.js → settings-webui-DZf9O-6j.js} +2 -2
- package/out/renderer/assets/settings-webui-DZf9O-6j.js.br +0 -0
- package/out/renderer/assets/settings-webui-DZf9O-6j.js.gz +0 -0
- package/out/renderer/assets/{skills-installed-BqjN4mEl.js → skills-installed-Dp0r_4I-.js} +4 -4
- package/out/renderer/assets/skills-installed-Dp0r_4I-.js.br +0 -0
- package/out/renderer/assets/skills-installed-Dp0r_4I-.js.gz +0 -0
- package/out/renderer/assets/{skills-layout-C8b-pe9X.js → skills-layout-D-5rlY38.js} +2 -2
- package/out/renderer/assets/skills-layout-D-5rlY38.js.br +0 -0
- package/out/renderer/assets/skills-layout-D-5rlY38.js.gz +0 -0
- package/out/renderer/assets/{skills-skills-sh-Bh8KQ3PF.js → skills-skills-sh-CcLoIrSw.js} +4 -4
- package/out/renderer/assets/skills-skills-sh-CcLoIrSw.js.br +0 -0
- package/out/renderer/assets/skills-skills-sh-CcLoIrSw.js.gz +0 -0
- package/out/renderer/assets/{sortable.esm-DARmP-Qe.js → sortable.esm-knFxDx0Y.js} +1 -1
- package/out/renderer/assets/sortable.esm-knFxDx0Y.js.br +0 -0
- package/out/renderer/assets/sortable.esm-knFxDx0Y.js.gz +0 -0
- package/out/renderer/assets/{standard-schema-CtFhVVG9.js → standard-schema-dKXoCekr.js} +1 -1
- package/out/renderer/assets/standard-schema-dKXoCekr.js.br +0 -0
- package/out/renderer/assets/standard-schema-dKXoCekr.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-FHFEXIEX-Da2gV_KD.js → stateDiagram-FHFEXIEX-DWWz4PMv.js} +9 -9
- package/out/renderer/assets/stateDiagram-FHFEXIEX-DWWz4PMv.js.br +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-DWWz4PMv.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-D44mYiaY.js → stateDiagram-v2-QKLJ7IA2-Dm2qD5bg.js} +5 -5
- package/out/renderer/assets/{task-Ca7ur8ku.js → task-C5dyYbfn.js} +11 -12
- package/out/renderer/assets/task-C5dyYbfn.js.br +0 -0
- package/out/renderer/assets/task-C5dyYbfn.js.gz +0 -0
- package/out/renderer/assets/{textarea-BCC4Oh3S.js → textarea-DTqKlQbL.js} +1 -1
- package/out/renderer/assets/{timeline-definition-GMOUNBTQ-egFv4rLM.js → timeline-definition-GMOUNBTQ-A1tEoL9d.js} +3 -3
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-A1tEoL9d.js.br +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-A1tEoL9d.js.gz +0 -0
- package/out/renderer/assets/{vennDiagram-DHZGUBPP-CnOs99wX.js → vennDiagram-DHZGUBPP-tNdYrJi_.js} +2 -2
- package/out/renderer/assets/vennDiagram-DHZGUBPP-tNdYrJi_.js.br +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-tNdYrJi_.js.gz +0 -0
- package/out/renderer/assets/{wardley-RL74JXVD-Bb1llXhX.js → wardley-RL74JXVD-BxN5_Sp6.js} +4 -4
- package/out/renderer/assets/wardley-RL74JXVD-BxN5_Sp6.js.br +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-BxN5_Sp6.js.gz +0 -0
- package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-BupfUxsI.js → wardleyDiagram-NUSXRM2D-B_3jA8zU.js} +6 -6
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-B_3jA8zU.js.br +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-B_3jA8zU.js.gz +0 -0
- package/out/renderer/assets/{wrench-Dj1S5dhM.js → wrench-7r-g9MUq.js} +1 -1
- package/out/renderer/assets/wrench-7r-g9MUq.js.br +0 -0
- package/out/renderer/assets/wrench-7r-g9MUq.js.gz +0 -0
- package/out/renderer/assets/{xlsx-view-DIarHecR.js → xlsx-view-Bv0YhA5m.js} +10 -10
- package/out/renderer/assets/xlsx-view-Bv0YhA5m.js.br +0 -0
- package/out/renderer/assets/xlsx-view-Bv0YhA5m.js.gz +0 -0
- package/out/renderer/assets/{xychartDiagram-5P7HB3ND-CtPNxvT_.js → xychartDiagram-5P7HB3ND-NNVuzC4j.js} +3 -3
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-NNVuzC4j.js.br +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-NNVuzC4j.js.gz +0 -0
- package/out/renderer/index.html +2 -2
- package/out/renderer/index.html.br +0 -0
- package/out/renderer/index.html.gz +0 -0
- package/out/server/main.js +602 -68
- package/package.json +3 -1
- package/resources/tree-sitter-wasm/tree-sitter-dart.wasm +0 -0
- package/out/renderer/assets/_baseUniq-DdWCC-Go.js.br +0 -0
- package/out/renderer/assets/_baseUniq-DdWCC-Go.js.gz +0 -0
- package/out/renderer/assets/arc-B_en4gJt.js.br +0 -0
- package/out/renderer/assets/arc-B_en4gJt.js.gz +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-W-l3dTvZ.js.br +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-W-l3dTvZ.js.gz +0 -0
- package/out/renderer/assets/automation--izxbhlj.js.br +0 -0
- package/out/renderer/assets/automation--izxbhlj.js.gz +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-BdxXOr8Y.js.br +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-BdxXOr8Y.js.gz +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-C_8XgPtT.js.br +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-C_8XgPtT.js.gz +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-C7h57GNs.js.br +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-C7h57GNs.js.gz +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-BPjYyS5o.js.br +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-BPjYyS5o.js.gz +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-D5Q5ZCl0.js.br +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-D5Q5ZCl0.js.gz +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-AbfctYy8.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-AbfctYy8.js.gz +0 -0
- package/out/renderer/assets/clipboard-D6ZpW5GH.js +0 -15
- package/out/renderer/assets/code-editor-cp9haQUT.js.br +0 -0
- package/out/renderer/assets/code-editor-cp9haQUT.js.gz +0 -0
- package/out/renderer/assets/collapsible-BHMUDZxc.js.br +0 -0
- package/out/renderer/assets/collapsible-BHMUDZxc.js.gz +0 -0
- package/out/renderer/assets/context-menu-K6z5uSmg.js +0 -282
- package/out/renderer/assets/context-menu-K6z5uSmg.js.br +0 -0
- package/out/renderer/assets/context-menu-K6z5uSmg.js.gz +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-CVcE9aWV.js.br +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-CVcE9aWV.js.gz +0 -0
- package/out/renderer/assets/dagre-KV5264BT-zrX-TFsi.js.br +0 -0
- package/out/renderer/assets/dagre-KV5264BT-zrX-TFsi.js.gz +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-Ct9NrJP9.js.br +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-Ct9NrJP9.js.gz +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-tTGWcCd_.js.br +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-tTGWcCd_.js.gz +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-CpmcnN2B.js.br +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-CpmcnN2B.js.gz +0 -0
- package/out/renderer/assets/diagram-TYMM5635-DKTR2xS9.js.br +0 -0
- package/out/renderer/assets/diagram-TYMM5635-DKTR2xS9.js.gz +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-BW13EXAs.js.br +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-BW13EXAs.js.gz +0 -0
- package/out/renderer/assets/field-Be86bgEh.js.br +0 -0
- package/out/renderer/assets/field-Be86bgEh.js.gz +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-C3oZAKxX.js.br +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-C3oZAKxX.js.gz +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-BARJrpDB.js.br +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-BARJrpDB.js.gz +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-D0gl3Row.js.br +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-D0gl3Row.js.gz +0 -0
- package/out/renderer/assets/graph-DB7hnlLW.js.br +0 -0
- package/out/renderer/assets/graph-DB7hnlLW.js.gz +0 -0
- package/out/renderer/assets/index-Co8mzhyV.js.br +0 -0
- package/out/renderer/assets/index-Co8mzhyV.js.gz +0 -0
- package/out/renderer/assets/index-iHYS74sQ.css +0 -382
- package/out/renderer/assets/index-iHYS74sQ.css.br +0 -0
- package/out/renderer/assets/index-iHYS74sQ.css.gz +0 -0
- package/out/renderer/assets/infoDiagram-42DDH7IO-BrfLG_LC.js.br +0 -0
- package/out/renderer/assets/infoDiagram-42DDH7IO-BrfLG_LC.js.gz +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-CO0cyvTq.js.br +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-CO0cyvTq.js.gz +0 -0
- package/out/renderer/assets/item-CvcokSWl.js.br +0 -0
- package/out/renderer/assets/item-CvcokSWl.js.gz +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-D3F2Iu5P.js.br +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-D3F2Iu5P.js.gz +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-CC_drlaB.js.br +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-CC_drlaB.js.gz +0 -0
- package/out/renderer/assets/layout-B_3n1To1.js.br +0 -0
- package/out/renderer/assets/layout-B_3n1To1.js.gz +0 -0
- package/out/renderer/assets/linear-AxwRZ_jw.js.br +0 -0
- package/out/renderer/assets/linear-AxwRZ_jw.js.gz +0 -0
- package/out/renderer/assets/mermaid-GHXKKRXX-DFOJYe_t.js.br +0 -0
- package/out/renderer/assets/mermaid-GHXKKRXX-DFOJYe_t.js.gz +0 -0
- package/out/renderer/assets/min-Dip7FmOo.js.br +0 -0
- package/out/renderer/assets/min-Dip7FmOo.js.gz +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-D9aiLrpe.js.br +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-D9aiLrpe.js.gz +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-BX_34lAP.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-BX_34lAP.js.gz +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-G09qfNO8.js.br +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-G09qfNO8.js.gz +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-sJPY8r9J.js.br +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-sJPY8r9J.js.gz +0 -0
- package/out/renderer/assets/resizable-C5jomC3Y.js.br +0 -0
- package/out/renderer/assets/resizable-C5jomC3Y.js.gz +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-DHIS2ISZ.js.br +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-DHIS2ISZ.js.gz +0 -0
- package/out/renderer/assets/schedule-BoqPUAOI.js.br +0 -0
- package/out/renderer/assets/schedule-BoqPUAOI.js.gz +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-Boc12Em2.js.br +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-Boc12Em2.js.gz +0 -0
- package/out/renderer/assets/session-DgU3TDDV.js.br +0 -0
- package/out/renderer/assets/session-DgU3TDDV.js.gz +0 -0
- package/out/renderer/assets/setting-dialog-4pmkQ7WP.js.br +0 -0
- package/out/renderer/assets/setting-dialog-4pmkQ7WP.js.gz +0 -0
- package/out/renderer/assets/settings-agents-C4u0s-iR.js.br +0 -0
- package/out/renderer/assets/settings-agents-C4u0s-iR.js.gz +0 -0
- package/out/renderer/assets/settings-general-BkLSJoHB.js.br +0 -0
- package/out/renderer/assets/settings-general-BkLSJoHB.js.gz +0 -0
- package/out/renderer/assets/settings-ilink-6ZrgPpeO.js.br +0 -0
- package/out/renderer/assets/settings-ilink-6ZrgPpeO.js.gz +0 -0
- package/out/renderer/assets/settings-image-generation-B6YIO6o_.js.br +0 -0
- package/out/renderer/assets/settings-image-generation-B6YIO6o_.js.gz +0 -0
- package/out/renderer/assets/settings-layout-Cf7GMXFZ.js.br +0 -0
- package/out/renderer/assets/settings-layout-Cf7GMXFZ.js.gz +0 -0
- package/out/renderer/assets/settings-mcp-CJvL5Siz.js.br +0 -0
- package/out/renderer/assets/settings-mcp-CJvL5Siz.js.gz +0 -0
- package/out/renderer/assets/settings-memory-CvkppfHy.js.br +0 -0
- package/out/renderer/assets/settings-memory-CvkppfHy.js.gz +0 -0
- package/out/renderer/assets/settings-snippets-CO_jL3O3.js.br +0 -0
- package/out/renderer/assets/settings-snippets-CO_jL3O3.js.gz +0 -0
- package/out/renderer/assets/settings-webui-5n5mI55N.js.br +0 -0
- package/out/renderer/assets/settings-webui-5n5mI55N.js.gz +0 -0
- package/out/renderer/assets/skills-installed-BqjN4mEl.js.br +0 -0
- package/out/renderer/assets/skills-installed-BqjN4mEl.js.gz +0 -0
- package/out/renderer/assets/skills-layout-C8b-pe9X.js.br +0 -0
- package/out/renderer/assets/skills-layout-C8b-pe9X.js.gz +0 -0
- package/out/renderer/assets/skills-skills-sh-Bh8KQ3PF.js.br +0 -0
- package/out/renderer/assets/skills-skills-sh-Bh8KQ3PF.js.gz +0 -0
- package/out/renderer/assets/sortable.esm-DARmP-Qe.js.br +0 -0
- package/out/renderer/assets/sortable.esm-DARmP-Qe.js.gz +0 -0
- package/out/renderer/assets/standard-schema-CtFhVVG9.js.br +0 -0
- package/out/renderer/assets/standard-schema-CtFhVVG9.js.gz +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-Da2gV_KD.js.br +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-Da2gV_KD.js.gz +0 -0
- package/out/renderer/assets/task-Ca7ur8ku.js.br +0 -0
- package/out/renderer/assets/task-Ca7ur8ku.js.gz +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-egFv4rLM.js.br +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-egFv4rLM.js.gz +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-CnOs99wX.js.br +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-CnOs99wX.js.gz +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-Bb1llXhX.js.br +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-Bb1llXhX.js.gz +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-BupfUxsI.js.br +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-BupfUxsI.js.gz +0 -0
- package/out/renderer/assets/wrench-Dj1S5dhM.js.br +0 -0
- package/out/renderer/assets/wrench-Dj1S5dhM.js.gz +0 -0
- package/out/renderer/assets/xlsx-view-DIarHecR.js.br +0 -0
- package/out/renderer/assets/xlsx-view-DIarHecR.js.gz +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-CtPNxvT_.js.br +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-CtPNxvT_.js.gz +0 -0
package/out/server/main.js
CHANGED
|
@@ -231,6 +231,25 @@ function readSettings() {
|
|
|
231
231
|
model: p.model,
|
|
232
232
|
active: typeof p.active === "boolean" ? p.active : false
|
|
233
233
|
})) : [];
|
|
234
|
+
const speechToText = Array.isArray(rawObj?.speechToText) ? rawObj.speechToText.filter((value) => isObject(value)).filter((value) => {
|
|
235
|
+
const provider = value.provider;
|
|
236
|
+
return typeof value.id === "string" && typeof value.name === "string" && typeof value.apiKey === "string" && (provider === "volcengine" || provider === "dashscope" || provider === "openai" || provider === "iflytek");
|
|
237
|
+
}).map((value) => ({
|
|
238
|
+
id: value.id,
|
|
239
|
+
name: value.name,
|
|
240
|
+
provider: value.provider,
|
|
241
|
+
apiKey: value.apiKey,
|
|
242
|
+
appId: typeof value.appId === "string" ? value.appId : void 0,
|
|
243
|
+
apiSecret: typeof value.apiSecret === "string" ? value.apiSecret : void 0,
|
|
244
|
+
resourceId: typeof value.resourceId === "string" ? value.resourceId : void 0,
|
|
245
|
+
model: typeof value.model === "string" ? value.model : void 0,
|
|
246
|
+
baseUrl: typeof value.baseUrl === "string" ? value.baseUrl : void 0,
|
|
247
|
+
workspaceId: typeof value.workspaceId === "string" ? value.workspaceId : void 0,
|
|
248
|
+
region: value.region === "cn-beijing" || value.region === "ap-southeast-1" ? value.region : void 0,
|
|
249
|
+
workspace: typeof value.workspace === "string" ? value.workspace : void 0,
|
|
250
|
+
language: typeof value.language === "string" ? value.language : void 0,
|
|
251
|
+
active: typeof value.active === "boolean" ? value.active : false
|
|
252
|
+
})) : [];
|
|
234
253
|
const editor = (() => {
|
|
235
254
|
const raw2 = rawObj && isObject(rawObj.editor) ? rawObj.editor : null;
|
|
236
255
|
if (raw2 && typeof raw2.name === "string" && raw2.name.trim()) {
|
|
@@ -249,7 +268,8 @@ function readSettings() {
|
|
|
249
268
|
sound,
|
|
250
269
|
proxy,
|
|
251
270
|
snippets,
|
|
252
|
-
imageGeneration
|
|
271
|
+
imageGeneration,
|
|
272
|
+
speechToText
|
|
253
273
|
};
|
|
254
274
|
} catch {
|
|
255
275
|
return DEFAULT_SETTINGS;
|
|
@@ -351,6 +371,22 @@ function getSettings() {
|
|
|
351
371
|
extraBody: p.extraBody ?? void 0,
|
|
352
372
|
model: p.model,
|
|
353
373
|
active: p.active
|
|
374
|
+
})),
|
|
375
|
+
speechToText: (meta.speechToText ?? []).map((p) => ({
|
|
376
|
+
id: p.id,
|
|
377
|
+
name: p.name,
|
|
378
|
+
provider: p.provider,
|
|
379
|
+
apiKey: p.apiKey,
|
|
380
|
+
appId: p.appId,
|
|
381
|
+
apiSecret: p.apiSecret,
|
|
382
|
+
resourceId: p.resourceId,
|
|
383
|
+
model: p.model,
|
|
384
|
+
baseUrl: p.baseUrl,
|
|
385
|
+
workspaceId: p.workspaceId,
|
|
386
|
+
region: p.region,
|
|
387
|
+
workspace: p.workspace,
|
|
388
|
+
language: p.language,
|
|
389
|
+
active: p.active
|
|
354
390
|
}))
|
|
355
391
|
};
|
|
356
392
|
}
|
|
@@ -506,7 +542,23 @@ function updateSettings(settings) {
|
|
|
506
542
|
extraBody: p.extraBody ?? void 0,
|
|
507
543
|
model: p.model,
|
|
508
544
|
active: p.active
|
|
509
|
-
})) : prevMeta.imageGeneration
|
|
545
|
+
})) : prevMeta.imageGeneration,
|
|
546
|
+
speechToText: settings.speechToText ? settings.speechToText.map((p) => ({
|
|
547
|
+
id: p.id,
|
|
548
|
+
name: p.name,
|
|
549
|
+
provider: p.provider,
|
|
550
|
+
apiKey: p.apiKey,
|
|
551
|
+
appId: p.appId?.trim() || void 0,
|
|
552
|
+
apiSecret: p.apiSecret?.trim() || void 0,
|
|
553
|
+
resourceId: p.resourceId?.trim() || void 0,
|
|
554
|
+
model: p.model?.trim() || void 0,
|
|
555
|
+
baseUrl: p.baseUrl?.trim() || void 0,
|
|
556
|
+
workspaceId: p.workspaceId?.trim() || void 0,
|
|
557
|
+
region: p.region,
|
|
558
|
+
workspace: p.workspace?.trim() || void 0,
|
|
559
|
+
language: p.language?.trim() || void 0,
|
|
560
|
+
active: p.active
|
|
561
|
+
})) : prevMeta.speechToText
|
|
510
562
|
};
|
|
511
563
|
writeSettings(meta);
|
|
512
564
|
}
|
|
@@ -913,6 +965,35 @@ function readTerminalOutput(sessionIdOrSubSessionId, terminalId) {
|
|
|
913
965
|
if (!existsSync3(filePath)) return null;
|
|
914
966
|
return readFileSync3(filePath, "utf-8");
|
|
915
967
|
}
|
|
968
|
+
function appendTokenUsage(sessionId, record) {
|
|
969
|
+
const dir = sessionDir(sessionId);
|
|
970
|
+
if (!dir) return;
|
|
971
|
+
mkdirSync3(dir, { recursive: true });
|
|
972
|
+
const filePath = join5(dir, "token-usage.jsonl");
|
|
973
|
+
appendFileSync(filePath, JSON.stringify(record) + "\n");
|
|
974
|
+
}
|
|
975
|
+
function isSessionTokenUsage(value) {
|
|
976
|
+
if (!value || typeof value !== "object") return false;
|
|
977
|
+
const record = value;
|
|
978
|
+
if (!record || typeof record.timestamp !== "number" || !record.usage) return false;
|
|
979
|
+
if (typeof record.usage !== "object") return false;
|
|
980
|
+
const usage = record.usage;
|
|
981
|
+
return typeof usage.totalTokens === "number" && typeof usage.inputTokens === "number" && typeof usage.outputTokens === "number";
|
|
982
|
+
}
|
|
983
|
+
function readTokenUsage(sessionId) {
|
|
984
|
+
const dir = sessionDir(sessionId);
|
|
985
|
+
if (!dir) return [];
|
|
986
|
+
const filePath = join5(dir, "token-usage.jsonl");
|
|
987
|
+
if (!existsSync3(filePath)) return [];
|
|
988
|
+
const content = readFileSync3(filePath, "utf-8");
|
|
989
|
+
return content.split("\n").filter((line) => line.trim()).map((line) => {
|
|
990
|
+
try {
|
|
991
|
+
return JSON.parse(line);
|
|
992
|
+
} catch {
|
|
993
|
+
return null;
|
|
994
|
+
}
|
|
995
|
+
}).filter((value) => isSessionTokenUsage(value));
|
|
996
|
+
}
|
|
916
997
|
var storageOps = {
|
|
917
998
|
getSettings,
|
|
918
999
|
updateSettings,
|
|
@@ -932,7 +1013,9 @@ var storageOps = {
|
|
|
932
1013
|
appendSessionMessage,
|
|
933
1014
|
readSessionMessages,
|
|
934
1015
|
appendTerminalOutput,
|
|
935
|
-
readTerminalOutput
|
|
1016
|
+
readTerminalOutput,
|
|
1017
|
+
appendTokenUsage,
|
|
1018
|
+
readTokenUsage
|
|
936
1019
|
};
|
|
937
1020
|
|
|
938
1021
|
// src/backend/i18n.ts
|
|
@@ -4918,7 +5001,7 @@ async function executeSubagent(params, subSessionId, taskName, taskPrompt, signa
|
|
|
4918
5001
|
}
|
|
4919
5002
|
return accumulatedText || "[No output produced]";
|
|
4920
5003
|
} catch (error) {
|
|
4921
|
-
const
|
|
5004
|
+
const errorMessage2 = error instanceof Error ? error.message : String(error);
|
|
4922
5005
|
const conn3 = params.getConnection();
|
|
4923
5006
|
if (conn3) {
|
|
4924
5007
|
await sendSubagentStatusUpdate(
|
|
@@ -4936,7 +5019,7 @@ async function executeSubagent(params, subSessionId, taskName, taskPrompt, signa
|
|
|
4936
5019
|
sessionUpdate: "agent_message_chunk",
|
|
4937
5020
|
content: { type: "text", text: `
|
|
4938
5021
|
|
|
4939
|
-
**Error:** ${
|
|
5022
|
+
**Error:** ${errorMessage2}` }
|
|
4940
5023
|
}
|
|
4941
5024
|
});
|
|
4942
5025
|
}
|
|
@@ -4944,7 +5027,7 @@ async function executeSubagent(params, subSessionId, taskName, taskPrompt, signa
|
|
|
4944
5027
|
if (signal.aborted) {
|
|
4945
5028
|
return accumulatedText || "[Cancelled]";
|
|
4946
5029
|
}
|
|
4947
|
-
return accumulatedText || `[Error: ${
|
|
5030
|
+
return accumulatedText || `[Error: ${errorMessage2}]`;
|
|
4948
5031
|
} finally {
|
|
4949
5032
|
await closeACPClientTools(subAcp);
|
|
4950
5033
|
}
|
|
@@ -5049,6 +5132,183 @@ Results from all sub-agents are returned when they all complete.`,
|
|
|
5049
5132
|
};
|
|
5050
5133
|
}
|
|
5051
5134
|
|
|
5135
|
+
// src/agents/token-breakdown.ts
|
|
5136
|
+
var _countTokens = null;
|
|
5137
|
+
var _formatFunctionDefinitions = null;
|
|
5138
|
+
async function getTokenizer() {
|
|
5139
|
+
if (!_countTokens) {
|
|
5140
|
+
const mod = await import("gpt-tokenizer");
|
|
5141
|
+
_countTokens = mod.countTokens;
|
|
5142
|
+
}
|
|
5143
|
+
if (!_formatFunctionDefinitions) {
|
|
5144
|
+
const mod = await import("gpt-tokenizer/esm/functionCalling");
|
|
5145
|
+
_formatFunctionDefinitions = mod.formatFunctionDefinitions;
|
|
5146
|
+
}
|
|
5147
|
+
return {
|
|
5148
|
+
countTokens: _countTokens,
|
|
5149
|
+
formatFunctionDefinitions: _formatFunctionDefinitions
|
|
5150
|
+
};
|
|
5151
|
+
}
|
|
5152
|
+
async function estimateToolsDefinitionTokens(tools) {
|
|
5153
|
+
const { countTokens, formatFunctionDefinitions } = await getTokenizer();
|
|
5154
|
+
const entries = Object.entries(tools);
|
|
5155
|
+
if (entries.length === 0) {
|
|
5156
|
+
return { total: 0, perTool: [] };
|
|
5157
|
+
}
|
|
5158
|
+
const functionDefs = entries.map(([name, tool4]) => ({
|
|
5159
|
+
name,
|
|
5160
|
+
description: typeof tool4.description === "string" ? tool4.description : void 0,
|
|
5161
|
+
parameters: extractJsonSchema(tool4)
|
|
5162
|
+
}));
|
|
5163
|
+
const totalFormatted = formatFunctionDefinitions(functionDefs);
|
|
5164
|
+
const total = countTokens(totalFormatted) + 9;
|
|
5165
|
+
const emptyNamespaceTokens = countTokens("namespace functions {\n\n} // namespace functions");
|
|
5166
|
+
const perTool = functionDefs.map((fn) => {
|
|
5167
|
+
const singleFormatted = formatFunctionDefinitions([fn]);
|
|
5168
|
+
const singleTotal = countTokens(singleFormatted) + 9;
|
|
5169
|
+
return {
|
|
5170
|
+
name: fn.name,
|
|
5171
|
+
tokens: Math.max(0, singleTotal - emptyNamespaceTokens)
|
|
5172
|
+
};
|
|
5173
|
+
});
|
|
5174
|
+
return { total, perTool };
|
|
5175
|
+
}
|
|
5176
|
+
async function estimateInputComposition(params) {
|
|
5177
|
+
const { countTokens } = await getTokenizer();
|
|
5178
|
+
const systemPromptTokens = countTokens(params.systemPrompt) + 3;
|
|
5179
|
+
const toolsDef = await estimateToolsDefinitionTokens(params.tools);
|
|
5180
|
+
const historyTokens = params.historyText ? countTokens(params.historyText) : 0;
|
|
5181
|
+
const userMessageTokens = countTokens(params.userMessageText) + 3;
|
|
5182
|
+
const estimatedTotal = systemPromptTokens + toolsDef.total + historyTokens + userMessageTokens + 3;
|
|
5183
|
+
return {
|
|
5184
|
+
systemPrompt: systemPromptTokens,
|
|
5185
|
+
toolsDefinition: toolsDef,
|
|
5186
|
+
history: historyTokens,
|
|
5187
|
+
userMessage: userMessageTokens,
|
|
5188
|
+
userMessageText: params.userMessageText,
|
|
5189
|
+
estimatedTotal,
|
|
5190
|
+
delta: params.actualInputTokens - estimatedTotal
|
|
5191
|
+
};
|
|
5192
|
+
}
|
|
5193
|
+
function buildStepBreakdown(steps) {
|
|
5194
|
+
const stepDetails = steps.map((step, idx) => {
|
|
5195
|
+
const next = steps[idx + 1];
|
|
5196
|
+
const usage = step.usage;
|
|
5197
|
+
const toolCallEstimates = buildToolCallEstimates(step, next);
|
|
5198
|
+
return {
|
|
5199
|
+
stepNumber: step.stepNumber,
|
|
5200
|
+
finishReason: step.finishReason,
|
|
5201
|
+
inputTokens: usage.inputTokens ?? 0,
|
|
5202
|
+
outputTokens: usage.outputTokens ?? 0,
|
|
5203
|
+
inputDetails: {
|
|
5204
|
+
cacheReadTokens: usage.inputTokenDetails?.cacheReadTokens ?? void 0,
|
|
5205
|
+
cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens ?? void 0,
|
|
5206
|
+
noCacheTokens: usage.inputTokenDetails?.noCacheTokens ?? void 0
|
|
5207
|
+
},
|
|
5208
|
+
outputDetails: {
|
|
5209
|
+
textTokens: usage.outputTokenDetails?.textTokens ?? void 0,
|
|
5210
|
+
reasoningTokens: usage.outputTokenDetails?.reasoningTokens ?? void 0
|
|
5211
|
+
},
|
|
5212
|
+
toolCalls: toolCallEstimates,
|
|
5213
|
+
performance: {
|
|
5214
|
+
stepTimeMs: step.performance.stepTimeMs,
|
|
5215
|
+
responseTimeMs: step.performance.responseTimeMs,
|
|
5216
|
+
timeToFirstOutputMs: step.performance.timeToFirstOutputMs ?? void 0,
|
|
5217
|
+
outputTokensPerSecond: step.performance.outputTokensPerSecond ?? void 0
|
|
5218
|
+
}
|
|
5219
|
+
};
|
|
5220
|
+
});
|
|
5221
|
+
const totalTimeMs = steps.reduce((sum, s) => sum + s.performance.stepTimeMs, 0);
|
|
5222
|
+
const lastStep = steps[steps.length - 1];
|
|
5223
|
+
const effectiveOutputTokensPerSecond = lastStep?.performance.effectiveOutputTokensPerSecond ?? 0;
|
|
5224
|
+
return {
|
|
5225
|
+
steps: stepDetails,
|
|
5226
|
+
performance: { totalTimeMs, effectiveOutputTokensPerSecond }
|
|
5227
|
+
};
|
|
5228
|
+
}
|
|
5229
|
+
function buildToolCallEstimates(step, next) {
|
|
5230
|
+
if (step.toolCalls.length === 0) return [];
|
|
5231
|
+
const usage = step.usage;
|
|
5232
|
+
const outputTokens = usage.outputTokens ?? 0;
|
|
5233
|
+
const textTokens = usage.outputTokenDetails?.textTokens ?? 0;
|
|
5234
|
+
const reasoningTokens = usage.outputTokenDetails?.reasoningTokens ?? 0;
|
|
5235
|
+
const totalToolCallOutput = Math.max(0, outputTokens - textTokens - reasoningTokens);
|
|
5236
|
+
let totalToolResultInput = 0;
|
|
5237
|
+
if (next) {
|
|
5238
|
+
const nextInput = next.usage.inputTokens ?? 0;
|
|
5239
|
+
const currentInput = usage.inputTokens ?? 0;
|
|
5240
|
+
const currentOutput = usage.outputTokens ?? 0;
|
|
5241
|
+
totalToolResultInput = Math.max(0, nextInput - currentInput - currentOutput);
|
|
5242
|
+
}
|
|
5243
|
+
const count = step.toolCalls.length;
|
|
5244
|
+
const toolExecutionMs = step.performance.toolExecutionMs;
|
|
5245
|
+
return step.toolCalls.map((tc) => ({
|
|
5246
|
+
toolName: tc.toolName,
|
|
5247
|
+
args: serializeToolCallArgs(tc.input),
|
|
5248
|
+
argumentsOutputTokens: Math.round(totalToolCallOutput / count),
|
|
5249
|
+
resultInputTokens: Math.round(totalToolResultInput / count),
|
|
5250
|
+
executionMs: toolExecutionMs?.[tc.toolCallId] ?? void 0
|
|
5251
|
+
}));
|
|
5252
|
+
}
|
|
5253
|
+
function serializeToolCallArgs(input) {
|
|
5254
|
+
if (input == null) return "";
|
|
5255
|
+
if (typeof input === "string") return input;
|
|
5256
|
+
try {
|
|
5257
|
+
return JSON.stringify(input);
|
|
5258
|
+
} catch {
|
|
5259
|
+
return String(input);
|
|
5260
|
+
}
|
|
5261
|
+
}
|
|
5262
|
+
function extractJsonSchema(tool4) {
|
|
5263
|
+
const schema = tool4.inputSchema;
|
|
5264
|
+
if (!schema) return void 0;
|
|
5265
|
+
if (typeof schema === "object" && schema !== null && "jsonSchema" in schema) {
|
|
5266
|
+
const jsonSchema = schema.jsonSchema;
|
|
5267
|
+
if (typeof jsonSchema === "object" && jsonSchema !== null) {
|
|
5268
|
+
return jsonSchema;
|
|
5269
|
+
}
|
|
5270
|
+
}
|
|
5271
|
+
if (typeof schema === "object" && schema !== null && "_def" in schema) {
|
|
5272
|
+
return void 0;
|
|
5273
|
+
}
|
|
5274
|
+
if (typeof schema === "object" && schema !== null) {
|
|
5275
|
+
return schema;
|
|
5276
|
+
}
|
|
5277
|
+
return void 0;
|
|
5278
|
+
}
|
|
5279
|
+
function serializeMessagesForCounting(messages) {
|
|
5280
|
+
const serializedMessages = [];
|
|
5281
|
+
for (const msg of messages) {
|
|
5282
|
+
const serializedParts = [];
|
|
5283
|
+
if (typeof msg.content === "string") {
|
|
5284
|
+
serializedParts.push(msg.content);
|
|
5285
|
+
} else if (Array.isArray(msg.content)) {
|
|
5286
|
+
for (const part of msg.content) {
|
|
5287
|
+
if (typeof part === "string") {
|
|
5288
|
+
serializedParts.push(part);
|
|
5289
|
+
continue;
|
|
5290
|
+
}
|
|
5291
|
+
if (part && typeof part === "object" && "text" in part) {
|
|
5292
|
+
serializedParts.push(String(part.text));
|
|
5293
|
+
continue;
|
|
5294
|
+
}
|
|
5295
|
+
if (part != null) {
|
|
5296
|
+
const serializedPart = JSON.stringify(part);
|
|
5297
|
+
if (serializedPart !== void 0) serializedParts.push(serializedPart);
|
|
5298
|
+
}
|
|
5299
|
+
}
|
|
5300
|
+
} else if (msg.content != null) {
|
|
5301
|
+
const serializedContent = JSON.stringify(msg.content);
|
|
5302
|
+
if (serializedContent !== void 0) serializedParts.push(serializedContent);
|
|
5303
|
+
}
|
|
5304
|
+
if (serializedParts.length > 0) {
|
|
5305
|
+
const role = msg.role ? `[${msg.role}] ` : "";
|
|
5306
|
+
serializedMessages.push(`${role}${serializedParts.join("\n")}`);
|
|
5307
|
+
}
|
|
5308
|
+
}
|
|
5309
|
+
return serializedMessages.join("\n");
|
|
5310
|
+
}
|
|
5311
|
+
|
|
5052
5312
|
// src/agents/openai-compatible-agent.ts
|
|
5053
5313
|
var MODEL_CONFIG_ID = "model";
|
|
5054
5314
|
var THOUGHT_LEVEL_CONFIG_ID = "thought_level";
|
|
@@ -5145,6 +5405,12 @@ function buildSafeUserMessage(prompt) {
|
|
|
5145
5405
|
var AVAILABLE_COMMANDS = [
|
|
5146
5406
|
{ name: "compact", description: "Compress conversation context" }
|
|
5147
5407
|
];
|
|
5408
|
+
var COMPACT_PROMPT = `Compress the conversation into a structured markdown summary.
|
|
5409
|
+
Include: key decisions, code changes (with file paths),
|
|
5410
|
+
technical context, and pending tasks.
|
|
5411
|
+
Use headings and bullet points for clarity.
|
|
5412
|
+
Detect the user's commonly used language from the conversation history and respond in that language.
|
|
5413
|
+
Output only the summary.`;
|
|
5148
5414
|
var OpenaiCompatibleAgent = class {
|
|
5149
5415
|
sessions = /* @__PURE__ */ new Map();
|
|
5150
5416
|
provider;
|
|
@@ -5323,16 +5589,70 @@ var OpenaiCompatibleAgent = class {
|
|
|
5323
5589
|
);
|
|
5324
5590
|
}
|
|
5325
5591
|
}
|
|
5326
|
-
async
|
|
5592
|
+
async pushUsageUpdate(sessionId, usageUpdate) {
|
|
5593
|
+
if (!this.connection) return;
|
|
5594
|
+
await this.connection.sessionUpdate({
|
|
5595
|
+
sessionId,
|
|
5596
|
+
update: {
|
|
5597
|
+
sessionUpdate: "usage_update",
|
|
5598
|
+
...usageUpdate
|
|
5599
|
+
}
|
|
5600
|
+
});
|
|
5601
|
+
}
|
|
5602
|
+
async pushAvailableCommands(sessionId, commands) {
|
|
5327
5603
|
if (!this.connection) return;
|
|
5328
5604
|
await this.connection.sessionUpdate({
|
|
5329
5605
|
sessionId,
|
|
5330
5606
|
update: {
|
|
5331
5607
|
sessionUpdate: "available_commands_update",
|
|
5332
|
-
availableCommands:
|
|
5608
|
+
availableCommands: commands
|
|
5333
5609
|
}
|
|
5334
5610
|
});
|
|
5335
5611
|
}
|
|
5612
|
+
/**
|
|
5613
|
+
* Build per-turn token breakdown metadata (best-effort).
|
|
5614
|
+
* Shared by normal prompts and slash commands (e.g. /compact).
|
|
5615
|
+
* Must never throw — breakdown is optional metadata that must not fail the prompt.
|
|
5616
|
+
*/
|
|
5617
|
+
async buildTokenBreakdown(params) {
|
|
5618
|
+
try {
|
|
5619
|
+
const stepBreakdown = buildStepBreakdown(params.steps);
|
|
5620
|
+
const historyText = serializeMessagesForCounting(params.history);
|
|
5621
|
+
const userMessageText = serializeMessagesForCounting([params.userMessage]);
|
|
5622
|
+
const inputComposition = await estimateInputComposition({
|
|
5623
|
+
systemPrompt: params.systemPrompt,
|
|
5624
|
+
tools: params.tools,
|
|
5625
|
+
historyText,
|
|
5626
|
+
userMessageText,
|
|
5627
|
+
actualInputTokens: params.steps[0]?.usage.inputTokens ?? 0
|
|
5628
|
+
});
|
|
5629
|
+
return {
|
|
5630
|
+
stepCount: params.steps.length,
|
|
5631
|
+
inputComposition,
|
|
5632
|
+
steps: stepBreakdown.steps,
|
|
5633
|
+
performance: stepBreakdown.performance
|
|
5634
|
+
};
|
|
5635
|
+
} catch (error) {
|
|
5636
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
5637
|
+
console.warn(
|
|
5638
|
+
`[OpenaiCompatibleAgent] Failed to build token breakdown for a prompt: ${message}`
|
|
5639
|
+
);
|
|
5640
|
+
return {
|
|
5641
|
+
stepCount: params.steps.length,
|
|
5642
|
+
inputComposition: {
|
|
5643
|
+
systemPrompt: 0,
|
|
5644
|
+
toolsDefinition: { total: 0, perTool: [] },
|
|
5645
|
+
history: 0,
|
|
5646
|
+
userMessage: 0,
|
|
5647
|
+
userMessageText: "",
|
|
5648
|
+
estimatedTotal: 0,
|
|
5649
|
+
delta: 0
|
|
5650
|
+
},
|
|
5651
|
+
steps: [],
|
|
5652
|
+
performance: { totalTimeMs: 0, effectiveOutputTokensPerSecond: 0 }
|
|
5653
|
+
};
|
|
5654
|
+
}
|
|
5655
|
+
}
|
|
5336
5656
|
async newSession(params) {
|
|
5337
5657
|
const modelState = await this.getModels();
|
|
5338
5658
|
const sessionId = randomUUID6();
|
|
@@ -5355,7 +5675,7 @@ var OpenaiCompatibleAgent = class {
|
|
|
5355
5675
|
this.sessions.set(sessionId, session);
|
|
5356
5676
|
await this.persistSessionState(session);
|
|
5357
5677
|
setTimeout(() => {
|
|
5358
|
-
this.pushAvailableCommands(sessionId).catch(() => {
|
|
5678
|
+
this.pushAvailableCommands(sessionId, AVAILABLE_COMMANDS).catch(() => {
|
|
5359
5679
|
});
|
|
5360
5680
|
}, 500);
|
|
5361
5681
|
return {
|
|
@@ -5403,21 +5723,18 @@ var OpenaiCompatibleAgent = class {
|
|
|
5403
5723
|
if (!currentModelExists) {
|
|
5404
5724
|
active.modelId = modelState.currentModelId || null;
|
|
5405
5725
|
}
|
|
5406
|
-
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
sessionId: params.sessionId,
|
|
5412
|
-
update: {
|
|
5413
|
-
sessionUpdate: "usage_update",
|
|
5414
|
-
used: active.contextUsedTokens,
|
|
5415
|
-
size: this.contextWindowTokens
|
|
5416
|
-
}
|
|
5417
|
-
});
|
|
5418
|
-
}
|
|
5726
|
+
const contextUsageUpdate = {
|
|
5727
|
+
used: persistedState?.contextUsedTokens ?? 0,
|
|
5728
|
+
size: this.contextWindowTokens
|
|
5729
|
+
};
|
|
5730
|
+
active.contextUsedTokens = contextUsageUpdate.used;
|
|
5419
5731
|
await this.persistSessionState(active);
|
|
5420
|
-
|
|
5732
|
+
setTimeout(() => {
|
|
5733
|
+
this.pushUsageUpdate(params.sessionId, contextUsageUpdate).catch(() => {
|
|
5734
|
+
});
|
|
5735
|
+
this.pushAvailableCommands(params.sessionId, AVAILABLE_COMMANDS).catch(() => {
|
|
5736
|
+
});
|
|
5737
|
+
}, 500);
|
|
5421
5738
|
return {
|
|
5422
5739
|
configOptions: await this.buildConfigOptions(active.modelId, active.thoughtLevel)
|
|
5423
5740
|
};
|
|
@@ -5476,18 +5793,14 @@ var OpenaiCompatibleAgent = class {
|
|
|
5476
5793
|
}
|
|
5477
5794
|
return { stopReason: "end_turn" };
|
|
5478
5795
|
}
|
|
5796
|
+
const historyBeforeCompact = session.history.slice();
|
|
5479
5797
|
const summaryResult = await generateText2({
|
|
5480
5798
|
model: this.provider.chatModel(session.modelId),
|
|
5481
5799
|
messages: [
|
|
5482
|
-
...
|
|
5800
|
+
...historyBeforeCompact,
|
|
5483
5801
|
{
|
|
5484
5802
|
role: "user",
|
|
5485
|
-
content:
|
|
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.`
|
|
5803
|
+
content: COMPACT_PROMPT
|
|
5491
5804
|
}
|
|
5492
5805
|
],
|
|
5493
5806
|
maxOutputTokens: 5e3
|
|
@@ -5516,18 +5829,28 @@ var OpenaiCompatibleAgent = class {
|
|
|
5516
5829
|
const summaryUsage = summaryResult.finalStep.usage;
|
|
5517
5830
|
const outputTokens = summaryUsage.outputTokens ?? 0;
|
|
5518
5831
|
session.contextUsedTokens = outputTokens;
|
|
5519
|
-
|
|
5520
|
-
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
sessionUpdate: "usage_update",
|
|
5524
|
-
used: session.contextUsedTokens,
|
|
5525
|
-
size: this.contextWindowTokens
|
|
5526
|
-
}
|
|
5527
|
-
});
|
|
5528
|
-
}
|
|
5832
|
+
await this.pushUsageUpdate(sessionId, {
|
|
5833
|
+
used: session.contextUsedTokens,
|
|
5834
|
+
size: this.contextWindowTokens
|
|
5835
|
+
});
|
|
5529
5836
|
await this.persistSessionState(session);
|
|
5530
|
-
|
|
5837
|
+
const tokenBreakdown = await this.buildTokenBreakdown({
|
|
5838
|
+
systemPrompt: "",
|
|
5839
|
+
tools: {},
|
|
5840
|
+
history: historyBeforeCompact,
|
|
5841
|
+
userMessage: { role: "user", content: COMPACT_PROMPT },
|
|
5842
|
+
steps: summaryResult.steps
|
|
5843
|
+
});
|
|
5844
|
+
const usage = {
|
|
5845
|
+
totalTokens: summaryUsage.totalTokens ?? 0,
|
|
5846
|
+
inputTokens: summaryUsage.inputTokens ?? 0,
|
|
5847
|
+
outputTokens: summaryUsage.outputTokens ?? 0,
|
|
5848
|
+
thoughtTokens: summaryUsage.outputTokenDetails?.reasoningTokens,
|
|
5849
|
+
cachedReadTokens: summaryUsage.inputTokenDetails?.cacheReadTokens,
|
|
5850
|
+
cachedWriteTokens: summaryUsage.inputTokenDetails?.cacheWriteTokens,
|
|
5851
|
+
_meta: { fello: { tokenBreakdown } }
|
|
5852
|
+
};
|
|
5853
|
+
return { stopReason: "end_turn", usage };
|
|
5531
5854
|
}
|
|
5532
5855
|
async prompt(params) {
|
|
5533
5856
|
const session = this.sessions.get(params.sessionId);
|
|
@@ -5626,15 +5949,16 @@ var OpenaiCompatibleAgent = class {
|
|
|
5626
5949
|
getModel: () => this.provider.chatModel(session.modelId),
|
|
5627
5950
|
parentSignal: abortController.signal
|
|
5628
5951
|
});
|
|
5952
|
+
const allTools = {
|
|
5953
|
+
...sharedTools,
|
|
5954
|
+
...subagentTool,
|
|
5955
|
+
...imageAnalysisTool
|
|
5956
|
+
};
|
|
5629
5957
|
const result = streamText2({
|
|
5630
5958
|
model: this.provider.chatModel(session.modelId),
|
|
5631
5959
|
system: systemPrompt,
|
|
5632
5960
|
messages: [...session.history, userMessage],
|
|
5633
|
-
tools:
|
|
5634
|
-
...sharedTools,
|
|
5635
|
-
...subagentTool,
|
|
5636
|
-
...imageAnalysisTool
|
|
5637
|
-
},
|
|
5961
|
+
tools: allTools,
|
|
5638
5962
|
stopWhen: isStepCount2(128),
|
|
5639
5963
|
abortSignal: abortController.signal,
|
|
5640
5964
|
providerOptions: {
|
|
@@ -5690,30 +6014,38 @@ var OpenaiCompatibleAgent = class {
|
|
|
5690
6014
|
});
|
|
5691
6015
|
}
|
|
5692
6016
|
}
|
|
5693
|
-
const
|
|
5694
|
-
|
|
5695
|
-
|
|
5696
|
-
|
|
6017
|
+
const [turnUsage, finalStep, steps, responseMessages] = await Promise.all([
|
|
6018
|
+
result.usage,
|
|
6019
|
+
result.finalStep,
|
|
6020
|
+
result.steps,
|
|
6021
|
+
result.responseMessages
|
|
6022
|
+
]);
|
|
5697
6023
|
const finalStepUsage = finalStep.usage;
|
|
5698
|
-
|
|
6024
|
+
const contextUsedTokens = (finalStepUsage.inputTokens ?? 0) + (finalStepUsage.outputTokens ?? 0);
|
|
6025
|
+
const historyBeforeTurn = session.history.slice();
|
|
6026
|
+
session.history.push(userMessage, ...responseMessages);
|
|
6027
|
+
await this.appendSessionHistory(session.id, userMessage, ...responseMessages);
|
|
6028
|
+
session.contextUsedTokens = contextUsedTokens;
|
|
6029
|
+
const tokenBreakdown = await this.buildTokenBreakdown({
|
|
6030
|
+
systemPrompt,
|
|
6031
|
+
tools: allTools,
|
|
6032
|
+
history: historyBeforeTurn,
|
|
6033
|
+
userMessage,
|
|
6034
|
+
steps
|
|
6035
|
+
});
|
|
5699
6036
|
const usage = {
|
|
5700
6037
|
totalTokens: turnUsage.totalTokens ?? 0,
|
|
5701
6038
|
inputTokens: turnUsage.inputTokens ?? 0,
|
|
5702
6039
|
outputTokens: turnUsage.outputTokens ?? 0,
|
|
5703
6040
|
thoughtTokens: turnUsage.outputTokenDetails?.reasoningTokens,
|
|
5704
6041
|
cachedReadTokens: turnUsage.inputTokenDetails?.cacheReadTokens,
|
|
5705
|
-
cachedWriteTokens: turnUsage.inputTokenDetails?.cacheWriteTokens
|
|
6042
|
+
cachedWriteTokens: turnUsage.inputTokenDetails?.cacheWriteTokens,
|
|
6043
|
+
_meta: { fello: { tokenBreakdown } }
|
|
5706
6044
|
};
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
sessionUpdate: "usage_update",
|
|
5712
|
-
used: session.contextUsedTokens,
|
|
5713
|
-
size: this.contextWindowTokens
|
|
5714
|
-
}
|
|
5715
|
-
});
|
|
5716
|
-
}
|
|
6045
|
+
await this.pushUsageUpdate(params.sessionId, {
|
|
6046
|
+
used: session.contextUsedTokens,
|
|
6047
|
+
size: this.contextWindowTokens
|
|
6048
|
+
});
|
|
5717
6049
|
return {
|
|
5718
6050
|
stopReason: "end_turn",
|
|
5719
6051
|
usage
|
|
@@ -9246,6 +9578,11 @@ function createSessionModule(ctx, deps) {
|
|
|
9246
9578
|
if (!session) throw new Error("Session does not exist");
|
|
9247
9579
|
return { messages: notif.mergeNotifications(storage.readSessionMessages(sessionId)) };
|
|
9248
9580
|
}
|
|
9581
|
+
async function getSessionTokenUsage({ sessionId }) {
|
|
9582
|
+
const session = storage.getSession(sessionId);
|
|
9583
|
+
if (!session) throw new Error("Session does not exist");
|
|
9584
|
+
return { records: storage.readTokenUsage(sessionId) };
|
|
9585
|
+
}
|
|
9249
9586
|
async function sendPrompt({
|
|
9250
9587
|
sessionId,
|
|
9251
9588
|
contents
|
|
@@ -9356,6 +9693,15 @@ function createSessionModule(ctx, deps) {
|
|
|
9356
9693
|
isStreaming: false,
|
|
9357
9694
|
...promptResponse?.usage ? { lastTurnUsage: promptResponse.usage } : {}
|
|
9358
9695
|
});
|
|
9696
|
+
if (promptResponse?.usage?._meta) {
|
|
9697
|
+
try {
|
|
9698
|
+
storage.appendTokenUsage(sessionId, {
|
|
9699
|
+
timestamp: Date.now(),
|
|
9700
|
+
usage: promptResponse.usage
|
|
9701
|
+
});
|
|
9702
|
+
} catch {
|
|
9703
|
+
}
|
|
9704
|
+
}
|
|
9359
9705
|
const updated2 = storage.getSession(sessionId);
|
|
9360
9706
|
if (updated2) sendEvent("session-changed", { session: updated2 });
|
|
9361
9707
|
const bridge = ilinkState.getBridge();
|
|
@@ -9629,6 +9975,7 @@ function createSessionModule(ctx, deps) {
|
|
|
9629
9975
|
newSession,
|
|
9630
9976
|
loadSession,
|
|
9631
9977
|
getSessionHistory,
|
|
9978
|
+
getSessionTokenUsage,
|
|
9632
9979
|
sendPrompt,
|
|
9633
9980
|
cancelPrompt,
|
|
9634
9981
|
updateSession: updateSession2,
|
|
@@ -10421,13 +10768,13 @@ function createAutomationModule(ctx, deps) {
|
|
|
10421
10768
|
sendEvent("task-update", { scheduleId, task });
|
|
10422
10769
|
return task;
|
|
10423
10770
|
} catch (err) {
|
|
10424
|
-
const
|
|
10771
|
+
const errorMessage2 = err instanceof Error ? err.message : String(err);
|
|
10425
10772
|
task.completedAt = Date.now();
|
|
10426
10773
|
task.status = "error";
|
|
10427
|
-
task.error =
|
|
10774
|
+
task.error = errorMessage2;
|
|
10428
10775
|
store.saveTask(scheduleId, task);
|
|
10429
10776
|
sendEvent("task-update", { scheduleId, task });
|
|
10430
|
-
console.error(`[Automation] Task failed:`,
|
|
10777
|
+
console.error(`[Automation] Task failed:`, errorMessage2);
|
|
10431
10778
|
return task;
|
|
10432
10779
|
} finally {
|
|
10433
10780
|
runningTasks.delete(scheduleId);
|
|
@@ -11074,7 +11421,7 @@ async function callOpenAICompatibleApi(provider, request) {
|
|
|
11074
11421
|
}
|
|
11075
11422
|
function createImageGenerationModule(ctx, deps) {
|
|
11076
11423
|
const { storage } = ctx;
|
|
11077
|
-
function
|
|
11424
|
+
function getActiveProvider2() {
|
|
11078
11425
|
const settings = storage.getSettings();
|
|
11079
11426
|
const provider = settings.imageGeneration?.find((p) => p.active);
|
|
11080
11427
|
if (!provider) {
|
|
@@ -11085,7 +11432,7 @@ function createImageGenerationModule(ctx, deps) {
|
|
|
11085
11432
|
return provider;
|
|
11086
11433
|
}
|
|
11087
11434
|
async function generateImage(sessionId, request) {
|
|
11088
|
-
const provider =
|
|
11435
|
+
const provider = getActiveProvider2();
|
|
11089
11436
|
const apiResult = await callOpenAICompatibleApi(provider, request);
|
|
11090
11437
|
const shareDir = storage.sessionShareDir(sessionId);
|
|
11091
11438
|
if (!shareDir) throw new Error(`Session not found: ${sessionId}`);
|
|
@@ -11483,6 +11830,178 @@ function createToolboxModule(_ctx) {
|
|
|
11483
11830
|
};
|
|
11484
11831
|
}
|
|
11485
11832
|
|
|
11833
|
+
// src/backend/speech/manager.ts
|
|
11834
|
+
import { Buffer as Buffer2 } from "node:buffer";
|
|
11835
|
+
import {
|
|
11836
|
+
createASRClient
|
|
11837
|
+
} from "unified-realtime-asr";
|
|
11838
|
+
var DEFAULT_DASHSCOPE_MODEL = "fun-asr-flash-8k-realtime";
|
|
11839
|
+
var DEFAULT_OPENAI_MODEL = "gpt-4o-transcribe";
|
|
11840
|
+
function optionalString(value) {
|
|
11841
|
+
const trimmed = value?.trim();
|
|
11842
|
+
return trimmed || void 0;
|
|
11843
|
+
}
|
|
11844
|
+
function required(value, name) {
|
|
11845
|
+
const result = optionalString(value);
|
|
11846
|
+
if (!result) throw new Error(`\u5B9E\u65F6\u8BED\u97F3\u8BC6\u522B\u914D\u7F6E\u7F3A\u5C11 ${name}\u3002`);
|
|
11847
|
+
return result;
|
|
11848
|
+
}
|
|
11849
|
+
function buildOptions(provider) {
|
|
11850
|
+
return {
|
|
11851
|
+
language: optionalString(provider.language) ?? "zh-CN",
|
|
11852
|
+
sampleRate: 16e3,
|
|
11853
|
+
channels: 1,
|
|
11854
|
+
format: "pcm",
|
|
11855
|
+
interimResults: true,
|
|
11856
|
+
punctuation: true,
|
|
11857
|
+
autoReconnect: false,
|
|
11858
|
+
transcriptionModel: provider.provider === "openai" ? optionalString(provider.model) ?? DEFAULT_OPENAI_MODEL : void 0
|
|
11859
|
+
};
|
|
11860
|
+
}
|
|
11861
|
+
function buildConfig(provider) {
|
|
11862
|
+
const options = buildOptions(provider);
|
|
11863
|
+
const url = optionalString(provider.baseUrl);
|
|
11864
|
+
switch (provider.provider) {
|
|
11865
|
+
case "volcengine":
|
|
11866
|
+
return {
|
|
11867
|
+
provider: "volcengine",
|
|
11868
|
+
apiKey: required(provider.apiKey, "API Key"),
|
|
11869
|
+
resourceId: optionalString(provider.resourceId),
|
|
11870
|
+
appId: optionalString(provider.appId),
|
|
11871
|
+
url,
|
|
11872
|
+
options
|
|
11873
|
+
};
|
|
11874
|
+
case "dashscope":
|
|
11875
|
+
return {
|
|
11876
|
+
provider: "dashscope",
|
|
11877
|
+
apiKey: required(provider.apiKey, "API Key"),
|
|
11878
|
+
model: optionalString(provider.model) ?? DEFAULT_DASHSCOPE_MODEL,
|
|
11879
|
+
workspaceId: optionalString(provider.workspaceId),
|
|
11880
|
+
region: provider.region,
|
|
11881
|
+
workspace: optionalString(provider.workspace),
|
|
11882
|
+
url,
|
|
11883
|
+
options
|
|
11884
|
+
};
|
|
11885
|
+
case "openai":
|
|
11886
|
+
return {
|
|
11887
|
+
provider: "openai",
|
|
11888
|
+
apiKey: required(provider.apiKey, "API Key"),
|
|
11889
|
+
url,
|
|
11890
|
+
options
|
|
11891
|
+
};
|
|
11892
|
+
case "iflytek":
|
|
11893
|
+
return {
|
|
11894
|
+
provider: "iflytek",
|
|
11895
|
+
appId: required(provider.appId, "App ID"),
|
|
11896
|
+
apiKey: required(provider.apiKey, "API Key"),
|
|
11897
|
+
apiSecret: required(provider.apiSecret, "API Secret"),
|
|
11898
|
+
url,
|
|
11899
|
+
options
|
|
11900
|
+
};
|
|
11901
|
+
}
|
|
11902
|
+
}
|
|
11903
|
+
function getActiveProvider(ctx) {
|
|
11904
|
+
const provider = ctx.storage.getSettings().speechToText.find((item) => item.active);
|
|
11905
|
+
if (!provider) {
|
|
11906
|
+
throw new Error("\u8BF7\u5148\u5728\u8BBE\u7F6E \u2192 \u8BED\u97F3\u8BC6\u522B\u4E2D\u914D\u7F6E\u5E76\u542F\u7528\u4E00\u4E2A Provider\u3002");
|
|
11907
|
+
}
|
|
11908
|
+
return provider;
|
|
11909
|
+
}
|
|
11910
|
+
function errorMessage(error) {
|
|
11911
|
+
return error instanceof Error ? error.message : String(error);
|
|
11912
|
+
}
|
|
11913
|
+
function createAsrManager(ctx) {
|
|
11914
|
+
const sessions = /* @__PURE__ */ new Map();
|
|
11915
|
+
const keyOf2 = (clientId, asrSessionId) => `${clientId}:${asrSessionId}`;
|
|
11916
|
+
const emitError = (session, error) => {
|
|
11917
|
+
ctx.sendEvent("asr-error", {
|
|
11918
|
+
clientId: session.clientId,
|
|
11919
|
+
asrSessionId: session.asrSessionId,
|
|
11920
|
+
message: errorMessage(error)
|
|
11921
|
+
});
|
|
11922
|
+
};
|
|
11923
|
+
const emitTranscript = (session, transcript) => {
|
|
11924
|
+
ctx.sendEvent("asr-transcript", {
|
|
11925
|
+
clientId: session.clientId,
|
|
11926
|
+
asrSessionId: session.asrSessionId,
|
|
11927
|
+
text: transcript.text,
|
|
11928
|
+
isFinal: transcript.isFinal,
|
|
11929
|
+
id: transcript.id,
|
|
11930
|
+
index: transcript.index,
|
|
11931
|
+
speaker: transcript.speaker
|
|
11932
|
+
});
|
|
11933
|
+
};
|
|
11934
|
+
return {
|
|
11935
|
+
async start(clientId, asrSessionId) {
|
|
11936
|
+
const key = keyOf2(clientId, asrSessionId);
|
|
11937
|
+
if (sessions.has(key)) return { ok: true };
|
|
11938
|
+
const provider = getActiveProvider(ctx);
|
|
11939
|
+
const client2 = createASRClient(buildConfig(provider));
|
|
11940
|
+
const active = { clientId, asrSessionId, client: client2 };
|
|
11941
|
+
sessions.set(key, active);
|
|
11942
|
+
client2.on("transcript", (transcript) => {
|
|
11943
|
+
if (sessions.get(key) === active) emitTranscript(active, transcript);
|
|
11944
|
+
});
|
|
11945
|
+
client2.on("error", (error) => {
|
|
11946
|
+
if (sessions.get(key) === active) emitError(active, error);
|
|
11947
|
+
});
|
|
11948
|
+
client2.on("close", (info) => {
|
|
11949
|
+
if (sessions.get(key) !== active) return;
|
|
11950
|
+
sessions.delete(key);
|
|
11951
|
+
ctx.sendEvent("asr-closed", {
|
|
11952
|
+
clientId,
|
|
11953
|
+
asrSessionId,
|
|
11954
|
+
code: info?.code,
|
|
11955
|
+
reason: info?.reason
|
|
11956
|
+
});
|
|
11957
|
+
});
|
|
11958
|
+
try {
|
|
11959
|
+
await client2.connect();
|
|
11960
|
+
return { ok: true };
|
|
11961
|
+
} catch (error) {
|
|
11962
|
+
sessions.delete(key);
|
|
11963
|
+
client2.removeAllListeners();
|
|
11964
|
+
throw new Error(errorMessage(error));
|
|
11965
|
+
}
|
|
11966
|
+
},
|
|
11967
|
+
frame(clientId, asrSessionId, audioB64) {
|
|
11968
|
+
const active = sessions.get(keyOf2(clientId, asrSessionId));
|
|
11969
|
+
if (!active) return;
|
|
11970
|
+
try {
|
|
11971
|
+
active.client.sendAudio(Buffer2.from(audioB64, "base64"));
|
|
11972
|
+
} catch (error) {
|
|
11973
|
+
emitError(active, error);
|
|
11974
|
+
}
|
|
11975
|
+
},
|
|
11976
|
+
async stop(clientId, asrSessionId) {
|
|
11977
|
+
const key = keyOf2(clientId, asrSessionId);
|
|
11978
|
+
const active = sessions.get(key);
|
|
11979
|
+
if (!active) return;
|
|
11980
|
+
try {
|
|
11981
|
+
await active.client.close();
|
|
11982
|
+
} catch (error) {
|
|
11983
|
+
emitError(active, error);
|
|
11984
|
+
} finally {
|
|
11985
|
+
if (sessions.get(key) === active) sessions.delete(key);
|
|
11986
|
+
active.client.removeAllListeners();
|
|
11987
|
+
}
|
|
11988
|
+
},
|
|
11989
|
+
async closeAll() {
|
|
11990
|
+
await Promise.all(
|
|
11991
|
+
Array.from(sessions.values(), async (active) => {
|
|
11992
|
+
try {
|
|
11993
|
+
await active.client.close();
|
|
11994
|
+
} catch {
|
|
11995
|
+
} finally {
|
|
11996
|
+
active.client.removeAllListeners();
|
|
11997
|
+
}
|
|
11998
|
+
})
|
|
11999
|
+
);
|
|
12000
|
+
sessions.clear();
|
|
12001
|
+
}
|
|
12002
|
+
};
|
|
12003
|
+
}
|
|
12004
|
+
|
|
11486
12005
|
// src/backend/backend.ts
|
|
11487
12006
|
function initBackend(emitter) {
|
|
11488
12007
|
const listeners = [];
|
|
@@ -11508,6 +12027,7 @@ function initBackend(emitter) {
|
|
|
11508
12027
|
const _inference = createInferenceModule(ctx, { skills, search, toolbox });
|
|
11509
12028
|
const memory = createMemoryModule(ctx, { inference: _inference });
|
|
11510
12029
|
const imageGeneration = createImageGenerationModule(ctx, { ilink: ilink.state });
|
|
12030
|
+
const asr = createAsrManager(ctx);
|
|
11511
12031
|
const session = createSessionModule(ctx, {
|
|
11512
12032
|
bridgeConnect,
|
|
11513
12033
|
askUser,
|
|
@@ -11666,6 +12186,9 @@ function initBackend(emitter) {
|
|
|
11666
12186
|
async getSessionHistory(params) {
|
|
11667
12187
|
return session.getSessionHistory(params);
|
|
11668
12188
|
},
|
|
12189
|
+
async getSessionTokenUsage(params) {
|
|
12190
|
+
return session.getSessionTokenUsage(params);
|
|
12191
|
+
},
|
|
11669
12192
|
async sendPrompt(params) {
|
|
11670
12193
|
return session.sendPrompt(params);
|
|
11671
12194
|
},
|
|
@@ -11892,11 +12415,22 @@ function initBackend(emitter) {
|
|
|
11892
12415
|
},
|
|
11893
12416
|
async getMemorySystemFilePath({ projectId }) {
|
|
11894
12417
|
return memory.getFilePath(projectId);
|
|
12418
|
+
},
|
|
12419
|
+
// Realtime ASR
|
|
12420
|
+
async startRealtimeAsr({ clientId, asrSessionId }) {
|
|
12421
|
+
return asr.start(clientId, asrSessionId);
|
|
12422
|
+
},
|
|
12423
|
+
async sendRealtimeAsrFrame({ clientId, asrSessionId, audioB64 }) {
|
|
12424
|
+
asr.frame(clientId, asrSessionId, audioB64);
|
|
12425
|
+
},
|
|
12426
|
+
async stopRealtimeAsr({ clientId, asrSessionId }) {
|
|
12427
|
+
await asr.stop(clientId, asrSessionId);
|
|
11895
12428
|
}
|
|
11896
12429
|
};
|
|
11897
12430
|
webui.setHandlers(backendHandlers2);
|
|
11898
12431
|
async function closeBackend2() {
|
|
11899
12432
|
automation.stopAllCrons();
|
|
12433
|
+
await asr.closeAll();
|
|
11900
12434
|
webui.stop();
|
|
11901
12435
|
await ilink.stopIlink({ logout: false });
|
|
11902
12436
|
session.clearSession();
|
|
@@ -11912,7 +12446,7 @@ function initBackend(emitter) {
|
|
|
11912
12446
|
}
|
|
11913
12447
|
|
|
11914
12448
|
// package.json
|
|
11915
|
-
var version = "0.1.
|
|
12449
|
+
var version = "0.1.53";
|
|
11916
12450
|
|
|
11917
12451
|
// src/server/main.ts
|
|
11918
12452
|
var port;
|