chatlab-cli 0.34.1 → 0.34.2-beta.1
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/dist/{chat-command-OWKJJ736.mjs → chat-command-6IOH2QRF.mjs} +9 -9
- package/dist/{chunk-ZM5DSHFF.mjs → chunk-2XCNTG4O.mjs} +313 -76
- package/dist/chunk-2XCNTG4O.mjs.map +1 -0
- package/dist/{chunk-RRC6U56Y.mjs → chunk-4LW6443F.mjs} +1570 -687
- package/dist/chunk-4LW6443F.mjs.map +1 -0
- package/dist/{chunk-OHFVX2HH.mjs → chunk-4RLZFGO5.mjs} +2 -2
- package/dist/{chunk-GHZFNAMF.mjs → chunk-52P5ZRBD.mjs} +2 -2
- package/dist/{chunk-XEGEOU2D.mjs → chunk-652KEAX3.mjs} +2 -2
- package/dist/{chunk-J7HAIT3T.mjs → chunk-72RWABYJ.mjs} +2 -2
- package/dist/{chunk-MPHFZYB7.mjs → chunk-H6D4DZOC.mjs} +4 -4
- package/dist/{chunk-3RWYALUP.mjs → chunk-INBJ7SND.mjs} +50 -25
- package/dist/chunk-INBJ7SND.mjs.map +1 -0
- package/dist/{chunk-VTCZM2JS.mjs → chunk-JX6MFS6F.mjs} +43 -23
- package/dist/chunk-JX6MFS6F.mjs.map +1 -0
- package/dist/{chunk-RMW3524R.mjs → chunk-MENKFEPC.mjs} +149 -44
- package/dist/chunk-MENKFEPC.mjs.map +1 -0
- package/dist/{chunk-YRCFDZ5Q.mjs → chunk-U6MVJSXX.mjs} +170 -66
- package/dist/chunk-U6MVJSXX.mjs.map +1 -0
- package/dist/chunk-UMBEHBIZ.mjs +41 -0
- package/dist/chunk-UMBEHBIZ.mjs.map +1 -0
- package/dist/{chunk-GFHSSCCR.mjs → chunk-VSOWNKPA.mjs} +1 -11
- package/dist/cli.mjs +10 -9
- package/dist/contacts-worker.mjs +3 -3
- package/dist/global-insight-worker.mjs +2 -2
- package/dist/{http-X55S6MTO.mjs → http-HSK46XEU.mjs} +13 -12
- package/dist/{import-4AX6IX57.mjs → import-DF2WD2HE.mjs} +10 -8
- package/dist/index.mjs +13 -12
- package/dist/{mcp-GWC52AWE.mjs → mcp-A2RND7KN.mjs} +12 -12
- package/dist/people-relationships-worker.mjs +3 -3
- package/dist/semantic-index-worker.mjs +1 -1
- package/dist/{service-KGL3RAIA.mjs → service-KZTHBDQ5.mjs} +2 -2
- package/dist/{src-DLLM4SEO.mjs → src-SHFHW2QB.mjs} +27 -7
- package/dist/{stream-import-K24HWAAZ.mjs → stream-import-GZ2QDE3Z.mjs} +10 -8
- package/dist/{undici-ZSXBT7EA.mjs → undici-MU5I3L6Q.mjs} +2 -2
- package/dist/{update-checker-LGMTEKMT.mjs → update-checker-3N7HQEP2.mjs} +2 -2
- package/dist/{worker-runtime-6KKR55TD.mjs → worker-runtime-OWN56GG5.mjs} +14 -8
- package/dist/worker-runtime-OWN56GG5.mjs.map +1 -0
- package/dist-cli-web/assets/{ActionToolsPanel.vue_vue_type_script_setup_true_lang-D1BiZuQL.js → ActionToolsPanel.vue_vue_type_script_setup_true_lang-yr_T4ttU.js} +14 -14
- package/dist-cli-web/assets/{BufferResource-IPkSmPao.js → BufferResource-B-LHxriL.js} +1 -1
- package/dist-cli-web/assets/{CanvasRenderer-OAQy65em.js → CanvasRenderer-W3h_GGHM.js} +1 -1
- package/dist-cli-web/assets/{DataDirCleanupNotice-jEI-YjFp.js → DataDirCleanupNotice-C6CMNhfs.js} +1 -1
- package/dist-cli-web/assets/{EChartWordcloud-Pi48JdN2.js → EChartWordcloud-Dt6rCzHf.js} +1 -1
- package/dist-cli-web/assets/{Filter-FQD30cRE.js → Filter-BpSopVKd.js} +1 -1
- package/dist-cli-web/assets/{LoadingState.vue_vue_type_script_setup_true_lang-CCK5yTju.js → LoadingState.vue_vue_type_script_setup_true_lang-Bi_Uag3T.js} +1 -1
- package/dist-cli-web/assets/{MessageExportModal-CZn3LbeY.js → MessageExportModal-BoK-_h25.js} +1 -1
- package/dist-cli-web/assets/{PageHeader-B9B9K9by.js → PageHeader-CD8B7Emf.js} +1 -1
- package/dist-cli-web/assets/{RelationshipGalaxyCanvas-CbTmpnZ6.js → RelationshipGalaxyCanvas-BO3mo-Re.js} +7 -7
- package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-Brnpz6Ig.js +4108 -0
- package/dist-cli-web/assets/{RelationshipGalaxyThreeCanvas-CeYJABxI.css → RelationshipGalaxyThreeCanvas-CMuibfiA.css} +1 -1
- package/dist-cli-web/assets/{RenderTargetSystem-DnptJCQ0.js → RenderTargetSystem-CNP4JLfK.js} +1 -1
- package/dist-cli-web/assets/{ThemeCard.vue_vue_type_script_setup_true_lang-JXMFY6aD.js → ThemeCard.vue_vue_type_script_setup_true_lang-Na3LIoSJ.js} +1 -1
- package/dist-cli-web/assets/{TimeSelect.vue_vue_type_script_setup_true_lang-QAZFwx5S.js → TimeSelect.vue_vue_type_script_setup_true_lang-CKe1YZrV.js} +1 -1
- package/dist-cli-web/assets/{WebGLRenderer-BmjIF5se.js → WebGLRenderer-CIR5cTQN.js} +1 -1
- package/dist-cli-web/assets/{WebGPURenderer-DkNcKkqj.js → WebGPURenderer-Dz3pCrzX.js} +1 -1
- package/dist-cli-web/assets/{annual-summary-time-range-DJ0HWI_t.js → annual-summary-time-range-QhoA3uC6.js} +1 -1
- package/dist-cli-web/assets/{base-CnuE0ss0.js → base-p9yfnTpk.js} +1 -1
- package/dist-cli-web/assets/{browserAll-C_NnyNBz.js → browserAll-DMaXjf8N.js} +1 -1
- package/dist-cli-web/assets/cli-web-Dvy2aHxG.js +1 -0
- package/dist-cli-web/assets/{dateFormat-p6nibkgt.js → dateFormat-5x3JKlIk.js} +1 -1
- package/dist-cli-web/assets/{fetch-Ch4IMKin.js → fetch-B0p6QRQ8.js} +1 -1
- package/dist-cli-web/assets/{fetch-DajjPQtq.js → fetch-BI-Se2p7.js} +1 -1
- package/dist-cli-web/assets/{fetch-WElo3Vix.js → fetch-BderOzzL.js} +1 -1
- package/dist-cli-web/assets/{fetch-Bsm5YQ_7.js → fetch-BtJWW2-O.js} +1 -1
- package/dist-cli-web/assets/fetch-CBaZNOpK.js +4 -0
- package/dist-cli-web/assets/{fetch-BBUvWvOM.js → fetch-CH9Hm20R.js} +1 -1
- package/dist-cli-web/assets/{fetch-CMhV3TYQ.js → fetch-CbpKKkdO.js} +1 -1
- package/dist-cli-web/assets/{fetch-C4KJ7tGz.js → fetch-Cne-uL1m.js} +1 -1
- package/dist-cli-web/assets/{fetch-WIOgRPd9.js → fetch-DRGykJYb.js} +1 -1
- package/dist-cli-web/assets/{fetch-BfYranz7.js → fetch-QLurhC_z.js} +1 -1
- package/dist-cli-web/assets/{index-CjoTcSEc.js → index-4NL2pYn0.js} +1 -1
- package/dist-cli-web/assets/{index-CsyURmWU.js → index-B-KdENnr.js} +1 -1
- package/dist-cli-web/assets/{index-DLnlRLCx.js → index-BDyixm5n.js} +1 -1
- package/dist-cli-web/assets/{index-BE4nd1aX.js → index-BaCd1avL.js} +1 -1
- package/dist-cli-web/assets/{index-CKkIHbie.js → index-CVBBDI3B.js} +3 -3
- package/dist-cli-web/assets/index-CXh01dqh.js +2 -0
- package/dist-cli-web/assets/index-CioAsn_2.js +137 -0
- package/dist-cli-web/assets/{index-x74lBtei.js → index-Ct90lmPb.js} +1 -1
- package/dist-cli-web/assets/index-CumZ5uQ4.js +53 -0
- package/dist-cli-web/assets/index-CxGtGxLW.css +1 -0
- package/dist-cli-web/assets/{index-BcWaPFz7.js → index-DF2Dijfg.js} +1 -1
- package/dist-cli-web/assets/{index-CbacXZN3.js → index-DYCPQMOl.js} +2 -2
- package/dist-cli-web/assets/{index-Bb6EtLMB.js → index-Dp2uglLH.js} +1 -1
- package/dist-cli-web/assets/{index-dObiAHg6.js → index-IvxuxPNt.js} +1 -1
- package/dist-cli-web/assets/{people-page-header-BW5cNPl7.js → people-page-header-BRb9BrgP.js} +1 -1
- package/dist-cli-web/assets/telemetry-DPC69b73.js +1 -0
- package/dist-cli-web/assets/{webworkerAll-8AFsQkH1.js → webworkerAll-BoY19vZt.js} +1 -1
- package/dist-cli-web/index.html +1 -1
- package/package.json +3 -2
- package/dist/chunk-3RWYALUP.mjs.map +0 -1
- package/dist/chunk-RMW3524R.mjs.map +0 -1
- package/dist/chunk-RRC6U56Y.mjs.map +0 -1
- package/dist/chunk-VTCZM2JS.mjs.map +0 -1
- package/dist/chunk-YRCFDZ5Q.mjs.map +0 -1
- package/dist/chunk-ZM5DSHFF.mjs.map +0 -1
- package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
- package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
- package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
- package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
- package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
- package/dist/transformers.node-PUMHAODN.mjs +0 -42889
- package/dist/transformers.node-PUMHAODN.mjs.map +0 -1
- package/dist/worker-runtime-6KKR55TD.mjs.map +0 -1
- package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-Cu6NmKOq.js +0 -4108
- package/dist-cli-web/assets/cli-web-t1gabACJ.js +0 -1
- package/dist-cli-web/assets/fetch-_Hb-KRSr.js +0 -3
- package/dist-cli-web/assets/index-B8I5Pax_.js +0 -2
- package/dist-cli-web/assets/index-CsX1Wt8l.js +0 -173
- package/dist-cli-web/assets/index-DmrrdYXH.css +0 -1
- package/dist-cli-web/assets/index-YzfjPohq.js +0 -53
- /package/dist/{chat-command-OWKJJ736.mjs.map → chat-command-6IOH2QRF.mjs.map} +0 -0
- /package/dist/{chunk-OHFVX2HH.mjs.map → chunk-4RLZFGO5.mjs.map} +0 -0
- /package/dist/{chunk-GHZFNAMF.mjs.map → chunk-52P5ZRBD.mjs.map} +0 -0
- /package/dist/{chunk-XEGEOU2D.mjs.map → chunk-652KEAX3.mjs.map} +0 -0
- /package/dist/{chunk-J7HAIT3T.mjs.map → chunk-72RWABYJ.mjs.map} +0 -0
- /package/dist/{chunk-MPHFZYB7.mjs.map → chunk-H6D4DZOC.mjs.map} +0 -0
- /package/dist/{chunk-GFHSSCCR.mjs.map → chunk-VSOWNKPA.mjs.map} +0 -0
- /package/dist/{http-X55S6MTO.mjs.map → http-HSK46XEU.mjs.map} +0 -0
- /package/dist/{import-4AX6IX57.mjs.map → import-DF2WD2HE.mjs.map} +0 -0
- /package/dist/{mcp-GWC52AWE.mjs.map → mcp-A2RND7KN.mjs.map} +0 -0
- /package/dist/{service-KGL3RAIA.mjs.map → service-KZTHBDQ5.mjs.map} +0 -0
- /package/dist/{src-DLLM4SEO.mjs.map → src-SHFHW2QB.mjs.map} +0 -0
- /package/dist/{stream-import-K24HWAAZ.mjs.map → stream-import-GZ2QDE3Z.mjs.map} +0 -0
- /package/dist/{undici-ZSXBT7EA.mjs.map → undici-MU5I3L6Q.mjs.map} +0 -0
- /package/dist/{update-checker-LGMTEKMT.mjs.map → update-checker-3N7HQEP2.mjs.map} +0 -0
|
@@ -11,24 +11,31 @@ import {
|
|
|
11
11
|
getServerAiLogger,
|
|
12
12
|
getSkillManagerCore,
|
|
13
13
|
initServerAiLogger
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-H6D4DZOC.mjs";
|
|
15
15
|
import {
|
|
16
16
|
AGENT_TOOL_REGISTRY,
|
|
17
17
|
CoreDataProvider
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-72RWABYJ.mjs";
|
|
19
|
+
import {
|
|
20
|
+
resolveCliLocalEmbeddingRuntimeConfig
|
|
21
|
+
} from "./chunk-UMBEHBIZ.mjs";
|
|
19
22
|
import {
|
|
20
23
|
analyzeIncrementalImport,
|
|
21
24
|
analyzeNewImport,
|
|
22
25
|
autoImport,
|
|
26
|
+
autoImportBatch,
|
|
23
27
|
incrementalImport,
|
|
24
28
|
streamImport
|
|
25
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-U6MVJSXX.mjs";
|
|
26
30
|
import {
|
|
27
31
|
assertCliDataDirCompatible
|
|
28
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-4RLZFGO5.mjs";
|
|
29
33
|
import {
|
|
30
34
|
getVersion
|
|
31
35
|
} from "./chunk-5ADKYYNA.mjs";
|
|
36
|
+
import {
|
|
37
|
+
resolveCliPath
|
|
38
|
+
} from "./chunk-FJ35V3TE.mjs";
|
|
32
39
|
import {
|
|
33
40
|
AnalyticsService,
|
|
34
41
|
NodePathProvider,
|
|
@@ -47,7 +54,7 @@ import {
|
|
|
47
54
|
hasPendingElectronDataWarning,
|
|
48
55
|
importDemoSessions,
|
|
49
56
|
serializeChatLabToJsonl
|
|
50
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-2XCNTG4O.mjs";
|
|
51
58
|
import {
|
|
52
59
|
AIChatManager,
|
|
53
60
|
ArchiveImportError,
|
|
@@ -99,10 +106,7 @@ import {
|
|
|
99
106
|
streamParseFileInfo,
|
|
100
107
|
summary_service_exports,
|
|
101
108
|
validateApiKey
|
|
102
|
-
} from "./chunk-
|
|
103
|
-
import {
|
|
104
|
-
resolveCliPath
|
|
105
|
-
} from "./chunk-FJ35V3TE.mjs";
|
|
109
|
+
} from "./chunk-4LW6443F.mjs";
|
|
106
110
|
import {
|
|
107
111
|
ALL_MIGRATIONS,
|
|
108
112
|
BUILTIN_MODELS,
|
|
@@ -163,7 +167,7 @@ import {
|
|
|
163
167
|
stripAvatarFields,
|
|
164
168
|
verifyCliDataPath,
|
|
165
169
|
writeConfigField
|
|
166
|
-
} from "./chunk-
|
|
170
|
+
} from "./chunk-INBJ7SND.mjs";
|
|
167
171
|
|
|
168
172
|
// src/http/index.ts
|
|
169
173
|
import * as fs11 from "fs";
|
|
@@ -2438,7 +2442,7 @@ function registerMergeRoutes(server2, ctx) {
|
|
|
2438
2442
|
}
|
|
2439
2443
|
});
|
|
2440
2444
|
server2.post("/_web/merge/execute", async (request, reply) => {
|
|
2441
|
-
const { handles, outputName, format = "json", andImport } = request.body;
|
|
2445
|
+
const { handles, outputName, format = "json", andImport, sessionGapThreshold } = request.body;
|
|
2442
2446
|
if (!handles || !Array.isArray(handles) || handles.length === 0) {
|
|
2443
2447
|
return reply.code(400).send({ error: "Missing handles" });
|
|
2444
2448
|
}
|
|
@@ -2466,7 +2470,7 @@ function registerMergeRoutes(server2, ctx) {
|
|
|
2466
2470
|
const tmpPath = path6.join(tmpDir, `${safeName}.json`);
|
|
2467
2471
|
fs4.writeFileSync(tmpPath, jsonData, "utf-8");
|
|
2468
2472
|
try {
|
|
2469
|
-
const importResult = await streamImport2(dbManager2, tmpPath);
|
|
2473
|
+
const importResult = await streamImport2(dbManager2, tmpPath, { sessionGapThreshold });
|
|
2470
2474
|
sessionId = importResult.sessionId;
|
|
2471
2475
|
} finally {
|
|
2472
2476
|
try {
|
|
@@ -3048,6 +3052,12 @@ function resolveNativeBinding() {
|
|
|
3048
3052
|
|
|
3049
3053
|
// src/http/routes/web/import.ts
|
|
3050
3054
|
var ARCHIVE_UPLOAD_LIMIT = 50 * 1024 * 1024 * 1024;
|
|
3055
|
+
function parseOptionalInteger(value) {
|
|
3056
|
+
if (typeof value === "number") return Number.isInteger(value) ? value : void 0;
|
|
3057
|
+
if (typeof value !== "string" || value.trim() === "") return void 0;
|
|
3058
|
+
const parsed = Number(value);
|
|
3059
|
+
return Number.isInteger(parsed) ? parsed : void 0;
|
|
3060
|
+
}
|
|
3051
3061
|
function cleanupTemp(...paths) {
|
|
3052
3062
|
for (const p of paths) {
|
|
3053
3063
|
try {
|
|
@@ -3062,11 +3072,14 @@ function cleanupTemp(...paths) {
|
|
|
3062
3072
|
}
|
|
3063
3073
|
}
|
|
3064
3074
|
function registerImportRoutes2(server2, dbManager2, options = {}) {
|
|
3075
|
+
const activeBatchControllers = /* @__PURE__ */ new Map();
|
|
3065
3076
|
const sourceManager = options.sourceManager ?? new ArchiveImportSourceManager();
|
|
3066
3077
|
const runAutoImport = options.runAutoImport ?? autoImport.bind(null, dbManager2);
|
|
3067
|
-
const
|
|
3078
|
+
const runAutoImportBatch = options.runAutoImportBatch ?? autoImportBatch.bind(null, dbManager2);
|
|
3079
|
+
const runPreparedImport = options.runPreparedImport ?? (async (manifestPath, onProgress, sessionGapThreshold) => {
|
|
3068
3080
|
const result = await runAutoImport(manifestPath, {
|
|
3069
3081
|
formatId: "google-chat-takeout",
|
|
3082
|
+
sessionGapThreshold,
|
|
3070
3083
|
nativeBinding: resolveNativeBinding(),
|
|
3071
3084
|
onProgress
|
|
3072
3085
|
});
|
|
@@ -3117,10 +3130,11 @@ data: ${JSON.stringify(eventData)}
|
|
|
3117
3130
|
`);
|
|
3118
3131
|
}
|
|
3119
3132
|
try {
|
|
3133
|
+
const sessionGapThreshold = parseOptionalInteger(request.body?.sessionGapThreshold);
|
|
3120
3134
|
const result = await sourceManager.withMaterializedChat(
|
|
3121
3135
|
request.params.sourceId,
|
|
3122
3136
|
chatId,
|
|
3123
|
-
(manifestPath) => runPreparedImport(manifestPath, (progress) => sendEvent("progress", progress))
|
|
3137
|
+
(manifestPath) => runPreparedImport(manifestPath, (progress) => sendEvent("progress", progress), sessionGapThreshold)
|
|
3124
3138
|
);
|
|
3125
3139
|
if (result.success) {
|
|
3126
3140
|
sendEvent("done", result);
|
|
@@ -3192,6 +3206,7 @@ data: ${JSON.stringify(eventData)}
|
|
|
3192
3206
|
const formatId = data.fields?.formatId?.value;
|
|
3193
3207
|
const chatIndexStr = data.fields?.chatIndex?.value;
|
|
3194
3208
|
const chatIndex = chatIndexStr !== void 0 ? parseInt(chatIndexStr, 10) : void 0;
|
|
3209
|
+
const sessionGapThreshold = parseOptionalInteger(data.fields?.sessionGapThreshold?.value);
|
|
3195
3210
|
reply.raw.writeHead(200, {
|
|
3196
3211
|
"Content-Type": "text/event-stream",
|
|
3197
3212
|
"Cache-Control": "no-cache",
|
|
@@ -3208,13 +3223,14 @@ data: ${JSON.stringify(eventData)}
|
|
|
3208
3223
|
const result = await runAutoImport(tmpPath, {
|
|
3209
3224
|
formatId,
|
|
3210
3225
|
chatIndex,
|
|
3226
|
+
sessionGapThreshold,
|
|
3211
3227
|
nativeBinding,
|
|
3212
3228
|
onProgress: (p) => sendEvent("progress", p)
|
|
3213
3229
|
});
|
|
3214
3230
|
if (result.success) {
|
|
3215
3231
|
sendEvent("done", result);
|
|
3216
3232
|
} else {
|
|
3217
|
-
sendEvent("error",
|
|
3233
|
+
sendEvent("error", result);
|
|
3218
3234
|
}
|
|
3219
3235
|
} catch (err) {
|
|
3220
3236
|
sendEvent("error", { success: false, error: err instanceof Error ? err.message : String(err) });
|
|
@@ -3223,12 +3239,89 @@ data: ${JSON.stringify(eventData)}
|
|
|
3223
3239
|
cleanupTemp(tmpPath, tmpDir);
|
|
3224
3240
|
}
|
|
3225
3241
|
});
|
|
3242
|
+
server2.post("/_web/import/batch", async (request, reply) => {
|
|
3243
|
+
const parts = request.parts();
|
|
3244
|
+
if (!parts) return reply.code(400).send({ error: "No files uploaded" });
|
|
3245
|
+
const requestedBatchId = request.headers["x-chatlab-import-batch-id"];
|
|
3246
|
+
const batchId = typeof requestedBatchId === "string" && requestedBatchId ? requestedBatchId : randomUUID();
|
|
3247
|
+
if (activeBatchControllers.has(batchId)) {
|
|
3248
|
+
return reply.code(409).send({ error: "Batch import id is already active" });
|
|
3249
|
+
}
|
|
3250
|
+
const tmpDir = createChatLabTempDir("imports", "batch-");
|
|
3251
|
+
const items = [];
|
|
3252
|
+
let sessionGapThreshold;
|
|
3253
|
+
let completed = false;
|
|
3254
|
+
const controller = new AbortController();
|
|
3255
|
+
activeBatchControllers.set(batchId, controller);
|
|
3256
|
+
try {
|
|
3257
|
+
for await (const part of parts) {
|
|
3258
|
+
if (part.type === "field" && part.fieldname === "sessionGapThreshold") {
|
|
3259
|
+
sessionGapThreshold = parseOptionalInteger(part.value);
|
|
3260
|
+
continue;
|
|
3261
|
+
}
|
|
3262
|
+
if (part.type !== "file") continue;
|
|
3263
|
+
const index = items.length;
|
|
3264
|
+
const safeName = path8.basename(part.filename || `upload-${index}`);
|
|
3265
|
+
const filePath = path8.join(tmpDir, `${index}-${safeName}`);
|
|
3266
|
+
await pipeline(part.file, fs7.createWriteStream(filePath, { flags: "wx" }));
|
|
3267
|
+
items.push({ id: String(index), filePath });
|
|
3268
|
+
}
|
|
3269
|
+
if (items.length === 0) return reply.code(400).send({ error: "No files uploaded" });
|
|
3270
|
+
reply.raw.writeHead(200, {
|
|
3271
|
+
"Content-Type": "text/event-stream",
|
|
3272
|
+
"Cache-Control": "no-cache",
|
|
3273
|
+
Connection: "keep-alive"
|
|
3274
|
+
});
|
|
3275
|
+
reply.raw.once("close", () => {
|
|
3276
|
+
if (!completed) controller.abort();
|
|
3277
|
+
});
|
|
3278
|
+
const sendEvent = (event, eventData) => {
|
|
3279
|
+
if (!reply.raw.destroyed) {
|
|
3280
|
+
reply.raw.write(`event: ${event}
|
|
3281
|
+
data: ${JSON.stringify(eventData)}
|
|
3282
|
+
|
|
3283
|
+
`);
|
|
3284
|
+
}
|
|
3285
|
+
};
|
|
3286
|
+
const results = await runAutoImportBatch(items, {
|
|
3287
|
+
sessionGapThreshold,
|
|
3288
|
+
signal: controller.signal,
|
|
3289
|
+
onItemStart: (_item, index) => sendEvent("batch-start", { index }),
|
|
3290
|
+
onItemProgress: (_item, index, progress) => sendEvent("batch-progress", { index, progress }),
|
|
3291
|
+
onItemComplete: (_item, index, result) => sendEvent("batch-complete", { index, result })
|
|
3292
|
+
});
|
|
3293
|
+
completed = true;
|
|
3294
|
+
sendEvent("done", results);
|
|
3295
|
+
} catch (error) {
|
|
3296
|
+
appLogger.error("import-batch", "CLI Web batch import failed", error);
|
|
3297
|
+
const payload = { error: error instanceof Error ? error.message : String(error) };
|
|
3298
|
+
if (!reply.raw.headersSent) return reply.code(500).send(payload);
|
|
3299
|
+
if (!reply.raw.destroyed) {
|
|
3300
|
+
reply.raw.write(`event: error
|
|
3301
|
+
data: ${JSON.stringify(payload)}
|
|
3302
|
+
|
|
3303
|
+
`);
|
|
3304
|
+
}
|
|
3305
|
+
} finally {
|
|
3306
|
+
completed = true;
|
|
3307
|
+
if (activeBatchControllers.get(batchId) === controller) activeBatchControllers.delete(batchId);
|
|
3308
|
+
reply.raw.end();
|
|
3309
|
+
cleanupTemp(tmpDir);
|
|
3310
|
+
}
|
|
3311
|
+
});
|
|
3312
|
+
server2.post("/_web/import/batch/:batchId/cancel", async (request) => {
|
|
3313
|
+
const controller = activeBatchControllers.get(request.params.batchId);
|
|
3314
|
+
if (!controller) return { success: false, active: false };
|
|
3315
|
+
controller.abort();
|
|
3316
|
+
return { success: true, active: true };
|
|
3317
|
+
});
|
|
3226
3318
|
server2.post("/_web/import-directory", async (request, reply) => {
|
|
3227
3319
|
const parts = request.parts();
|
|
3228
3320
|
if (!parts) return reply.code(400).send({ error: "No files uploaded" });
|
|
3229
3321
|
const tmpDir = createChatLabTempDir("imports", "directory-");
|
|
3230
3322
|
const relativePaths = [];
|
|
3231
3323
|
const fileBuffers = [];
|
|
3324
|
+
let sessionGapThreshold;
|
|
3232
3325
|
try {
|
|
3233
3326
|
let sendEvent2 = function(event, eventData) {
|
|
3234
3327
|
reply.raw.write(`event: ${event}
|
|
@@ -3240,6 +3333,8 @@ data: ${JSON.stringify(eventData)}
|
|
|
3240
3333
|
for await (const part of parts) {
|
|
3241
3334
|
if (part.type === "field" && part.fieldname === "relativePaths") {
|
|
3242
3335
|
relativePaths.push(String(part.value));
|
|
3336
|
+
} else if (part.type === "field" && part.fieldname === "sessionGapThreshold") {
|
|
3337
|
+
sessionGapThreshold = parseOptionalInteger(part.value);
|
|
3243
3338
|
} else if (part.type === "file") {
|
|
3244
3339
|
const chunks = [];
|
|
3245
3340
|
for await (const chunk of part.file) {
|
|
@@ -3270,13 +3365,14 @@ data: ${JSON.stringify(eventData)}
|
|
|
3270
3365
|
});
|
|
3271
3366
|
const nativeBinding = resolveNativeBinding();
|
|
3272
3367
|
const result = await runAutoImport(entryPath, {
|
|
3368
|
+
sessionGapThreshold,
|
|
3273
3369
|
nativeBinding,
|
|
3274
3370
|
onProgress: (p) => sendEvent2("progress", p)
|
|
3275
3371
|
});
|
|
3276
3372
|
if (result.success) {
|
|
3277
3373
|
sendEvent2("done", result);
|
|
3278
3374
|
} else {
|
|
3279
|
-
sendEvent2("error",
|
|
3375
|
+
sendEvent2("error", result);
|
|
3280
3376
|
}
|
|
3281
3377
|
} catch (err) {
|
|
3282
3378
|
if (!reply.raw.headersSent) {
|
|
@@ -3368,34 +3464,38 @@ data: ${JSON.stringify(eventData)}
|
|
|
3368
3464
|
cleanupTemp(tmpPath, tmpDir);
|
|
3369
3465
|
}
|
|
3370
3466
|
});
|
|
3371
|
-
server2.post(
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3467
|
+
server2.post(
|
|
3468
|
+
"/_web/demo/import",
|
|
3469
|
+
async (request, reply) => {
|
|
3470
|
+
const locale = request.body?.locale === "cn" ? "cn" : "en";
|
|
3471
|
+
const targetTimeZone = typeof request.body?.timeZone === "string" ? request.body.timeZone : void 0;
|
|
3472
|
+
const sessionGapThreshold = parseOptionalInteger(request.body?.sessionGapThreshold);
|
|
3473
|
+
const nativeBinding = resolveNativeBinding();
|
|
3474
|
+
reply.raw.writeHead(200, {
|
|
3475
|
+
"Content-Type": "text/event-stream",
|
|
3476
|
+
"Cache-Control": "no-cache",
|
|
3477
|
+
Connection: "keep-alive"
|
|
3478
|
+
});
|
|
3479
|
+
function sendEvent(event, eventData) {
|
|
3480
|
+
reply.raw.write(`event: ${event}
|
|
3382
3481
|
data: ${JSON.stringify(eventData)}
|
|
3383
3482
|
|
|
3384
3483
|
`);
|
|
3484
|
+
}
|
|
3485
|
+
const result = await importDemoSessions({
|
|
3486
|
+
locale,
|
|
3487
|
+
tempPrefix: "cli-demo-",
|
|
3488
|
+
targetTimeZone,
|
|
3489
|
+
importFile: (filePath) => streamImport(dbManager2, filePath, { nativeBinding, sessionGapThreshold }),
|
|
3490
|
+
deleteSession: (sessionId) => {
|
|
3491
|
+
dbManager2.deleteSessionDatabaseFiles(sessionId);
|
|
3492
|
+
},
|
|
3493
|
+
onProgress: (progress) => sendEvent("progress", progress)
|
|
3494
|
+
});
|
|
3495
|
+
sendEvent("result", result);
|
|
3496
|
+
reply.raw.end();
|
|
3385
3497
|
}
|
|
3386
|
-
|
|
3387
|
-
locale,
|
|
3388
|
-
tempPrefix: "cli-demo-",
|
|
3389
|
-
targetTimeZone,
|
|
3390
|
-
importFile: (filePath) => streamImport(dbManager2, filePath, { nativeBinding }),
|
|
3391
|
-
deleteSession: (sessionId) => {
|
|
3392
|
-
dbManager2.deleteSessionDatabaseFiles(sessionId);
|
|
3393
|
-
},
|
|
3394
|
-
onProgress: (progress) => sendEvent("progress", progress)
|
|
3395
|
-
});
|
|
3396
|
-
sendEvent("result", result);
|
|
3397
|
-
reply.raw.end();
|
|
3398
|
-
});
|
|
3498
|
+
);
|
|
3399
3499
|
}
|
|
3400
3500
|
|
|
3401
3501
|
// src/http/routes/web/cache.ts
|
|
@@ -3464,10 +3564,10 @@ function registerWebRoutes2(server2, dbManager2, options) {
|
|
|
3464
3564
|
const resolvedPathProvider = options?.pathProvider ?? fallbackPathProvider;
|
|
3465
3565
|
const ai = options?.aiContext;
|
|
3466
3566
|
const cliStreamImport = async (dm, filePath) => {
|
|
3467
|
-
const { streamImport: streamImport2 } = await import("./stream-import-
|
|
3567
|
+
const { streamImport: streamImport2 } = await import("./stream-import-GZ2QDE3Z.mjs");
|
|
3468
3568
|
const result = await streamImport2(dm, filePath);
|
|
3469
3569
|
if (!result.success) {
|
|
3470
|
-
const { IMPORT_IN_PROGRESS_ERROR_KEY: IMPORT_IN_PROGRESS_ERROR_KEY2, ImportInProgressError: ImportInProgressError2 } = await import("./src-
|
|
3570
|
+
const { IMPORT_IN_PROGRESS_ERROR_KEY: IMPORT_IN_PROGRESS_ERROR_KEY2, ImportInProgressError: ImportInProgressError2 } = await import("./src-SHFHW2QB.mjs");
|
|
3471
3571
|
if (result.error === IMPORT_IN_PROGRESS_ERROR_KEY2) throw new ImportInProgressError2();
|
|
3472
3572
|
throw new Error(result.error || "Import failed");
|
|
3473
3573
|
}
|
|
@@ -3477,7 +3577,11 @@ function registerWebRoutes2(server2, dbManager2, options) {
|
|
|
3477
3577
|
const defaultUserDataDir = getDefaultNodeUserDataDir();
|
|
3478
3578
|
const isCustom = path10.resolve(resolvedPathProvider.getUserDataDir()) !== path10.resolve(defaultUserDataDir);
|
|
3479
3579
|
const semanticIndexService = options?.semanticIndexService;
|
|
3480
|
-
const analyticsService =
|
|
3580
|
+
const analyticsService = new AnalyticsService(resolvedPathProvider.getSystemDir(), {
|
|
3581
|
+
appVersion: getVersion(),
|
|
3582
|
+
appType: "cli_web",
|
|
3583
|
+
getAiModelConfigured: () => ai?.llmConfigStore.hasConfiguredModel() === true
|
|
3584
|
+
});
|
|
3481
3585
|
registerSharedRoutes(
|
|
3482
3586
|
server2,
|
|
3483
3587
|
{
|
|
@@ -4570,6 +4674,7 @@ async function startHttpServer(options) {
|
|
|
4570
4674
|
pathProvider,
|
|
4571
4675
|
runtime,
|
|
4572
4676
|
nativeBinding,
|
|
4677
|
+
localEmbeddingRuntime: resolveCliLocalEmbeddingRuntimeConfig(pathProvider.getAiDataDir()),
|
|
4573
4678
|
workerEntryUrl: import.meta.url.endsWith(".ts") ? void 0 : new URL("./semantic-index-worker.mjs", import.meta.url)
|
|
4574
4679
|
});
|
|
4575
4680
|
server.addHook("onClose", async () => semanticIndexService?.close());
|
|
@@ -4638,4 +4743,4 @@ export {
|
|
|
4638
4743
|
startHttpServer,
|
|
4639
4744
|
stopHttpServer
|
|
4640
4745
|
};
|
|
4641
|
-
//# sourceMappingURL=chunk-
|
|
4746
|
+
//# sourceMappingURL=chunk-MENKFEPC.mjs.map
|