chatlab-cli 0.30.2-beta.1 → 0.31.0
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-VBDMWOKL.mjs → chat-command-CHV7RLBH.mjs} +9 -8
- package/dist/{chat-command-VBDMWOKL.mjs.map → chat-command-CHV7RLBH.mjs.map} +1 -1
- package/dist/{chunk-326OCJOT.mjs → chunk-DA5T64RY.mjs} +2 -2
- package/dist/{chunk-M2PXDX4G.mjs → chunk-DBBL74RK.mjs} +31 -22
- package/dist/chunk-DBBL74RK.mjs.map +1 -0
- package/dist/{chunk-KBSAVUFV.mjs → chunk-EXD2SXWL.mjs} +89 -15
- package/dist/chunk-EXD2SXWL.mjs.map +1 -0
- package/dist/{chunk-D3DPCDII.mjs → chunk-JH5RAJT2.mjs} +83 -34
- package/dist/chunk-JH5RAJT2.mjs.map +1 -0
- package/dist/{chunk-5EE2EFPE.mjs → chunk-RD335EMA.mjs} +4 -4
- package/dist/{chunk-WV5GSRQM.mjs → chunk-RDCUGC24.mjs} +5 -15
- package/dist/chunk-RDCUGC24.mjs.map +1 -0
- package/dist/{chunk-TEX44HNL.mjs → chunk-SNCXU2QL.mjs} +5 -15
- package/dist/chunk-SNCXU2QL.mjs.map +1 -0
- package/dist/{chunk-36JGKW6K.mjs → chunk-T64GA5HP.mjs} +1134 -364
- package/dist/chunk-T64GA5HP.mjs.map +1 -0
- package/dist/{chunk-LVEJHB3X.mjs → chunk-UWWFOEGF.mjs} +494 -97
- package/dist/chunk-UWWFOEGF.mjs.map +1 -0
- package/dist/{chunk-ULNRUS55.mjs → chunk-WQCY45U2.mjs} +3 -3
- package/dist/chunk-YAQLYL52.mjs +14 -0
- package/dist/chunk-YAQLYL52.mjs.map +1 -0
- package/dist/{chunk-TCZHG3G7.mjs → chunk-YPQ72HMX.mjs} +2 -2
- package/dist/cli.mjs +8 -7
- package/dist/contacts-worker.mjs +2 -2
- package/dist/global-insight-worker.mjs +179 -0
- package/dist/global-insight-worker.mjs.map +1 -0
- package/dist/{http-L4AMELPZ.mjs → http-3B5ARN7A.mjs} +12 -11
- package/dist/{import-WWCSXGVS.mjs → import-2DZGNSEX.mjs} +10 -7
- package/dist/index.mjs +12 -11
- package/dist/{mcp-A4M3LT5O.mjs → mcp-44I6FUUQ.mjs} +12 -11
- package/dist/{mcp-A4M3LT5O.mjs.map → mcp-44I6FUUQ.mjs.map} +1 -1
- package/dist/people-relationships-worker.mjs +2 -2
- package/dist/semantic-index-worker.mjs +1 -1
- package/dist/{src-MPNBTFOE.mjs → src-R3QX6L3L.mjs} +26 -6
- package/dist/{stream-import-HIE7PNL4.mjs → stream-import-VUEL2TTU.mjs} +10 -7
- package/dist/{worker-runtime-BJXO24XX.mjs → worker-runtime-GJAOIIZW.mjs} +6 -5
- package/dist/{worker-runtime-BJXO24XX.mjs.map → worker-runtime-GJAOIIZW.mjs.map} +1 -1
- package/dist-web/assets/ActionToolsPanel-fAio70bI.css +1 -0
- package/dist-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-CdJT0t2f.js +110 -0
- package/dist-web/assets/{BufferResource-CYSOCeE0.js → BufferResource-BPGkshPa.js} +1 -1
- package/dist-web/assets/{CanvasRenderer-j7Z_ij_m.js → CanvasRenderer-DTKkZhq4.js} +1 -1
- package/dist-web/assets/{EChartWordcloud-Clg60FMo.js → EChartWordcloud-DU3ZYdgz.js} +1 -1
- package/dist-web/assets/{Filter-BgGyBeXz.js → Filter-CHXKzS2l.js} +1 -1
- package/dist-web/assets/{LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js → LoadingState.vue_vue_type_script_setup_true_lang-DACMroOe.js} +1 -1
- package/dist-web/assets/MessageExportModal-h-zl0dx1.js +1 -0
- package/dist-web/assets/PageHeader-CK0hTsdx.js +1 -0
- package/dist-web/assets/PageHeader-XIXMTomn.css +1 -0
- package/dist-web/assets/{RelationshipGalaxyCanvas-D2owKyDp.js → RelationshipGalaxyCanvas-Dwdy5flh.js} +3 -3
- package/dist-web/assets/{RelationshipGalaxyThreeCanvas-DfJ2x8y9.js → RelationshipGalaxyThreeCanvas-CtY4TGen.js} +1 -1
- package/dist-web/assets/{RenderTargetSystem-BQ__RbzR.js → RenderTargetSystem-BE56mKRG.js} +1 -1
- package/dist-web/assets/ThemeCard.vue_vue_type_script_setup_true_lang-BoZyssJF.js +1 -0
- package/dist-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-27hMyAUE.js +1 -0
- package/dist-web/assets/{WebGLRenderer-DuThUm1R.js → WebGLRenderer-Dm18dxOf.js} +1 -1
- package/dist-web/assets/{WebGPURenderer-d8BwTpxP.js → WebGPURenderer-BF6TF-is.js} +1 -1
- package/dist-web/assets/annual-summary-time-range-DVLXK1r4.js +1 -0
- package/dist-web/assets/base-CFPyD9Gy.js +1 -0
- package/dist-web/assets/{browserAll-t_tpJM2L.js → browserAll-Cn_CfkXl.js} +1 -1
- package/dist-web/assets/dateFormat-BcqNKTQ1.js +1 -0
- package/dist-web/assets/{electron-6T3FvCfK.js → electron-B6xOabTq.js} +1 -1
- package/dist-web/assets/electron-hcWiB7Gg.js +1 -0
- package/dist-web/assets/fetch-BPkgnY0R.js +1 -0
- package/dist-web/assets/{fetch-DFifsv8L.js → fetch-BRXmDI_2.js} +1 -1
- package/dist-web/assets/{fetch-BgeRLaoA.js → fetch-BUm1isWe.js} +1 -1
- package/dist-web/assets/{fetch-Y-LYZmiT.js → fetch-CBOJwwJp.js} +3 -3
- package/dist-web/assets/{fetch-C7rlHKE7.js → fetch-CEhUu1Yu.js} +1 -1
- package/dist-web/assets/fetch-C_EfVFJi.js +3 -0
- package/dist-web/assets/{fetch-BVM5kQ6-.js → fetch-DL_u25Ui.js} +1 -1
- package/dist-web/assets/{fetch-BLTlXcRA.js → fetch-DMLq3xPG.js} +1 -1
- package/dist-web/assets/{fetch-BgIWhYDV.js → fetch-DylpNKCR.js} +1 -1
- package/dist-web/assets/fetch-etgwVKIw.js +1 -0
- package/dist-web/assets/index-0x1QPzKZ.js +1 -0
- package/dist-web/assets/index-B5S9FnfP.js +1 -0
- package/dist-web/assets/index-BS6loLHW.js +1 -0
- package/dist-web/assets/index-BfO_LpDv.css +1 -0
- package/dist-web/assets/index-BrTlAl8b.js +1 -0
- package/dist-web/assets/index-ByUaiVQK.css +1 -0
- package/dist-web/assets/{index-BA87rT8F.js → index-C3TnydSt.js} +1 -1
- package/dist-web/assets/index-CAWO10k1.js +2 -0
- package/dist-web/assets/index-C_0GHEcb.css +1 -0
- package/dist-web/assets/index-Chm17wNe.js +2 -0
- package/dist-web/assets/index-DAr_2DlV.js +173 -0
- package/dist-web/assets/index-Em6upenM.js +64 -0
- package/dist-web/assets/index-FoTy2Cce.js +1 -0
- package/dist-web/assets/index-YADL4XIp.js +22 -0
- package/dist-web/assets/index-ZsZwPLWy.css +1 -0
- package/dist-web/assets/index-_6lck7Bv.css +1 -0
- package/dist-web/assets/index-aMIgqj43.js +1 -0
- package/dist-web/assets/index-y7cxH1Et.css +1 -0
- package/dist-web/assets/index-zZVsV5HB.js +1 -0
- package/dist-web/assets/{people-page-header-Mupn-U_b.js → people-page-header-BdKM1qhX.js} +1 -1
- package/dist-web/assets/types-CZnACqaB.js +1 -0
- package/dist-web/assets/{vendor-echarts-hJVnODyU.js → vendor-echarts-B-i_56Av.js} +1 -1
- package/dist-web/assets/{vendor-echarts-wordcloud-k5ih2Jl4.js → vendor-echarts-wordcloud-Ca8n6qS6.js} +1 -1
- package/dist-web/assets/{vendor-nuxt-ui-DaLxYaC4.js → vendor-nuxt-ui-CS1uxE9C.js} +2 -2
- package/dist-web/assets/{vendor-reka-ui-CzM4kDQ7.js → vendor-reka-ui-Cta6JPvN.js} +1 -1
- package/dist-web/assets/web-BUZ-dZy0.js +1 -0
- package/dist-web/assets/{webworkerAll-CoXPTsvw.js → webworkerAll-BKGP--A4.js} +1 -1
- package/dist-web/index.html +4 -4
- package/package.json +1 -1
- package/dist/chunk-36JGKW6K.mjs.map +0 -1
- package/dist/chunk-D3DPCDII.mjs.map +0 -1
- package/dist/chunk-KBSAVUFV.mjs.map +0 -1
- package/dist/chunk-LVEJHB3X.mjs.map +0 -1
- package/dist/chunk-M2PXDX4G.mjs.map +0 -1
- package/dist/chunk-TEX44HNL.mjs.map +0 -1
- package/dist/chunk-WV5GSRQM.mjs.map +0 -1
- package/dist-web/assets/DebugToolsPanel-D_lFIW6j.css +0 -1
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-Bk9RvIsW.js +0 -110
- package/dist-web/assets/MessageExportModal-BkEhC8s3.js +0 -1
- package/dist-web/assets/PageHeader-Bbn87QZS.css +0 -1
- package/dist-web/assets/PageHeader-CUwv2AFR.js +0 -1
- package/dist-web/assets/electron-D9vE5t3H.js +0 -1
- package/dist-web/assets/fetch-D0ccqGk_.js +0 -1
- package/dist-web/assets/fetch-DdoIAbX4.js +0 -1
- package/dist-web/assets/fetch-HpiZrx8C.js +0 -3
- package/dist-web/assets/index---rXG1hZ.css +0 -1
- package/dist-web/assets/index-B4l3rHie.css +0 -1
- package/dist-web/assets/index-B5YKZflT.js +0 -2
- package/dist-web/assets/index-C1p9CbmN.css +0 -1
- package/dist-web/assets/index-COpza1A4.css +0 -1
- package/dist-web/assets/index-CQsrsY5d.js +0 -64
- package/dist-web/assets/index-CdsKtFEJ.js +0 -22
- package/dist-web/assets/index-DosG7LmJ.css +0 -1
- package/dist-web/assets/index-DraLHiEK.js +0 -173
- package/dist-web/assets/index-IL5tkxhM.js +0 -2
- package/dist-web/assets/index-Tgk7RCvc.js +0 -1
- package/dist-web/assets/index-cyh3gOBe.js +0 -1
- package/dist-web/assets/index-g8yqhgfj.js +0 -1
- package/dist-web/assets/web-DAgXT8gQ.js +0 -1
- /package/dist/{chunk-326OCJOT.mjs.map → chunk-DA5T64RY.mjs.map} +0 -0
- /package/dist/{chunk-5EE2EFPE.mjs.map → chunk-RD335EMA.mjs.map} +0 -0
- /package/dist/{chunk-ULNRUS55.mjs.map → chunk-WQCY45U2.mjs.map} +0 -0
- /package/dist/{chunk-TCZHG3G7.mjs.map → chunk-YPQ72HMX.mjs.map} +0 -0
- /package/dist/{http-L4AMELPZ.mjs.map → http-3B5ARN7A.mjs.map} +0 -0
- /package/dist/{import-WWCSXGVS.mjs.map → import-2DZGNSEX.mjs.map} +0 -0
- /package/dist/{src-MPNBTFOE.mjs.map → src-R3QX6L3L.mjs.map} +0 -0
- /package/dist/{stream-import-HIE7PNL4.mjs.map → stream-import-VUEL2TTU.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/import/stream-import.ts"],"sourcesContent":["/**\n * Server/CLI streaming import — adapter for @openchatlab/node-runtime StreamingImporter.\n *\n * Replaces the old buffered-in-memory approach with the same high-performance\n * streaming pipeline used by Electron (batched transactions, deferred indexes,\n * nickname history, FTS, format fallback).\n */\n\nimport type { DatabaseManager } from '@openchatlab/node-runtime'\nimport {\n DataDirCompatibilityError,\n IMPORT_IN_PROGRESS_ERROR_KEY,\n ImportInProgressError,\n autoImportFile as sharedAutoImportFile,\n streamingImport,\n analyzeNewImport as sharedAnalyzeNewImport,\n analyzeIncrementalImport as sharedAnalyzeIncremental,\n incrementalImport as sharedIncrementalImport,\n withDataDirImportLock,\n} from '@openchatlab/node-runtime'\nimport type {\n StreamImportResult,\n StreamImportDeps,\n ImportProgressCallback,\n IncrementalImportResult,\n IncrementalAnalyzeResult,\n IncrementalImportDeps,\n ImportOptions,\n AnalyzeNewImportResult,\n AutoImportResult,\n} from '@openchatlab/node-runtime'\nimport {\n detectFormat as parserDetectFormat,\n detectAllFormats,\n getFormatFeatureById,\n getSupportedFormats as parserGetSupportedFormats,\n scanMultiChatFile as parserScanMultiChatFile,\n findEntryFileInDirectory,\n type FormatFeature,\n type MultiChatInfo,\n type ParseProgress,\n} from '@openchatlab/parser'\nimport * as crypto from 'crypto'\n\n// ==================== Legacy progress interface (for SSE routes) ====================\n\nexport interface StreamImportProgress {\n stage: 'detecting' | 'parsing' | 'saving' | 'indexing' | 'done' | 'error'\n progress: number\n message: string\n bytesRead?: number\n totalBytes?: number\n messagesProcessed?: number\n}\n\nexport interface StreamImportOptions {\n formatId?: string\n chatIndex?: number\n nativeBinding?: string\n onProgress?: (progress: StreamImportProgress) => void\n /** Fix the target session ID instead of auto-generating one. Used by sync/pull adapters. */\n sessionId?: string\n}\n\nfunction generateSessionId(): string {\n const ts = Date.now()\n const rand = crypto.randomBytes(4).toString('hex')\n return `chat_${ts}_${rand}`\n}\n\nfunction buildStreamImportDeps(dbManager: DatabaseManager, onProgress?: ImportProgressCallback): StreamImportDeps {\n return {\n openDatabase(sessionId: string) {\n return dbManager.openRawSessionDatabase(sessionId, { create: true, initializeChatTables: true })\n },\n deleteDatabase(sessionId: string) {\n dbManager.deleteSessionDatabaseFiles(sessionId)\n },\n onProgress: onProgress ?? (() => {}),\n generateSessionId,\n }\n}\n\nfunction createProgressAdapter(onProgress?: (progress: StreamImportProgress) => void): ImportProgressCallback {\n if (!onProgress) return () => {}\n return (progress) => {\n let stage: StreamImportProgress['stage'] = 'parsing'\n let pct = 0\n switch (progress.stage) {\n case 'detecting':\n stage = 'detecting'\n pct = 5\n break\n case 'parsing':\n stage = 'parsing'\n pct = Math.min(Math.round(progress.percentage * 0.7), 70)\n break\n case 'saving':\n stage = 'saving'\n pct = 80\n break\n case 'indexing':\n stage = 'indexing'\n pct = 90\n break\n case 'done':\n stage = 'done'\n pct = 100\n break\n case 'error':\n stage = 'error'\n pct = 0\n break\n }\n onProgress({\n stage,\n progress: pct,\n message: progress.message || '',\n bytesRead: progress.bytesRead,\n totalBytes: progress.totalBytes,\n messagesProcessed: progress.messagesProcessed,\n })\n }\n}\n\nfunction deleteSessionDatabase(dbManager: DatabaseManager, sessionId: string): void {\n dbManager.deleteSessionDatabaseFiles(sessionId)\n}\n\n/**\n * High-performance streaming import: parse a file and write to DB\n * with batched transactions, deferred indexes, and FTS.\n */\nasync function streamImportUnlocked(\n dbManager: DatabaseManager,\n filePath: string,\n options?: StreamImportOptions\n): Promise<StreamImportResult> {\n const { formatId, chatIndex, onProgress, sessionId } = options || {}\n\n const formatOptions: Record<string, unknown> = {}\n if (formatId) formatOptions.formatId = formatId\n if (chatIndex !== undefined) formatOptions.chatIndex = chatIndex\n\n const progressAdapter = createProgressAdapter(onProgress)\n\n const deps = buildStreamImportDeps(dbManager, progressAdapter)\n const result = await streamingImport(filePath, deps, formatOptions, sessionId)\n if (!result.success || !result.sessionId) return result\n\n try {\n dbManager.raiseCurrentChatDbCompatibilityGate()\n } catch (error) {\n deleteSessionDatabase(dbManager, result.sessionId)\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n diagnostics: result.diagnostics,\n }\n }\n\n return result\n}\n\nexport async function streamImport(\n dbManager: DatabaseManager,\n filePath: string,\n options?: StreamImportOptions\n): Promise<StreamImportResult> {\n try {\n return await withDataDirImportLock(dbManager.getUserDataDir(), () =>\n streamImportUnlocked(dbManager, filePath, options)\n )\n } catch (error) {\n if (error instanceof ImportInProgressError) {\n return { success: false, error: IMPORT_IN_PROGRESS_ERROR_KEY }\n }\n throw error\n }\n}\n\nexport async function autoImport(\n dbManager: DatabaseManager,\n filePath: string,\n options?: StreamImportOptions\n): Promise<AutoImportResult> {\n const { formatId, chatIndex, onProgress, sessionId } = options ?? {}\n const formatOptions: Record<string, unknown> = {}\n if (formatId) formatOptions.formatId = formatId\n if (chatIndex !== undefined) formatOptions.chatIndex = chatIndex\n const progressAdapter = createProgressAdapter(onProgress)\n\n try {\n return await withDataDirImportLock(dbManager.getUserDataDir(), () =>\n sharedAutoImportFile(\n filePath,\n {\n listSessionIds: () => dbManager.listSessionIds(),\n openReadonly: (candidateSessionId) =>\n dbManager.openRawSessionDatabase(candidateSessionId, { readonly: true }),\n onProgress: progressAdapter,\n sessionExists: (candidateSessionId) => dbManager.listSessionIds().includes(candidateSessionId),\n createSession: (sourcePath, sourceFormatOptions, explicitSessionId) =>\n streamImportUnlocked(dbManager, sourcePath, {\n ...options,\n ...sourceFormatOptions,\n sessionId: explicitSessionId,\n }),\n appendSession: (targetSessionId, sourcePath, sourceFormatOptions) =>\n incrementalImportUnlocked(dbManager, targetSessionId, sourcePath, {\n ...sourceFormatOptions,\n onProgress: progressAdapter,\n }),\n },\n {\n explicitSessionId: sessionId,\n formatOptions,\n }\n )\n )\n } catch (error) {\n if (error instanceof ImportInProgressError) {\n return { success: false, error: IMPORT_IN_PROGRESS_ERROR_KEY }\n }\n throw error\n }\n}\n\n// ==================== Incremental import ====================\n\nfunction buildIncrementalDeps(\n dbManager: DatabaseManager,\n onProgress?: ImportProgressCallback,\n onCompatibilityError?: (error: DataDirCompatibilityError) => void\n): IncrementalImportDeps {\n return {\n openDatabase(sessionId: string, readonly?: boolean) {\n try {\n return dbManager.openRawSessionDatabase(sessionId, { readonly: readonly ?? false })\n } catch (error) {\n if (error instanceof DataDirCompatibilityError) onCompatibilityError?.(error)\n throw error\n }\n },\n onProgress: onProgress ?? (() => {}),\n }\n}\n\nasync function incrementalImportUnlocked(\n dbManager: DatabaseManager,\n sessionId: string,\n filePath: string,\n options?: ImportOptions & { onProgress?: ImportProgressCallback }\n): Promise<IncrementalImportResult> {\n const { onProgress, ...importOpts } = options || {}\n let compatibilityError: DataDirCompatibilityError | null = null\n const result = await sharedIncrementalImport(\n sessionId,\n filePath,\n buildIncrementalDeps(dbManager, onProgress, (error) => {\n compatibilityError = error\n }),\n importOpts\n )\n if (compatibilityError) throw compatibilityError\n if (!result.success) return result\n\n try {\n dbManager.raiseCurrentChatDbCompatibilityGate()\n } catch (error) {\n return {\n ...result,\n success: false,\n newMessageCount: 0,\n error: error instanceof Error ? error.message : String(error),\n }\n }\n\n return result\n}\n\nexport async function incrementalImport(\n dbManager: DatabaseManager,\n sessionId: string,\n filePath: string,\n options?: ImportOptions & { onProgress?: ImportProgressCallback }\n): Promise<IncrementalImportResult> {\n try {\n return await withDataDirImportLock(dbManager.getUserDataDir(), () =>\n incrementalImportUnlocked(dbManager, sessionId, filePath, options)\n )\n } catch (error) {\n if (error instanceof ImportInProgressError) {\n return { success: false, newMessageCount: 0, error: IMPORT_IN_PROGRESS_ERROR_KEY }\n }\n throw error\n }\n}\n\nexport async function analyzeIncrementalImport(\n dbManager: DatabaseManager,\n sessionId: string,\n filePath: string,\n onProgress?: ImportProgressCallback\n): Promise<IncrementalAnalyzeResult> {\n let compatibilityError: DataDirCompatibilityError | null = null\n const result = await sharedAnalyzeIncremental(\n sessionId,\n filePath,\n buildIncrementalDeps(dbManager, onProgress, (error) => {\n compatibilityError = error\n })\n )\n if (compatibilityError) throw compatibilityError\n return result\n}\n\nexport async function analyzeNewImport(\n filePath: string,\n onProgress?: ImportProgressCallback\n): Promise<AnalyzeNewImportResult> {\n return sharedAnalyzeNewImport(filePath, onProgress ?? (() => {}))\n}\n\n// ==================== Re-exports from parser ====================\n\nexport {\n parserDetectFormat as detectFormat,\n detectAllFormats,\n getFormatFeatureById,\n parserGetSupportedFormats as getSupportedFormats,\n parserScanMultiChatFile as scanMultiChatFile,\n findEntryFileInDirectory,\n}\nexport type { FormatFeature, MultiChatInfo, ParseProgress }\nexport type {\n StreamImportResult,\n IncrementalImportResult,\n IncrementalAnalyzeResult,\n AnalyzeNewImportResult,\n ImportOptions,\n AutoImportResult,\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0CA,YAAY,YAAY;AAsBxB,SAAS,oBAA4B;AACnC,QAAM,KAAK,KAAK,IAAI;AACpB,QAAM,OAAc,mBAAY,CAAC,EAAE,SAAS,KAAK;AACjD,SAAO,QAAQ,EAAE,IAAI,IAAI;AAC3B;AAEA,SAAS,sBAAsB,WAA4B,YAAuD;AAChH,SAAO;AAAA,IACL,aAAa,WAAmB;AAC9B,aAAO,UAAU,uBAAuB,WAAW,EAAE,QAAQ,MAAM,sBAAsB,KAAK,CAAC;AAAA,IACjG;AAAA,IACA,eAAe,WAAmB;AAChC,gBAAU,2BAA2B,SAAS;AAAA,IAChD;AAAA,IACA,YAAY,eAAe,MAAM;AAAA,IAAC;AAAA,IAClC;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB,YAA+E;AAC5G,MAAI,CAAC,WAAY,QAAO,MAAM;AAAA,EAAC;AAC/B,SAAO,CAAC,aAAa;AACnB,QAAI,QAAuC;AAC3C,QAAI,MAAM;AACV,YAAQ,SAAS,OAAO;AAAA,MACtB,KAAK;AACH,gBAAQ;AACR,cAAM;AACN;AAAA,MACF,KAAK;AACH,gBAAQ;AACR,cAAM,KAAK,IAAI,KAAK,MAAM,SAAS,aAAa,GAAG,GAAG,EAAE;AACxD;AAAA,MACF,KAAK;AACH,gBAAQ;AACR,cAAM;AACN;AAAA,MACF,KAAK;AACH,gBAAQ;AACR,cAAM;AACN;AAAA,MACF,KAAK;AACH,gBAAQ;AACR,cAAM;AACN;AAAA,MACF,KAAK;AACH,gBAAQ;AACR,cAAM;AACN;AAAA,IACJ;AACA,eAAW;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS,SAAS,WAAW;AAAA,MAC7B,WAAW,SAAS;AAAA,MACpB,YAAY,SAAS;AAAA,MACrB,mBAAmB,SAAS;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;AAEA,SAAS,sBAAsB,WAA4B,WAAyB;AAClF,YAAU,2BAA2B,SAAS;AAChD;AAMA,eAAe,qBACb,WACA,UACA,SAC6B;AAC7B,QAAM,EAAE,UAAU,WAAW,YAAY,UAAU,IAAI,WAAW,CAAC;AAEnE,QAAM,gBAAyC,CAAC;AAChD,MAAI,SAAU,eAAc,WAAW;AACvC,MAAI,cAAc,OAAW,eAAc,YAAY;AAEvD,QAAM,kBAAkB,sBAAsB,UAAU;AAExD,QAAM,OAAO,sBAAsB,WAAW,eAAe;AAC7D,QAAM,SAAS,MAAM,gBAAgB,UAAU,MAAM,eAAe,SAAS;AAC7E,MAAI,CAAC,OAAO,WAAW,CAAC,OAAO,UAAW,QAAO;AAEjD,MAAI;AACF,cAAU,oCAAoC;AAAA,EAChD,SAAS,OAAO;AACd,0BAAsB,WAAW,OAAO,SAAS;AACjD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC5D,aAAa,OAAO;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAsB,aACpB,WACA,UACA,SAC6B;AAC7B,MAAI;AACF,WAAO,MAAM;AAAA,MAAsB,UAAU,eAAe;AAAA,MAAG,MAC7D,qBAAqB,WAAW,UAAU,OAAO;AAAA,IACnD;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,uBAAuB;AAC1C,aAAO,EAAE,SAAS,OAAO,OAAO,6BAA6B;AAAA,IAC/D;AACA,UAAM;AAAA,EACR;AACF;AAEA,eAAsB,WACpB,WACA,UACA,SAC2B;AAC3B,QAAM,EAAE,UAAU,WAAW,YAAY,UAAU,IAAI,WAAW,CAAC;AACnE,QAAM,gBAAyC,CAAC;AAChD,MAAI,SAAU,eAAc,WAAW;AACvC,MAAI,cAAc,OAAW,eAAc,YAAY;AACvD,QAAM,kBAAkB,sBAAsB,UAAU;AAExD,MAAI;AACF,WAAO,MAAM;AAAA,MAAsB,UAAU,eAAe;AAAA,MAAG,MAC7D;AAAA,QACE;AAAA,QACA;AAAA,UACE,gBAAgB,MAAM,UAAU,eAAe;AAAA,UAC/C,cAAc,CAAC,uBACb,UAAU,uBAAuB,oBAAoB,EAAE,UAAU,KAAK,CAAC;AAAA,UACzE,YAAY;AAAA,UACZ,eAAe,CAAC,uBAAuB,UAAU,eAAe,EAAE,SAAS,kBAAkB;AAAA,UAC7F,eAAe,CAAC,YAAY,qBAAqB,sBAC/C,qBAAqB,WAAW,YAAY;AAAA,YAC1C,GAAG;AAAA,YACH,GAAG;AAAA,YACH,WAAW;AAAA,UACb,CAAC;AAAA,UACH,eAAe,CAAC,iBAAiB,YAAY,wBAC3C,0BAA0B,WAAW,iBAAiB,YAAY;AAAA,YAChE,GAAG;AAAA,YACH,YAAY;AAAA,UACd,CAAC;AAAA,QACL;AAAA,QACA;AAAA,UACE,mBAAmB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,uBAAuB;AAC1C,aAAO,EAAE,SAAS,OAAO,OAAO,6BAA6B;AAAA,IAC/D;AACA,UAAM;AAAA,EACR;AACF;AAIA,SAAS,qBACP,WACA,YACA,sBACuB;AACvB,SAAO;AAAA,IACL,aAAa,WAAmB,UAAoB;AAClD,UAAI;AACF,eAAO,UAAU,uBAAuB,WAAW,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,MACpF,SAAS,OAAO;AACd,YAAI,iBAAiB,0BAA2B,wBAAuB,KAAK;AAC5E,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,YAAY,eAAe,MAAM;AAAA,IAAC;AAAA,EACpC;AACF;AAEA,eAAe,0BACb,WACA,WACA,UACA,SACkC;AAClC,QAAM,EAAE,YAAY,GAAG,WAAW,IAAI,WAAW,CAAC;AAClD,MAAI,qBAAuD;AAC3D,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,IACA,qBAAqB,WAAW,YAAY,CAAC,UAAU;AACrD,2BAAqB;AAAA,IACvB,CAAC;AAAA,IACD;AAAA,EACF;AACA,MAAI,mBAAoB,OAAM;AAC9B,MAAI,CAAC,OAAO,QAAS,QAAO;AAE5B,MAAI;AACF,cAAU,oCAAoC;AAAA,EAChD,SAAS,OAAO;AACd,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAsBA,mBACpB,WACA,WACA,UACA,SACkC;AAClC,MAAI;AACF,WAAO,MAAM;AAAA,MAAsB,UAAU,eAAe;AAAA,MAAG,MAC7D,0BAA0B,WAAW,WAAW,UAAU,OAAO;AAAA,IACnE;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,uBAAuB;AAC1C,aAAO,EAAE,SAAS,OAAO,iBAAiB,GAAG,OAAO,6BAA6B;AAAA,IACnF;AACA,UAAM;AAAA,EACR;AACF;AAEA,eAAsBC,0BACpB,WACA,WACA,UACA,YACmC;AACnC,MAAI,qBAAuD;AAC3D,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,IACA,qBAAqB,WAAW,YAAY,CAAC,UAAU;AACrD,2BAAqB;AAAA,IACvB,CAAC;AAAA,EACH;AACA,MAAI,mBAAoB,OAAM;AAC9B,SAAO;AACT;AAEA,eAAsBC,kBACpB,UACA,YACiC;AACjC,SAAO,iBAAuB,UAAU,eAAe,MAAM;AAAA,EAAC,EAAE;AAClE;","names":["incrementalImport","analyzeIncrementalImport","analyzeNewImport"]}
|
|
@@ -7,28 +7,26 @@ const __dirname = __pathDirname(__filename);
|
|
|
7
7
|
import {
|
|
8
8
|
analyzeIncrementalImport,
|
|
9
9
|
analyzeNewImport,
|
|
10
|
+
autoImport,
|
|
10
11
|
incrementalImport,
|
|
11
12
|
streamImport
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-EXD2SXWL.mjs";
|
|
13
14
|
import {
|
|
14
15
|
closeServerAiLogger,
|
|
15
16
|
createCliRunAgentStream,
|
|
16
17
|
getServerAiLogger,
|
|
17
18
|
initServerAiLogger
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-RD335EMA.mjs";
|
|
19
20
|
import {
|
|
20
21
|
AGENT_TOOL_REGISTRY,
|
|
21
22
|
CoreDataProvider
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-YPQ72HMX.mjs";
|
|
23
24
|
import {
|
|
24
25
|
assertCliDataDirCompatible
|
|
25
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-DA5T64RY.mjs";
|
|
26
27
|
import {
|
|
27
28
|
getVersion
|
|
28
29
|
} from "./chunk-5ADKYYNA.mjs";
|
|
29
|
-
import {
|
|
30
|
-
resolveCliPath
|
|
31
|
-
} from "./chunk-FJ35V3TE.mjs";
|
|
32
30
|
import {
|
|
33
31
|
AnalyticsService,
|
|
34
32
|
NodePathProvider,
|
|
@@ -43,7 +41,7 @@ import {
|
|
|
43
41
|
getPendingNodeDataDirMigration,
|
|
44
42
|
hasPendingElectronDataWarning,
|
|
45
43
|
serializeChatLabToJsonl
|
|
46
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-WQCY45U2.mjs";
|
|
47
45
|
import {
|
|
48
46
|
AIChatManager,
|
|
49
47
|
ArchiveImportError,
|
|
@@ -51,6 +49,8 @@ import {
|
|
|
51
49
|
AssistantManager,
|
|
52
50
|
CustomModelStore,
|
|
53
51
|
CustomProviderStore,
|
|
52
|
+
IMPORT_IN_PROGRESS_ERROR_KEY,
|
|
53
|
+
ImportInProgressError,
|
|
54
54
|
LLMConfigStore,
|
|
55
55
|
MergeSessionCache,
|
|
56
56
|
SEMANTIC_INDEX_CONFIG_FILE,
|
|
@@ -61,6 +61,7 @@ import {
|
|
|
61
61
|
computeWordFrequency,
|
|
62
62
|
countMessagesTokens,
|
|
63
63
|
createContactsService,
|
|
64
|
+
createGlobalInsightService,
|
|
64
65
|
createPeopleRelationshipsService,
|
|
65
66
|
deleteDict,
|
|
66
67
|
detectAllFormats,
|
|
@@ -91,7 +92,10 @@ import {
|
|
|
91
92
|
streamParseFileInfo,
|
|
92
93
|
summary_service_exports,
|
|
93
94
|
validateApiKey
|
|
94
|
-
} from "./chunk-
|
|
95
|
+
} from "./chunk-T64GA5HP.mjs";
|
|
96
|
+
import {
|
|
97
|
+
resolveCliPath
|
|
98
|
+
} from "./chunk-FJ35V3TE.mjs";
|
|
95
99
|
import {
|
|
96
100
|
ALL_MIGRATIONS,
|
|
97
101
|
BUILTIN_MODELS,
|
|
@@ -154,7 +158,7 @@ import {
|
|
|
154
158
|
verifyCliDataPath,
|
|
155
159
|
writeAuthProfile,
|
|
156
160
|
writeConfigField
|
|
157
|
-
} from "./chunk-
|
|
161
|
+
} from "./chunk-UWWFOEGF.mjs";
|
|
158
162
|
|
|
159
163
|
// src/http/index.ts
|
|
160
164
|
import * as fs12 from "fs";
|
|
@@ -220,6 +224,7 @@ function dataDirIncompatible(message) {
|
|
|
220
224
|
}
|
|
221
225
|
function apiErrorFromUnknown(error) {
|
|
222
226
|
if (error instanceof ApiError) return error;
|
|
227
|
+
if (error instanceof ImportInProgressError) return importInProgress();
|
|
223
228
|
if (error instanceof DataDirCompatibilityError) return dataDirIncompatible(error.message);
|
|
224
229
|
return null;
|
|
225
230
|
}
|
|
@@ -748,6 +753,43 @@ function parsePeopleRelationshipsGraphScope(value) {
|
|
|
748
753
|
return value === "close" || value === "friends" ? value : "panorama";
|
|
749
754
|
}
|
|
750
755
|
|
|
756
|
+
// ../../packages/http-routes/src/routes/web/global-insight.ts
|
|
757
|
+
function registerGlobalInsightRoutes(server2, ctx) {
|
|
758
|
+
const service = ctx.globalInsightService ?? createGlobalInsightService({
|
|
759
|
+
adapter: ctx.sessionAdapter,
|
|
760
|
+
pathProvider: ctx.pathProvider,
|
|
761
|
+
runtimeIdentity: ctx.runtimeIdentity,
|
|
762
|
+
nativeBinding: ctx.nativeBinding
|
|
763
|
+
});
|
|
764
|
+
server2.addHook("onClose", async () => service.close());
|
|
765
|
+
server2.get("/_web/global-insight/annual-summary", async (request) => {
|
|
766
|
+
return service.getAnnualSummary({
|
|
767
|
+
...parseRange(request.query),
|
|
768
|
+
acceptStale: isTruthy3(request.query.acceptStale)
|
|
769
|
+
});
|
|
770
|
+
});
|
|
771
|
+
server2.post(
|
|
772
|
+
"/_web/global-insight/annual-summary/recompute",
|
|
773
|
+
async (request) => service.startRecompute(parseRange(request.query))
|
|
774
|
+
);
|
|
775
|
+
}
|
|
776
|
+
function parseRange(query) {
|
|
777
|
+
const mode = query.mode === "recent" ? "recent" : "year";
|
|
778
|
+
return {
|
|
779
|
+
mode,
|
|
780
|
+
year: parseInteger(query.year),
|
|
781
|
+
days: query.days === "365" ? 365 : void 0
|
|
782
|
+
};
|
|
783
|
+
}
|
|
784
|
+
function parseInteger(value) {
|
|
785
|
+
if (!value) return void 0;
|
|
786
|
+
const parsed = Number(value);
|
|
787
|
+
return Number.isInteger(parsed) ? parsed : void 0;
|
|
788
|
+
}
|
|
789
|
+
function isTruthy3(value) {
|
|
790
|
+
return value === "1" || value === "true" || value === "yes";
|
|
791
|
+
}
|
|
792
|
+
|
|
751
793
|
// ../../packages/http-routes/src/routes/web/preferences.ts
|
|
752
794
|
function registerPreferencesRoutes(server2, ctx) {
|
|
753
795
|
const prefManager = ctx.preferencesManager ?? new PreferencesManager(ctx.pathProvider.getSystemDir());
|
|
@@ -2416,6 +2458,7 @@ function registerSharedRoutes(server2, ctx, options) {
|
|
|
2416
2458
|
registerMemberRoutes(server2, resolvedCtx);
|
|
2417
2459
|
registerContactsRoutes(server2, resolvedCtx);
|
|
2418
2460
|
registerPeopleRelationshipsRoutes(server2, resolvedCtx);
|
|
2461
|
+
registerGlobalInsightRoutes(server2, resolvedCtx);
|
|
2419
2462
|
registerPreferencesRoutes(server2, resolvedCtx);
|
|
2420
2463
|
registerAnalyticsRoutes(server2, resolvedCtx);
|
|
2421
2464
|
registerSqlRoutes(server2, resolvedCtx);
|
|
@@ -2710,19 +2753,14 @@ function registerImportRoutes2(server2, dbManager2, options = {}) {
|
|
|
2710
2753
|
const sourceManager = options.sourceManager ?? new ArchiveImportSourceManager({
|
|
2711
2754
|
tempRoot: fs7.mkdtempSync(path8.join(os2.tmpdir(), "chatlab-import-sources-"))
|
|
2712
2755
|
});
|
|
2756
|
+
const runAutoImport = options.runAutoImport ?? autoImport.bind(null, dbManager2);
|
|
2713
2757
|
const runPreparedImport = options.runPreparedImport ?? (async (manifestPath, onProgress) => {
|
|
2714
|
-
const result = await
|
|
2758
|
+
const result = await runAutoImport(manifestPath, {
|
|
2715
2759
|
formatId: "google-chat-takeout",
|
|
2716
2760
|
nativeBinding: resolveNativeBinding(),
|
|
2717
2761
|
onProgress
|
|
2718
2762
|
});
|
|
2719
|
-
return
|
|
2720
|
-
success: result.success,
|
|
2721
|
-
sessionId: result.sessionId,
|
|
2722
|
-
error: result.error,
|
|
2723
|
-
messageCount: result.diagnostics?.messagesWritten ?? 0,
|
|
2724
|
-
memberCount: 0
|
|
2725
|
-
};
|
|
2763
|
+
return result;
|
|
2726
2764
|
});
|
|
2727
2765
|
server2.addHook("onClose", async () => {
|
|
2728
2766
|
await sourceManager.close();
|
|
@@ -2857,19 +2895,14 @@ data: ${JSON.stringify(eventData)}
|
|
|
2857
2895
|
}
|
|
2858
2896
|
try {
|
|
2859
2897
|
const nativeBinding = resolveNativeBinding();
|
|
2860
|
-
const result = await
|
|
2898
|
+
const result = await runAutoImport(tmpPath, {
|
|
2861
2899
|
formatId,
|
|
2862
2900
|
chatIndex,
|
|
2863
2901
|
nativeBinding,
|
|
2864
2902
|
onProgress: (p) => sendEvent("progress", p)
|
|
2865
2903
|
});
|
|
2866
2904
|
if (result.success) {
|
|
2867
|
-
sendEvent("done",
|
|
2868
|
-
success: true,
|
|
2869
|
-
sessionId: result.sessionId,
|
|
2870
|
-
messageCount: result.diagnostics?.messagesWritten ?? 0,
|
|
2871
|
-
memberCount: 0
|
|
2872
|
-
});
|
|
2905
|
+
sendEvent("done", result);
|
|
2873
2906
|
} else {
|
|
2874
2907
|
sendEvent("error", { success: false, error: result.error });
|
|
2875
2908
|
}
|
|
@@ -2926,17 +2959,12 @@ data: ${JSON.stringify(eventData)}
|
|
|
2926
2959
|
Connection: "keep-alive"
|
|
2927
2960
|
});
|
|
2928
2961
|
const nativeBinding = resolveNativeBinding();
|
|
2929
|
-
const result = await
|
|
2962
|
+
const result = await runAutoImport(entryPath, {
|
|
2930
2963
|
nativeBinding,
|
|
2931
2964
|
onProgress: (p) => sendEvent2("progress", p)
|
|
2932
2965
|
});
|
|
2933
2966
|
if (result.success) {
|
|
2934
|
-
sendEvent2("done",
|
|
2935
|
-
success: true,
|
|
2936
|
-
sessionId: result.sessionId,
|
|
2937
|
-
messageCount: result.diagnostics?.messagesWritten ?? 0,
|
|
2938
|
-
memberCount: 0
|
|
2939
|
-
});
|
|
2967
|
+
sendEvent2("done", result);
|
|
2940
2968
|
} else {
|
|
2941
2969
|
sendEvent2("error", { success: false, error: result.error });
|
|
2942
2970
|
}
|
|
@@ -3157,8 +3185,13 @@ function registerWebRoutes(server2, dbManager2, options) {
|
|
|
3157
3185
|
const resolvedPathProvider = options?.pathProvider ?? fallbackPathProvider;
|
|
3158
3186
|
const ai = options?.aiContext;
|
|
3159
3187
|
const cliStreamImport = async (dm, filePath) => {
|
|
3160
|
-
const { streamImport: streamImport2 } = await import("./stream-import-
|
|
3188
|
+
const { streamImport: streamImport2 } = await import("./stream-import-VUEL2TTU.mjs");
|
|
3161
3189
|
const result = await streamImport2(dm, filePath);
|
|
3190
|
+
if (!result.success) {
|
|
3191
|
+
const { IMPORT_IN_PROGRESS_ERROR_KEY: IMPORT_IN_PROGRESS_ERROR_KEY2, ImportInProgressError: ImportInProgressError2 } = await import("./src-R3QX6L3L.mjs");
|
|
3192
|
+
if (result.error === IMPORT_IN_PROGRESS_ERROR_KEY2) throw new ImportInProgressError2();
|
|
3193
|
+
throw new Error(result.error || "Import failed");
|
|
3194
|
+
}
|
|
3162
3195
|
if (!result.sessionId) throw new Error("Import succeeded but no sessionId returned");
|
|
3163
3196
|
return { sessionId: result.sessionId };
|
|
3164
3197
|
};
|
|
@@ -3652,6 +3685,12 @@ var PullEngine = class {
|
|
|
3652
3685
|
const externalId = deriveLocalSessionId(baseUrl, sess.remoteSessionId);
|
|
3653
3686
|
return this.importer.importFile(tempFile, targetId || void 0, externalId);
|
|
3654
3687
|
}
|
|
3688
|
+
deferRetryableImport(sess, error) {
|
|
3689
|
+
const errMsg = error || "Import deferred";
|
|
3690
|
+
this.logger.info(`[Pull] Deferring "${sess.name}": ${errMsg}`);
|
|
3691
|
+
this.markProgressDone(sess.id);
|
|
3692
|
+
return { success: false, newMessageCount: 0, error: errMsg };
|
|
3693
|
+
}
|
|
3655
3694
|
async executePullSession(sourceId, ds, sess) {
|
|
3656
3695
|
const currentDs = this.dsManager.get(sourceId);
|
|
3657
3696
|
if (!currentDs || !currentDs.sessions.some((s) => s.id === sess.id)) {
|
|
@@ -3737,6 +3776,7 @@ var PullEngine = class {
|
|
|
3737
3776
|
return { success: false, newMessageCount: 0, error: errMsg };
|
|
3738
3777
|
}
|
|
3739
3778
|
if (!retryResult.success) {
|
|
3779
|
+
if (retryResult.retryable) return this.deferRetryableImport(sess, retryResult.error);
|
|
3740
3780
|
const errMsg = retryResult.error || "Import failed";
|
|
3741
3781
|
this.dsManager.updateSession(sourceId, sess.id, {
|
|
3742
3782
|
lastPullAt: Math.floor(Date.now() / 1e3),
|
|
@@ -3809,6 +3849,7 @@ var PullEngine = class {
|
|
|
3809
3849
|
return { success: false, newMessageCount: 0, error: errMsg };
|
|
3810
3850
|
}
|
|
3811
3851
|
if (!result.success) {
|
|
3852
|
+
if (result.retryable) return this.deferRetryableImport(sess, result.error);
|
|
3812
3853
|
const errMsg = result.error || "Import failed";
|
|
3813
3854
|
this.dsManager.updateSession(sourceId, sess.id, {
|
|
3814
3855
|
lastPullAt: Math.floor(Date.now() / 1e3),
|
|
@@ -4132,6 +4173,10 @@ var DirectImporter = class {
|
|
|
4132
4173
|
if (result.error === "error.session_not_found" || result.error?.includes("no such table")) {
|
|
4133
4174
|
return { success: false, newMessageCount: 0, sessionId, needFullResync: true };
|
|
4134
4175
|
}
|
|
4176
|
+
if (result.error === IMPORT_IN_PROGRESS_ERROR_KEY) {
|
|
4177
|
+
this.logger.info(`[DirectImporter] Incremental import deferred: another import is in progress`);
|
|
4178
|
+
return { success: false, newMessageCount: 0, sessionId, error: result.error, retryable: true };
|
|
4179
|
+
}
|
|
4135
4180
|
return { success: false, newMessageCount: 0, sessionId, error: result.error };
|
|
4136
4181
|
} catch (err) {
|
|
4137
4182
|
this.logger.error(`[DirectImporter] Incremental import failed`, err);
|
|
@@ -4146,6 +4191,10 @@ var DirectImporter = class {
|
|
|
4146
4191
|
this.logger.info(`[DirectImporter] Full import OK: +${newMessageCount} messages`);
|
|
4147
4192
|
return { success: true, newMessageCount, sessionId: result.sessionId ?? externalId };
|
|
4148
4193
|
}
|
|
4194
|
+
if (result.error === IMPORT_IN_PROGRESS_ERROR_KEY) {
|
|
4195
|
+
this.logger.info(`[DirectImporter] Full import deferred: another import is in progress`);
|
|
4196
|
+
return { success: false, newMessageCount: 0, error: result.error, retryable: true };
|
|
4197
|
+
}
|
|
4149
4198
|
return { success: false, newMessageCount: 0, error: result.error };
|
|
4150
4199
|
} catch (err) {
|
|
4151
4200
|
this.logger.error(`[DirectImporter] Full import failed`, err);
|
|
@@ -4383,4 +4432,4 @@ export {
|
|
|
4383
4432
|
startHttpServer,
|
|
4384
4433
|
stopHttpServer
|
|
4385
4434
|
};
|
|
4386
|
-
//# sourceMappingURL=chunk-
|
|
4435
|
+
//# sourceMappingURL=chunk-JH5RAJT2.mjs.map
|