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.
- package/README.md +7 -7
- package/dist/{chat-command-SXW67RF7.mjs → chat-command-SEV6N3AR.mjs} +10 -10
- package/dist/chat-command-SEV6N3AR.mjs.map +1 -0
- package/dist/{chunk-UNIKQFI5.mjs → chunk-6E46U4H2.mjs} +2 -2
- package/dist/{chunk-AAGDVTP2.mjs → chunk-6EZPD3XJ.mjs} +2 -2
- package/dist/{chunk-VDWI4A4U.mjs → chunk-CH5YAZ4Q.mjs} +2 -2
- package/dist/{chunk-JHON5FN7.mjs → chunk-HWIXK7SU.mjs} +8 -3
- package/dist/chunk-HWIXK7SU.mjs.map +1 -0
- package/dist/{chunk-U2NXHIJK.mjs → chunk-TJ3NOBVI.mjs} +3 -3
- package/dist/{chunk-OWOEWZIC.mjs → chunk-TRGR3KKJ.mjs} +84 -28
- package/dist/chunk-TRGR3KKJ.mjs.map +1 -0
- package/dist/{chunk-GVW3BDGZ.mjs → chunk-TWH422HC.mjs} +3 -3
- package/dist/{chunk-4YPNYQSP.mjs → chunk-VREVDZ4Q.mjs} +390 -96
- package/dist/chunk-VREVDZ4Q.mjs.map +1 -0
- package/dist/{chunk-XDF6PMVZ.mjs → chunk-VUYWUHWW.mjs} +2 -2
- package/dist/{chunk-BSGLH6G3.mjs → chunk-WJQOXOMR.mjs} +147 -80
- package/dist/chunk-WJQOXOMR.mjs.map +1 -0
- package/dist/{chunk-CNEWMCGX.mjs → chunk-WRBFV2GX.mjs} +57 -57
- package/dist/chunk-WRBFV2GX.mjs.map +1 -0
- package/dist/{chunk-LZGOIRLV.mjs → chunk-YUH3H3QW.mjs} +9 -5
- package/dist/chunk-YUH3H3QW.mjs.map +1 -0
- package/dist/cli.mjs +9 -9
- package/dist/contacts-worker.mjs +2 -2
- package/dist/global-insight-worker.mjs +1 -1
- package/dist/{http-LVOGJFDL.mjs → http-237XYNRT.mjs} +12 -12
- package/dist/{import-7OU57ZHM.mjs → import-R2E2TFAK.mjs} +7 -7
- package/dist/index.mjs +12 -12
- package/dist/{mcp-CUKHTTII.mjs → mcp-BED4AARV.mjs} +8 -8
- package/dist/people-relationships-worker.mjs +2 -2
- package/dist/semantic-index-worker.mjs +1 -1
- package/dist/{service-KZTHBDQ5.mjs → service-ZAHXRSFD.mjs} +6 -6
- package/dist/service-ZAHXRSFD.mjs.map +1 -0
- package/dist/{src-LORFXAUE.mjs → src-AYMALWU5.mjs} +10 -6
- package/dist/{stream-import-7YUWIAD6.mjs → stream-import-RXNSOOYH.mjs} +7 -7
- package/dist/{undici-MU5I3L6Q.mjs → undici-UGXDRJLV.mjs} +193 -193
- package/dist/undici-UGXDRJLV.mjs.map +1 -0
- package/dist/{update-checker-3N7HQEP2.mjs → update-checker-UL2FBLXH.mjs} +3 -5
- package/dist/{update-checker-3N7HQEP2.mjs.map → update-checker-UL2FBLXH.mjs.map} +1 -1
- package/dist/{worker-runtime-GQ5SY7E3.mjs → worker-runtime-JGAZU7MC.mjs} +5 -5
- package/dist-cli-web/assets/AISettingsTab-VgI7PiJd.js +1 -0
- package/dist-cli-web/assets/AboutTab-DCM1-glA.js +1 -0
- package/dist-cli-web/assets/ActionToolsPanel-BTGgwXVD.css +1 -0
- package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-a7RMjjve.js +112 -0
- package/dist-cli-web/assets/{Alert-DJzXKcec.js → Alert-D-egBWcb.js} +1 -1
- package/dist-cli-web/assets/ApiSettingsTab-Co3LWf1f.js +2 -0
- package/dist-cli-web/assets/BatchManageTab-2LrckmQm.js +1 -0
- package/dist-cli-web/assets/{BufferResource-DY3P-dGs.js → BufferResource-BE2_2bZK.js} +1 -1
- package/dist-cli-web/assets/{CanvasRenderer-As2MJTWZ.js → CanvasRenderer-DDKdvEYQ.js} +1 -1
- package/dist-cli-web/assets/ChatRecordDrawer-DRhztqLG.js +1 -0
- package/dist-cli-web/assets/{ChatRecordWorkspace-CVDPBmcl.js → ChatRecordWorkspace-DqUI4QiU.js} +1 -1
- package/dist-cli-web/assets/{Checkbox-4F1WAuVF.js → Checkbox-EfpQmv4A.js} +1 -1
- package/dist-cli-web/assets/DataDirCleanupNotice-BYIiR58J.js +1 -0
- package/dist-cli-web/assets/DatePicker.vue_vue_type_script_setup_true_lang-sPDoPzZ9.js +1 -0
- package/dist-cli-web/assets/{DebugToolsPanel-BLU6SY8a.js → DebugToolsPanel-BIHA6jw4.js} +1 -1
- package/dist-cli-web/assets/EChart.vue_vue_type_script_setup_true_lang-DryMSoCz.js +1 -0
- package/dist-cli-web/assets/EChartBar.vue_vue_type_script_setup_true_lang-BdFW-hvt.js +1 -0
- 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
- package/dist-cli-web/assets/{EChartWordcloud-C16xh7Tx.js → EChartWordcloud-DM7UEHdK.js} +1 -1
- package/dist-cli-web/assets/{Filter-BEtPORqF.js → Filter-kO4dIDJ2.js} +1 -1
- package/dist-cli-web/assets/GlobalTaskBar-BZS_h0zC.js +1 -0
- package/dist-cli-web/assets/GroupRelationshipGalaxyView--WIaHx_F.js +1 -0
- package/dist-cli-web/assets/{Label-Dgl3ghzT.js → Label-CIuDXyeM.js} +1 -1
- package/dist-cli-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-B_7VHxTx.js +1 -0
- package/dist-cli-web/assets/MessageExportModal-BQsIpyxv.js +1 -0
- package/dist-cli-web/assets/{PageHeader-CL9AFfvl.js → PageHeader-DxhQHF_0.js} +1 -1
- 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
- package/dist-cli-web/assets/{RelationshipGalaxyCanvas-BnkcrIpk.js → RelationshipGalaxyCanvas-Cod1JX9m.js} +14 -14
- package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CCasBcBQ.css +1 -0
- package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CkefzeFJ.js +4168 -0
- package/dist-cli-web/assets/{RenderTargetSystem-CPwnC2X3.js → RenderTargetSystem-SuQ7cbze.js} +1 -1
- package/dist-cli-web/assets/RovingFocusItem-psoFYxrC.js +1 -0
- package/dist-cli-web/assets/{ScreenCaptureModal-ByKxzNQe.js → ScreenCaptureModal-D4r9ixKh.js} +1 -1
- package/dist-cli-web/assets/SectionTabs.vue_vue_type_script_setup_true_lang-v_7aRBgM.js +1 -0
- package/dist-cli-web/assets/{Select-jVtfc_xc.js → Select-CxurgslB.js} +1 -1
- package/dist-cli-web/assets/SettingsModal-BFkxzo0Y.css +1 -0
- package/dist-cli-web/assets/SettingsModal-DBZucuf6.js +2 -0
- package/dist-cli-web/assets/{StorageTab-QdcDqA6Q.js → StorageTab-DhSJ-0Ir.js} +1 -1
- package/dist-cli-web/assets/{Switch-DYHM64k9.js → Switch-3D81G6uV.js} +1 -1
- package/dist-cli-web/assets/Tabs-Bnm_Q7yW.js +1 -0
- package/dist-cli-web/assets/{Tabs-B6Nzq2NQ.js → Tabs-DB603EEu.js} +1 -1
- 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
- package/dist-cli-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-Cjz8Wpg-.js +1 -0
- package/dist-cli-web/assets/{VisuallyHiddenInput-IQpmK9yR.js → VisuallyHiddenInput-Bo_XwaLu.js} +1 -1
- package/dist-cli-web/assets/{WebGLRenderer-8JHbnkTc.js → WebGLRenderer-D1x9WZRj.js} +1 -1
- package/dist-cli-web/assets/{WebGPURenderer-CLWfB4CC.js → WebGPURenderer-37Nw-tLm.js} +1 -1
- package/dist-cli-web/assets/aiChat-BCzYQeZq.js +8 -0
- package/dist-cli-web/assets/{browserAll-Cin6ghNg.js → browserAll-CWrz_-4U.js} +1 -1
- package/dist-cli-web/assets/{cli-web-D7IBc3AX.js → cli-web-C-8N0CJh.js} +1 -1
- package/dist-cli-web/assets/{fetch-2QEQPA9q.js → fetch-6pcVxB9h.js} +1 -1
- package/dist-cli-web/assets/{fetch-CuUeyk0N.js → fetch-B69OkB6B.js} +1 -1
- package/dist-cli-web/assets/{fetch-1NiXh-_B.js → fetch-BGmCCyzz.js} +1 -1
- package/dist-cli-web/assets/{fetch-C8tTTsCm.js → fetch-CFpLXWTe.js} +1 -1
- package/dist-cli-web/assets/{fetch-B7kuohCt.js → fetch-CgA1peJD.js} +1 -1
- package/dist-cli-web/assets/{fetch-OnnCjzee.js → fetch-CkXgOxcu.js} +1 -1
- package/dist-cli-web/assets/{fetch-BR71C0K9.js → fetch-DPSWt6yX.js} +1 -1
- package/dist-cli-web/assets/{fetch-Bk-7vxHV.js → fetch-DZ6OF-xW.js} +1 -1
- package/dist-cli-web/assets/{fetch-_CN1EVMt.js → fetch-Du-wU0OO.js} +1 -1
- package/dist-cli-web/assets/fetch-Gu4qQjUB.js +1 -0
- package/dist-cli-web/assets/{fetch-B2agy1hy.js → fetch-qd2FgBWQ.js} +1 -1
- package/dist-cli-web/assets/{fetch-DPRDSI39.js → fetch-z9M9FcIC.js} +1 -1
- package/dist-cli-web/assets/host-CWsAWKgy.js +1 -0
- package/dist-cli-web/assets/host-D8zlA62K.js +1 -0
- package/dist-cli-web/assets/index-BGd4ZfhO.js +2 -0
- package/dist-cli-web/assets/index-BYZF1ngN.js +1 -0
- package/dist-cli-web/assets/index-BcuwlCin.css +1 -0
- package/dist-cli-web/assets/index-BnaLj2dx.css +1 -0
- package/dist-cli-web/assets/index-Bq5q3kSU.js +36 -0
- package/dist-cli-web/assets/index-CPR3jdC2.js +137 -0
- package/dist-cli-web/assets/index-D3AjvaOX.js +1 -0
- package/dist-cli-web/assets/index-DAitScUA.js +1 -0
- package/dist-cli-web/assets/index-DBSMWAJ0.js +1 -0
- package/dist-cli-web/assets/index-DTn9htw-.js +64 -0
- package/dist-cli-web/assets/index-DV_rWxcH.js +1 -0
- package/dist-cli-web/assets/index-DxhAGqYM.css +1 -0
- package/dist-cli-web/assets/{index-Colc58j-.js → index-Dy0fRMDf.js} +1 -1
- package/dist-cli-web/assets/index-Dz_ddyZS.css +1 -0
- package/dist-cli-web/assets/index-I0mIcDpE.css +1 -0
- package/dist-cli-web/assets/{index-BIHFuCJK.js → index-a7CT8DQm.js} +1 -1
- package/dist-cli-web/assets/index-onwNShRw.js +2 -0
- package/dist-cli-web/assets/index-v6DlL4ue.js +1 -0
- package/dist-cli-web/assets/{people-page-header-DNPjaSt4.js → people-page-header-Czt9e1jv.js} +1 -1
- package/dist-cli-web/assets/{prompt-BgywZQ_g.js → prompt-DGazz143.js} +1 -1
- package/dist-cli-web/assets/{semantic-index-config-builder-bji_UxYE.js → semantic-index-config-builder-BkFHzIUy.js} +1 -1
- package/dist-cli-web/assets/service-BMqwB74f.js +1 -0
- package/dist-cli-web/assets/{service-DpU9fa-l.js → service-CAp0YJoS.js} +1 -1
- package/dist-cli-web/assets/service-CUQ8iHdS.js +1 -0
- package/dist-cli-web/assets/{useFormControl-De24E2zT.js → useFormControl-DcSMUc2d.js} +1 -1
- package/dist-cli-web/assets/useTable-Clmq3sge.js +1 -0
- package/dist-cli-web/assets/useToast-YAHDkKDN.js +1 -0
- package/dist-cli-web/assets/{vendor-echarts-DfAMQxdr.js → vendor-echarts-hTLhTs52.js} +5 -5
- package/dist-cli-web/assets/{vendor-echarts-wordcloud-BsaEJTPY.js → vendor-echarts-wordcloud-B8CF_NgP.js} +1 -1
- package/dist-cli-web/assets/{vendor-zrender-PFmZe1EY.js → vendor-zrender-D8psf1AA.js} +2 -2
- package/dist-cli-web/assets/{webworkerAll-BRnv6GvJ.js → webworkerAll-CvSp2Y8j.js} +1 -1
- package/dist-cli-web/index.html +2 -2
- package/package.json +4 -4
- package/dist/chat-command-SXW67RF7.mjs.map +0 -1
- package/dist/chunk-4YPNYQSP.mjs.map +0 -1
- package/dist/chunk-BSGLH6G3.mjs.map +0 -1
- package/dist/chunk-CNEWMCGX.mjs.map +0 -1
- package/dist/chunk-JHON5FN7.mjs.map +0 -1
- package/dist/chunk-LZGOIRLV.mjs.map +0 -1
- package/dist/chunk-OWOEWZIC.mjs.map +0 -1
- package/dist/service-KZTHBDQ5.mjs.map +0 -1
- package/dist/undici-MU5I3L6Q.mjs.map +0 -1
- package/dist-cli-web/assets/AISettingsTab-BmhNcUEh.js +0 -1
- package/dist-cli-web/assets/AboutTab-CFklrZt8.js +0 -1
- package/dist-cli-web/assets/ActionToolsPanel-Dp-ojXjO.css +0 -1
- package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-B-dIPvcs.js +0 -110
- package/dist-cli-web/assets/ApiSettingsTab-DvDm421U.js +0 -2
- package/dist-cli-web/assets/BatchManageTab-DhIDH3Q1.js +0 -1
- package/dist-cli-web/assets/ChatRecordDrawer-DHdas7Jp.js +0 -1
- package/dist-cli-web/assets/DataDirCleanupNotice-jebQ9il3.js +0 -1
- package/dist-cli-web/assets/DatePicker.vue_vue_type_script_setup_true_lang-Cal624eP.js +0 -1
- package/dist-cli-web/assets/EChart.vue_vue_type_script_setup_true_lang-CsgJ-Xn3.js +0 -1
- package/dist-cli-web/assets/GlobalTaskBar-BvNmFO7q.js +0 -1
- package/dist-cli-web/assets/GroupRelationshipGalaxyView-DEUIrvgz.js +0 -1
- package/dist-cli-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-CwDIA0UP.js +0 -1
- package/dist-cli-web/assets/MessageExportModal-DYjhBuzO.js +0 -1
- package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CqdqveEJ.js +0 -4108
- package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-TYGOUDiv.css +0 -1
- package/dist-cli-web/assets/RovingFocusItem-j33Nsbbn.js +0 -1
- package/dist-cli-web/assets/SectionTabs.vue_vue_type_script_setup_true_lang-C6EHKB_i.js +0 -1
- package/dist-cli-web/assets/SettingsModal-CjVax3I6.css +0 -1
- package/dist-cli-web/assets/SettingsModal-Dg27piEO.js +0 -2
- package/dist-cli-web/assets/Tabs-CRZdCcU4.js +0 -1
- package/dist-cli-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-BLpQds4F.js +0 -1
- package/dist-cli-web/assets/aiChat-4JvxWGXZ.js +0 -8
- package/dist-cli-web/assets/base-D6fxqD_X.js +0 -1
- package/dist-cli-web/assets/dateFormat-Bu4-Ux3L.js +0 -1
- package/dist-cli-web/assets/index-B4J99zv3.css +0 -1
- package/dist-cli-web/assets/index-BBeqtL8d.css +0 -1
- package/dist-cli-web/assets/index-BCEk6ZpL.js +0 -64
- package/dist-cli-web/assets/index-BUz_Vl9U.js +0 -2
- package/dist-cli-web/assets/index-BWZIoPV3.css +0 -1
- package/dist-cli-web/assets/index-BYQV3OA5.js +0 -1
- package/dist-cli-web/assets/index-CVVv_6qu.js +0 -2
- package/dist-cli-web/assets/index-CacwXQL4.js +0 -1
- package/dist-cli-web/assets/index-DImo7TQN.js +0 -1
- package/dist-cli-web/assets/index-DV9zQVPV.js +0 -137
- package/dist-cli-web/assets/index-DXKS-q-w.css +0 -1
- package/dist-cli-web/assets/index-DZc5A4_J.js +0 -1
- package/dist-cli-web/assets/index-DkWTvE7d.js +0 -36
- package/dist-cli-web/assets/index-DmEn0PAI.js +0 -1
- package/dist-cli-web/assets/index-b9eEQeVt.js +0 -1
- package/dist-cli-web/assets/index-waDxab2e.css +0 -1
- package/dist-cli-web/assets/insight-time-range-MJxLEu6o.js +0 -1
- package/dist-cli-web/assets/useTable-C7BH94MF.js +0 -1
- package/dist-cli-web/assets/useToast-CxhJkhXK.js +0 -1
- /package/dist/{chunk-UNIKQFI5.mjs.map → chunk-6E46U4H2.mjs.map} +0 -0
- /package/dist/{chunk-AAGDVTP2.mjs.map → chunk-6EZPD3XJ.mjs.map} +0 -0
- /package/dist/{chunk-VDWI4A4U.mjs.map → chunk-CH5YAZ4Q.mjs.map} +0 -0
- /package/dist/{chunk-U2NXHIJK.mjs.map → chunk-TJ3NOBVI.mjs.map} +0 -0
- /package/dist/{chunk-GVW3BDGZ.mjs.map → chunk-TWH422HC.mjs.map} +0 -0
- /package/dist/{chunk-XDF6PMVZ.mjs.map → chunk-VUYWUHWW.mjs.map} +0 -0
- /package/dist/{http-LVOGJFDL.mjs.map → http-237XYNRT.mjs.map} +0 -0
- /package/dist/{import-7OU57ZHM.mjs.map → import-R2E2TFAK.mjs.map} +0 -0
- /package/dist/{mcp-CUKHTTII.mjs.map → mcp-BED4AARV.mjs.map} +0 -0
- /package/dist/{src-LORFXAUE.mjs.map → src-AYMALWU5.mjs.map} +0 -0
- /package/dist/{stream-import-7YUWIAD6.mjs.map → stream-import-RXNSOOYH.mjs.map} +0 -0
- /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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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 >=
|
|
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-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
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-
|
|
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 `
|
|
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 `
|
|
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-
|
|
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":"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","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-
|
|
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-
|
|
41
|
+
//# sourceMappingURL=chunk-6E46U4H2.mjs.map
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
resolveOwnerMember,
|
|
22
22
|
setCache,
|
|
23
23
|
shouldScopeContactToSession
|
|
24
|
-
} from "./chunk-
|
|
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-
|
|
1329
|
+
//# sourceMappingURL=chunk-6EZPD3XJ.mjs.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
DataDirCompatibilityError,
|
|
12
12
|
assertDataDirCompatible
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
40
|
+
//# sourceMappingURL=chunk-CH5YAZ4Q.mjs.map
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
getWeekdayActivity,
|
|
29
29
|
queryMessages,
|
|
30
30
|
searchMessagesByKeywords
|
|
31
|
-
} from "./chunk-
|
|
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-
|
|
1941
|
+
//# sourceMappingURL=chunk-HWIXK7SU.mjs.map
|