chatlab-cli 0.26.2 → 0.26.3
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-BVIG2LCO.mjs → chat-command-D37MMEJ7.mjs} +4 -4
- package/dist/{chunk-6AOEMUCM.mjs → chunk-742TAKEP.mjs} +2 -2
- package/dist/{chunk-3XFHIQIW.mjs → chunk-D5MWER7N.mjs} +2 -2
- package/dist/{chunk-JFSTXSX2.mjs → chunk-GNGZHBKM.mjs} +3 -3
- package/dist/{chunk-GTXX72AQ.mjs → chunk-K5SGXTVJ.mjs} +13 -13
- package/dist/{chunk-GBQQJJKK.mjs → chunk-QMXNJRTT.mjs} +372 -173
- package/dist/chunk-QMXNJRTT.mjs.map +1 -0
- package/dist/{chunk-SCE4YL3M.mjs → chunk-RMITK4IC.mjs} +2 -2
- package/dist/{chunk-QKQRV7RV.mjs → chunk-VCN64OD6.mjs} +2 -2
- package/dist/{chunk-TMZC3SNX.mjs → chunk-YPTJVTVJ.mjs} +1037 -49
- package/dist/chunk-YPTJVTVJ.mjs.map +1 -0
- package/dist/cli.mjs +3 -3
- package/dist/{http-NLFLQDI7.mjs → http-6F6TYWCI.mjs} +8 -8
- package/dist/{import-ILK6MGYR.mjs → import-VYPOMSSA.mjs} +4 -4
- package/dist/index.mjs +8 -8
- package/dist/{mcp-FOLR5XJL.mjs → mcp-AR7L5FA3.mjs} +4 -4
- package/dist/{src-OQN3VE73.mjs → src-6S7JPKHX.mjs} +6 -2
- package/dist/{stream-import-F5QI2HTO.mjs → stream-import-KZFC3XT2.mjs} +3 -3
- package/dist/{update-checker-JIBA7T4U.mjs → update-checker-3N7HQEP2.mjs} +36 -12
- package/dist/update-checker-3N7HQEP2.mjs.map +1 -0
- package/dist-web/assets/{DebugToolsPanel-CrqULdXp.css → DebugToolsPanel-DzZmSzIU.css} +1 -1
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-BTdqmm0y.js +107 -0
- package/dist-web/assets/{MessageExportModal-ttP_JPqO.js → MessageExportModal-CF6yaor7.js} +1 -1
- package/dist-web/assets/{electron-BeJHY587.js → electron-DKVw61Ww.js} +1 -1
- package/dist-web/assets/{fetch-H4B1CK_T.js → fetch-BC8jyJ_U.js} +1 -1
- package/dist-web/assets/{fetch-4s20GRbb.js → fetch-BMdgfBVS.js} +1 -1
- package/dist-web/assets/fetch-BQlEQsqi.js +5 -0
- package/dist-web/assets/{fetch-DtXUkazy.js → fetch-Bh6HC-IR.js} +1 -1
- package/dist-web/assets/{fetch-DBJ7Xkjt.js → fetch-BvVfWR-P.js} +1 -1
- package/dist-web/assets/{fetch-DW8r_JmP.js → fetch-CPeSfqsU.js} +1 -1
- package/dist-web/assets/fetch-CUw-PUYP.js +1 -0
- package/dist-web/assets/{fetch-B7USXx9R.js → fetch-CpYSD089.js} +1 -1
- package/dist-web/assets/{fetch-rtQEc8Bu.js → fetch-D2jNBqs8.js} +1 -1
- package/dist-web/assets/{fetch-BETFYYe1.js → fetch-DqEMAea3.js} +1 -1
- package/dist-web/assets/{index-Dov-rTKE.js → index-BHQnAj6l.js} +1 -1
- package/dist-web/assets/{index-CsxrXMkt.js → index-BwzuCu5R.js} +2 -2
- package/dist-web/assets/index-CG746E15.js +64 -0
- package/dist-web/assets/index-CXoQ_U22.js +173 -0
- package/dist-web/assets/index-DqybGdJH.css +1 -0
- package/dist-web/assets/{index-CjnMyejM.css → index-HgIuP1Td.css} +1 -1
- package/dist-web/assets/{index-CYMTvtEI.js → index-Qh0XLt3R.js} +1 -1
- package/dist-web/assets/{index-Dtm2oajn.css → index-R82N2_0b.css} +1 -1
- package/dist-web/assets/index-wPAmuQZY.js +11 -0
- package/dist-web/assets/{web-1-WNRDnP.js → web-Bx2TiHDk.js} +1 -1
- package/dist-web/favicon.ico +0 -0
- package/dist-web/index.html +3 -3
- package/package.json +1 -1
- package/dist/chunk-GBQQJJKK.mjs.map +0 -1
- package/dist/chunk-TMZC3SNX.mjs.map +0 -1
- package/dist/update-checker-JIBA7T4U.mjs.map +0 -1
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-D9mCNaYM.js +0 -182
- package/dist-web/assets/electron-Dbml-SPN.js +0 -1
- package/dist-web/assets/fetch-DcEBAz_3.js +0 -1
- package/dist-web/assets/fetch-DsCNr_M0.js +0 -1
- package/dist-web/assets/index-C2ts-hTr.js +0 -173
- package/dist-web/assets/index-DkownpUj.js +0 -163
- package/dist-web/assets/index-LCedyGl2.css +0 -1
- package/dist-web/assets/index-m7v4PP7r.js +0 -11
- /package/dist/{chat-command-BVIG2LCO.mjs.map → chat-command-D37MMEJ7.mjs.map} +0 -0
- /package/dist/{chunk-6AOEMUCM.mjs.map → chunk-742TAKEP.mjs.map} +0 -0
- /package/dist/{chunk-3XFHIQIW.mjs.map → chunk-D5MWER7N.mjs.map} +0 -0
- /package/dist/{chunk-JFSTXSX2.mjs.map → chunk-GNGZHBKM.mjs.map} +0 -0
- /package/dist/{chunk-GTXX72AQ.mjs.map → chunk-K5SGXTVJ.mjs.map} +0 -0
- /package/dist/{chunk-SCE4YL3M.mjs.map → chunk-RMITK4IC.mjs.map} +0 -0
- /package/dist/{chunk-QKQRV7RV.mjs.map → chunk-VCN64OD6.mjs.map} +0 -0
- /package/dist/{http-NLFLQDI7.mjs.map → http-6F6TYWCI.mjs.map} +0 -0
- /package/dist/{import-ILK6MGYR.mjs.map → import-VYPOMSSA.mjs.map} +0 -0
- /package/dist/{mcp-FOLR5XJL.mjs.map → mcp-AR7L5FA3.mjs.map} +0 -0
- /package/dist/{src-OQN3VE73.mjs.map → src-6S7JPKHX.mjs.map} +0 -0
- /package/dist/{stream-import-F5QI2HTO.mjs.map → stream-import-KZFC3XT2.mjs.map} +0 -0
package/dist/cli.mjs
CHANGED
|
@@ -6,11 +6,11 @@ const __filename = __fileURLToPath(import.meta.url);
|
|
|
6
6
|
const __dirname = __pathDirname(__filename);
|
|
7
7
|
import {
|
|
8
8
|
run
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-K5SGXTVJ.mjs";
|
|
10
|
+
import "./chunk-742TAKEP.mjs";
|
|
11
11
|
import "./chunk-5ADKYYNA.mjs";
|
|
12
12
|
import "./chunk-FJ35V3TE.mjs";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-YPTJVTVJ.mjs";
|
|
14
14
|
import "./chunk-VSOWNKPA.mjs";
|
|
15
15
|
export {
|
|
16
16
|
run
|
|
@@ -9,15 +9,15 @@ import {
|
|
|
9
9
|
registerWebRoutes,
|
|
10
10
|
startHttpServer,
|
|
11
11
|
stopHttpServer
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-QMXNJRTT.mjs";
|
|
13
|
+
import "./chunk-D5MWER7N.mjs";
|
|
14
|
+
import "./chunk-VCN64OD6.mjs";
|
|
15
|
+
import "./chunk-742TAKEP.mjs";
|
|
16
16
|
import "./chunk-5ADKYYNA.mjs";
|
|
17
17
|
import "./chunk-FJ35V3TE.mjs";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-GNGZHBKM.mjs";
|
|
19
|
+
import "./chunk-RMITK4IC.mjs";
|
|
20
|
+
import "./chunk-YPTJVTVJ.mjs";
|
|
21
21
|
import "./chunk-VSOWNKPA.mjs";
|
|
22
22
|
export {
|
|
23
23
|
createServer,
|
|
@@ -25,4 +25,4 @@ export {
|
|
|
25
25
|
startHttpServer,
|
|
26
26
|
stopHttpServer
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=http-
|
|
28
|
+
//# sourceMappingURL=http-6F6TYWCI.mjs.map
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
detectFormat as detectFormat2,
|
|
9
9
|
importData,
|
|
10
10
|
parseFile
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-D5MWER7N.mjs";
|
|
12
12
|
import {
|
|
13
13
|
analyzeIncrementalImport,
|
|
14
14
|
analyzeNewImport,
|
|
15
15
|
incrementalImport,
|
|
16
16
|
streamImport
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-VCN64OD6.mjs";
|
|
18
18
|
import {
|
|
19
19
|
detectAllFormats,
|
|
20
20
|
detectFormat,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
getFormatFeatureById,
|
|
23
23
|
getSupportedFormats,
|
|
24
24
|
scanMultiChatFile
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-YPTJVTVJ.mjs";
|
|
26
26
|
import "./chunk-VSOWNKPA.mjs";
|
|
27
27
|
export {
|
|
28
28
|
analyzeIncrementalImport,
|
|
@@ -39,4 +39,4 @@ export {
|
|
|
39
39
|
scanMultiChatFile,
|
|
40
40
|
streamImport
|
|
41
41
|
};
|
|
42
|
-
//# sourceMappingURL=import-
|
|
42
|
+
//# sourceMappingURL=import-VYPOMSSA.mjs.map
|
package/dist/index.mjs
CHANGED
|
@@ -7,18 +7,18 @@ const __dirname = __pathDirname(__filename);
|
|
|
7
7
|
import {
|
|
8
8
|
startHttpServer,
|
|
9
9
|
stopHttpServer
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QMXNJRTT.mjs";
|
|
11
11
|
import {
|
|
12
12
|
run
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-K5SGXTVJ.mjs";
|
|
14
|
+
import "./chunk-D5MWER7N.mjs";
|
|
15
|
+
import "./chunk-VCN64OD6.mjs";
|
|
16
|
+
import "./chunk-742TAKEP.mjs";
|
|
17
17
|
import "./chunk-5ADKYYNA.mjs";
|
|
18
18
|
import "./chunk-FJ35V3TE.mjs";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-GNGZHBKM.mjs";
|
|
20
|
+
import "./chunk-RMITK4IC.mjs";
|
|
21
|
+
import "./chunk-YPTJVTVJ.mjs";
|
|
22
22
|
import "./chunk-VSOWNKPA.mjs";
|
|
23
23
|
export {
|
|
24
24
|
run,
|
|
@@ -6,7 +6,7 @@ const __filename = __fileURLToPath(import.meta.url);
|
|
|
6
6
|
const __dirname = __pathDirname(__filename);
|
|
7
7
|
import {
|
|
8
8
|
assertCliDataDirCompatible
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-742TAKEP.mjs";
|
|
10
10
|
import {
|
|
11
11
|
getVersion
|
|
12
12
|
} from "./chunk-5ADKYYNA.mjs";
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
CoreDataProvider,
|
|
18
18
|
MCP_TOOL_REGISTRY
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-RMITK4IC.mjs";
|
|
20
20
|
import {
|
|
21
21
|
DatabaseManager,
|
|
22
22
|
NodePathProvider,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
hasPendingElectronDataWarning,
|
|
27
27
|
loadConfig,
|
|
28
28
|
verifyCliDataPath
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-YPTJVTVJ.mjs";
|
|
30
30
|
import "./chunk-VSOWNKPA.mjs";
|
|
31
31
|
|
|
32
32
|
// src/mcp.ts
|
|
@@ -410,4 +410,4 @@ export {
|
|
|
410
410
|
initMcpRuntime,
|
|
411
411
|
startCliMcpServer
|
|
412
412
|
};
|
|
413
|
-
//# sourceMappingURL=mcp-
|
|
413
|
+
//# sourceMappingURL=mcp-AR7L5FA3.mjs.map
|
|
@@ -121,6 +121,7 @@ import {
|
|
|
121
121
|
getChartPlannerCapabilityForMessage,
|
|
122
122
|
getChatDbMigrations,
|
|
123
123
|
getCurrentLogFile,
|
|
124
|
+
getDbFileVersion,
|
|
124
125
|
getDefaultNodeUserDataDir,
|
|
125
126
|
getDefaultRulesForLocale,
|
|
126
127
|
getDictList,
|
|
@@ -129,6 +130,7 @@ import {
|
|
|
129
130
|
getErrorCount,
|
|
130
131
|
getJieba,
|
|
131
132
|
getNlpDir,
|
|
133
|
+
getOrComputeAnalysisCache,
|
|
132
134
|
getPendingNodeDataDirMigration,
|
|
133
135
|
getPosTagDefinitions,
|
|
134
136
|
getRuleGroupsForLocale,
|
|
@@ -218,7 +220,7 @@ import {
|
|
|
218
220
|
wasElectronUsed,
|
|
219
221
|
wrapWithChartSchemaGate,
|
|
220
222
|
writeParseResultToDb
|
|
221
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-YPTJVTVJ.mjs";
|
|
222
224
|
import "./chunk-VSOWNKPA.mjs";
|
|
223
225
|
export {
|
|
224
226
|
AIChatManager,
|
|
@@ -338,6 +340,7 @@ export {
|
|
|
338
340
|
getChartPlannerCapabilityForMessage,
|
|
339
341
|
getChatDbMigrations,
|
|
340
342
|
getCurrentLogFile,
|
|
343
|
+
getDbFileVersion,
|
|
341
344
|
getDefaultNodeUserDataDir,
|
|
342
345
|
getDefaultRulesForLocale,
|
|
343
346
|
getDictList,
|
|
@@ -346,6 +349,7 @@ export {
|
|
|
346
349
|
getErrorCount,
|
|
347
350
|
getJieba,
|
|
348
351
|
getNlpDir,
|
|
352
|
+
getOrComputeAnalysisCache,
|
|
349
353
|
getPendingNodeDataDirMigration,
|
|
350
354
|
getPosTagDefinitions,
|
|
351
355
|
getRuleGroupsForLocale,
|
|
@@ -436,4 +440,4 @@ export {
|
|
|
436
440
|
wrapWithChartSchemaGate,
|
|
437
441
|
writeParseResultToDb
|
|
438
442
|
};
|
|
439
|
-
//# sourceMappingURL=src-
|
|
443
|
+
//# sourceMappingURL=src-6S7JPKHX.mjs.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
analyzeNewImport,
|
|
10
10
|
incrementalImport,
|
|
11
11
|
streamImport
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VCN64OD6.mjs";
|
|
13
13
|
import {
|
|
14
14
|
detectAllFormats,
|
|
15
15
|
detectFormat,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
getFormatFeatureById,
|
|
18
18
|
getSupportedFormats,
|
|
19
19
|
scanMultiChatFile
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-YPTJVTVJ.mjs";
|
|
21
21
|
import "./chunk-VSOWNKPA.mjs";
|
|
22
22
|
export {
|
|
23
23
|
analyzeIncrementalImport,
|
|
@@ -31,4 +31,4 @@ export {
|
|
|
31
31
|
scanMultiChatFile,
|
|
32
32
|
streamImport
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=stream-import-
|
|
34
|
+
//# sourceMappingURL=stream-import-KZFC3XT2.mjs.map
|
|
@@ -65,34 +65,58 @@ async function fetchLatestVersion() {
|
|
|
65
65
|
}
|
|
66
66
|
function promptUser(question, choices) {
|
|
67
67
|
return new Promise((resolve) => {
|
|
68
|
+
let selected = 0;
|
|
69
|
+
const render = () => {
|
|
70
|
+
if (rendered) process.stderr.write(`\x1B[${choices.length}A`);
|
|
71
|
+
choices.forEach((c, i) => {
|
|
72
|
+
process.stderr.write(`\x1B[2K${i === selected ? "\u203A " : " "}${i + 1}. ${c}
|
|
73
|
+
`);
|
|
74
|
+
});
|
|
75
|
+
};
|
|
68
76
|
process.stderr.write(`${question}
|
|
69
77
|
|
|
70
78
|
`);
|
|
71
|
-
choices.forEach((c, i) => {
|
|
72
|
-
process.stderr.write(i === 0 ? `\u203A ${i + 1}. ${c}
|
|
73
|
-
` : ` ${i + 1}. ${c}
|
|
74
|
-
`);
|
|
75
|
-
});
|
|
76
|
-
process.stderr.write("\n");
|
|
77
79
|
if (!process.stdin.isTTY || !process.stdin.setRawMode) {
|
|
78
80
|
resolve(2);
|
|
79
81
|
return;
|
|
80
82
|
}
|
|
83
|
+
let rendered = false;
|
|
84
|
+
render();
|
|
85
|
+
rendered = true;
|
|
86
|
+
process.stderr.write("\n");
|
|
81
87
|
process.stdin.setRawMode(true);
|
|
82
88
|
process.stdin.resume();
|
|
89
|
+
const cleanup = () => {
|
|
90
|
+
process.stdin.removeListener("data", onData);
|
|
91
|
+
process.stdin.setRawMode(false);
|
|
92
|
+
process.stdin.pause();
|
|
93
|
+
};
|
|
83
94
|
const onData = (data) => {
|
|
84
95
|
const key = data.toString();
|
|
85
96
|
if (key === "") {
|
|
86
|
-
|
|
87
|
-
process.stdin.pause();
|
|
97
|
+
cleanup();
|
|
88
98
|
process.exit(0);
|
|
89
99
|
}
|
|
100
|
+
if (key === "\x1B[A" || key === "k") {
|
|
101
|
+
selected = (selected - 1 + choices.length) % choices.length;
|
|
102
|
+
render();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (key === "\x1B[B" || key === "j") {
|
|
106
|
+
selected = (selected + 1) % choices.length;
|
|
107
|
+
render();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (key === "\r" || key === "\n") {
|
|
111
|
+
cleanup();
|
|
112
|
+
process.stderr.write("\n");
|
|
113
|
+
resolve(selected + 1);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
90
116
|
if (key.length === 1) {
|
|
91
117
|
const num = parseInt(key);
|
|
92
118
|
if (num >= 1 && num <= choices.length) {
|
|
93
|
-
|
|
94
|
-
process.stdin.setRawMode(false);
|
|
95
|
-
process.stdin.pause();
|
|
119
|
+
cleanup();
|
|
96
120
|
process.stderr.write("\n");
|
|
97
121
|
resolve(num);
|
|
98
122
|
}
|
|
@@ -192,4 +216,4 @@ export {
|
|
|
192
216
|
performCliSelfUpdate,
|
|
193
217
|
startPeriodicUpdateCheck
|
|
194
218
|
};
|
|
195
|
-
//# sourceMappingURL=update-checker-
|
|
219
|
+
//# sourceMappingURL=update-checker-3N7HQEP2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/update-checker.ts"],"sourcesContent":["/**\n * CLI startup update checker — npm registry version comparison\n * with interactive prompt (Codex-style).\n *\n * Caches check results to avoid hitting npm on every invocation.\n * Respects user \"skip until next version\" preference.\n */\n\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport * as os from 'os'\nimport { execFile } from 'child_process'\nimport { getVersion } from './version'\n\nconst PACKAGE_NAME = 'chatlab-cli'\nconst CACHE_STALE_MS = 6 * 60 * 60 * 1000 // 6h — startup cache TTL\nconst PERIODIC_CHECK_MS = 24 * 60 * 60 * 1000 // 24h — long-running service interval\nconst CACHE_FILE = path.join(os.homedir(), '.chatlab', 'update-check.json')\n\ninterface UpdateCache {\n lastCheckTime: number\n latestVersion: string | null\n skippedVersion?: string\n}\n\nexport interface UpdateCommandResult {\n success: boolean\n error?: string\n}\n\nexport interface PerformCliSelfUpdateOptions {\n runCommand?: (command: string, args: string[]) => Promise<UpdateCommandResult>\n write?: (text: string) => void\n platform?: NodeJS.Platform\n}\n\nfunction readCache(): UpdateCache | null {\n try {\n if (fs.existsSync(CACHE_FILE)) {\n return JSON.parse(fs.readFileSync(CACHE_FILE, 'utf-8'))\n }\n } catch {\n // corrupted cache\n }\n return null\n}\n\nfunction writeCache(cache: UpdateCache): void {\n try {\n const dir = path.dirname(CACHE_FILE)\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true })\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache), 'utf-8')\n } catch {\n // non-critical\n }\n}\n\nfunction isNewerVersion(latest: string, current: string): boolean {\n const parse = (v: string) => {\n const [core, pre] = v.split('-', 2)\n const parts = core.split('.').map(Number)\n return { major: parts[0] || 0, minor: parts[1] || 0, patch: parts[2] || 0, pre }\n }\n const l = parse(latest)\n const c = parse(current)\n if (l.major !== c.major) return l.major > c.major\n if (l.minor !== c.minor) return l.minor > c.minor\n if (l.patch !== c.patch) return l.patch > c.patch\n // Design note: prerelease users are not prompted for prerelease-to-prerelease updates.\n // Only a stable release with the same core version should supersede a prerelease build.\n if (c.pre && !l.pre) return true\n return false\n}\n\nasync function fetchLatestVersion(): Promise<string | null> {\n try {\n const resp = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {\n headers: { Accept: 'application/json' },\n signal: AbortSignal.timeout(8_000),\n })\n if (!resp.ok) return null\n const data = (await resp.json()) as { version?: string }\n return data.version || null\n } catch {\n return null\n }\n}\n\nfunction promptUser(question: string, choices: string[]): Promise<number> {\n return new Promise((resolve) => {\n let selected = 0\n\n const render = () => {\n // Move cursor up to rewrite choices (skip on first draw)\n if (rendered) process.stderr.write(`\\x1b[${choices.length}A`)\n choices.forEach((c, i) => {\n process.stderr.write(`\\x1b[2K${i === selected ? '› ' : ' '}${i + 1}. ${c}\\n`)\n })\n }\n\n process.stderr.write(`${question}\\n\\n`)\n\n if (!process.stdin.isTTY || !process.stdin.setRawMode) {\n resolve(2)\n return\n }\n\n let rendered = false\n render()\n rendered = true\n process.stderr.write('\\n')\n\n process.stdin.setRawMode(true)\n process.stdin.resume()\n\n const cleanup = () => {\n process.stdin.removeListener('data', onData)\n process.stdin.setRawMode!(false)\n process.stdin.pause()\n }\n\n const onData = (data: Buffer) => {\n const key = data.toString()\n if (key === '\\x03') {\n cleanup()\n process.exit(0)\n }\n // Arrow up / k\n if (key === '\\x1b[A' || key === 'k') {\n selected = (selected - 1 + choices.length) % choices.length\n render()\n return\n }\n // Arrow down / j\n if (key === '\\x1b[B' || key === 'j') {\n selected = (selected + 1) % choices.length\n render()\n return\n }\n // Enter — confirm current selection\n if (key === '\\r' || key === '\\n') {\n cleanup()\n process.stderr.write('\\n')\n resolve(selected + 1)\n return\n }\n // Digit key — direct choice\n if (key.length === 1) {\n const num = parseInt(key)\n if (num >= 1 && num <= choices.length) {\n cleanup()\n process.stderr.write('\\n')\n resolve(num)\n }\n }\n }\n process.stdin.on('data', onData)\n })\n}\n\nfunction runNpmUpdateCommand(\n command: string,\n args: string[],\n write: (text: string) => void\n): Promise<UpdateCommandResult> {\n return new Promise((resolve) => {\n const child = execFile(command, args, { timeout: 120_000 }, (err, _stdout, stderr) => {\n if (err) {\n resolve({ success: false, error: stderr || err.message })\n } else {\n resolve({ success: true })\n }\n })\n child.stdout?.on('data', (chunk) => write(String(chunk)))\n child.stderr?.on('data', (chunk) => write(String(chunk)))\n })\n}\n\nexport function performCliSelfUpdate(options: PerformCliSelfUpdateOptions = {}): Promise<UpdateCommandResult> {\n const platformName = options.platform ?? process.platform\n const npmCmd = platformName === 'win32' ? 'npm.cmd' : 'npm'\n const args = ['install', '-g', `${PACKAGE_NAME}@latest`]\n const write = options.write ?? ((text) => process.stderr.write(text))\n const runCommand = options.runCommand ?? ((command, commandArgs) => runNpmUpdateCommand(command, commandArgs, write))\n\n write(`\\n Running: ${npmCmd} ${args.join(' ')}\\n\\n`)\n return runCommand(npmCmd, args)\n}\n\nfunction isDevEnvironment(): boolean {\n if (process.env.CHATLAB_SKIP_UPDATE_CHECK) return true\n if (process.env.NODE_ENV === 'development') return true\n const entryFile = process.argv[1] || ''\n return entryFile.endsWith('.ts') || entryFile.endsWith('.mts')\n}\n\n/**\n * Fire-and-forget: fetch latest version from npm and update local cache.\n * Runs in background so CLI startup is never blocked by network IO.\n */\nfunction refreshCacheInBackground(existingCache: UpdateCache | null): void {\n fetchLatestVersion()\n .then((latestVersion) => {\n writeCache({\n lastCheckTime: Date.now(),\n latestVersion,\n skippedVersion: existingCache?.skippedVersion,\n })\n })\n .catch(() => {})\n}\n\n/**\n * Start a periodic background cache refresh for long-running services.\n * Immediately refreshes once on startup, then every 24h thereafter.\n * The update prompt will appear on the *next* CLI startup.\n * The timer is unref'd so it won't prevent process exit.\n */\nexport function startPeriodicUpdateCheck(): void {\n if (isDevEnvironment()) return\n refreshCacheInBackground(readCache())\n const timer = setInterval(() => {\n refreshCacheInBackground(readCache())\n }, PERIODIC_CHECK_MS)\n timer.unref()\n}\n\n/**\n * Check for updates and prompt user interactively.\n *\n * Strategy (Codex-style):\n * - Read local cache synchronously (instant, no network).\n * - If cache is stale, kick off a background fetch for *next* run.\n * - Prompt is only shown when cache already contains a newer version.\n * - This means the first run after a new release sees no prompt;\n * the second run (with fresh cache) shows it — zero startup delay.\n */\nexport async function checkForUpdatesInteractive(): Promise<void> {\n if (!process.stdin.isTTY || process.env.CI || isDevEnvironment()) return\n\n const currentVersion = getVersion()\n const cache = readCache()\n\n // Kick off background refresh if cache is missing or stale\n if (!cache || Date.now() - cache.lastCheckTime >= CACHE_STALE_MS) {\n refreshCacheInBackground(cache)\n }\n\n // Prompt is based on cached data only — no network wait\n const latestVersion = cache?.latestVersion\n if (!latestVersion || !isNewerVersion(latestVersion, currentVersion)) return\n if (cache?.skippedVersion === latestVersion) return\n\n const choice = await promptUser(` ✨ Update available! ${currentVersion} → ${latestVersion}`, [\n `Update now (runs \\`npm install -g ${PACKAGE_NAME}\\`)`,\n 'Skip',\n 'Skip until next version',\n ])\n\n if (choice === 1) {\n const result = await performCliSelfUpdate()\n if (result.success) {\n process.stderr.write(\n ` \\x1b[32m🎉 Updated successfully! Please restart chatlab to use the new version.\\x1b[0m\\n\\n`\n )\n process.exit(0)\n } else {\n process.stderr.write(` ❌ Update failed: ${result.error}\\n\\n`)\n }\n } else if (choice === 3) {\n writeCache({\n lastCheckTime: Date.now(),\n latestVersion,\n skippedVersion: latestVersion,\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAQA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,SAAS,gBAAgB;AAGzB,IAAM,eAAe;AACrB,IAAM,iBAAiB,IAAI,KAAK,KAAK;AACrC,IAAM,oBAAoB,KAAK,KAAK,KAAK;AACzC,IAAM,aAAkB,UAAQ,WAAQ,GAAG,YAAY,mBAAmB;AAmB1E,SAAS,YAAgC;AACvC,MAAI;AACF,QAAO,cAAW,UAAU,GAAG;AAC7B,aAAO,KAAK,MAAS,gBAAa,YAAY,OAAO,CAAC;AAAA,IACxD;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAEA,SAAS,WAAW,OAA0B;AAC5C,MAAI;AACF,UAAM,MAAW,aAAQ,UAAU;AACnC,QAAI,CAAI,cAAW,GAAG,EAAG,CAAG,aAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAC9D,IAAG,iBAAc,YAAY,KAAK,UAAU,KAAK,GAAG,OAAO;AAAA,EAC7D,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,eAAe,QAAgB,SAA0B;AAChE,QAAM,QAAQ,CAAC,MAAc;AAC3B,UAAM,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,KAAK,CAAC;AAClC,UAAM,QAAQ,KAAK,MAAM,GAAG,EAAE,IAAI,MAAM;AACxC,WAAO,EAAE,OAAO,MAAM,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,GAAG,IAAI;AAAA,EACjF;AACA,QAAM,IAAI,MAAM,MAAM;AACtB,QAAM,IAAI,MAAM,OAAO;AACvB,MAAI,EAAE,UAAU,EAAE,MAAO,QAAO,EAAE,QAAQ,EAAE;AAC5C,MAAI,EAAE,UAAU,EAAE,MAAO,QAAO,EAAE,QAAQ,EAAE;AAC5C,MAAI,EAAE,UAAU,EAAE,MAAO,QAAO,EAAE,QAAQ,EAAE;AAG5C,MAAI,EAAE,OAAO,CAAC,EAAE,IAAK,QAAO;AAC5B,SAAO;AACT;AAEA,eAAe,qBAA6C;AAC1D,MAAI;AACF,UAAM,OAAO,MAAM,MAAM,8BAA8B,YAAY,WAAW;AAAA,MAC5E,SAAS,EAAE,QAAQ,mBAAmB;AAAA,MACtC,QAAQ,YAAY,QAAQ,GAAK;AAAA,IACnC,CAAC;AACD,QAAI,CAAC,KAAK,GAAI,QAAO;AACrB,UAAM,OAAQ,MAAM,KAAK,KAAK;AAC9B,WAAO,KAAK,WAAW;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,UAAkB,SAAoC;AACxE,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,WAAW;AAEf,UAAM,SAAS,MAAM;AAEnB,UAAI,SAAU,SAAQ,OAAO,MAAM,QAAQ,QAAQ,MAAM,GAAG;AAC5D,cAAQ,QAAQ,CAAC,GAAG,MAAM;AACxB,gBAAQ,OAAO,MAAM,UAAU,MAAM,WAAW,YAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAAA,CAAI;AAAA,MAC/E,CAAC;AAAA,IACH;AAEA,YAAQ,OAAO,MAAM,GAAG,QAAQ;AAAA;AAAA,CAAM;AAEtC,QAAI,CAAC,QAAQ,MAAM,SAAS,CAAC,QAAQ,MAAM,YAAY;AACrD,cAAQ,CAAC;AACT;AAAA,IACF;AAEA,QAAI,WAAW;AACf,WAAO;AACP,eAAW;AACX,YAAQ,OAAO,MAAM,IAAI;AAEzB,YAAQ,MAAM,WAAW,IAAI;AAC7B,YAAQ,MAAM,OAAO;AAErB,UAAM,UAAU,MAAM;AACpB,cAAQ,MAAM,eAAe,QAAQ,MAAM;AAC3C,cAAQ,MAAM,WAAY,KAAK;AAC/B,cAAQ,MAAM,MAAM;AAAA,IACtB;AAEA,UAAM,SAAS,CAAC,SAAiB;AAC/B,YAAM,MAAM,KAAK,SAAS;AAC1B,UAAI,QAAQ,KAAQ;AAClB,gBAAQ;AACR,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,UAAI,QAAQ,YAAY,QAAQ,KAAK;AACnC,oBAAY,WAAW,IAAI,QAAQ,UAAU,QAAQ;AACrD,eAAO;AACP;AAAA,MACF;AAEA,UAAI,QAAQ,YAAY,QAAQ,KAAK;AACnC,oBAAY,WAAW,KAAK,QAAQ;AACpC,eAAO;AACP;AAAA,MACF;AAEA,UAAI,QAAQ,QAAQ,QAAQ,MAAM;AAChC,gBAAQ;AACR,gBAAQ,OAAO,MAAM,IAAI;AACzB,gBAAQ,WAAW,CAAC;AACpB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,GAAG;AACpB,cAAM,MAAM,SAAS,GAAG;AACxB,YAAI,OAAO,KAAK,OAAO,QAAQ,QAAQ;AACrC,kBAAQ;AACR,kBAAQ,OAAO,MAAM,IAAI;AACzB,kBAAQ,GAAG;AAAA,QACb;AAAA,MACF;AAAA,IACF;AACA,YAAQ,MAAM,GAAG,QAAQ,MAAM;AAAA,EACjC,CAAC;AACH;AAEA,SAAS,oBACP,SACA,MACA,OAC8B;AAC9B,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAQ,SAAS,SAAS,MAAM,EAAE,SAAS,KAAQ,GAAG,CAAC,KAAK,SAAS,WAAW;AACpF,UAAI,KAAK;AACP,gBAAQ,EAAE,SAAS,OAAO,OAAO,UAAU,IAAI,QAAQ,CAAC;AAAA,MAC1D,OAAO;AACL,gBAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,MAC3B;AAAA,IACF,CAAC;AACD,UAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,MAAM,OAAO,KAAK,CAAC,CAAC;AACxD,UAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,EAC1D,CAAC;AACH;AAEO,SAAS,qBAAqB,UAAuC,CAAC,GAAiC;AAC5G,QAAM,eAAe,QAAQ,YAAY,QAAQ;AACjD,QAAM,SAAS,iBAAiB,UAAU,YAAY;AACtD,QAAM,OAAO,CAAC,WAAW,MAAM,GAAG,YAAY,SAAS;AACvD,QAAM,QAAQ,QAAQ,UAAU,CAAC,SAAS,QAAQ,OAAO,MAAM,IAAI;AACnE,QAAM,aAAa,QAAQ,eAAe,CAAC,SAAS,gBAAgB,oBAAoB,SAAS,aAAa,KAAK;AAEnH,QAAM;AAAA,aAAgB,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA;AAAA,CAAM;AACpD,SAAO,WAAW,QAAQ,IAAI;AAChC;AAEA,SAAS,mBAA4B;AACnC,MAAI,QAAQ,IAAI,0BAA2B,QAAO;AAClD,MAAI,QAAQ,IAAI,aAAa,cAAe,QAAO;AACnD,QAAM,YAAY,QAAQ,KAAK,CAAC,KAAK;AACrC,SAAO,UAAU,SAAS,KAAK,KAAK,UAAU,SAAS,MAAM;AAC/D;AAMA,SAAS,yBAAyB,eAAyC;AACzE,qBAAmB,EAChB,KAAK,CAAC,kBAAkB;AACvB,eAAW;AAAA,MACT,eAAe,KAAK,IAAI;AAAA,MACxB;AAAA,MACA,gBAAgB,eAAe;AAAA,IACjC,CAAC;AAAA,EACH,CAAC,EACA,MAAM,MAAM;AAAA,EAAC,CAAC;AACnB;AAQO,SAAS,2BAAiC;AAC/C,MAAI,iBAAiB,EAAG;AACxB,2BAAyB,UAAU,CAAC;AACpC,QAAM,QAAQ,YAAY,MAAM;AAC9B,6BAAyB,UAAU,CAAC;AAAA,EACtC,GAAG,iBAAiB;AACpB,QAAM,MAAM;AACd;AAYA,eAAsB,6BAA4C;AAChE,MAAI,CAAC,QAAQ,MAAM,SAAS,QAAQ,IAAI,MAAM,iBAAiB,EAAG;AAElE,QAAM,iBAAiB,WAAW;AAClC,QAAM,QAAQ,UAAU;AAGxB,MAAI,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,iBAAiB,gBAAgB;AAChE,6BAAyB,KAAK;AAAA,EAChC;AAGA,QAAM,gBAAgB,OAAO;AAC7B,MAAI,CAAC,iBAAiB,CAAC,eAAe,eAAe,cAAc,EAAG;AACtE,MAAI,OAAO,mBAAmB,cAAe;AAE7C,QAAM,SAAS,MAAM,WAAW,8BAAyB,cAAc,WAAM,aAAa,IAAI;AAAA,IAC5F,qCAAqC,YAAY;AAAA,IACjD;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,WAAW,GAAG;AAChB,UAAM,SAAS,MAAM,qBAAqB;AAC1C,QAAI,OAAO,SAAS;AAClB,cAAQ,OAAO;AAAA,QACb;AAAA;AAAA;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB,OAAO;AACL,cAAQ,OAAO,MAAM,2BAAsB,OAAO,KAAK;AAAA;AAAA,CAAM;AAAA,IAC/D;AAAA,EACF,WAAW,WAAW,GAAG;AACvB,eAAW;AAAA,MACT,eAAe,KAAK,IAAI;AAAA,MACxB;AAAA,MACA,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.writing-vertical[data-v-19a25590]{writing-mode:vertical-rl;text-orientation:mixed}.data-flow-bg[data-v-19a25590]{background:repeating-linear-gradient(0deg,transparent,transparent 20px,currentColor 20px,currentColor 21px);animation:dataFlow-19a25590 20s linear infinite}@keyframes dataFlow-19a25590{0%{transform:translateY(0)}to{transform:translateY(-100px)}}.mention-menu-enter-active[data-v-0262c6da],.mention-menu-leave-active[data-v-0262c6da]{transition:opacity .16s ease,transform .16s ease}.mention-menu-enter-from[data-v-0262c6da],.mention-menu-leave-to[data-v-0262c6da]{transform:translateY(8px);opacity:0}.slash-menu-enter-active[data-v-0853b251],.slash-menu-leave-active[data-v-0853b251]{transition:opacity .16s ease,transform .16s ease}.slash-menu-enter-from[data-v-0853b251],.slash-menu-leave-to[data-v-0853b251]{transform:translateY(8px);opacity:0}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar{width:4px}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{border-radius:4px;background-color:#9ca3af4d}.dark .custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{background-color:#9ca3af26}.slide-fade-enter-active[data-v-
|
|
1
|
+
.writing-vertical[data-v-19a25590]{writing-mode:vertical-rl;text-orientation:mixed}.data-flow-bg[data-v-19a25590]{background:repeating-linear-gradient(0deg,transparent,transparent 20px,currentColor 20px,currentColor 21px);animation:dataFlow-19a25590 20s linear infinite}@keyframes dataFlow-19a25590{0%{transform:translateY(0)}to{transform:translateY(-100px)}}.mention-menu-enter-active[data-v-0262c6da],.mention-menu-leave-active[data-v-0262c6da]{transition:opacity .16s ease,transform .16s ease}.mention-menu-enter-from[data-v-0262c6da],.mention-menu-leave-to[data-v-0262c6da]{transform:translateY(8px);opacity:0}.slash-menu-enter-active[data-v-0853b251],.slash-menu-leave-active[data-v-0853b251]{transition:opacity .16s ease,transform .16s ease}.slash-menu-enter-from[data-v-0853b251],.slash-menu-leave-to[data-v-0853b251]{transform:translateY(8px);opacity:0}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar{width:4px}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{border-radius:4px;background-color:#9ca3af4d}.dark .custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{background-color:#9ca3af26}.slide-fade-enter-active[data-v-9798e70f],.slide-fade-leave-active[data-v-9798e70f]{transition:all .3s ease-out}.slide-fade-enter-from[data-v-9798e70f],.slide-fade-leave-to[data-v-9798e70f]{transform:translate(20px);opacity:0}.slide-up-enter-active[data-v-9798e70f],.slide-up-leave-active[data-v-9798e70f]{transition:all .3s ease-out}.slide-up-enter-from[data-v-9798e70f],.slide-up-leave-to[data-v-9798e70f]{transform:translateY(10px);opacity:0}.fade-up-enter-active[data-v-9798e70f],.fade-up-leave-active[data-v-9798e70f]{transition:opacity .2s ease-out}.fade-up-enter-from[data-v-9798e70f],.fade-up-leave-to[data-v-9798e70f]{opacity:0}.fade-enter-active[data-v-0df46b7b],.fade-leave-active[data-v-0df46b7b]{transition:opacity .15s ease}.fade-enter-from[data-v-0df46b7b],.fade-leave-to[data-v-0df46b7b]{opacity:0}.fade-enter-active[data-v-d712cb76],.fade-leave-active[data-v-d712cb76]{transition:opacity .15s ease}.fade-enter-from[data-v-d712cb76],.fade-leave-to[data-v-d712cb76]{opacity:0}.titlebar-drag-cover[data-v-b3e18446]{position:absolute;left:0;right:0;z-index:30;top:calc(-1 * var(--titlebar-area-height));height:calc(var(--titlebar-area-height) + 1rem);-webkit-app-region:drag}.header-actions[data-v-b3e18446]{-webkit-app-region:drag}.header-actions[data-v-b3e18446] button,.header-actions[data-v-b3e18446] button *,.header-actions[data-v-b3e18446] a,.header-actions[data-v-b3e18446] a *,.header-actions[data-v-b3e18446] [role=button],.header-actions[data-v-b3e18446] [role=button] *{-webkit-app-region:no-drag}
|