chatlab-cli 0.37.2 → 0.37.4
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/LICENSE +661 -0
- package/dist/{chat-command-G2EX7VHR.mjs → chat-command-DJKSQP6Y.mjs} +37 -9
- package/dist/chat-command-DJKSQP6Y.mjs.map +1 -0
- package/dist/{chunk-F4HVCFZL.mjs → chunk-3K7F2SRZ.mjs} +3 -3
- package/dist/{chunk-FCUUAGGC.mjs → chunk-ARRFRJOH.mjs} +2 -2
- package/dist/{chunk-H46CLFWK.mjs → chunk-D6BRSG3V.mjs} +4 -4
- package/dist/{chunk-YI3EQYEG.mjs → chunk-DJ7QEJNO.mjs} +12 -12
- package/dist/{chunk-XQ6Z2KNN.mjs → chunk-JWWWLW5G.mjs} +2 -2
- package/dist/{chunk-HBAQPF6X.mjs → chunk-NKSPJN6X.mjs} +210 -60
- package/dist/chunk-NKSPJN6X.mjs.map +1 -0
- package/dist/{chunk-HMVM7VCA.mjs → chunk-NVW3ZCYD.mjs} +3 -3
- package/dist/{chunk-T5H56AZV.mjs → chunk-OXRS2UPE.mjs} +13 -11
- package/dist/chunk-OXRS2UPE.mjs.map +1 -0
- package/dist/{chunk-EFX66A2O.mjs → chunk-QP77JL6O.mjs} +2 -2
- package/dist/{chunk-EK5QIJLZ.mjs → chunk-VCKF7RYB.mjs} +11 -11
- package/dist/{chunk-L6RJIVLS.mjs → chunk-WBPOMYBE.mjs} +315 -24
- package/dist/chunk-WBPOMYBE.mjs.map +1 -0
- package/dist/{chunk-E6LCCPIB.mjs → chunk-YPP3N2AX.mjs} +2 -2
- package/dist/cli.mjs +9 -9
- package/dist/contacts-worker.mjs +2 -2
- package/dist/global-insight-worker.mjs +1 -1
- package/dist/{http-5BRVWAJR.mjs → http-O4AZUIOD.mjs} +12 -12
- package/dist/{import-IAECQDKC.mjs → import-IALJQB7V.mjs} +7 -7
- package/dist/index.mjs +12 -12
- package/dist/{mcp-XXSQJBGU.mjs → mcp-VNBL4WMM.mjs} +24 -17
- package/dist/mcp-VNBL4WMM.mjs.map +1 -0
- package/dist/people-relationships-worker.mjs +2 -2
- package/dist/semantic-index-worker.mjs +1 -1
- package/dist/{src-4HLKMQ7S.mjs → src-6ICLBMOR.mjs} +6 -6
- package/dist/{stream-import-PUG42I36.mjs → stream-import-NKQYYSGZ.mjs} +7 -7
- package/dist/{worker-runtime-X5563TVT.mjs → worker-runtime-AE2I6U2G.mjs} +5 -5
- package/dist-cli-web/assets/{AISettingsTab-m_r2fFEj.js → AISettingsTab-mecu-HsX.js} +1 -1
- package/dist-cli-web/assets/{AboutTab-J65UqIuk.js → AboutTab-CgXYD50w.js} +1 -1
- package/dist-cli-web/assets/{Alert-qBIGn_CW.js → Alert-DR892gaV.js} +1 -1
- package/dist-cli-web/assets/{ApiSettingsTab-CxWRJI9j.js → ApiSettingsTab-Cvw8gStg.js} +1 -1
- package/dist-cli-web/assets/{BatchManageTab-BINNVwm1.js → BatchManageTab-DqSEzAtr.js} +1 -1
- package/dist-cli-web/assets/{BufferResource-C-jLPrHv.js → BufferResource-rydt5j-b.js} +1 -1
- package/dist-cli-web/assets/{CanvasRenderer-kDLW8GSt.js → CanvasRenderer-Ci5IaFxW.js} +1 -1
- package/dist-cli-web/assets/{CardDecoration-CnYxleQM.js → CardDecoration-8F4sZO4v.js} +1 -1
- package/dist-cli-web/assets/{ChatRecordDrawer-CMg3FEWH.js → ChatRecordDrawer-D3LzSRkL.js} +1 -1
- package/dist-cli-web/assets/{ChatRecordWorkspace-AfFIMUbZ.js → ChatRecordWorkspace-BDCIAjm3.js} +1 -1
- package/dist-cli-web/assets/{Checkbox-D-hAv15R.js → Checkbox-I1cjN4s_.js} +1 -1
- package/dist-cli-web/assets/{DataDirCleanupNotice-P80h2p4l.js → DataDirCleanupNotice-8zcIOyGl.js} +1 -1
- package/dist-cli-web/assets/{DatePicker.vue_vue_type_script_setup_true_lang-CSp691Uv.js → DatePicker.vue_vue_type_script_setup_true_lang-DWWzQOTU.js} +1 -1
- package/dist-cli-web/assets/{DebugToolsPanel-BK2VbKB0.js → DebugToolsPanel-CiGd5ttA.js} +1 -1
- package/dist-cli-web/assets/{EChart.vue_vue_type_script_setup_true_lang-BcE0mE_N.js → EChart.vue_vue_type_script_setup_true_lang-Rk-Bu-rv.js} +1 -1
- package/dist-cli-web/assets/{EChartBar.vue_vue_type_script_setup_true_lang-BypaV5wc.js → EChartBar.vue_vue_type_script_setup_true_lang-CB_KuKt4.js} +1 -1
- package/dist-cli-web/assets/{EChartLine.vue_vue_type_script_setup_true_lang-D8SyOfWC.js → EChartLine.vue_vue_type_script_setup_true_lang-5iW9KPRe.js} +1 -1
- package/dist-cli-web/assets/{EChartWordcloud-0rihhg03.js → EChartWordcloud-BiN68kpp.js} +1 -1
- package/dist-cli-web/assets/{FileDropZone.vue_vue_type_script_setup_true_lang-Dyuzh7Ex.js → FileDropZone.vue_vue_type_script_setup_true_lang-DpK_xXUN.js} +1 -1
- package/dist-cli-web/assets/{Filter-rD_jWpbO.js → Filter-Tmam9FK9.js} +1 -1
- package/dist-cli-web/assets/{GlobalTaskBar-sXQuGvF-.js → GlobalTaskBar-B77auVn7.js} +1 -1
- package/dist-cli-web/assets/{GroupRelationshipGalaxyView-BN1L9DFf.js → GroupRelationshipGalaxyView-DAmdqVxU.js} +1 -1
- package/dist-cli-web/assets/{Label-Ce4wl_Ph.js → Label-DTrL45eR.js} +1 -1
- package/dist-cli-web/assets/{LoadingState.vue_vue_type_script_setup_true_lang-DmVfwvnD.js → LoadingState.vue_vue_type_script_setup_true_lang-DH0zYa8f.js} +1 -1
- package/dist-cli-web/assets/{MessageExportModal-C2IUNPhg.js → MessageExportModal-DgvQvcc5.js} +1 -1
- package/dist-cli-web/assets/{PageHeader-D5BcYKBs.js → PageHeader-C-UYITO9.js} +1 -1
- package/dist-cli-web/assets/{PageTabs.vue_vue_type_script_setup_true_lang-DHly2-fe.js → PageTabs.vue_vue_type_script_setup_true_lang-BV344PR7.js} +1 -1
- package/dist-cli-web/assets/{RelationshipGalaxyCanvas-CHPqtqQz.js → RelationshipGalaxyCanvas-Bzh-vQI8.js} +3 -3
- package/dist-cli-web/assets/{RelationshipGalaxyThreeCanvas-qR4S-9n7.js → RelationshipGalaxyThreeCanvas--DDkxCCc.js} +1 -1
- package/dist-cli-web/assets/{RenderTargetSystem-BaIFulUj.js → RenderTargetSystem-BP0KBa7R.js} +1 -1
- package/dist-cli-web/assets/{RovingFocusItem-Bqgmzo42.js → RovingFocusItem-BAQO8BlG.js} +1 -1
- package/dist-cli-web/assets/{ScreenCaptureModal-sJqB_hrK.js → ScreenCaptureModal-DtAB4lyN.js} +1 -1
- package/dist-cli-web/assets/{SectionTabs.vue_vue_type_script_setup_true_lang-BPt98e6z.js → SectionTabs.vue_vue_type_script_setup_true_lang-DjUq1i7-.js} +1 -1
- package/dist-cli-web/assets/{Select-BAnN4HMs.js → Select-CaRAtYOu.js} +1 -1
- package/dist-cli-web/assets/{SettingsModal-C4ANMlJJ.js → SettingsModal-BKu9l7vR.js} +2 -2
- package/dist-cli-web/assets/{StorageTab-BgNQliz4.js → StorageTab-DWUzStD4.js} +1 -1
- package/dist-cli-web/assets/{Switch-DddEvDJa.js → Switch-mMuTJ87v.js} +1 -1
- package/dist-cli-web/assets/{Tabs-xVtuBuO0.js → Tabs-B0DXvZn9.js} +1 -1
- package/dist-cli-web/assets/{Tabs-DwjL-ueH.js → Tabs-Bw65ChMB.js} +1 -1
- package/dist-cli-web/assets/{ThemeCard.vue_vue_type_script_setup_true_lang-CNCVa86b.js → ThemeCard.vue_vue_type_script_setup_true_lang-CFSCaL65.js} +1 -1
- package/dist-cli-web/assets/{TimeSelect.vue_vue_type_script_setup_true_lang-BehUIWki.js → TimeSelect.vue_vue_type_script_setup_true_lang-sP4Z2nbi.js} +1 -1
- package/dist-cli-web/assets/{VisuallyHiddenInput-ST6JNfSG.js → VisuallyHiddenInput-Cy3d6wW5.js} +1 -1
- package/dist-cli-web/assets/{WebGLRenderer-DRraqD4Y.js → WebGLRenderer-C86bSgXH.js} +1 -1
- package/dist-cli-web/assets/{WebGPURenderer-CnzaYARg.js → WebGPURenderer-EcnRVF_C.js} +1 -1
- package/dist-cli-web/assets/{aiChat-CeJy-gG-.js → aiChat-ZrHuq9Eb.js} +3 -3
- package/dist-cli-web/assets/{base-BHbtUviQ.js → base-DwqzgeyP.js} +1 -1
- package/dist-cli-web/assets/{browserAll-DYxkitnx.js → browserAll-DUX8qJC8.js} +1 -1
- package/dist-cli-web/assets/{chatMessages-Dj1u-tFB.js → chatMessages-By6kR5_1.js} +3 -3
- package/dist-cli-web/assets/{cli-web-BtH8nfjA.js → cli-web-JlckDfz0.js} +1 -1
- package/dist-cli-web/assets/{fetch-CAEyoWQA.js → fetch-Bhl8mtJ2.js} +11 -13
- package/dist-cli-web/assets/{fetch-DNmRaRxX.js → fetch-BjtwVVBg.js} +1 -1
- package/dist-cli-web/assets/{fetch-ejEMWPM2.js → fetch-BpoJa14b.js} +1 -1
- package/dist-cli-web/assets/{fetch-emZXHmoE.js → fetch-CY5yJNTL.js} +1 -1
- package/dist-cli-web/assets/{fetch-C1Tm66i9.js → fetch-ChSI9rRd.js} +1 -1
- package/dist-cli-web/assets/{fetch-JEEBqR_7.js → fetch-CuySZ9TW.js} +1 -1
- package/dist-cli-web/assets/{fetch-T5Gi1TUZ.js → fetch-DS-lTLBb.js} +1 -1
- package/dist-cli-web/assets/{fetch-D7hfFyoG.js → fetch-Dkyidev6.js} +1 -1
- package/dist-cli-web/assets/{fetch-U9QyidNZ.js → fetch-DtqHZHIT.js} +1 -1
- package/dist-cli-web/assets/{fetch-CGnWNSsG.js → fetch-GYzy1nua.js} +1 -1
- package/dist-cli-web/assets/{fetch-DogRrvT6.js → fetch-LZAcmdq3.js} +1 -1
- package/dist-cli-web/assets/{fetch-BJ82mWvv.js → fetch-w66ywFn5.js} +1 -1
- package/dist-cli-web/assets/{host-BUvwCvZR.js → host-CBXwW7_e.js} +1 -1
- package/dist-cli-web/assets/{host-VTWF81F5.js → host-CDCKLdfF.js} +1 -1
- package/dist-cli-web/assets/{index-DQFcmWSa.js → index-3KDkw8sV.js} +1 -1
- package/dist-cli-web/assets/{index-e6fOnhNS.js → index-BAjafcRU.js} +1 -1
- package/dist-cli-web/assets/{index-DZK9Njvy.js → index-BLO0CYvx.js} +1 -1
- package/dist-cli-web/assets/{index-KpnLSzzX.js → index-BVoFqt2r.js} +4 -4
- package/dist-cli-web/assets/{index-DDt7Tfda.js → index-CYmoNVAj.js} +1 -1
- package/dist-cli-web/assets/{index-D9C3dyV8.js → index-D07viL9P.js} +4 -4
- package/dist-cli-web/assets/{index-iEQnKg2R.js → index-DD7RFB6N.js} +2 -2
- package/dist-cli-web/assets/index-DEafpen2.js +137 -0
- package/dist-cli-web/assets/index-DRFMz0cs.css +1 -0
- package/dist-cli-web/assets/{index-HjrJ3DXO.js → index-D_CX3gzo.js} +1 -1
- package/dist-cli-web/assets/{index-BLYSew5C.js → index-D_SJKdur.js} +1 -1
- package/dist-cli-web/assets/{index-C75W1B5J.css → index-DbP9vQhR.css} +1 -1
- package/dist-cli-web/assets/{index-BI2Rb_L3.js → index-RqQZ2vvr.js} +2 -2
- package/dist-cli-web/assets/{index-B3MCGDwx.js → index-T_aveLoS.js} +1 -1
- package/dist-cli-web/assets/{index-BZpR015e.css → index-XC-s67UA.css} +1 -1
- package/dist-cli-web/assets/{index-DUBl6aBF.js → index-fhyFEtxF.js} +1 -1
- package/dist-cli-web/assets/{index-CVRBBnQw.js → index-sMeHjrc9.js} +1 -1
- package/dist-cli-web/assets/{people-page-header-DWXwFJ8M.js → people-page-header-DPOKmbHG.js} +1 -1
- package/dist-cli-web/assets/{prompt-Cepfb-5-.js → prompt-ipERjPzE.js} +1 -1
- package/dist-cli-web/assets/{semantic-index-config-builder-hTY6QyCe.js → semantic-index-config-builder-CjJ4q8PF.js} +1 -1
- package/dist-cli-web/assets/service-2UJZvVpa.js +1 -0
- package/dist-cli-web/assets/{service-DwCmXFtI.js → service-CAdsM9Hy.js} +1 -1
- package/dist-cli-web/assets/service-i_PJfTaR.js +1 -0
- package/dist-cli-web/assets/useFormControl-BPt9mIxj.js +1 -0
- package/dist-cli-web/assets/{useInsightTabAnalytics-CplGbsbe.js → useInsightTabAnalytics-s3wcN9Eo.js} +4 -4
- package/dist-cli-web/assets/{useTable-Dmpbk7fZ.js → useTable-DOM-gqX0.js} +1 -1
- package/dist-cli-web/assets/{useToast-Bmgpd3sl.js → useToast-BzK6i1Tk.js} +1 -1
- package/dist-cli-web/assets/{webworkerAll-DkPWEyVL.js → webworkerAll-ClkzpxNT.js} +1 -1
- package/dist-cli-web/index.html +2 -2
- package/package.json +1 -1
- package/dist/chat-command-G2EX7VHR.mjs.map +0 -1
- package/dist/chunk-HBAQPF6X.mjs.map +0 -1
- package/dist/chunk-L6RJIVLS.mjs.map +0 -1
- package/dist/chunk-T5H56AZV.mjs.map +0 -1
- package/dist/mcp-XXSQJBGU.mjs.map +0 -1
- package/dist-cli-web/assets/index-Bs7gk1gf.css +0 -1
- package/dist-cli-web/assets/index-Cza8BzZE.js +0 -137
- package/dist-cli-web/assets/service-BjE0YJaM.js +0 -1
- package/dist-cli-web/assets/service-DQxttlJp.js +0 -1
- package/dist-cli-web/assets/useFormControl-CJyJY8AK.js +0 -1
- /package/dist/{chunk-F4HVCFZL.mjs.map → chunk-3K7F2SRZ.mjs.map} +0 -0
- /package/dist/{chunk-FCUUAGGC.mjs.map → chunk-ARRFRJOH.mjs.map} +0 -0
- /package/dist/{chunk-H46CLFWK.mjs.map → chunk-D6BRSG3V.mjs.map} +0 -0
- /package/dist/{chunk-YI3EQYEG.mjs.map → chunk-DJ7QEJNO.mjs.map} +0 -0
- /package/dist/{chunk-XQ6Z2KNN.mjs.map → chunk-JWWWLW5G.mjs.map} +0 -0
- /package/dist/{chunk-HMVM7VCA.mjs.map → chunk-NVW3ZCYD.mjs.map} +0 -0
- /package/dist/{chunk-EFX66A2O.mjs.map → chunk-QP77JL6O.mjs.map} +0 -0
- /package/dist/{chunk-EK5QIJLZ.mjs.map → chunk-VCKF7RYB.mjs.map} +0 -0
- /package/dist/{chunk-E6LCCPIB.mjs.map → chunk-YPP3N2AX.mjs.map} +0 -0
- /package/dist/{http-5BRVWAJR.mjs.map → http-O4AZUIOD.mjs.map} +0 -0
- /package/dist/{import-IAECQDKC.mjs.map → import-IALJQB7V.mjs.map} +0 -0
- /package/dist/{src-4HLKMQ7S.mjs.map → src-6ICLBMOR.mjs.map} +0 -0
- /package/dist/{stream-import-PUG42I36.mjs.map → stream-import-NKQYYSGZ.mjs.map} +0 -0
- /package/dist/{worker-runtime-X5563TVT.mjs.map → worker-runtime-AE2I6U2G.mjs.map} +0 -0
|
@@ -6,16 +6,18 @@ 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-OXRS2UPE.mjs";
|
|
10
|
+
import "./chunk-WBPOMYBE.mjs";
|
|
11
|
+
import "./chunk-3K7F2SRZ.mjs";
|
|
12
|
+
import "./chunk-D6BRSG3V.mjs";
|
|
13
|
+
import "./chunk-QP77JL6O.mjs";
|
|
14
|
+
import "./chunk-YPP3N2AX.mjs";
|
|
15
15
|
import "./chunk-YKMQLAVP.mjs";
|
|
16
16
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
extractToolResultText,
|
|
18
|
+
getDefaultGeneralAssistantId,
|
|
19
|
+
truncateToolResultText
|
|
20
|
+
} from "./chunk-NKSPJN6X.mjs";
|
|
19
21
|
import "./chunk-VSOWNKPA.mjs";
|
|
20
22
|
|
|
21
23
|
// src/ai/chat-command.ts
|
|
@@ -113,6 +115,7 @@ async function runChatTurn(options, deps) {
|
|
|
113
115
|
const streamState = { error: null };
|
|
114
116
|
const events = [];
|
|
115
117
|
const contentBlocks = [];
|
|
118
|
+
const toolBlocks = /* @__PURE__ */ new Map();
|
|
116
119
|
let hasReplayContentBlocks = false;
|
|
117
120
|
const runAgentStream = (deps.createRunAgentStream ?? createCliRunAgentStream)(deps.dbManager, deps.aiChatManager);
|
|
118
121
|
const appendTextBlock = (text) => {
|
|
@@ -227,6 +230,31 @@ async function runChatTurn(options, deps) {
|
|
|
227
230
|
appendChartBlocks(extractChartPayloads(chunk.toolResult));
|
|
228
231
|
return;
|
|
229
232
|
}
|
|
233
|
+
if (chunk.type === "tool_start" && chunk.toolName && chunk.toolName !== "render_chart" && chunk.toolCallId) {
|
|
234
|
+
const block = {
|
|
235
|
+
type: "tool",
|
|
236
|
+
tool: {
|
|
237
|
+
name: chunk.toolName,
|
|
238
|
+
displayName: chunk.toolName,
|
|
239
|
+
status: "running",
|
|
240
|
+
toolCallId: chunk.toolCallId,
|
|
241
|
+
params: chunk.toolParams
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
toolBlocks.set(chunk.toolCallId, block);
|
|
245
|
+
contentBlocks.push(block);
|
|
246
|
+
hasReplayContentBlocks = true;
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (chunk.type === "tool_result" && chunk.toolCallId) {
|
|
250
|
+
const block = toolBlocks.get(chunk.toolCallId);
|
|
251
|
+
if (block) {
|
|
252
|
+
block.tool.status = chunk.toolIsError ? "error" : "done";
|
|
253
|
+
block.tool.isError = chunk.toolIsError === true;
|
|
254
|
+
block.tool.result = truncateToolResultText(extractToolResultText(chunk.toolResult));
|
|
255
|
+
}
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
230
258
|
if (chunk.type === "content" && chunk.content) {
|
|
231
259
|
answer += chunk.content;
|
|
232
260
|
appendTextBlock(chunk.content);
|
|
@@ -323,4 +351,4 @@ export {
|
|
|
323
351
|
runChatCommand,
|
|
324
352
|
runChatTurn
|
|
325
353
|
};
|
|
326
|
-
//# sourceMappingURL=chat-command-
|
|
354
|
+
//# sourceMappingURL=chat-command-DJKSQP6Y.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 { extractToolResultText, truncateToolResultText } 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 /** Present for a persisted but incomplete turn, never for a successful completion. */\n error?: { name: string; message: 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 const streamState: { error: Error | null } = { error: null }\n const events: AgentStreamChunk[] = []\n const contentBlocks: ContentBlock[] = []\n const toolBlocks = new Map<string, Extract<ContentBlock, { type: 'tool' }>>()\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 streamState.error = 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 === 'tool_start' && chunk.toolName && chunk.toolName !== 'render_chart' && chunk.toolCallId) {\n const block: Extract<ContentBlock, { type: 'tool' }> = {\n type: 'tool',\n tool: {\n name: chunk.toolName,\n displayName: chunk.toolName,\n status: 'running',\n toolCallId: chunk.toolCallId,\n params: chunk.toolParams,\n },\n }\n toolBlocks.set(chunk.toolCallId, block)\n contentBlocks.push(block)\n hasReplayContentBlocks = true\n return\n }\n if (chunk.type === 'tool_result' && chunk.toolCallId) {\n const block = toolBlocks.get(chunk.toolCallId)\n if (block) {\n block.tool.status = chunk.toolIsError ? 'error' : 'done'\n block.tool.isError = chunk.toolIsError === true\n block.tool.result = truncateToolResultText(extractToolResultText(chunk.toolResult))\n }\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 = streamState.error ? 'skipped' : 'done'\n break\n }\n }\n }\n },\n new AbortController().signal\n )\n\n const streamError = streamState.error\n if (streamError && streamError.name !== 'OutputLimitError') throw streamError\n if (streamError) {\n contentBlocks.push({\n type: 'error',\n error: { name: streamError.name, message: streamError.message, stack: null },\n })\n hasReplayContentBlocks = true\n }\n\n if (!options.json && options.stream !== false && answer && !answer.endsWith('\\n')) {\n write(stdout, '\\n')\n }\n\n deps.aiChatManager.addMessagePair(\n target.aiChatId,\n { content: options.question },\n {\n content: answer,\n contentBlocks: hasReplayContentBlocks ? contentBlocks : undefined,\n tokenUsage: tokenUsage ?? undefined,\n }\n )\n\n return {\n sessionId: target.sessionId,\n aiChatId: target.aiChatId,\n question: options.question,\n answer,\n ...(streamError ? { error: { name: streamError.name, message: streamError.message } } : {}),\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 if (result.error) throw createAgentStreamError(result.error)\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 if (result.error) write(stderr, `${result.error.message}\\n`)\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"]}
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
semanticSearch,
|
|
70
70
|
vecTableName,
|
|
71
71
|
vecTableSchema
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-D6BRSG3V.mjs";
|
|
73
73
|
import {
|
|
74
74
|
CHATLAB_FORMAT_VERSION,
|
|
75
75
|
DESENSITIZE_RULES_SCHEMA_VERSION,
|
|
@@ -98,7 +98,7 @@ import {
|
|
|
98
98
|
withFileLock,
|
|
99
99
|
writeConfigField,
|
|
100
100
|
writeJsonFileAtomically
|
|
101
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-NKSPJN6X.mjs";
|
|
102
102
|
import {
|
|
103
103
|
__export
|
|
104
104
|
} from "./chunk-VSOWNKPA.mjs";
|
|
@@ -2232,4 +2232,4 @@ export {
|
|
|
2232
2232
|
createSemanticIndexWorkerRuntimeClient,
|
|
2233
2233
|
semantic_index_exports
|
|
2234
2234
|
};
|
|
2235
|
-
//# sourceMappingURL=chunk-
|
|
2235
|
+
//# sourceMappingURL=chunk-3K7F2SRZ.mjs.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
DataDirCompatibilityError,
|
|
12
12
|
assertDataDirCompatible
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-NKSPJN6X.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-ARRFRJOH.mjs.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
createEmptyContactsDiagnostics,
|
|
10
10
|
normalizeContactsTimeRangePreset,
|
|
11
11
|
resolveContactsTimeRange
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-QP77JL6O.mjs";
|
|
13
13
|
import {
|
|
14
14
|
PEOPLE_RELATIONSHIPS_ALGORITHM_VERSION,
|
|
15
15
|
buildPeopleRelationshipsNeighborhoodGraph,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
computePeopleRelationshipsSnapshot,
|
|
19
19
|
normalizePeopleRelationshipsTimeRangePreset,
|
|
20
20
|
resolvePeopleRelationshipsTimeRange
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-YPP3N2AX.mjs";
|
|
22
22
|
import {
|
|
23
23
|
ANNUAL_SUMMARY_ALGORITHM_VERSION,
|
|
24
24
|
TIME_INVESTMENT_ALGORITHM_VERSION,
|
|
@@ -114,7 +114,7 @@ import {
|
|
|
114
114
|
writeAuthProfile,
|
|
115
115
|
writeParseResultToDb,
|
|
116
116
|
writeTimeInvestmentSnapshot
|
|
117
|
-
} from "./chunk-
|
|
117
|
+
} from "./chunk-NKSPJN6X.mjs";
|
|
118
118
|
import {
|
|
119
119
|
__commonJS,
|
|
120
120
|
__export,
|
|
@@ -18424,4 +18424,4 @@ export {
|
|
|
18424
18424
|
hashImportBody,
|
|
18425
18425
|
ImportIdempotencyCache
|
|
18426
18426
|
};
|
|
18427
|
-
//# sourceMappingURL=chunk-
|
|
18427
|
+
//# sourceMappingURL=chunk-D6BRSG3V.mjs.map
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
formatPortInUseError,
|
|
9
9
|
installCliLocalEmbeddingRuntime,
|
|
10
10
|
isPortAvailable
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JWWWLW5G.mjs";
|
|
12
12
|
import {
|
|
13
13
|
analyzeAutoImport,
|
|
14
14
|
autoImport
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-NVW3ZCYD.mjs";
|
|
16
16
|
import {
|
|
17
17
|
assertCliDataDirCompatible
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-ARRFRJOH.mjs";
|
|
19
19
|
import {
|
|
20
20
|
getVersion
|
|
21
21
|
} from "./chunk-5ADKYYNA.mjs";
|
|
@@ -29,14 +29,14 @@ import {
|
|
|
29
29
|
computeWordFrequency,
|
|
30
30
|
getSystemLogsDir,
|
|
31
31
|
hasPendingElectronDataWarning
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-3K7F2SRZ.mjs";
|
|
33
33
|
import {
|
|
34
34
|
IMPORT_IN_PROGRESS_ERROR_KEY,
|
|
35
35
|
detectFormat,
|
|
36
36
|
logNativeParserStatus,
|
|
37
37
|
owner_profile_service_exports,
|
|
38
38
|
validateChatLabFile
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-D6BRSG3V.mjs";
|
|
40
40
|
import {
|
|
41
41
|
AIChatManager,
|
|
42
42
|
ConfigSetError,
|
|
@@ -79,7 +79,7 @@ import {
|
|
|
79
79
|
searchMessagesLike,
|
|
80
80
|
setConfigField,
|
|
81
81
|
verifyCliDataPath
|
|
82
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-NKSPJN6X.mjs";
|
|
83
83
|
|
|
84
84
|
// src/cli.ts
|
|
85
85
|
import * as fs4 from "fs";
|
|
@@ -2314,7 +2314,7 @@ registerImportCommand(program);
|
|
|
2314
2314
|
registerValidateCommand(program);
|
|
2315
2315
|
registerRuntimeCommand(program);
|
|
2316
2316
|
program.command("formats").description("List all supported chat history formats").action(async () => {
|
|
2317
|
-
const { getSupportedFormats } = await import("./import-
|
|
2317
|
+
const { getSupportedFormats } = await import("./import-IALJQB7V.mjs");
|
|
2318
2318
|
const formats = getSupportedFormats();
|
|
2319
2319
|
console.log(`${formats.length} supported format(s):
|
|
2320
2320
|
`);
|
|
@@ -2323,11 +2323,11 @@ program.command("formats").description("List all supported chat history formats"
|
|
|
2323
2323
|
}
|
|
2324
2324
|
});
|
|
2325
2325
|
program.command("mcp").description("Start MCP Server (stdio transport, for ClaudeCode / Cursor / AI agents)").action(async () => {
|
|
2326
|
-
const { startCliMcpServer } = await import("./mcp-
|
|
2326
|
+
const { startCliMcpServer } = await import("./mcp-VNBL4WMM.mjs");
|
|
2327
2327
|
await startCliMcpServer();
|
|
2328
2328
|
});
|
|
2329
2329
|
program.command("chat").description("Ask ChatLab AI about an imported chat session").option("--session-id <id>", "Source chat session ID").option("--ai-chat-id <id>", "Existing AI chat ID to continue").option("-q, --question <text>", "Question to ask").option("--json", "Output structured JSON").option("--include-events", "Include all agent stream chunks in JSON output").option("--no-stream", "Disable streaming output").option("--locale <locale>", "AI response locale", "zh-CN").action(async (options) => {
|
|
2330
|
-
const { runChatCommand } = await import("./chat-command-
|
|
2330
|
+
const { runChatCommand } = await import("./chat-command-DJKSQP6Y.mjs");
|
|
2331
2331
|
const { dbManager, pathProvider } = initRuntime();
|
|
2332
2332
|
const aiChatManager = new AIChatManager(pathProvider.getAiDataDir(), { nativeBinding: resolveNativeBinding() });
|
|
2333
2333
|
try {
|
|
@@ -2367,7 +2367,7 @@ program.command("web").alias("start").description("Start ChatLab (HTTP API + Web
|
|
|
2367
2367
|
});
|
|
2368
2368
|
return;
|
|
2369
2369
|
}
|
|
2370
|
-
const { startHttpServer } = await import("./http-
|
|
2370
|
+
const { startHttpServer } = await import("./http-O4AZUIOD.mjs");
|
|
2371
2371
|
const port = parseInt(options.port, 10);
|
|
2372
2372
|
let webRoot;
|
|
2373
2373
|
if (!options.headless) {
|
|
@@ -2430,7 +2430,7 @@ Press Ctrl+C to stop.
|
|
|
2430
2430
|
}
|
|
2431
2431
|
const shutdown = async () => {
|
|
2432
2432
|
console.log("\nShutting down...");
|
|
2433
|
-
const { stopHttpServer } = await import("./http-
|
|
2433
|
+
const { stopHttpServer } = await import("./http-O4AZUIOD.mjs");
|
|
2434
2434
|
await stopHttpServer();
|
|
2435
2435
|
process.exit(0);
|
|
2436
2436
|
};
|
|
@@ -2523,4 +2523,4 @@ if (isDirectRun) {
|
|
|
2523
2523
|
export {
|
|
2524
2524
|
run
|
|
2525
2525
|
};
|
|
2526
|
-
//# sourceMappingURL=chunk-
|
|
2526
|
+
//# sourceMappingURL=chunk-DJ7QEJNO.mjs.map
|
|
@@ -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-D6BRSG3V.mjs";
|
|
10
10
|
|
|
11
11
|
// src/http/port.ts
|
|
12
12
|
import * as fs from "fs/promises";
|
|
@@ -98,4 +98,4 @@ export {
|
|
|
98
98
|
resolveCliLocalEmbeddingRuntimeConfig,
|
|
99
99
|
installCliLocalEmbeddingRuntime
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
101
|
+
//# sourceMappingURL=chunk-JWWWLW5G.mjs.map
|