chatlab-cli 0.36.0 → 0.36.2

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 (200) hide show
  1. package/README.md +7 -7
  2. package/dist/{chat-command-SXW67RF7.mjs → chat-command-SEV6N3AR.mjs} +10 -10
  3. package/dist/chat-command-SEV6N3AR.mjs.map +1 -0
  4. package/dist/{chunk-UNIKQFI5.mjs → chunk-6E46U4H2.mjs} +2 -2
  5. package/dist/{chunk-AAGDVTP2.mjs → chunk-6EZPD3XJ.mjs} +2 -2
  6. package/dist/{chunk-VDWI4A4U.mjs → chunk-CH5YAZ4Q.mjs} +2 -2
  7. package/dist/{chunk-JHON5FN7.mjs → chunk-HWIXK7SU.mjs} +8 -3
  8. package/dist/chunk-HWIXK7SU.mjs.map +1 -0
  9. package/dist/{chunk-U2NXHIJK.mjs → chunk-TJ3NOBVI.mjs} +3 -3
  10. package/dist/{chunk-OWOEWZIC.mjs → chunk-TRGR3KKJ.mjs} +84 -28
  11. package/dist/chunk-TRGR3KKJ.mjs.map +1 -0
  12. package/dist/{chunk-GVW3BDGZ.mjs → chunk-TWH422HC.mjs} +3 -3
  13. package/dist/{chunk-4YPNYQSP.mjs → chunk-VREVDZ4Q.mjs} +390 -96
  14. package/dist/chunk-VREVDZ4Q.mjs.map +1 -0
  15. package/dist/{chunk-XDF6PMVZ.mjs → chunk-VUYWUHWW.mjs} +2 -2
  16. package/dist/{chunk-BSGLH6G3.mjs → chunk-WJQOXOMR.mjs} +147 -80
  17. package/dist/chunk-WJQOXOMR.mjs.map +1 -0
  18. package/dist/{chunk-CNEWMCGX.mjs → chunk-WRBFV2GX.mjs} +57 -57
  19. package/dist/chunk-WRBFV2GX.mjs.map +1 -0
  20. package/dist/{chunk-LZGOIRLV.mjs → chunk-YUH3H3QW.mjs} +9 -5
  21. package/dist/chunk-YUH3H3QW.mjs.map +1 -0
  22. package/dist/cli.mjs +9 -9
  23. package/dist/contacts-worker.mjs +2 -2
  24. package/dist/global-insight-worker.mjs +1 -1
  25. package/dist/{http-LVOGJFDL.mjs → http-237XYNRT.mjs} +12 -12
  26. package/dist/{import-7OU57ZHM.mjs → import-R2E2TFAK.mjs} +7 -7
  27. package/dist/index.mjs +12 -12
  28. package/dist/{mcp-CUKHTTII.mjs → mcp-BED4AARV.mjs} +8 -8
  29. package/dist/people-relationships-worker.mjs +2 -2
  30. package/dist/semantic-index-worker.mjs +1 -1
  31. package/dist/{service-KZTHBDQ5.mjs → service-ZAHXRSFD.mjs} +6 -6
  32. package/dist/service-ZAHXRSFD.mjs.map +1 -0
  33. package/dist/{src-LORFXAUE.mjs → src-AYMALWU5.mjs} +10 -6
  34. package/dist/{stream-import-7YUWIAD6.mjs → stream-import-RXNSOOYH.mjs} +7 -7
  35. package/dist/{undici-MU5I3L6Q.mjs → undici-UGXDRJLV.mjs} +193 -193
  36. package/dist/undici-UGXDRJLV.mjs.map +1 -0
  37. package/dist/{update-checker-3N7HQEP2.mjs → update-checker-UL2FBLXH.mjs} +3 -5
  38. package/dist/{update-checker-3N7HQEP2.mjs.map → update-checker-UL2FBLXH.mjs.map} +1 -1
  39. package/dist/{worker-runtime-GQ5SY7E3.mjs → worker-runtime-JGAZU7MC.mjs} +5 -5
  40. package/dist-cli-web/assets/AISettingsTab-VgI7PiJd.js +1 -0
  41. package/dist-cli-web/assets/AboutTab-DCM1-glA.js +1 -0
  42. package/dist-cli-web/assets/ActionToolsPanel-BTGgwXVD.css +1 -0
  43. package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-a7RMjjve.js +112 -0
  44. package/dist-cli-web/assets/{Alert-DJzXKcec.js → Alert-D-egBWcb.js} +1 -1
  45. package/dist-cli-web/assets/ApiSettingsTab-Co3LWf1f.js +2 -0
  46. package/dist-cli-web/assets/BatchManageTab-2LrckmQm.js +1 -0
  47. package/dist-cli-web/assets/{BufferResource-DY3P-dGs.js → BufferResource-BE2_2bZK.js} +1 -1
  48. package/dist-cli-web/assets/{CanvasRenderer-As2MJTWZ.js → CanvasRenderer-DDKdvEYQ.js} +1 -1
  49. package/dist-cli-web/assets/ChatRecordDrawer-DRhztqLG.js +1 -0
  50. package/dist-cli-web/assets/{ChatRecordWorkspace-CVDPBmcl.js → ChatRecordWorkspace-DqUI4QiU.js} +1 -1
  51. package/dist-cli-web/assets/{Checkbox-4F1WAuVF.js → Checkbox-EfpQmv4A.js} +1 -1
  52. package/dist-cli-web/assets/DataDirCleanupNotice-BYIiR58J.js +1 -0
  53. package/dist-cli-web/assets/DatePicker.vue_vue_type_script_setup_true_lang-sPDoPzZ9.js +1 -0
  54. package/dist-cli-web/assets/{DebugToolsPanel-BLU6SY8a.js → DebugToolsPanel-BIHA6jw4.js} +1 -1
  55. package/dist-cli-web/assets/EChart.vue_vue_type_script_setup_true_lang-DryMSoCz.js +1 -0
  56. package/dist-cli-web/assets/EChartBar.vue_vue_type_script_setup_true_lang-BdFW-hvt.js +1 -0
  57. package/dist-cli-web/assets/{EChartLine.vue_vue_type_script_setup_true_lang-BYhukELX.js → EChartLine.vue_vue_type_script_setup_true_lang-C69Kdw9X.js} +1 -1
  58. package/dist-cli-web/assets/{EChartWordcloud-C16xh7Tx.js → EChartWordcloud-DM7UEHdK.js} +1 -1
  59. package/dist-cli-web/assets/{Filter-BEtPORqF.js → Filter-kO4dIDJ2.js} +1 -1
  60. package/dist-cli-web/assets/GlobalTaskBar-BZS_h0zC.js +1 -0
  61. package/dist-cli-web/assets/GroupRelationshipGalaxyView--WIaHx_F.js +1 -0
  62. package/dist-cli-web/assets/{Label-Dgl3ghzT.js → Label-CIuDXyeM.js} +1 -1
  63. package/dist-cli-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-B_7VHxTx.js +1 -0
  64. package/dist-cli-web/assets/MessageExportModal-BQsIpyxv.js +1 -0
  65. package/dist-cli-web/assets/{PageHeader-CL9AFfvl.js → PageHeader-DxhQHF_0.js} +1 -1
  66. package/dist-cli-web/assets/{PageTabs.vue_vue_type_script_setup_true_lang-C22kOxIK.js → PageTabs.vue_vue_type_script_setup_true_lang-Cgungbjl.js} +1 -1
  67. package/dist-cli-web/assets/{RelationshipGalaxyCanvas-BnkcrIpk.js → RelationshipGalaxyCanvas-Cod1JX9m.js} +14 -14
  68. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CCasBcBQ.css +1 -0
  69. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CkefzeFJ.js +4168 -0
  70. package/dist-cli-web/assets/{RenderTargetSystem-CPwnC2X3.js → RenderTargetSystem-SuQ7cbze.js} +1 -1
  71. package/dist-cli-web/assets/RovingFocusItem-psoFYxrC.js +1 -0
  72. package/dist-cli-web/assets/{ScreenCaptureModal-ByKxzNQe.js → ScreenCaptureModal-D4r9ixKh.js} +1 -1
  73. package/dist-cli-web/assets/SectionTabs.vue_vue_type_script_setup_true_lang-v_7aRBgM.js +1 -0
  74. package/dist-cli-web/assets/{Select-jVtfc_xc.js → Select-CxurgslB.js} +1 -1
  75. package/dist-cli-web/assets/SettingsModal-BFkxzo0Y.css +1 -0
  76. package/dist-cli-web/assets/SettingsModal-DBZucuf6.js +2 -0
  77. package/dist-cli-web/assets/{StorageTab-QdcDqA6Q.js → StorageTab-DhSJ-0Ir.js} +1 -1
  78. package/dist-cli-web/assets/{Switch-DYHM64k9.js → Switch-3D81G6uV.js} +1 -1
  79. package/dist-cli-web/assets/Tabs-Bnm_Q7yW.js +1 -0
  80. package/dist-cli-web/assets/{Tabs-B6Nzq2NQ.js → Tabs-DB603EEu.js} +1 -1
  81. package/dist-cli-web/assets/{ThemeCard.vue_vue_type_script_setup_true_lang-Bsq7gpC0.js → ThemeCard.vue_vue_type_script_setup_true_lang-BDTdkH5i.js} +1 -1
  82. package/dist-cli-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-Cjz8Wpg-.js +1 -0
  83. package/dist-cli-web/assets/{VisuallyHiddenInput-IQpmK9yR.js → VisuallyHiddenInput-Bo_XwaLu.js} +1 -1
  84. package/dist-cli-web/assets/{WebGLRenderer-8JHbnkTc.js → WebGLRenderer-D1x9WZRj.js} +1 -1
  85. package/dist-cli-web/assets/{WebGPURenderer-CLWfB4CC.js → WebGPURenderer-37Nw-tLm.js} +1 -1
  86. package/dist-cli-web/assets/aiChat-BCzYQeZq.js +8 -0
  87. package/dist-cli-web/assets/{browserAll-Cin6ghNg.js → browserAll-CWrz_-4U.js} +1 -1
  88. package/dist-cli-web/assets/{cli-web-D7IBc3AX.js → cli-web-C-8N0CJh.js} +1 -1
  89. package/dist-cli-web/assets/{fetch-2QEQPA9q.js → fetch-6pcVxB9h.js} +1 -1
  90. package/dist-cli-web/assets/{fetch-CuUeyk0N.js → fetch-B69OkB6B.js} +1 -1
  91. package/dist-cli-web/assets/{fetch-1NiXh-_B.js → fetch-BGmCCyzz.js} +1 -1
  92. package/dist-cli-web/assets/{fetch-C8tTTsCm.js → fetch-CFpLXWTe.js} +1 -1
  93. package/dist-cli-web/assets/{fetch-B7kuohCt.js → fetch-CgA1peJD.js} +1 -1
  94. package/dist-cli-web/assets/{fetch-OnnCjzee.js → fetch-CkXgOxcu.js} +1 -1
  95. package/dist-cli-web/assets/{fetch-BR71C0K9.js → fetch-DPSWt6yX.js} +1 -1
  96. package/dist-cli-web/assets/{fetch-Bk-7vxHV.js → fetch-DZ6OF-xW.js} +1 -1
  97. package/dist-cli-web/assets/{fetch-_CN1EVMt.js → fetch-Du-wU0OO.js} +1 -1
  98. package/dist-cli-web/assets/fetch-Gu4qQjUB.js +1 -0
  99. package/dist-cli-web/assets/{fetch-B2agy1hy.js → fetch-qd2FgBWQ.js} +1 -1
  100. package/dist-cli-web/assets/{fetch-DPRDSI39.js → fetch-z9M9FcIC.js} +1 -1
  101. package/dist-cli-web/assets/host-CWsAWKgy.js +1 -0
  102. package/dist-cli-web/assets/host-D8zlA62K.js +1 -0
  103. package/dist-cli-web/assets/index-BGd4ZfhO.js +2 -0
  104. package/dist-cli-web/assets/index-BYZF1ngN.js +1 -0
  105. package/dist-cli-web/assets/index-BcuwlCin.css +1 -0
  106. package/dist-cli-web/assets/index-BnaLj2dx.css +1 -0
  107. package/dist-cli-web/assets/index-Bq5q3kSU.js +36 -0
  108. package/dist-cli-web/assets/index-CPR3jdC2.js +137 -0
  109. package/dist-cli-web/assets/index-D3AjvaOX.js +1 -0
  110. package/dist-cli-web/assets/index-DAitScUA.js +1 -0
  111. package/dist-cli-web/assets/index-DBSMWAJ0.js +1 -0
  112. package/dist-cli-web/assets/index-DTn9htw-.js +64 -0
  113. package/dist-cli-web/assets/index-DV_rWxcH.js +1 -0
  114. package/dist-cli-web/assets/index-DxhAGqYM.css +1 -0
  115. package/dist-cli-web/assets/{index-Colc58j-.js → index-Dy0fRMDf.js} +1 -1
  116. package/dist-cli-web/assets/index-Dz_ddyZS.css +1 -0
  117. package/dist-cli-web/assets/index-I0mIcDpE.css +1 -0
  118. package/dist-cli-web/assets/{index-BIHFuCJK.js → index-a7CT8DQm.js} +1 -1
  119. package/dist-cli-web/assets/index-onwNShRw.js +2 -0
  120. package/dist-cli-web/assets/index-v6DlL4ue.js +1 -0
  121. package/dist-cli-web/assets/{people-page-header-DNPjaSt4.js → people-page-header-Czt9e1jv.js} +1 -1
  122. package/dist-cli-web/assets/{prompt-BgywZQ_g.js → prompt-DGazz143.js} +1 -1
  123. package/dist-cli-web/assets/{semantic-index-config-builder-bji_UxYE.js → semantic-index-config-builder-BkFHzIUy.js} +1 -1
  124. package/dist-cli-web/assets/service-BMqwB74f.js +1 -0
  125. package/dist-cli-web/assets/{service-DpU9fa-l.js → service-CAp0YJoS.js} +1 -1
  126. package/dist-cli-web/assets/service-CUQ8iHdS.js +1 -0
  127. package/dist-cli-web/assets/{useFormControl-De24E2zT.js → useFormControl-DcSMUc2d.js} +1 -1
  128. package/dist-cli-web/assets/useTable-Clmq3sge.js +1 -0
  129. package/dist-cli-web/assets/useToast-YAHDkKDN.js +1 -0
  130. package/dist-cli-web/assets/{vendor-echarts-DfAMQxdr.js → vendor-echarts-hTLhTs52.js} +5 -5
  131. package/dist-cli-web/assets/{vendor-echarts-wordcloud-BsaEJTPY.js → vendor-echarts-wordcloud-B8CF_NgP.js} +1 -1
  132. package/dist-cli-web/assets/{vendor-zrender-PFmZe1EY.js → vendor-zrender-D8psf1AA.js} +2 -2
  133. package/dist-cli-web/assets/{webworkerAll-BRnv6GvJ.js → webworkerAll-CvSp2Y8j.js} +1 -1
  134. package/dist-cli-web/index.html +2 -2
  135. package/package.json +4 -4
  136. package/dist/chat-command-SXW67RF7.mjs.map +0 -1
  137. package/dist/chunk-4YPNYQSP.mjs.map +0 -1
  138. package/dist/chunk-BSGLH6G3.mjs.map +0 -1
  139. package/dist/chunk-CNEWMCGX.mjs.map +0 -1
  140. package/dist/chunk-JHON5FN7.mjs.map +0 -1
  141. package/dist/chunk-LZGOIRLV.mjs.map +0 -1
  142. package/dist/chunk-OWOEWZIC.mjs.map +0 -1
  143. package/dist/service-KZTHBDQ5.mjs.map +0 -1
  144. package/dist/undici-MU5I3L6Q.mjs.map +0 -1
  145. package/dist-cli-web/assets/AISettingsTab-BmhNcUEh.js +0 -1
  146. package/dist-cli-web/assets/AboutTab-CFklrZt8.js +0 -1
  147. package/dist-cli-web/assets/ActionToolsPanel-Dp-ojXjO.css +0 -1
  148. package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-B-dIPvcs.js +0 -110
  149. package/dist-cli-web/assets/ApiSettingsTab-DvDm421U.js +0 -2
  150. package/dist-cli-web/assets/BatchManageTab-DhIDH3Q1.js +0 -1
  151. package/dist-cli-web/assets/ChatRecordDrawer-DHdas7Jp.js +0 -1
  152. package/dist-cli-web/assets/DataDirCleanupNotice-jebQ9il3.js +0 -1
  153. package/dist-cli-web/assets/DatePicker.vue_vue_type_script_setup_true_lang-Cal624eP.js +0 -1
  154. package/dist-cli-web/assets/EChart.vue_vue_type_script_setup_true_lang-CsgJ-Xn3.js +0 -1
  155. package/dist-cli-web/assets/GlobalTaskBar-BvNmFO7q.js +0 -1
  156. package/dist-cli-web/assets/GroupRelationshipGalaxyView-DEUIrvgz.js +0 -1
  157. package/dist-cli-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-CwDIA0UP.js +0 -1
  158. package/dist-cli-web/assets/MessageExportModal-DYjhBuzO.js +0 -1
  159. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CqdqveEJ.js +0 -4108
  160. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-TYGOUDiv.css +0 -1
  161. package/dist-cli-web/assets/RovingFocusItem-j33Nsbbn.js +0 -1
  162. package/dist-cli-web/assets/SectionTabs.vue_vue_type_script_setup_true_lang-C6EHKB_i.js +0 -1
  163. package/dist-cli-web/assets/SettingsModal-CjVax3I6.css +0 -1
  164. package/dist-cli-web/assets/SettingsModal-Dg27piEO.js +0 -2
  165. package/dist-cli-web/assets/Tabs-CRZdCcU4.js +0 -1
  166. package/dist-cli-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-BLpQds4F.js +0 -1
  167. package/dist-cli-web/assets/aiChat-4JvxWGXZ.js +0 -8
  168. package/dist-cli-web/assets/base-D6fxqD_X.js +0 -1
  169. package/dist-cli-web/assets/dateFormat-Bu4-Ux3L.js +0 -1
  170. package/dist-cli-web/assets/index-B4J99zv3.css +0 -1
  171. package/dist-cli-web/assets/index-BBeqtL8d.css +0 -1
  172. package/dist-cli-web/assets/index-BCEk6ZpL.js +0 -64
  173. package/dist-cli-web/assets/index-BUz_Vl9U.js +0 -2
  174. package/dist-cli-web/assets/index-BWZIoPV3.css +0 -1
  175. package/dist-cli-web/assets/index-BYQV3OA5.js +0 -1
  176. package/dist-cli-web/assets/index-CVVv_6qu.js +0 -2
  177. package/dist-cli-web/assets/index-CacwXQL4.js +0 -1
  178. package/dist-cli-web/assets/index-DImo7TQN.js +0 -1
  179. package/dist-cli-web/assets/index-DV9zQVPV.js +0 -137
  180. package/dist-cli-web/assets/index-DXKS-q-w.css +0 -1
  181. package/dist-cli-web/assets/index-DZc5A4_J.js +0 -1
  182. package/dist-cli-web/assets/index-DkWTvE7d.js +0 -36
  183. package/dist-cli-web/assets/index-DmEn0PAI.js +0 -1
  184. package/dist-cli-web/assets/index-b9eEQeVt.js +0 -1
  185. package/dist-cli-web/assets/index-waDxab2e.css +0 -1
  186. package/dist-cli-web/assets/insight-time-range-MJxLEu6o.js +0 -1
  187. package/dist-cli-web/assets/useTable-C7BH94MF.js +0 -1
  188. package/dist-cli-web/assets/useToast-CxhJkhXK.js +0 -1
  189. /package/dist/{chunk-UNIKQFI5.mjs.map → chunk-6E46U4H2.mjs.map} +0 -0
  190. /package/dist/{chunk-AAGDVTP2.mjs.map → chunk-6EZPD3XJ.mjs.map} +0 -0
  191. /package/dist/{chunk-VDWI4A4U.mjs.map → chunk-CH5YAZ4Q.mjs.map} +0 -0
  192. /package/dist/{chunk-U2NXHIJK.mjs.map → chunk-TJ3NOBVI.mjs.map} +0 -0
  193. /package/dist/{chunk-GVW3BDGZ.mjs.map → chunk-TWH422HC.mjs.map} +0 -0
  194. /package/dist/{chunk-XDF6PMVZ.mjs.map → chunk-VUYWUHWW.mjs.map} +0 -0
  195. /package/dist/{http-LVOGJFDL.mjs.map → http-237XYNRT.mjs.map} +0 -0
  196. /package/dist/{import-7OU57ZHM.mjs.map → import-R2E2TFAK.mjs.map} +0 -0
  197. /package/dist/{mcp-CUKHTTII.mjs.map → mcp-BED4AARV.mjs.map} +0 -0
  198. /package/dist/{src-LORFXAUE.mjs.map → src-AYMALWU5.mjs.map} +0 -0
  199. /package/dist/{stream-import-7YUWIAD6.mjs.map → stream-import-RXNSOOYH.mjs.map} +0 -0
  200. /package/dist/{worker-runtime-GQ5SY7E3.mjs.map → worker-runtime-JGAZU7MC.mjs.map} +0 -0
package/README.md CHANGED
@@ -43,9 +43,9 @@ npm i chatlab-cli -g
43
43
  Start ChatLab:
44
44
 
45
45
  ```bash
46
- chatlab start # Start API + Web UI, auto-open in browser
47
- chatlab start --no-open # Start API + Web UI, skip auto-open
48
- chatlab start --headless # API only, no Web UI (for scripts / AI Agents)
46
+ clb web # Start API + Web UI, auto-open in browser
47
+ clb web --no-open # Start API + Web UI, skip auto-open
48
+ clb web --headless # API only, no Web UI (for scripts / AI Agents)
49
49
  ```
50
50
 
51
51
  Common options: `--port <port>` (default 3110), `--host <address>`, `--token <token>`.
@@ -53,9 +53,9 @@ Common options: `--port <port>` (default 3110), `--host <address>`, `--token <to
53
53
  To run as a persistent background service (auto-start on login + auto-restart on crash):
54
54
 
55
55
  ```bash
56
- chatlab start --daemon # Install as system service (macOS / Linux)
57
- chatlab status # Check service status
58
- chatlab stop # Stop and uninstall service
56
+ clb web --daemon # Install as system service (macOS / Linux)
57
+ clb status # Check service status
58
+ clb stop # Stop and uninstall service
59
59
  ```
60
60
 
61
61
  For a full walkthrough, see the [Quick Start guide](https://docs.chatlab.fun/usage/quick-start).
@@ -97,7 +97,7 @@ For complete contributor instructions, see the [Development Guide](https://docs.
97
97
  ### Requirements
98
98
 
99
99
  - Node.js >= 24 < 25
100
- - pnpm >= 9 < 10
100
+ - pnpm >= 11 < 12
101
101
 
102
102
  ### Setup
103
103
 
@@ -6,16 +6,16 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __pathDirname(__filename);
7
7
  import {
8
8
  createCliRunAgentStream
9
- } from "./chunk-LZGOIRLV.mjs";
10
- import "./chunk-JHON5FN7.mjs";
11
- import "./chunk-U2NXHIJK.mjs";
12
- import "./chunk-4YPNYQSP.mjs";
13
- import "./chunk-XDF6PMVZ.mjs";
14
- import "./chunk-AAGDVTP2.mjs";
9
+ } from "./chunk-YUH3H3QW.mjs";
10
+ import "./chunk-HWIXK7SU.mjs";
11
+ import "./chunk-TJ3NOBVI.mjs";
12
+ import "./chunk-VREVDZ4Q.mjs";
13
+ import "./chunk-VUYWUHWW.mjs";
14
+ import "./chunk-6EZPD3XJ.mjs";
15
15
  import "./chunk-YKMQLAVP.mjs";
16
16
  import {
17
17
  getDefaultGeneralAssistantId
18
- } from "./chunk-OWOEWZIC.mjs";
18
+ } from "./chunk-TRGR3KKJ.mjs";
19
19
  import "./chunk-VSOWNKPA.mjs";
20
20
 
21
21
  // src/ai/chat-command.ts
@@ -73,9 +73,9 @@ function resolveSingleSessionId(dbManager) {
73
73
  const sessionIds = dbManager.listSessionIds();
74
74
  if (sessionIds.length === 1) return sessionIds[0];
75
75
  if (sessionIds.length === 0) {
76
- throw new Error("No chat sessions found. Import data first or run `chatlab sessions` to verify available sessions.");
76
+ throw new Error("No chat sessions found. Import data first or run `clb sessions` to verify available sessions.");
77
77
  }
78
- throw new Error("Missing --session-id. Run `chatlab sessions` to choose a session ID.");
78
+ throw new Error("Missing --session-id. Run `clb sessions` to choose a session ID.");
79
79
  }
80
80
  function assertSessionExists(dbManager, sessionId) {
81
81
  const db = dbManager.open(sessionId);
@@ -312,4 +312,4 @@ export {
312
312
  runChatCommand,
313
313
  runChatTurn
314
314
  };
315
- //# sourceMappingURL=chat-command-SXW67RF7.mjs.map
315
+ //# sourceMappingURL=chat-command-SEV6N3AR.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ai/chat-command.ts"],"sourcesContent":["import { createInterface } from 'node:readline/promises'\nimport type { Readable, Writable } from 'node:stream'\nimport type {\n DatabaseManager,\n AIChatManager,\n AgentStreamChunk,\n ContentBlock,\n PlanContentBlock,\n PlanDraftContentBlock,\n TokenUsageData,\n} from '@openchatlab/node-runtime'\nimport type { ChartPayload, PathProvider } from '@openchatlab/core'\nimport { getDefaultGeneralAssistantId } from '@openchatlab/shared-types'\nimport { createCliRunAgentStream } from './agent-stream-runner'\n\nexport interface ChatCommandOptions {\n sessionId?: string\n aiChatId?: string\n question?: string\n json?: boolean\n stream?: boolean\n locale?: string\n includeEvents?: boolean\n}\n\nexport interface ChatCommandDeps {\n dbManager: DatabaseManager\n pathProvider: PathProvider\n aiChatManager: AIChatManager\n stdout?: Pick<Writable, 'write'>\n stderr?: Pick<Writable, 'write'>\n stdin?: Readable\n createRunAgentStream?: typeof createCliRunAgentStream\n}\n\nexport interface ResolvedAIChatTarget {\n sessionId: string\n aiChatId: string\n assistantId: string\n created: boolean\n}\n\nexport interface ChatTurnResult {\n sessionId: string\n aiChatId: string\n question: string\n answer: string\n events?: AgentStreamChunk[]\n contentBlocks?: ContentBlock[]\n usage: {\n durationMs: number\n tokenUsage: TokenUsageData | null\n }\n}\n\nfunction write(stream: Pick<Writable, 'write'>, text: string): void {\n stream.write(text)\n}\n\nfunction buildTitle(question?: string): string {\n const trimmed = question?.trim()\n if (!trimmed) return 'CLI Chat'\n return trimmed.length > 50 ? `${trimmed.slice(0, 50)}...` : trimmed\n}\n\nfunction createAgentStreamError(error: unknown): Error {\n if (error instanceof Error) return error\n if (typeof error === 'string' && error) return new Error(error)\n if (typeof error === 'object' && error !== null) {\n const record = error as { name?: unknown; message?: unknown; stack?: unknown }\n const streamError = new Error(\n typeof record.message === 'string' && record.message ? record.message : 'Agent stream failed'\n )\n if (typeof record.name === 'string' && record.name) streamError.name = record.name\n if (typeof record.stack === 'string' && record.stack) streamError.stack = record.stack\n return streamError\n }\n return new Error('Agent stream failed')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isChartPayload(value: unknown): value is ChartPayload {\n return isRecord(value) && value.version === 1 && isRecord(value.spec) && isRecord(value.dataset)\n}\n\nfunction extractChartPayloads(toolResult: unknown): ChartPayload[] {\n if (!isRecord(toolResult)) return []\n const details = isRecord(toolResult.details) ? toolResult.details : toolResult\n const charts: ChartPayload[] = []\n if (isChartPayload(details.chart)) charts.push(details.chart)\n if (Array.isArray(details.charts)) {\n for (const chart of details.charts) {\n if (isChartPayload(chart)) charts.push(chart)\n }\n }\n return charts\n}\n\nfunction toPersistedChartPayload(chart: ChartPayload): ChartPayload {\n return {\n ...chart,\n dataset: {\n ...chart.dataset,\n rows: [],\n },\n }\n}\n\nfunction resolveSingleSessionId(dbManager: DatabaseManager): string {\n const sessionIds = dbManager.listSessionIds()\n if (sessionIds.length === 1) return sessionIds[0]!\n if (sessionIds.length === 0) {\n throw new Error('No chat sessions found. Import data first or run `clb sessions` to verify available sessions.')\n }\n throw new Error('Missing --session-id. Run `clb sessions` to choose a session ID.')\n}\n\nfunction assertSessionExists(dbManager: DatabaseManager, sessionId: string): void {\n const db = dbManager.open(sessionId)\n if (!db) {\n throw new Error(`Session ${sessionId} not found`)\n }\n}\n\nexport function resolveAIChatTarget(\n options: Pick<ChatCommandOptions, 'sessionId' | 'aiChatId' | 'question' | 'locale'>,\n deps: Pick<ChatCommandDeps, 'dbManager' | 'aiChatManager'>\n): ResolvedAIChatTarget {\n if (options.aiChatId) {\n const aiChat = deps.aiChatManager.getAIChat(options.aiChatId)\n if (!aiChat) {\n throw new Error(`AI chat ${options.aiChatId} not found`)\n }\n if (options.sessionId && options.sessionId !== aiChat.sessionId) {\n throw new Error(`AI chat ${options.aiChatId} belongs to session ${aiChat.sessionId}, not ${options.sessionId}`)\n }\n assertSessionExists(deps.dbManager, aiChat.sessionId)\n return { sessionId: aiChat.sessionId, aiChatId: aiChat.id, assistantId: aiChat.assistantId, created: false }\n }\n\n const sessionId = options.sessionId ?? resolveSingleSessionId(deps.dbManager)\n assertSessionExists(deps.dbManager, sessionId)\n const aiChat = deps.aiChatManager.createAIChat(\n sessionId,\n buildTitle(options.question),\n getDefaultGeneralAssistantId(options.locale)\n )\n return { sessionId, aiChatId: aiChat.id, assistantId: aiChat.assistantId, created: true }\n}\n\nexport async function runChatTurn(\n options: Required<Pick<ChatCommandOptions, 'question'>> &\n Pick<ChatCommandOptions, 'sessionId' | 'aiChatId' | 'json' | 'stream' | 'locale' | 'includeEvents'>,\n deps: ChatCommandDeps\n): Promise<ChatTurnResult> {\n const stdout = deps.stdout ?? process.stdout\n const target = resolveAIChatTarget(options, deps)\n const startedAt = Date.now()\n let answer = ''\n let tokenUsage: TokenUsageData | null = null\n let streamError: Error | null = null\n const events: AgentStreamChunk[] = []\n const contentBlocks: ContentBlock[] = []\n let hasReplayContentBlocks = false\n\n const runAgentStream = (deps.createRunAgentStream ?? createCliRunAgentStream)(deps.dbManager, deps.aiChatManager)\n\n // 中文注释:CLI 历史回放依赖 contentBlocks 的时序;只要出现计划/思考块,\n // 就同步保留后续正文 text block,避免 UI 使用 blocks 渲染时丢失最终回答。\n const appendTextBlock = (text: string) => {\n if (!text) return\n const lastBlock = contentBlocks[contentBlocks.length - 1]\n if (lastBlock?.type === 'text') {\n lastBlock.text += text\n } else {\n contentBlocks.push({ type: 'text', text })\n }\n }\n\n const appendThinkBlock = (text: string, tag = 'thinking', durationMs?: number) => {\n if (!text && durationMs === undefined) return\n const lastBlock = contentBlocks[contentBlocks.length - 1]\n let targetBlock: ContentBlock | undefined\n\n if (lastBlock?.type === 'think' && lastBlock.tag === tag) {\n lastBlock.text += text\n targetBlock = lastBlock\n } else if (text.trim().length > 0) {\n targetBlock = { type: 'think', tag, text }\n contentBlocks.push(targetBlock)\n } else if (durationMs !== undefined) {\n for (let index = contentBlocks.length - 1; index >= 0; index--) {\n const block = contentBlocks[index]\n if (block.type === 'think' && block.tag === tag) {\n targetBlock = block\n break\n }\n }\n }\n\n if (durationMs !== undefined && targetBlock?.type === 'think') {\n targetBlock.durationMs = durationMs\n }\n if (targetBlock?.type === 'think') {\n hasReplayContentBlocks = true\n }\n }\n\n const appendChartBlocks = (charts: ChartPayload[]) => {\n if (charts.length === 0) return\n // 中文注释:图表 block 需要持久化给 CLI 生成的 AI 对话回放;\n // 原始 SQL 行数据可能较大,保存时只保留渲染数据和字段元信息。\n contentBlocks.push(...charts.map((chart) => ({ type: 'chart' as const, chart: toPersistedChartPayload(chart) })))\n hasReplayContentBlocks = true\n }\n\n const appendPlanDraftBlock = (delta: string) => {\n if (!delta) return\n const lastBlock = contentBlocks[contentBlocks.length - 1]\n if (lastBlock?.type === 'plan_draft') {\n lastBlock.text += delta\n } else {\n contentBlocks.push({ type: 'plan_draft', version: 1, status: 'streaming', text: delta } as PlanDraftContentBlock)\n }\n hasReplayContentBlocks = true\n }\n\n const removePlanDraftBlocks = () => {\n for (let index = contentBlocks.length - 1; index >= 0; index--) {\n if (contentBlocks[index]?.type === 'plan_draft') {\n contentBlocks.splice(index, 1)\n }\n }\n }\n\n const appendFinalPlanBlock = (plan: PlanContentBlock) => {\n const planBlock = JSON.parse(JSON.stringify(plan)) as PlanContentBlock\n for (let index = contentBlocks.length - 1; index >= 0; index--) {\n const block = contentBlocks[index]\n if (block?.type === 'plan_draft') {\n const displayText = block.text.trim()\n if (displayText) planBlock.displayText = displayText\n contentBlocks[index] = planBlock\n hasReplayContentBlocks = true\n return\n }\n }\n contentBlocks.push(planBlock)\n hasReplayContentBlocks = true\n }\n\n await runAgentStream(\n {\n userMessage: options.question,\n sessionId: target.sessionId,\n aiChatId: target.aiChatId,\n assistantId: target.assistantId,\n chatType: 'group',\n locale: options.locale ?? 'zh-CN',\n enableAutoSkill: true,\n chartAutoMode: 'suggest',\n },\n (chunk: AgentStreamChunk) => {\n if (options.includeEvents) {\n events.push(JSON.parse(JSON.stringify(chunk)) as AgentStreamChunk)\n }\n if (chunk.type === 'error') {\n removePlanDraftBlocks()\n streamError = createAgentStreamError(chunk.error)\n return\n }\n if (chunk.type === 'plan_delta' && chunk.planDelta) {\n appendPlanDraftBlock(chunk.planDelta)\n return\n }\n if (chunk.type === 'plan' && chunk.plan) {\n appendFinalPlanBlock(chunk.plan)\n return\n }\n if (chunk.type === 'plan_skipped') {\n removePlanDraftBlocks()\n return\n }\n if (chunk.type === 'think') {\n appendThinkBlock(chunk.content ?? '', chunk.thinkTag, chunk.thinkDurationMs)\n return\n }\n if (chunk.type === 'tool_result' && chunk.toolName === 'render_chart') {\n appendChartBlocks(extractChartPayloads(chunk.toolResult))\n return\n }\n if (chunk.type === 'content' && chunk.content) {\n answer += chunk.content\n appendTextBlock(chunk.content)\n if (!options.json && options.stream !== false) write(stdout, chunk.content)\n }\n if (chunk.type === 'done' && chunk.usage) {\n tokenUsage = chunk.usage\n for (let index = contentBlocks.length - 1; index >= 0; index--) {\n const block = contentBlocks[index]\n if (block.type === 'plan') {\n block.status = 'done'\n break\n }\n }\n }\n },\n new AbortController().signal\n )\n\n if (streamError) throw streamError\n\n if (!options.json && options.stream !== false && answer && !answer.endsWith('\\n')) {\n write(stdout, '\\n')\n }\n\n deps.aiChatManager.addMessage(target.aiChatId, 'user', options.question)\n deps.aiChatManager.addMessage(\n target.aiChatId,\n 'assistant',\n answer,\n undefined,\n undefined,\n hasReplayContentBlocks ? contentBlocks : undefined,\n tokenUsage ?? undefined\n )\n\n return {\n sessionId: target.sessionId,\n aiChatId: target.aiChatId,\n question: options.question,\n answer,\n ...(options.includeEvents ? { events } : {}),\n ...(hasReplayContentBlocks ? { contentBlocks } : {}),\n usage: {\n durationMs: Date.now() - startedAt,\n tokenUsage,\n },\n }\n}\n\nexport async function runChatCommand(options: ChatCommandOptions, deps: ChatCommandDeps): Promise<void> {\n const stdout = deps.stdout ?? process.stdout\n const stderr = deps.stderr ?? process.stderr\n\n if (options.question?.trim()) {\n const result = await runChatTurn({ ...options, question: options.question.trim() }, deps)\n if (options.json) {\n write(stdout, `${JSON.stringify(result, null, 2)}\\n`)\n } else if (options.stream === false) {\n write(stdout, `${result.answer}\\n`)\n }\n return\n }\n\n const rl = createInterface({\n input: deps.stdin ?? process.stdin,\n output: stdout as Writable,\n })\n\n try {\n let aiChatId = options.aiChatId\n while (true) {\n const question = (await rl.question('chatlab> ')).trim()\n if (!question || question === 'exit' || question === 'quit') break\n try {\n const result = await runChatTurn({ ...options, aiChatId, question, json: false, stream: true }, deps)\n aiChatId = result.aiChatId\n } catch (error) {\n write(stderr, `${error instanceof Error ? error.message : String(error)}\\n`)\n }\n }\n } finally {\n rl.close()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,uBAAuB;AAuDhC,SAAS,MAAM,QAAiC,MAAoB;AAClE,SAAO,MAAM,IAAI;AACnB;AAEA,SAAS,WAAW,UAA2B;AAC7C,QAAM,UAAU,UAAU,KAAK;AAC/B,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,QAAQ,SAAS,KAAK,GAAG,QAAQ,MAAM,GAAG,EAAE,CAAC,QAAQ;AAC9D;AAEA,SAAS,uBAAuB,OAAuB;AACrD,MAAI,iBAAiB,MAAO,QAAO;AACnC,MAAI,OAAO,UAAU,YAAY,MAAO,QAAO,IAAI,MAAM,KAAK;AAC9D,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,UAAM,SAAS;AACf,UAAM,cAAc,IAAI;AAAA,MACtB,OAAO,OAAO,YAAY,YAAY,OAAO,UAAU,OAAO,UAAU;AAAA,IAC1E;AACA,QAAI,OAAO,OAAO,SAAS,YAAY,OAAO,KAAM,aAAY,OAAO,OAAO;AAC9E,QAAI,OAAO,OAAO,UAAU,YAAY,OAAO,MAAO,aAAY,QAAQ,OAAO;AACjF,WAAO;AAAA,EACT;AACA,SAAO,IAAI,MAAM,qBAAqB;AACxC;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,eAAe,OAAuC;AAC7D,SAAO,SAAS,KAAK,KAAK,MAAM,YAAY,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,MAAM,OAAO;AACjG;AAEA,SAAS,qBAAqB,YAAqC;AACjE,MAAI,CAAC,SAAS,UAAU,EAAG,QAAO,CAAC;AACnC,QAAM,UAAU,SAAS,WAAW,OAAO,IAAI,WAAW,UAAU;AACpE,QAAM,SAAyB,CAAC;AAChC,MAAI,eAAe,QAAQ,KAAK,EAAG,QAAO,KAAK,QAAQ,KAAK;AAC5D,MAAI,MAAM,QAAQ,QAAQ,MAAM,GAAG;AACjC,eAAW,SAAS,QAAQ,QAAQ;AAClC,UAAI,eAAe,KAAK,EAAG,QAAO,KAAK,KAAK;AAAA,IAC9C;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,OAAmC;AAClE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,MAAM;AAAA,MACT,MAAM,CAAC;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,WAAoC;AAClE,QAAM,aAAa,UAAU,eAAe;AAC5C,MAAI,WAAW,WAAW,EAAG,QAAO,WAAW,CAAC;AAChD,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,IAAI,MAAM,+FAA+F;AAAA,EACjH;AACA,QAAM,IAAI,MAAM,kEAAkE;AACpF;AAEA,SAAS,oBAAoB,WAA4B,WAAyB;AAChF,QAAM,KAAK,UAAU,KAAK,SAAS;AACnC,MAAI,CAAC,IAAI;AACP,UAAM,IAAI,MAAM,WAAW,SAAS,YAAY;AAAA,EAClD;AACF;AAEO,SAAS,oBACd,SACA,MACsB;AACtB,MAAI,QAAQ,UAAU;AACpB,UAAMA,UAAS,KAAK,cAAc,UAAU,QAAQ,QAAQ;AAC5D,QAAI,CAACA,SAAQ;AACX,YAAM,IAAI,MAAM,WAAW,QAAQ,QAAQ,YAAY;AAAA,IACzD;AACA,QAAI,QAAQ,aAAa,QAAQ,cAAcA,QAAO,WAAW;AAC/D,YAAM,IAAI,MAAM,WAAW,QAAQ,QAAQ,uBAAuBA,QAAO,SAAS,SAAS,QAAQ,SAAS,EAAE;AAAA,IAChH;AACA,wBAAoB,KAAK,WAAWA,QAAO,SAAS;AACpD,WAAO,EAAE,WAAWA,QAAO,WAAW,UAAUA,QAAO,IAAI,aAAaA,QAAO,aAAa,SAAS,MAAM;AAAA,EAC7G;AAEA,QAAM,YAAY,QAAQ,aAAa,uBAAuB,KAAK,SAAS;AAC5E,sBAAoB,KAAK,WAAW,SAAS;AAC7C,QAAM,SAAS,KAAK,cAAc;AAAA,IAChC;AAAA,IACA,WAAW,QAAQ,QAAQ;AAAA,IAC3B,6BAA6B,QAAQ,MAAM;AAAA,EAC7C;AACA,SAAO,EAAE,WAAW,UAAU,OAAO,IAAI,aAAa,OAAO,aAAa,SAAS,KAAK;AAC1F;AAEA,eAAsB,YACpB,SAEA,MACyB;AACzB,QAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,QAAM,SAAS,oBAAoB,SAAS,IAAI;AAChD,QAAM,YAAY,KAAK,IAAI;AAC3B,MAAI,SAAS;AACb,MAAI,aAAoC;AACxC,MAAI,cAA4B;AAChC,QAAM,SAA6B,CAAC;AACpC,QAAM,gBAAgC,CAAC;AACvC,MAAI,yBAAyB;AAE7B,QAAM,kBAAkB,KAAK,wBAAwB,yBAAyB,KAAK,WAAW,KAAK,aAAa;AAIhH,QAAM,kBAAkB,CAAC,SAAiB;AACxC,QAAI,CAAC,KAAM;AACX,UAAM,YAAY,cAAc,cAAc,SAAS,CAAC;AACxD,QAAI,WAAW,SAAS,QAAQ;AAC9B,gBAAU,QAAQ;AAAA,IACpB,OAAO;AACL,oBAAc,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,IAC3C;AAAA,EACF;AAEA,QAAM,mBAAmB,CAAC,MAAc,MAAM,YAAY,eAAwB;AAChF,QAAI,CAAC,QAAQ,eAAe,OAAW;AACvC,UAAM,YAAY,cAAc,cAAc,SAAS,CAAC;AACxD,QAAI;AAEJ,QAAI,WAAW,SAAS,WAAW,UAAU,QAAQ,KAAK;AACxD,gBAAU,QAAQ;AAClB,oBAAc;AAAA,IAChB,WAAW,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,oBAAc,EAAE,MAAM,SAAS,KAAK,KAAK;AACzC,oBAAc,KAAK,WAAW;AAAA,IAChC,WAAW,eAAe,QAAW;AACnC,eAAS,QAAQ,cAAc,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9D,cAAM,QAAQ,cAAc,KAAK;AACjC,YAAI,MAAM,SAAS,WAAW,MAAM,QAAQ,KAAK;AAC/C,wBAAc;AACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAe,UAAa,aAAa,SAAS,SAAS;AAC7D,kBAAY,aAAa;AAAA,IAC3B;AACA,QAAI,aAAa,SAAS,SAAS;AACjC,+BAAyB;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,WAA2B;AACpD,QAAI,OAAO,WAAW,EAAG;AAGzB,kBAAc,KAAK,GAAG,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,SAAkB,OAAO,wBAAwB,KAAK,EAAE,EAAE,CAAC;AAChH,6BAAyB;AAAA,EAC3B;AAEA,QAAM,uBAAuB,CAAC,UAAkB;AAC9C,QAAI,CAAC,MAAO;AACZ,UAAM,YAAY,cAAc,cAAc,SAAS,CAAC;AACxD,QAAI,WAAW,SAAS,cAAc;AACpC,gBAAU,QAAQ;AAAA,IACpB,OAAO;AACL,oBAAc,KAAK,EAAE,MAAM,cAAc,SAAS,GAAG,QAAQ,aAAa,MAAM,MAAM,CAA0B;AAAA,IAClH;AACA,6BAAyB;AAAA,EAC3B;AAEA,QAAM,wBAAwB,MAAM;AAClC,aAAS,QAAQ,cAAc,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9D,UAAI,cAAc,KAAK,GAAG,SAAS,cAAc;AAC/C,sBAAc,OAAO,OAAO,CAAC;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,uBAAuB,CAAC,SAA2B;AACvD,UAAM,YAAY,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AACjD,aAAS,QAAQ,cAAc,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9D,YAAM,QAAQ,cAAc,KAAK;AACjC,UAAI,OAAO,SAAS,cAAc;AAChC,cAAM,cAAc,MAAM,KAAK,KAAK;AACpC,YAAI,YAAa,WAAU,cAAc;AACzC,sBAAc,KAAK,IAAI;AACvB,iCAAyB;AACzB;AAAA,MACF;AAAA,IACF;AACA,kBAAc,KAAK,SAAS;AAC5B,6BAAyB;AAAA,EAC3B;AAEA,QAAM;AAAA,IACJ;AAAA,MACE,aAAa,QAAQ;AAAA,MACrB,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,UAAU;AAAA,MACV,QAAQ,QAAQ,UAAU;AAAA,MAC1B,iBAAiB;AAAA,MACjB,eAAe;AAAA,IACjB;AAAA,IACA,CAAC,UAA4B;AAC3B,UAAI,QAAQ,eAAe;AACzB,eAAO,KAAK,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC,CAAqB;AAAA,MACnE;AACA,UAAI,MAAM,SAAS,SAAS;AAC1B,8BAAsB;AACtB,sBAAc,uBAAuB,MAAM,KAAK;AAChD;AAAA,MACF;AACA,UAAI,MAAM,SAAS,gBAAgB,MAAM,WAAW;AAClD,6BAAqB,MAAM,SAAS;AACpC;AAAA,MACF;AACA,UAAI,MAAM,SAAS,UAAU,MAAM,MAAM;AACvC,6BAAqB,MAAM,IAAI;AAC/B;AAAA,MACF;AACA,UAAI,MAAM,SAAS,gBAAgB;AACjC,8BAAsB;AACtB;AAAA,MACF;AACA,UAAI,MAAM,SAAS,SAAS;AAC1B,yBAAiB,MAAM,WAAW,IAAI,MAAM,UAAU,MAAM,eAAe;AAC3E;AAAA,MACF;AACA,UAAI,MAAM,SAAS,iBAAiB,MAAM,aAAa,gBAAgB;AACrE,0BAAkB,qBAAqB,MAAM,UAAU,CAAC;AACxD;AAAA,MACF;AACA,UAAI,MAAM,SAAS,aAAa,MAAM,SAAS;AAC7C,kBAAU,MAAM;AAChB,wBAAgB,MAAM,OAAO;AAC7B,YAAI,CAAC,QAAQ,QAAQ,QAAQ,WAAW,MAAO,OAAM,QAAQ,MAAM,OAAO;AAAA,MAC5E;AACA,UAAI,MAAM,SAAS,UAAU,MAAM,OAAO;AACxC,qBAAa,MAAM;AACnB,iBAAS,QAAQ,cAAc,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9D,gBAAM,QAAQ,cAAc,KAAK;AACjC,cAAI,MAAM,SAAS,QAAQ;AACzB,kBAAM,SAAS;AACf;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,IAAI,gBAAgB,EAAE;AAAA,EACxB;AAEA,MAAI,YAAa,OAAM;AAEvB,MAAI,CAAC,QAAQ,QAAQ,QAAQ,WAAW,SAAS,UAAU,CAAC,OAAO,SAAS,IAAI,GAAG;AACjF,UAAM,QAAQ,IAAI;AAAA,EACpB;AAEA,OAAK,cAAc,WAAW,OAAO,UAAU,QAAQ,QAAQ,QAAQ;AACvE,OAAK,cAAc;AAAA,IACjB,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,yBAAyB,gBAAgB;AAAA,IACzC,cAAc;AAAA,EAChB;AAEA,SAAO;AAAA,IACL,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA,GAAI,QAAQ,gBAAgB,EAAE,OAAO,IAAI,CAAC;AAAA,IAC1C,GAAI,yBAAyB,EAAE,cAAc,IAAI,CAAC;AAAA,IAClD,OAAO;AAAA,MACL,YAAY,KAAK,IAAI,IAAI;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,eAAe,SAA6B,MAAsC;AACtG,QAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,QAAM,SAAS,KAAK,UAAU,QAAQ;AAEtC,MAAI,QAAQ,UAAU,KAAK,GAAG;AAC5B,UAAM,SAAS,MAAM,YAAY,EAAE,GAAG,SAAS,UAAU,QAAQ,SAAS,KAAK,EAAE,GAAG,IAAI;AACxF,QAAI,QAAQ,MAAM;AAChB,YAAM,QAAQ,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,CAAI;AAAA,IACtD,WAAW,QAAQ,WAAW,OAAO;AACnC,YAAM,QAAQ,GAAG,OAAO,MAAM;AAAA,CAAI;AAAA,IACpC;AACA;AAAA,EACF;AAEA,QAAM,KAAK,gBAAgB;AAAA,IACzB,OAAO,KAAK,SAAS,QAAQ;AAAA,IAC7B,QAAQ;AAAA,EACV,CAAC;AAED,MAAI;AACF,QAAI,WAAW,QAAQ;AACvB,WAAO,MAAM;AACX,YAAM,YAAY,MAAM,GAAG,SAAS,WAAW,GAAG,KAAK;AACvD,UAAI,CAAC,YAAY,aAAa,UAAU,aAAa,OAAQ;AAC7D,UAAI;AACF,cAAM,SAAS,MAAM,YAAY,EAAE,GAAG,SAAS,UAAU,UAAU,MAAM,OAAO,QAAQ,KAAK,GAAG,IAAI;AACpG,mBAAW,OAAO;AAAA,MACpB,SAAS,OAAO;AACd,cAAM,QAAQ,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,CAAI;AAAA,MAC7E;AAAA,IACF;AAAA,EACF,UAAE;AACA,OAAG,MAAM;AAAA,EACX;AACF;","names":["aiChat"]}
@@ -6,7 +6,7 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __pathDirname(__filename);
7
7
  import {
8
8
  createLocalEmbeddingRuntimeManager
9
- } from "./chunk-4YPNYQSP.mjs";
9
+ } from "./chunk-VREVDZ4Q.mjs";
10
10
 
11
11
  // src/semantic-index/local-runtime.ts
12
12
  import path from "path";
@@ -38,4 +38,4 @@ export {
38
38
  resolveCliLocalEmbeddingRuntimeConfig,
39
39
  installCliLocalEmbeddingRuntime
40
40
  };
41
- //# sourceMappingURL=chunk-UNIKQFI5.mjs.map
41
+ //# sourceMappingURL=chunk-6E46U4H2.mjs.map
@@ -21,7 +21,7 @@ import {
21
21
  resolveOwnerMember,
22
22
  setCache,
23
23
  shouldScopeContactToSession
24
- } from "./chunk-OWOEWZIC.mjs";
24
+ } from "./chunk-TRGR3KKJ.mjs";
25
25
 
26
26
  // ../../packages/node-runtime/src/services/people/relationships/facts-cache.ts
27
27
  var PEOPLE_RELATIONSHIPS_FACTS_FORMAT_VERSION = 3;
@@ -1326,4 +1326,4 @@ export {
1326
1326
  compareNodes,
1327
1327
  compareEdges
1328
1328
  };
1329
- //# sourceMappingURL=chunk-AAGDVTP2.mjs.map
1329
+ //# sourceMappingURL=chunk-6EZPD3XJ.mjs.map
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  DataDirCompatibilityError,
12
12
  assertDataDirCompatible
13
- } from "./chunk-OWOEWZIC.mjs";
13
+ } from "./chunk-TRGR3KKJ.mjs";
14
14
 
15
15
  // src/runtime-compat.ts
16
16
  function assertCliDataDirCompatible(pathProvider, kind, options) {
@@ -37,4 +37,4 @@ function formatCliDataDirCompatibilityError(error, runtime) {
37
37
  export {
38
38
  assertCliDataDirCompatible
39
39
  };
40
- //# sourceMappingURL=chunk-VDWI4A4U.mjs.map
40
+ //# sourceMappingURL=chunk-CH5YAZ4Q.mjs.map
@@ -28,7 +28,7 @@ import {
28
28
  getWeekdayActivity,
29
29
  queryMessages,
30
30
  searchMessagesByKeywords
31
- } from "./chunk-OWOEWZIC.mjs";
31
+ } from "./chunk-TRGR3KKJ.mjs";
32
32
 
33
33
  // ../../packages/tools/src/utils/limits.ts
34
34
  function resolveMessageLimit(requestedLimit, defaultLimit, maxMessagesLimit) {
@@ -233,7 +233,8 @@ var renderChartTool = {
233
233
  description: "Generate a native ChatLab chart from ChartSpec v1. Provide either `rows` (pre-fetched data array from a tool result such as get_time_stats or member_stats) or `sql` (read-only SELECT). Prefer `rows` when data is already available \u2014 pass the tool's data array directly. Use `sql` only for custom aggregations not covered by existing tools. Never output HTML, JavaScript, SVG, ECharts options, or rendering code.",
234
234
  inputSchema: inputSchema2,
235
235
  handler: handler2,
236
- category: "analysis"
236
+ category: "analysis",
237
+ executionMode: "sequential"
237
238
  };
238
239
 
239
240
  // ../../packages/tools/src/definitions/session-info.ts
@@ -1383,6 +1384,7 @@ async function handler20(params, context) {
1383
1384
  const criteria = typeof params.criteria === "string" && params.criteria.trim() ? params.criteria.trim() : void 0;
1384
1385
  const keywords = Array.isArray(params.keywords) ? params.keywords.filter((k) => typeof k === "string" && k.trim()) : [];
1385
1386
  const requestedMode = params.mode === "hybrid" || params.mode === "semantic" || params.mode === "keyword" || params.mode === "auto" ? params.mode : "auto";
1387
+ context.reportProgress?.({ phase: "checking_capabilities" });
1386
1388
  const service = context.semanticIndexService;
1387
1389
  const semanticAvailable = !!service && await service.canSearch(context.sessionId);
1388
1390
  const rangeMs = parseEvidenceTimeRange(params, context);
@@ -1398,6 +1400,7 @@ async function handler20(params, context) {
1398
1400
  if (!service || !semanticAvailable) {
1399
1401
  warnings.add("semantic_unavailable");
1400
1402
  } else {
1403
+ context.reportProgress?.({ phase: "semantic_search" });
1401
1404
  const result = await service.searchForTool(context.sessionId, query, {
1402
1405
  maxResults: clampMaxResults(params.max_results),
1403
1406
  preprocessConfig: context.preprocessConfig,
@@ -1437,6 +1440,7 @@ async function handler20(params, context) {
1437
1440
  } else if (!context.dataProvider) {
1438
1441
  warnings.add("keyword_unavailable");
1439
1442
  } else {
1443
+ context.reportProgress?.({ phase: "keyword_search" });
1440
1444
  const secFilter = toKeywordTimeFilter(rangeMs);
1441
1445
  const searchResult = await context.dataProvider.searchMessages(keywords, {
1442
1446
  timeFilter: secFilter,
@@ -1446,6 +1450,7 @@ async function handler20(params, context) {
1446
1450
  keywordCandidates = keywordMessagesToCandidates(searchResult.messages, rangeMs, context.desensitizeMessages);
1447
1451
  }
1448
1452
  }
1453
+ context.reportProgress?.({ phase: "assembling_evidence" });
1449
1454
  const merged = mergeCandidates(semanticCandidates, keywordCandidates);
1450
1455
  const groups = buildGroups(merged, !!criteria, locale);
1451
1456
  const status = computeStatus(semanticRan || keywordRan, groups.length > 0, warnings);
@@ -1933,4 +1938,4 @@ export {
1933
1938
  toAgentToolParameters,
1934
1939
  executeToolForAgent
1935
1940
  };
1936
- //# sourceMappingURL=chunk-JHON5FN7.mjs.map
1941
+ //# sourceMappingURL=chunk-HWIXK7SU.mjs.map