chatlab-cli 0.34.0 → 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.
Files changed (125) hide show
  1. package/dist/{chat-command-XPY3WURC.mjs → chat-command-6IOH2QRF.mjs} +9 -9
  2. package/dist/{chunk-S5NCEESV.mjs → chunk-2XCNTG4O.mjs} +403 -76
  3. package/dist/chunk-2XCNTG4O.mjs.map +1 -0
  4. package/dist/{chunk-AQPDZAWB.mjs → chunk-4LW6443F.mjs} +1802 -712
  5. package/dist/chunk-4LW6443F.mjs.map +1 -0
  6. package/dist/{chunk-ISRLGLUL.mjs → chunk-4RLZFGO5.mjs} +2 -2
  7. package/dist/{chunk-IGEHMLHM.mjs → chunk-52P5ZRBD.mjs} +2 -2
  8. package/dist/{chunk-JTOHAMIW.mjs → chunk-652KEAX3.mjs} +2 -2
  9. package/dist/{chunk-DGF3S3TZ.mjs → chunk-72RWABYJ.mjs} +15 -9
  10. package/dist/chunk-72RWABYJ.mjs.map +1 -0
  11. package/dist/{chunk-JCSPDTZL.mjs → chunk-H6D4DZOC.mjs} +4 -4
  12. package/dist/{chunk-OLE2USEN.mjs → chunk-INBJ7SND.mjs} +53 -26
  13. package/dist/chunk-INBJ7SND.mjs.map +1 -0
  14. package/dist/{chunk-IGK6UMN2.mjs → chunk-JX6MFS6F.mjs} +43 -23
  15. package/dist/chunk-JX6MFS6F.mjs.map +1 -0
  16. package/dist/{chunk-UO2XVFY6.mjs → chunk-MENKFEPC.mjs} +147 -73
  17. package/dist/chunk-MENKFEPC.mjs.map +1 -0
  18. package/dist/{chunk-BQ3QN4QT.mjs → chunk-U6MVJSXX.mjs} +170 -66
  19. package/dist/chunk-U6MVJSXX.mjs.map +1 -0
  20. package/dist/chunk-UMBEHBIZ.mjs +41 -0
  21. package/dist/chunk-UMBEHBIZ.mjs.map +1 -0
  22. package/dist/{chunk-GFHSSCCR.mjs → chunk-VSOWNKPA.mjs} +1 -11
  23. package/dist/cli.mjs +10 -9
  24. package/dist/contacts-worker.mjs +3 -3
  25. package/dist/global-insight-worker.mjs +2 -2
  26. package/dist/{http-HV6XWU6X.mjs → http-HSK46XEU.mjs} +13 -12
  27. package/dist/{import-DP2XLZ2H.mjs → import-DF2WD2HE.mjs} +10 -8
  28. package/dist/index.mjs +13 -12
  29. package/dist/{mcp-QDPFBPGW.mjs → mcp-A2RND7KN.mjs} +12 -12
  30. package/dist/people-relationships-worker.mjs +3 -3
  31. package/dist/semantic-index-worker.mjs +1 -1
  32. package/dist/{service-KGL3RAIA.mjs → service-KZTHBDQ5.mjs} +2 -2
  33. package/dist/{src-B3A2QHP5.mjs → src-SHFHW2QB.mjs} +29 -7
  34. package/dist/{stream-import-KEGNP3QK.mjs → stream-import-GZ2QDE3Z.mjs} +10 -8
  35. package/dist/{undici-ZSXBT7EA.mjs → undici-MU5I3L6Q.mjs} +2 -2
  36. package/dist/{update-checker-LGMTEKMT.mjs → update-checker-3N7HQEP2.mjs} +2 -2
  37. package/dist/{worker-runtime-MDYKX3BW.mjs → worker-runtime-OWN56GG5.mjs} +14 -8
  38. package/dist/worker-runtime-OWN56GG5.mjs.map +1 -0
  39. package/dist-cli-web/assets/{ActionToolsPanel.vue_vue_type_script_setup_true_lang-JxPR2O6b.js → ActionToolsPanel.vue_vue_type_script_setup_true_lang-yr_T4ttU.js} +14 -14
  40. package/dist-cli-web/assets/{BufferResource--dSbJb0k.js → BufferResource-B-LHxriL.js} +1 -1
  41. package/dist-cli-web/assets/{CanvasRenderer-Cm_dmJXZ.js → CanvasRenderer-W3h_GGHM.js} +1 -1
  42. package/dist-cli-web/assets/{DataDirCleanupNotice-B0s5txX3.js → DataDirCleanupNotice-C6CMNhfs.js} +1 -1
  43. package/dist-cli-web/assets/{EChartWordcloud-CwMVJLBO.js → EChartWordcloud-Dt6rCzHf.js} +1 -1
  44. package/dist-cli-web/assets/{Filter-BjYScRpK.js → Filter-BpSopVKd.js} +1 -1
  45. package/dist-cli-web/assets/{LoadingState.vue_vue_type_script_setup_true_lang-BshQybD_.js → LoadingState.vue_vue_type_script_setup_true_lang-Bi_Uag3T.js} +1 -1
  46. package/dist-cli-web/assets/{MessageExportModal-DAJW2mFj.js → MessageExportModal-BoK-_h25.js} +1 -1
  47. package/dist-cli-web/assets/{PageHeader-BKAjCuqs.js → PageHeader-CD8B7Emf.js} +1 -1
  48. package/dist-cli-web/assets/{RelationshipGalaxyCanvas-mlZs7k4L.js → RelationshipGalaxyCanvas-BO3mo-Re.js} +7 -7
  49. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-Brnpz6Ig.js +4108 -0
  50. package/dist-cli-web/assets/{RelationshipGalaxyThreeCanvas-CeYJABxI.css → RelationshipGalaxyThreeCanvas-CMuibfiA.css} +1 -1
  51. package/dist-cli-web/assets/{RenderTargetSystem-D00Ex44y.js → RenderTargetSystem-CNP4JLfK.js} +1 -1
  52. package/dist-cli-web/assets/{ThemeCard.vue_vue_type_script_setup_true_lang-Dsb6lzs-.js → ThemeCard.vue_vue_type_script_setup_true_lang-Na3LIoSJ.js} +1 -1
  53. package/dist-cli-web/assets/{TimeSelect.vue_vue_type_script_setup_true_lang-BfR3tlkz.js → TimeSelect.vue_vue_type_script_setup_true_lang-CKe1YZrV.js} +1 -1
  54. package/dist-cli-web/assets/{WebGLRenderer-CTTusm2n.js → WebGLRenderer-CIR5cTQN.js} +1 -1
  55. package/dist-cli-web/assets/{WebGPURenderer-pyv3EXor.js → WebGPURenderer-Dz3pCrzX.js} +1 -1
  56. package/dist-cli-web/assets/{annual-summary-time-range-C_d1oZrj.js → annual-summary-time-range-QhoA3uC6.js} +1 -1
  57. package/dist-cli-web/assets/{base-D91aVUwM.js → base-p9yfnTpk.js} +1 -1
  58. package/dist-cli-web/assets/{browserAll-C9fW936Y.js → browserAll-DMaXjf8N.js} +1 -1
  59. package/dist-cli-web/assets/cli-web-Dvy2aHxG.js +1 -0
  60. package/dist-cli-web/assets/{dateFormat-rY43adcv.js → dateFormat-5x3JKlIk.js} +1 -1
  61. package/dist-cli-web/assets/{fetch-CbnX5VoM.js → fetch-B0p6QRQ8.js} +1 -1
  62. package/dist-cli-web/assets/{fetch-DYNgtIcU.js → fetch-BI-Se2p7.js} +1 -1
  63. package/dist-cli-web/assets/{fetch-Kk2knkEo.js → fetch-BderOzzL.js} +1 -1
  64. package/dist-cli-web/assets/{fetch-DG3AeEjW.js → fetch-BtJWW2-O.js} +1 -1
  65. package/dist-cli-web/assets/fetch-CBaZNOpK.js +4 -0
  66. package/dist-cli-web/assets/{fetch-CNy9OQ2g.js → fetch-CH9Hm20R.js} +1 -1
  67. package/dist-cli-web/assets/{fetch-CrSz5KJy.js → fetch-CbpKKkdO.js} +1 -1
  68. package/dist-cli-web/assets/{fetch-PLrI3V67.js → fetch-Cne-uL1m.js} +1 -1
  69. package/dist-cli-web/assets/{fetch-DZPC3D8R.js → fetch-DRGykJYb.js} +1 -1
  70. package/dist-cli-web/assets/{fetch-CS3T-v-1.js → fetch-QLurhC_z.js} +1 -1
  71. package/dist-cli-web/assets/{index-JYfjMRb-.js → index-4NL2pYn0.js} +1 -1
  72. package/dist-cli-web/assets/{index-2-OaYdzt.js → index-B-KdENnr.js} +1 -1
  73. package/dist-cli-web/assets/{index-CGI3Y8pq.js → index-BDyixm5n.js} +1 -1
  74. package/dist-cli-web/assets/{index-BKo68Iu5.js → index-BaCd1avL.js} +1 -1
  75. package/dist-cli-web/assets/{index-ZTgfCZvY.js → index-CVBBDI3B.js} +3 -3
  76. package/dist-cli-web/assets/index-CXh01dqh.js +2 -0
  77. package/dist-cli-web/assets/index-CioAsn_2.js +137 -0
  78. package/dist-cli-web/assets/{index-DA3Q0TGT.js → index-Ct90lmPb.js} +1 -1
  79. package/dist-cli-web/assets/index-CumZ5uQ4.js +53 -0
  80. package/dist-cli-web/assets/index-CxGtGxLW.css +1 -0
  81. package/dist-cli-web/assets/{index-DsdMsKYT.js → index-DF2Dijfg.js} +1 -1
  82. package/dist-cli-web/assets/{index-3YO6RI5e.js → index-DYCPQMOl.js} +2 -2
  83. package/dist-cli-web/assets/{index-DFHYr_-u.js → index-Dp2uglLH.js} +1 -1
  84. package/dist-cli-web/assets/{index-BrkDgcJ6.js → index-IvxuxPNt.js} +1 -1
  85. package/dist-cli-web/assets/{people-page-header-D-LWaEqn.js → people-page-header-BRb9BrgP.js} +1 -1
  86. package/dist-cli-web/assets/telemetry-DPC69b73.js +1 -0
  87. package/dist-cli-web/assets/{webworkerAll-CPOVECup.js → webworkerAll-BoY19vZt.js} +1 -1
  88. package/dist-cli-web/index.html +1 -1
  89. package/package.json +3 -2
  90. package/dist/chunk-AQPDZAWB.mjs.map +0 -1
  91. package/dist/chunk-BQ3QN4QT.mjs.map +0 -1
  92. package/dist/chunk-DGF3S3TZ.mjs.map +0 -1
  93. package/dist/chunk-IGK6UMN2.mjs.map +0 -1
  94. package/dist/chunk-OLE2USEN.mjs.map +0 -1
  95. package/dist/chunk-S5NCEESV.mjs.map +0 -1
  96. package/dist/chunk-UO2XVFY6.mjs.map +0 -1
  97. package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
  98. package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
  99. package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
  100. package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
  101. package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
  102. package/dist/transformers.node-PUMHAODN.mjs +0 -42889
  103. package/dist/transformers.node-PUMHAODN.mjs.map +0 -1
  104. package/dist/worker-runtime-MDYKX3BW.mjs.map +0 -1
  105. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-DgMG3jdU.js +0 -4108
  106. package/dist-cli-web/assets/cli-web-C7uGKz_E.js +0 -1
  107. package/dist-cli-web/assets/fetch-C6po4XYB.js +0 -3
  108. package/dist-cli-web/assets/index-2S80bo1s.js +0 -2
  109. package/dist-cli-web/assets/index-CW9H_fBd.js +0 -53
  110. package/dist-cli-web/assets/index-DmrrdYXH.css +0 -1
  111. package/dist-cli-web/assets/index-DmwA85vG.js +0 -173
  112. /package/dist/{chat-command-XPY3WURC.mjs.map → chat-command-6IOH2QRF.mjs.map} +0 -0
  113. /package/dist/{chunk-ISRLGLUL.mjs.map → chunk-4RLZFGO5.mjs.map} +0 -0
  114. /package/dist/{chunk-IGEHMLHM.mjs.map → chunk-52P5ZRBD.mjs.map} +0 -0
  115. /package/dist/{chunk-JTOHAMIW.mjs.map → chunk-652KEAX3.mjs.map} +0 -0
  116. /package/dist/{chunk-JCSPDTZL.mjs.map → chunk-H6D4DZOC.mjs.map} +0 -0
  117. /package/dist/{chunk-GFHSSCCR.mjs.map → chunk-VSOWNKPA.mjs.map} +0 -0
  118. /package/dist/{http-HV6XWU6X.mjs.map → http-HSK46XEU.mjs.map} +0 -0
  119. /package/dist/{import-DP2XLZ2H.mjs.map → import-DF2WD2HE.mjs.map} +0 -0
  120. /package/dist/{mcp-QDPFBPGW.mjs.map → mcp-A2RND7KN.mjs.map} +0 -0
  121. /package/dist/{service-KGL3RAIA.mjs.map → service-KZTHBDQ5.mjs.map} +0 -0
  122. /package/dist/{src-B3A2QHP5.mjs.map → src-SHFHW2QB.mjs.map} +0 -0
  123. /package/dist/{stream-import-KEGNP3QK.mjs.map → stream-import-GZ2QDE3Z.mjs.map} +0 -0
  124. /package/dist/{undici-ZSXBT7EA.mjs.map → undici-MU5I3L6Q.mjs.map} +0 -0
  125. /package/dist/{update-checker-LGMTEKMT.mjs.map → update-checker-3N7HQEP2.mjs.map} +0 -0
@@ -10,14 +10,16 @@ import {
10
10
  analyzeAutoImportFile,
11
11
  analyzeIncrementalImport,
12
12
  analyzeNewImport,
13
+ autoImportBatch,
13
14
  autoImportFile,
14
15
  incrementalImport,
16
+ resolveDefaultBatchConcurrency,
15
17
  streamingImport,
16
18
  withDataDirImportLock
17
- } from "./chunk-AQPDZAWB.mjs";
19
+ } from "./chunk-4LW6443F.mjs";
18
20
  import {
19
21
  DataDirCompatibilityError
20
- } from "./chunk-OLE2USEN.mjs";
22
+ } from "./chunk-INBJ7SND.mjs";
21
23
 
22
24
  // src/import/stream-import.ts
23
25
  import * as crypto from "crypto";
@@ -26,7 +28,7 @@ function generateSessionId() {
26
28
  const rand = crypto.randomBytes(4).toString("hex");
27
29
  return `chat_${ts}_${rand}`;
28
30
  }
29
- function buildStreamImportDeps(dbManager, onProgress) {
31
+ function buildStreamImportDeps(dbManager, onProgress, sessionGapThreshold) {
30
32
  return {
31
33
  openDatabase(sessionId) {
32
34
  return dbManager.openRawSessionDatabase(sessionId, { create: true, initializeChatTables: true });
@@ -36,63 +38,66 @@ function buildStreamImportDeps(dbManager, onProgress) {
36
38
  },
37
39
  onProgress: onProgress ?? (() => {
38
40
  }),
39
- generateSessionId
41
+ generateSessionId,
42
+ sessionGapThreshold
40
43
  };
41
44
  }
42
45
  function createProgressAdapter(onProgress) {
43
46
  if (!onProgress) return () => {
44
47
  };
45
- return (progress) => {
46
- let stage = "parsing";
47
- let pct = 0;
48
- switch (progress.stage) {
49
- case "detecting":
50
- stage = "detecting";
51
- pct = 5;
52
- break;
53
- case "parsing":
54
- stage = "parsing";
55
- pct = Math.min(Math.round(progress.percentage * 0.7), 70);
56
- break;
57
- case "saving":
58
- stage = "saving";
59
- pct = 80;
60
- break;
61
- case "indexing":
62
- stage = "indexing";
63
- pct = 90;
64
- break;
65
- case "done":
66
- stage = "done";
67
- pct = 100;
68
- break;
69
- case "error":
70
- stage = "error";
71
- pct = 0;
72
- break;
73
- }
74
- onProgress({
75
- stage,
76
- progress: pct,
77
- message: progress.message || "",
78
- bytesRead: progress.bytesRead,
79
- totalBytes: progress.totalBytes,
80
- messagesProcessed: progress.messagesProcessed
81
- });
48
+ return (progress) => onProgress(createProgressAdapterValue(progress));
49
+ }
50
+ function createProgressAdapterValue(progress) {
51
+ let stage = "parsing";
52
+ let pct = 0;
53
+ switch (progress.stage) {
54
+ case "detecting":
55
+ stage = "detecting";
56
+ pct = 5;
57
+ break;
58
+ case "parsing":
59
+ stage = "parsing";
60
+ pct = Math.min(Math.round(progress.percentage * 0.7), 70);
61
+ break;
62
+ case "saving":
63
+ stage = "saving";
64
+ pct = 80;
65
+ break;
66
+ case "indexing":
67
+ stage = "indexing";
68
+ pct = 90;
69
+ break;
70
+ case "done":
71
+ stage = "done";
72
+ pct = 100;
73
+ break;
74
+ case "error":
75
+ stage = "error";
76
+ pct = 0;
77
+ break;
78
+ }
79
+ return {
80
+ stage,
81
+ progress: pct,
82
+ message: progress.message || "",
83
+ bytesRead: progress.bytesRead,
84
+ totalBytes: progress.totalBytes,
85
+ messagesProcessed: progress.messagesProcessed
82
86
  };
83
87
  }
84
88
  function deleteSessionDatabase(dbManager, sessionId) {
85
89
  dbManager.deleteSessionDatabaseFiles(sessionId);
86
90
  }
87
- async function streamImportUnlocked(dbManager, filePath, options) {
88
- const { formatId, chatIndex, onProgress, sessionId } = options || {};
91
+ async function streamImportUnlocked(dbManager, filePath, options, updateCompatibilityGate = true, progressOverride) {
92
+ const { formatId, chatIndex, sessionGapThreshold, onProgress, sessionId } = options || {};
89
93
  const formatOptions = {};
90
94
  if (formatId) formatOptions.formatId = formatId;
91
95
  if (chatIndex !== void 0) formatOptions.chatIndex = chatIndex;
92
- const progressAdapter = createProgressAdapter(onProgress);
93
- const deps = buildStreamImportDeps(dbManager, progressAdapter);
96
+ const progressAdapter = progressOverride ?? createProgressAdapter(onProgress);
97
+ const deps = buildStreamImportDeps(dbManager, progressAdapter, sessionGapThreshold);
94
98
  const result = await streamingImport(filePath, deps, formatOptions, sessionId);
95
99
  if (!result.success || !result.sessionId) return result;
100
+ if (!updateCompatibilityGate) return result;
96
101
  try {
97
102
  dbManager.raiseCurrentChatDbCompatibilityGate();
98
103
  } catch (error) {
@@ -119,40 +124,137 @@ async function streamImport(dbManager, filePath, options) {
119
124
  }
120
125
  }
121
126
  async function autoImport(dbManager, filePath, options) {
127
+ try {
128
+ return await withDataDirImportLock(
129
+ dbManager.getUserDataDir(),
130
+ () => autoImportUnlocked(dbManager, filePath, options)
131
+ );
132
+ } catch (error) {
133
+ if (error instanceof ImportInProgressError) {
134
+ return { success: false, error: IMPORT_IN_PROGRESS_ERROR_KEY };
135
+ }
136
+ throw error;
137
+ }
138
+ }
139
+ async function autoImportUnlocked(dbManager, filePath, options, updateCompatibilityGate = true) {
122
140
  const { formatId, chatIndex, onProgress, sessionId } = options ?? {};
123
141
  const formatOptions = {};
124
142
  if (formatId) formatOptions.formatId = formatId;
125
143
  if (chatIndex !== void 0) formatOptions.chatIndex = chatIndex;
126
144
  const progressAdapter = createProgressAdapter(onProgress);
145
+ return autoImportFile(
146
+ filePath,
147
+ {
148
+ listSessionIds: () => dbManager.listSessionIds(),
149
+ openReadonly: (candidateSessionId) => dbManager.openRawSessionDatabase(candidateSessionId, { readonly: true }),
150
+ onProgress: progressAdapter,
151
+ sessionExists: (candidateSessionId) => dbManager.listSessionIds().includes(candidateSessionId),
152
+ createSession: (sourcePath, sourceFormatOptions, explicitSessionId, itemProgress) => streamImportUnlocked(
153
+ dbManager,
154
+ sourcePath,
155
+ {
156
+ ...options,
157
+ ...sourceFormatOptions,
158
+ sessionId: explicitSessionId
159
+ },
160
+ updateCompatibilityGate,
161
+ itemProgress
162
+ ),
163
+ appendSession: (targetSessionId, sourcePath, sourceFormatOptions, itemProgress) => incrementalImportUnlocked(
164
+ dbManager,
165
+ targetSessionId,
166
+ sourcePath,
167
+ {
168
+ ...sourceFormatOptions,
169
+ onProgress: itemProgress ?? progressAdapter
170
+ },
171
+ updateCompatibilityGate
172
+ )
173
+ },
174
+ {
175
+ explicitSessionId: sessionId,
176
+ formatOptions
177
+ }
178
+ );
179
+ }
180
+ async function autoImportBatch2(dbManager, items, options = {}) {
127
181
  try {
128
- return await withDataDirImportLock(
129
- dbManager.getUserDataDir(),
130
- () => autoImportFile(
131
- filePath,
182
+ return await withDataDirImportLock(dbManager.getUserDataDir(), async () => {
183
+ const results = await autoImportBatch(
184
+ items.map((item) => ({
185
+ id: item.id,
186
+ filePath: item.filePath,
187
+ options: {
188
+ explicitSessionId: item.sessionId,
189
+ formatOptions: {
190
+ ...item.formatId ? { formatId: item.formatId } : {},
191
+ ...item.chatIndex !== void 0 ? { chatIndex: item.chatIndex } : {}
192
+ }
193
+ }
194
+ })),
132
195
  {
133
196
  listSessionIds: () => dbManager.listSessionIds(),
134
197
  openReadonly: (candidateSessionId) => dbManager.openRawSessionDatabase(candidateSessionId, { readonly: true }),
135
- onProgress: progressAdapter,
136
198
  sessionExists: (candidateSessionId) => dbManager.listSessionIds().includes(candidateSessionId),
137
- createSession: (sourcePath, sourceFormatOptions, explicitSessionId) => streamImportUnlocked(dbManager, sourcePath, {
138
- ...options,
139
- ...sourceFormatOptions,
140
- sessionId: explicitSessionId
141
- }),
142
- appendSession: (targetSessionId, sourcePath, sourceFormatOptions) => incrementalImportUnlocked(dbManager, targetSessionId, sourcePath, {
143
- ...sourceFormatOptions,
144
- onProgress: progressAdapter
145
- })
199
+ createSession: (sourcePath, sourceFormatOptions, explicitSessionId, itemProgress) => streamImportUnlocked(
200
+ dbManager,
201
+ sourcePath,
202
+ {
203
+ ...sourceFormatOptions,
204
+ sessionId: explicitSessionId,
205
+ sessionGapThreshold: options.sessionGapThreshold
206
+ },
207
+ false,
208
+ itemProgress
209
+ ),
210
+ appendSession: (targetSessionId, sourcePath, sourceFormatOptions, itemProgress) => incrementalImportUnlocked(
211
+ dbManager,
212
+ targetSessionId,
213
+ sourcePath,
214
+ {
215
+ ...sourceFormatOptions,
216
+ onProgress: itemProgress
217
+ },
218
+ false
219
+ )
146
220
  },
147
221
  {
148
- explicitSessionId: sessionId,
149
- formatOptions
222
+ concurrency: options.concurrency ?? resolveDefaultBatchConcurrency(items.length),
223
+ signal: options.signal,
224
+ onItemStart: (_item, index) => options.onItemStart?.(items[index], index),
225
+ onItemProgress: (_item, index, progress) => options.onItemProgress?.(items[index], index, createProgressAdapterValue(progress)),
226
+ onItemComplete: (_item, index, result) => options.onItemComplete?.(items[index], index, result)
150
227
  }
151
- )
152
- );
228
+ );
229
+ if (results.some((result) => result.status === "success")) {
230
+ try {
231
+ dbManager.raiseCurrentChatDbCompatibilityGate();
232
+ } catch (error) {
233
+ const message = error instanceof Error ? error.message : String(error);
234
+ for (const result of results) {
235
+ if (result.status === "success" && result.result.importMode === "created" && result.result.sessionId) {
236
+ deleteSessionDatabase(dbManager, result.result.sessionId);
237
+ }
238
+ }
239
+ return results.map(
240
+ (result) => result.status === "success" ? {
241
+ id: result.id,
242
+ status: "failed",
243
+ error: message,
244
+ result: { ...result.result, success: false, error: message }
245
+ } : result
246
+ );
247
+ }
248
+ }
249
+ return results;
250
+ });
153
251
  } catch (error) {
154
252
  if (error instanceof ImportInProgressError) {
155
- return { success: false, error: IMPORT_IN_PROGRESS_ERROR_KEY };
253
+ return items.map((item) => ({
254
+ id: item.id,
255
+ status: "failed",
256
+ error: IMPORT_IN_PROGRESS_ERROR_KEY
257
+ }));
156
258
  }
157
259
  throw error;
158
260
  }
@@ -201,7 +303,7 @@ function buildIncrementalDeps(dbManager, onProgress, onCompatibilityError) {
201
303
  })
202
304
  };
203
305
  }
204
- async function incrementalImportUnlocked(dbManager, sessionId, filePath, options) {
306
+ async function incrementalImportUnlocked(dbManager, sessionId, filePath, options, updateCompatibilityGate = true) {
205
307
  const { onProgress, ...importOpts } = options || {};
206
308
  let compatibilityError = null;
207
309
  const result = await incrementalImport(
@@ -214,6 +316,7 @@ async function incrementalImportUnlocked(dbManager, sessionId, filePath, options
214
316
  );
215
317
  if (compatibilityError) throw compatibilityError;
216
318
  if (!result.success) return result;
319
+ if (!updateCompatibilityGate) return result;
217
320
  try {
218
321
  dbManager.raiseCurrentChatDbCompatibilityGate();
219
322
  } catch (error) {
@@ -260,9 +363,10 @@ async function analyzeNewImport2(filePath, onProgress, options) {
260
363
  export {
261
364
  streamImport,
262
365
  autoImport,
366
+ autoImportBatch2 as autoImportBatch,
263
367
  analyzeAutoImport,
264
368
  incrementalImport2 as incrementalImport,
265
369
  analyzeIncrementalImport2 as analyzeIncrementalImport,
266
370
  analyzeNewImport2 as analyzeNewImport
267
371
  };
268
- //# sourceMappingURL=chunk-BQ3QN4QT.mjs.map
372
+ //# sourceMappingURL=chunk-U6MVJSXX.mjs.map
@@ -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 resolveDefaultBatchConcurrency,\n analyzeAutoImportFile as sharedAnalyzeAutoImportFile,\n autoImportBatch as sharedAutoImportBatch,\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 AutoImportAnalysisResult,\n AutoImportBatchItemResult,\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 sessionGapThreshold?: 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(\n dbManager: DatabaseManager,\n onProgress?: ImportProgressCallback,\n sessionGapThreshold?: number\n): 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 sessionGapThreshold,\n }\n}\n\nfunction createProgressAdapter(onProgress?: (progress: StreamImportProgress) => void): ImportProgressCallback {\n if (!onProgress) return () => {}\n return (progress) => onProgress(createProgressAdapterValue(progress))\n}\n\nfunction createProgressAdapterValue(progress: Parameters<ImportProgressCallback>[0]): StreamImportProgress {\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 return {\n stage,\n progress: pct,\n message: progress.message || '',\n bytesRead: progress.bytesRead,\n totalBytes: progress.totalBytes,\n messagesProcessed: progress.messagesProcessed,\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 updateCompatibilityGate = true,\n progressOverride?: ImportProgressCallback\n): Promise<StreamImportResult> {\n const { formatId, chatIndex, sessionGapThreshold, 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 = progressOverride ?? createProgressAdapter(onProgress)\n\n const deps = buildStreamImportDeps(dbManager, progressAdapter, sessionGapThreshold)\n const result = await streamingImport(filePath, deps, formatOptions, sessionId)\n if (!result.success || !result.sessionId) return result\n\n if (!updateCompatibilityGate) 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 try {\n return await withDataDirImportLock(dbManager.getUserDataDir(), () =>\n autoImportUnlocked(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\nasync function autoImportUnlocked(\n dbManager: DatabaseManager,\n filePath: string,\n options?: StreamImportOptions,\n updateCompatibilityGate = true\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 return sharedAutoImportFile(\n filePath,\n {\n listSessionIds: () => dbManager.listSessionIds(),\n openReadonly: (candidateSessionId) => dbManager.openRawSessionDatabase(candidateSessionId, { readonly: true }),\n onProgress: progressAdapter,\n sessionExists: (candidateSessionId) => dbManager.listSessionIds().includes(candidateSessionId),\n createSession: (sourcePath, sourceFormatOptions, explicitSessionId, itemProgress) =>\n streamImportUnlocked(\n dbManager,\n sourcePath,\n {\n ...options,\n ...sourceFormatOptions,\n sessionId: explicitSessionId,\n },\n updateCompatibilityGate,\n itemProgress\n ),\n appendSession: (targetSessionId, sourcePath, sourceFormatOptions, itemProgress) =>\n incrementalImportUnlocked(\n dbManager,\n targetSessionId,\n sourcePath,\n {\n ...sourceFormatOptions,\n onProgress: itemProgress ?? progressAdapter,\n },\n updateCompatibilityGate\n ),\n },\n {\n explicitSessionId: sessionId,\n formatOptions,\n }\n )\n}\n\nexport interface AutoImportBatchRequest {\n id: string\n filePath: string\n formatId?: string\n chatIndex?: number\n sessionId?: string\n}\n\nexport interface AutoImportBatchOptions {\n concurrency?: number\n sessionGapThreshold?: number\n signal?: AbortSignal\n onItemStart?: (item: AutoImportBatchRequest, index: number) => void\n onItemProgress?: (item: AutoImportBatchRequest, index: number, progress: StreamImportProgress) => void\n onItemComplete?: (item: AutoImportBatchRequest, index: number, result: AutoImportBatchItemResult) => void\n}\n\nexport async function autoImportBatch(\n dbManager: DatabaseManager,\n items: AutoImportBatchRequest[],\n options: AutoImportBatchOptions = {}\n): Promise<AutoImportBatchItemResult[]> {\n try {\n return await withDataDirImportLock(dbManager.getUserDataDir(), async () => {\n const results = await sharedAutoImportBatch(\n items.map((item) => ({\n id: item.id,\n filePath: item.filePath,\n options: {\n explicitSessionId: item.sessionId,\n formatOptions: {\n ...(item.formatId ? { formatId: item.formatId } : {}),\n ...(item.chatIndex !== undefined ? { chatIndex: item.chatIndex } : {}),\n },\n },\n })),\n {\n listSessionIds: () => dbManager.listSessionIds(),\n openReadonly: (candidateSessionId) =>\n dbManager.openRawSessionDatabase(candidateSessionId, { readonly: true }),\n sessionExists: (candidateSessionId) => dbManager.listSessionIds().includes(candidateSessionId),\n createSession: (sourcePath, sourceFormatOptions, explicitSessionId, itemProgress) =>\n streamImportUnlocked(\n dbManager,\n sourcePath,\n {\n ...sourceFormatOptions,\n sessionId: explicitSessionId,\n sessionGapThreshold: options.sessionGapThreshold,\n },\n false,\n itemProgress\n ),\n appendSession: (targetSessionId, sourcePath, sourceFormatOptions, itemProgress) =>\n incrementalImportUnlocked(\n dbManager,\n targetSessionId,\n sourcePath,\n {\n ...sourceFormatOptions,\n onProgress: itemProgress,\n },\n false\n ),\n },\n {\n concurrency: options.concurrency ?? resolveDefaultBatchConcurrency(items.length),\n signal: options.signal,\n onItemStart: (_item, index) => options.onItemStart?.(items[index], index),\n onItemProgress: (_item, index, progress) =>\n options.onItemProgress?.(items[index], index, createProgressAdapterValue(progress)),\n onItemComplete: (_item, index, result) => options.onItemComplete?.(items[index], index, result),\n }\n )\n\n if (results.some((result) => result.status === 'success')) {\n try {\n dbManager.raiseCurrentChatDbCompatibilityGate()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n for (const result of results) {\n if (result.status === 'success' && result.result.importMode === 'created' && result.result.sessionId) {\n deleteSessionDatabase(dbManager, result.result.sessionId)\n }\n }\n return results.map((result) =>\n result.status === 'success'\n ? {\n id: result.id,\n status: 'failed' as const,\n error: message,\n result: { ...result.result, success: false, error: message },\n }\n : result\n )\n }\n }\n return results\n })\n } catch (error) {\n if (error instanceof ImportInProgressError) {\n return items.map((item) => ({\n id: item.id,\n status: 'failed' as const,\n error: IMPORT_IN_PROGRESS_ERROR_KEY,\n }))\n }\n throw error\n }\n}\n\nexport async function analyzeAutoImport(\n dbManager: DatabaseManager,\n filePath: string,\n options?: StreamImportOptions\n): Promise<AutoImportAnalysisResult> {\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 let readonlySessionIds: string[] | undefined\n const listSessionIdsReadonly = (): string[] => (readonlySessionIds ??= dbManager.listSessionIdsReadonly())\n\n return sharedAnalyzeAutoImportFile(\n filePath,\n {\n listSessionIds: listSessionIdsReadonly,\n openReadonly: (candidateSessionId) => dbManager.openRawSessionDatabase(candidateSessionId, { readonly: true }),\n onProgress: progressAdapter,\n sessionExists: (candidateSessionId) => listSessionIdsReadonly().includes(candidateSessionId),\n analyzeCreateSession: (sourcePath, sourceFormatOptions) =>\n sharedAnalyzeNewImport(sourcePath, progressAdapter, {\n formatId: typeof sourceFormatOptions?.formatId === 'string' ? sourceFormatOptions.formatId : undefined,\n chatIndex: typeof sourceFormatOptions?.chatIndex === 'number' ? sourceFormatOptions.chatIndex : undefined,\n }),\n analyzeAppendSession: (targetSessionId, sourcePath, sourceFormatOptions) =>\n sharedAnalyzeIncremental(targetSessionId, sourcePath, buildIncrementalDeps(dbManager, progressAdapter), {\n formatId: typeof sourceFormatOptions?.formatId === 'string' ? sourceFormatOptions.formatId : undefined,\n chatIndex: typeof sourceFormatOptions?.chatIndex === 'number' ? sourceFormatOptions.chatIndex : undefined,\n }),\n },\n {\n explicitSessionId: sessionId,\n formatOptions,\n }\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 updateCompatibilityGate = true\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 if (!updateCompatibilityGate) 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 options?: ImportOptions\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 options\n )\n if (compatibilityError) throw compatibilityError\n return result\n}\n\nexport async function analyzeNewImport(\n filePath: string,\n onProgress?: ImportProgressCallback,\n options?: Pick<ImportOptions, 'formatId' | 'chatIndex'>\n): Promise<AnalyzeNewImportResult> {\n return sharedAnalyzeNewImport(filePath, onProgress ?? (() => {}), options)\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 AutoImportAnalysisResult,\n ImportOptions,\n AutoImportResult,\n}\n"],"mappings":"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","names":["autoImportBatch","incrementalImport","analyzeIncrementalImport","analyzeNewImport"]}
@@ -0,0 +1,41 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { dirname as __pathDirname } from 'path';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import {
8
+ createLocalEmbeddingRuntimeManager
9
+ } from "./chunk-4LW6443F.mjs";
10
+
11
+ // src/semantic-index/local-runtime.ts
12
+ import path from "path";
13
+ var LOCAL_EMBEDDING_RUNTIME_DIR_ENV = "CHATLAB_LOCAL_EMBEDDING_RUNTIME_DIR";
14
+ function resolveCliLocalEmbeddingRuntimeConfig(aiDataDir, env = process.env) {
15
+ const preinstalledDir = env[LOCAL_EMBEDDING_RUNTIME_DIR_ENV]?.trim();
16
+ if (preinstalledDir) {
17
+ return {
18
+ baseDir: path.resolve(preinstalledDir),
19
+ installMode: "preinstalled"
20
+ };
21
+ }
22
+ return {
23
+ baseDir: path.join(aiDataDir, "runtime", "local-embedding"),
24
+ installMode: "auto"
25
+ };
26
+ }
27
+ async function installCliLocalEmbeddingRuntime(aiDataDir, env = process.env) {
28
+ const config = resolveCliLocalEmbeddingRuntimeConfig(aiDataDir, env);
29
+ const manager = createLocalEmbeddingRuntimeManager({
30
+ ...config,
31
+ // The build-time installer populates a directory that normal app startup treats as read-only.
32
+ installMode: "auto"
33
+ });
34
+ return await manager.ensureInstalled();
35
+ }
36
+
37
+ export {
38
+ resolveCliLocalEmbeddingRuntimeConfig,
39
+ installCliLocalEmbeddingRuntime
40
+ };
41
+ //# sourceMappingURL=chunk-UMBEHBIZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/semantic-index/local-runtime.ts"],"sourcesContent":["import path from 'node:path'\nimport { createLocalEmbeddingRuntimeManager, type LocalEmbeddingRuntimeConfig } from '@openchatlab/node-runtime'\n\nexport const LOCAL_EMBEDDING_RUNTIME_DIR_ENV = 'CHATLAB_LOCAL_EMBEDDING_RUNTIME_DIR'\n\nexport function resolveCliLocalEmbeddingRuntimeConfig(\n aiDataDir: string,\n env: NodeJS.ProcessEnv = process.env\n): LocalEmbeddingRuntimeConfig {\n const preinstalledDir = env[LOCAL_EMBEDDING_RUNTIME_DIR_ENV]?.trim()\n if (preinstalledDir) {\n return {\n baseDir: path.resolve(preinstalledDir),\n installMode: 'preinstalled',\n }\n }\n return {\n baseDir: path.join(aiDataDir, 'runtime', 'local-embedding'),\n installMode: 'auto',\n }\n}\n\nexport async function installCliLocalEmbeddingRuntime(\n aiDataDir: string,\n env: NodeJS.ProcessEnv = process.env\n): Promise<string> {\n const config = resolveCliLocalEmbeddingRuntimeConfig(aiDataDir, env)\n const manager = createLocalEmbeddingRuntimeManager({\n ...config,\n // The build-time installer populates a directory that normal app startup treats as read-only.\n installMode: 'auto',\n })\n return await manager.ensureInstalled()\n}\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,UAAU;AAGV,IAAM,kCAAkC;AAExC,SAAS,sCACd,WACA,MAAyB,QAAQ,KACJ;AAC7B,QAAM,kBAAkB,IAAI,+BAA+B,GAAG,KAAK;AACnE,MAAI,iBAAiB;AACnB,WAAO;AAAA,MACL,SAAS,KAAK,QAAQ,eAAe;AAAA,MACrC,aAAa;AAAA,IACf;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS,KAAK,KAAK,WAAW,WAAW,iBAAiB;AAAA,IAC1D,aAAa;AAAA,EACf;AACF;AAEA,eAAsB,gCACpB,WACA,MAAyB,QAAQ,KAChB;AACjB,QAAM,SAAS,sCAAsC,WAAW,GAAG;AACnE,QAAM,UAAU,mCAAmC;AAAA,IACjD,GAAG;AAAA;AAAA,IAEH,aAAa;AAAA,EACf,CAAC;AACD,SAAO,MAAM,QAAQ,gBAAgB;AACvC;","names":[]}
@@ -16,14 +16,6 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
16
16
  if (typeof require !== "undefined") return require.apply(this, arguments);
17
17
  throw Error('Dynamic require of "' + x + '" is not supported');
18
18
  });
19
- var __glob = (map) => (path) => {
20
- var fn = map[path];
21
- if (fn) return fn();
22
- throw new Error("Module not found in bundle: " + path);
23
- };
24
- var __esm = (fn, res) => function __init() {
25
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
26
- };
27
19
  var __commonJS = (cb, mod) => function __require2() {
28
20
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
29
21
  };
@@ -50,10 +42,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
50
42
 
51
43
  export {
52
44
  __require,
53
- __glob,
54
- __esm,
55
45
  __commonJS,
56
46
  __export,
57
47
  __toESM
58
48
  };
59
- //# sourceMappingURL=chunk-GFHSSCCR.mjs.map
49
+ //# sourceMappingURL=chunk-VSOWNKPA.mjs.map
package/dist/cli.mjs CHANGED
@@ -6,19 +6,20 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __pathDirname(__filename);
7
7
  import {
8
8
  run
9
- } from "./chunk-IGK6UMN2.mjs";
9
+ } from "./chunk-JX6MFS6F.mjs";
10
+ import "./chunk-UMBEHBIZ.mjs";
10
11
  import "./chunk-5FGB42EQ.mjs";
11
- import "./chunk-BQ3QN4QT.mjs";
12
- import "./chunk-ISRLGLUL.mjs";
12
+ import "./chunk-U6MVJSXX.mjs";
13
+ import "./chunk-4RLZFGO5.mjs";
13
14
  import "./chunk-5ADKYYNA.mjs";
14
- import "./chunk-S5NCEESV.mjs";
15
- import "./chunk-AQPDZAWB.mjs";
16
15
  import "./chunk-FJ35V3TE.mjs";
17
- import "./chunk-IGEHMLHM.mjs";
18
- import "./chunk-JTOHAMIW.mjs";
16
+ import "./chunk-2XCNTG4O.mjs";
17
+ import "./chunk-4LW6443F.mjs";
18
+ import "./chunk-52P5ZRBD.mjs";
19
+ import "./chunk-652KEAX3.mjs";
19
20
  import "./chunk-QZCNVAH6.mjs";
20
- import "./chunk-OLE2USEN.mjs";
21
- import "./chunk-GFHSSCCR.mjs";
21
+ import "./chunk-INBJ7SND.mjs";
22
+ import "./chunk-VSOWNKPA.mjs";
22
23
  export {
23
24
  run
24
25
  };
@@ -6,15 +6,15 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __pathDirname(__filename);
7
7
  import {
8
8
  computeContactsSnapshot
9
- } from "./chunk-IGEHMLHM.mjs";
9
+ } from "./chunk-52P5ZRBD.mjs";
10
10
  import {
11
11
  DatabaseManager,
12
12
  StaticPathProvider,
13
13
  createDatabaseManagerAdapter,
14
14
  getContactsFactsCacheDir,
15
15
  initAppLogger
16
- } from "./chunk-OLE2USEN.mjs";
17
- import "./chunk-GFHSSCCR.mjs";
16
+ } from "./chunk-INBJ7SND.mjs";
17
+ import "./chunk-VSOWNKPA.mjs";
18
18
 
19
19
  // ../../packages/node-runtime/src/services/contacts/worker-entry.ts
20
20
  import { parentPort, workerData } from "worker_threads";
@@ -21,8 +21,8 @@ import {
21
21
  initAppLogger,
22
22
  setCache,
23
23
  toAnnualSummaryRangeKey
24
- } from "./chunk-OLE2USEN.mjs";
25
- import "./chunk-GFHSSCCR.mjs";
24
+ } from "./chunk-INBJ7SND.mjs";
25
+ import "./chunk-VSOWNKPA.mjs";
26
26
 
27
27
  // ../../packages/node-runtime/src/services/global-insight/worker-entry.ts
28
28
  import { parentPort, workerData } from "worker_threads";
@@ -9,25 +9,26 @@ import {
9
9
  registerWebRoutes,
10
10
  startHttpServer,
11
11
  stopHttpServer
12
- } from "./chunk-UO2XVFY6.mjs";
13
- import "./chunk-JCSPDTZL.mjs";
14
- import "./chunk-DGF3S3TZ.mjs";
12
+ } from "./chunk-MENKFEPC.mjs";
13
+ import "./chunk-H6D4DZOC.mjs";
14
+ import "./chunk-72RWABYJ.mjs";
15
+ import "./chunk-UMBEHBIZ.mjs";
15
16
  import "./chunk-5FGB42EQ.mjs";
16
- import "./chunk-BQ3QN4QT.mjs";
17
- import "./chunk-ISRLGLUL.mjs";
17
+ import "./chunk-U6MVJSXX.mjs";
18
+ import "./chunk-4RLZFGO5.mjs";
18
19
  import "./chunk-5ADKYYNA.mjs";
19
- import "./chunk-S5NCEESV.mjs";
20
- import "./chunk-AQPDZAWB.mjs";
21
20
  import "./chunk-FJ35V3TE.mjs";
22
- import "./chunk-IGEHMLHM.mjs";
23
- import "./chunk-JTOHAMIW.mjs";
21
+ import "./chunk-2XCNTG4O.mjs";
22
+ import "./chunk-4LW6443F.mjs";
23
+ import "./chunk-52P5ZRBD.mjs";
24
+ import "./chunk-652KEAX3.mjs";
24
25
  import "./chunk-QZCNVAH6.mjs";
25
- import "./chunk-OLE2USEN.mjs";
26
- import "./chunk-GFHSSCCR.mjs";
26
+ import "./chunk-INBJ7SND.mjs";
27
+ import "./chunk-VSOWNKPA.mjs";
27
28
  export {
28
29
  createServer,
29
30
  registerWebRoutes,
30
31
  startHttpServer,
31
32
  stopHttpServer
32
33
  };
33
- //# sourceMappingURL=http-HV6XWU6X.mjs.map
34
+ //# sourceMappingURL=http-HSK46XEU.mjs.map
@@ -10,10 +10,11 @@ import {
10
10
  analyzeIncrementalImport,
11
11
  analyzeNewImport,
12
12
  autoImport,
13
+ autoImportBatch,
13
14
  incrementalImport,
14
15
  streamImport
15
- } from "./chunk-BQ3QN4QT.mjs";
16
- import "./chunk-S5NCEESV.mjs";
16
+ } from "./chunk-U6MVJSXX.mjs";
17
+ import "./chunk-2XCNTG4O.mjs";
17
18
  import {
18
19
  detectAllFormats,
19
20
  detectFormat,
@@ -21,17 +22,18 @@ import {
21
22
  getFormatFeatureById,
22
23
  getSupportedFormats,
23
24
  scanMultiChatFile
24
- } from "./chunk-AQPDZAWB.mjs";
25
- import "./chunk-IGEHMLHM.mjs";
26
- import "./chunk-JTOHAMIW.mjs";
25
+ } from "./chunk-4LW6443F.mjs";
26
+ import "./chunk-52P5ZRBD.mjs";
27
+ import "./chunk-652KEAX3.mjs";
27
28
  import "./chunk-QZCNVAH6.mjs";
28
- import "./chunk-OLE2USEN.mjs";
29
- import "./chunk-GFHSSCCR.mjs";
29
+ import "./chunk-INBJ7SND.mjs";
30
+ import "./chunk-VSOWNKPA.mjs";
30
31
  export {
31
32
  analyzeAutoImport,
32
33
  analyzeIncrementalImport,
33
34
  analyzeNewImport,
34
35
  autoImport,
36
+ autoImportBatch,
35
37
  detectAllFormats,
36
38
  detectFormat,
37
39
  findEntryFileInDirectory,
@@ -41,4 +43,4 @@ export {
41
43
  scanMultiChatFile,
42
44
  streamImport
43
45
  };
44
- //# sourceMappingURL=import-DP2XLZ2H.mjs.map
46
+ //# sourceMappingURL=import-DF2WD2HE.mjs.map
package/dist/index.mjs CHANGED
@@ -7,24 +7,25 @@ const __dirname = __pathDirname(__filename);
7
7
  import {
8
8
  startHttpServer,
9
9
  stopHttpServer
10
- } from "./chunk-UO2XVFY6.mjs";
11
- import "./chunk-JCSPDTZL.mjs";
12
- import "./chunk-DGF3S3TZ.mjs";
10
+ } from "./chunk-MENKFEPC.mjs";
11
+ import "./chunk-H6D4DZOC.mjs";
12
+ import "./chunk-72RWABYJ.mjs";
13
13
  import {
14
14
  run
15
- } from "./chunk-IGK6UMN2.mjs";
15
+ } from "./chunk-JX6MFS6F.mjs";
16
+ import "./chunk-UMBEHBIZ.mjs";
16
17
  import "./chunk-5FGB42EQ.mjs";
17
- import "./chunk-BQ3QN4QT.mjs";
18
- import "./chunk-ISRLGLUL.mjs";
18
+ import "./chunk-U6MVJSXX.mjs";
19
+ import "./chunk-4RLZFGO5.mjs";
19
20
  import "./chunk-5ADKYYNA.mjs";
20
- import "./chunk-S5NCEESV.mjs";
21
- import "./chunk-AQPDZAWB.mjs";
22
21
  import "./chunk-FJ35V3TE.mjs";
23
- import "./chunk-IGEHMLHM.mjs";
24
- import "./chunk-JTOHAMIW.mjs";
22
+ import "./chunk-2XCNTG4O.mjs";
23
+ import "./chunk-4LW6443F.mjs";
24
+ import "./chunk-52P5ZRBD.mjs";
25
+ import "./chunk-652KEAX3.mjs";
25
26
  import "./chunk-QZCNVAH6.mjs";
26
- import "./chunk-OLE2USEN.mjs";
27
- import "./chunk-GFHSSCCR.mjs";
27
+ import "./chunk-INBJ7SND.mjs";
28
+ import "./chunk-VSOWNKPA.mjs";
28
29
  export {
29
30
  run,
30
31
  startHttpServer,