@hope666/melu 1.0.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.
Files changed (87) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +57 -0
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +630 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +45 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +135 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/embedder-client.d.ts +24 -0
  12. package/dist/embedder-client.d.ts.map +1 -0
  13. package/dist/embedder-client.js +164 -0
  14. package/dist/embedder-client.js.map +1 -0
  15. package/dist/embedder-daemon-client.d.ts +10 -0
  16. package/dist/embedder-daemon-client.d.ts.map +1 -0
  17. package/dist/embedder-daemon-client.js +185 -0
  18. package/dist/embedder-daemon-client.js.map +1 -0
  19. package/dist/embedder-daemon.d.ts +11 -0
  20. package/dist/embedder-daemon.d.ts.map +1 -0
  21. package/dist/embedder-daemon.js +284 -0
  22. package/dist/embedder-daemon.js.map +1 -0
  23. package/dist/embedder-ipc.d.ts +27 -0
  24. package/dist/embedder-ipc.d.ts.map +1 -0
  25. package/dist/embedder-ipc.js +60 -0
  26. package/dist/embedder-ipc.js.map +1 -0
  27. package/dist/embedder-main.d.ts +2 -0
  28. package/dist/embedder-main.d.ts.map +1 -0
  29. package/dist/embedder-main.js +6 -0
  30. package/dist/embedder-main.js.map +1 -0
  31. package/dist/embedder.d.ts +41 -0
  32. package/dist/embedder.d.ts.map +1 -0
  33. package/dist/embedder.js +231 -0
  34. package/dist/embedder.js.map +1 -0
  35. package/dist/extraction-queue.d.ts +53 -0
  36. package/dist/extraction-queue.d.ts.map +1 -0
  37. package/dist/extraction-queue.js +418 -0
  38. package/dist/extraction-queue.js.map +1 -0
  39. package/dist/extraction-stats.d.ts +15 -0
  40. package/dist/extraction-stats.d.ts.map +1 -0
  41. package/dist/extraction-stats.js +89 -0
  42. package/dist/extraction-stats.js.map +1 -0
  43. package/dist/extractor-worker-main.d.ts +2 -0
  44. package/dist/extractor-worker-main.d.ts.map +1 -0
  45. package/dist/extractor-worker-main.js +70 -0
  46. package/dist/extractor-worker-main.js.map +1 -0
  47. package/dist/extractor-worker.d.ts +17 -0
  48. package/dist/extractor-worker.d.ts.map +1 -0
  49. package/dist/extractor-worker.js +164 -0
  50. package/dist/extractor-worker.js.map +1 -0
  51. package/dist/extractor.d.ts +36 -0
  52. package/dist/extractor.d.ts.map +1 -0
  53. package/dist/extractor.js +244 -0
  54. package/dist/extractor.js.map +1 -0
  55. package/dist/i18n.d.ts +995 -0
  56. package/dist/i18n.d.ts.map +1 -0
  57. package/dist/i18n.js +1024 -0
  58. package/dist/i18n.js.map +1 -0
  59. package/dist/memory.d.ts +62 -0
  60. package/dist/memory.d.ts.map +1 -0
  61. package/dist/memory.js +293 -0
  62. package/dist/memory.js.map +1 -0
  63. package/dist/model-bootstrap.d.ts +29 -0
  64. package/dist/model-bootstrap.d.ts.map +1 -0
  65. package/dist/model-bootstrap.js +235 -0
  66. package/dist/model-bootstrap.js.map +1 -0
  67. package/dist/proxy-main.d.ts +5 -0
  68. package/dist/proxy-main.d.ts.map +1 -0
  69. package/dist/proxy-main.js +10 -0
  70. package/dist/proxy-main.js.map +1 -0
  71. package/dist/proxy.d.ts +9 -0
  72. package/dist/proxy.d.ts.map +1 -0
  73. package/dist/proxy.js +309 -0
  74. package/dist/proxy.js.map +1 -0
  75. package/dist/run-runtime.d.ts +34 -0
  76. package/dist/run-runtime.d.ts.map +1 -0
  77. package/dist/run-runtime.js +170 -0
  78. package/dist/run-runtime.js.map +1 -0
  79. package/dist/runtime-context.d.ts +12 -0
  80. package/dist/runtime-context.d.ts.map +1 -0
  81. package/dist/runtime-context.js +39 -0
  82. package/dist/runtime-context.js.map +1 -0
  83. package/dist/text-chunking.d.ts +7 -0
  84. package/dist/text-chunking.d.ts.map +1 -0
  85. package/dist/text-chunking.js +50 -0
  86. package/dist/text-chunking.js.map +1 -0
  87. package/package.json +46 -0
package/dist/cli.js ADDED
@@ -0,0 +1,630 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Melu CLI 入口。
4
+ *
5
+ * 命令:init / run / stop / list / delete / clear / export / import / status
6
+ */
7
+ import { Command } from "commander";
8
+ import { spawn } from "node:child_process";
9
+ import { existsSync, mkdtempSync, readFileSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
10
+ import { tmpdir } from "node:os";
11
+ import { basename, join, resolve } from "node:path";
12
+ import { createConnection } from "node:net";
13
+ import { truncateCharacters } from "./text-chunking.js";
14
+ import { MELU_HOME, PID_FILE, DEFAULT_PORT, ensureDirs, hasEmbeddingModel, loadConfig, saveConfig, getMemoryPath, } from "./config.js";
15
+ import { getExtractionQueueSnapshotForRun, preparePendingExtractionQueueForRun, } from "./extraction-queue.js";
16
+ import { createInitialExtractionRunStats, readExtractionRunStats, writeExtractionRunStats, } from "./extraction-stats.js";
17
+ import { MemoryStore } from "./memory.js";
18
+ import { ensureEmbeddingModelReady, ensureEmbeddingRuntimeAvailable, ensureUiLanguageConfigured, getMirrorLabel, } from "./model-bootstrap.js";
19
+ import { createI18n } from "./i18n.js";
20
+ import { waitForEmbedderDaemonReady } from "./embedder-client.js";
21
+ import { createRunId } from "./run-runtime.js";
22
+ import { createMeluRuntimeContext } from "./runtime-context.js";
23
+ const startupUi = createI18n(loadConfig().uiLanguage);
24
+ const program = new Command();
25
+ const CLAUDE_USER_SETTINGS_PATH = join(process.env.HOME ?? "", ".claude", "settings.json");
26
+ program
27
+ .name("melu")
28
+ .description(startupUi.t("programDescription"))
29
+ .version("0.1.0");
30
+ // ── init ─────────────────────────────────────────────────────────────
31
+ program
32
+ .command("init")
33
+ .description(startupUi.t("cmdInitDescription"))
34
+ .option("--mirror <mirror>", startupUi.t("optMirrorDescription"))
35
+ .action(async (opts) => {
36
+ let config = loadConfig();
37
+ config = await ensureUiLanguageConfigured(config, { interactive: true });
38
+ const ui = createI18n(config.uiLanguage);
39
+ console.log(ui.t("initTitle"));
40
+ // 1. 创建目录
41
+ ensureDirs();
42
+ console.log(` ${ui.t("labelDirectory")}: ${MELU_HOME}`);
43
+ // 2. 保存配置
44
+ const preparedConfig = await prepareEmbedding(config, {
45
+ interactive: true,
46
+ mirror: opts.mirror,
47
+ showDownloadProgress: true,
48
+ });
49
+ saveConfig(preparedConfig);
50
+ console.log(` ${ui.t("labelConfig")}: ${MELU_HOME}/config.json`);
51
+ // 3. 创建默认记忆文件
52
+ const memPath = getMemoryPath();
53
+ const store = new MemoryStore(memPath);
54
+ store.open();
55
+ store.setMeta("name", "default");
56
+ store.setMeta("created_at", new Date().toISOString());
57
+ store.close();
58
+ console.log(` ${ui.t("labelMemory")}: ${memPath}`);
59
+ console.log("");
60
+ console.log(ui.t("initComplete"));
61
+ console.log(` ${ui.t("labelMirrorSource")}: ${getMirrorLabel(preparedConfig.mirror, preparedConfig.uiLanguage)}`);
62
+ console.log(` ${ui.t("embeddingModelReady")}`);
63
+ console.log(` ${ui.t("usageRunClaude")}`);
64
+ });
65
+ // ── run ──────────────────────────────────────────────────────────────
66
+ program
67
+ .command("run")
68
+ .description(startupUi.t("cmdRunDescription"))
69
+ .option("-m, --memory <name>", startupUi.t("optMemoryNameOrPathDescription"))
70
+ .option("--mirror <mirror>", startupUi.t("optMirrorDescription"))
71
+ .option("-p, --port <port>", startupUi.t("optPortDescription"), String(DEFAULT_PORT))
72
+ .argument("<command...>", startupUi.t("argCommandDescription"))
73
+ .action(async (command, opts) => {
74
+ let config = loadConfig();
75
+ config = await ensureUiLanguageConfigured(config, { interactive: true });
76
+ const ui = createI18n(config.uiLanguage);
77
+ const port = parseInt(opts.port, 10) || config.port;
78
+ config.port = port;
79
+ const runId = createRunId();
80
+ const runtimeContext = createMeluRuntimeContext(runId);
81
+ preparePendingExtractionQueueForRun(runId);
82
+ config = await prepareEmbedding(config, {
83
+ interactive: true,
84
+ mirror: opts.mirror,
85
+ showDownloadProgress: !hasEmbeddingModel(),
86
+ });
87
+ const memPath = getMemoryPath(opts.memory);
88
+ const initialSnapshot = getExtractionQueueSnapshotForRun(runId);
89
+ writeExtractionRunStats(createInitialExtractionRunStats(runId, initialSnapshot.remaining));
90
+ console.log(`${ui.t("runProxy")}: http://127.0.0.1:${port}`);
91
+ console.log(`${ui.t("runMemory")}: ${memPath}`);
92
+ console.log(`[Melu] run_id: ${runId}`);
93
+ console.log("");
94
+ const daemonEnv = {
95
+ ...process.env,
96
+ MELU_RUN_ID: runId,
97
+ MELU_EMBEDDER_SOCKET: runtimeContext.embedderSocketPath,
98
+ MELU_DAEMON_OWNER_PID: String(process.pid),
99
+ MELU_DAEMON_IDLE_TIMEOUT_MS: String(30 * 60 * 1000),
100
+ };
101
+ const daemonChild = spawnMeluProcess("embedder-main.js", daemonEnv, true);
102
+ await waitForEmbedderDaemonReady({
103
+ runId,
104
+ socketPath: runtimeContext.embedderSocketPath,
105
+ timeoutMs: 120000,
106
+ });
107
+ const proxyChild = spawnMeluProcess("proxy-main.js", {
108
+ ...process.env,
109
+ MELU_RUN_ID: runId,
110
+ MELU_EMBEDDER_SOCKET: runtimeContext.embedderSocketPath,
111
+ MELU_MEMORY_PATH: memPath,
112
+ MELU_UPSTREAM_ANTHROPIC: resolveClaudeUpstreamBaseUrl(config.upstreamAnthropic),
113
+ }, true);
114
+ if (proxyChild.pid) {
115
+ writeFileSync(PID_FILE, String(proxyChild.pid));
116
+ }
117
+ await waitForProxy(port, 120000, config.uiLanguage);
118
+ const workerChild = spawnMeluProcess("extractor-worker-main.js", {
119
+ ...process.env,
120
+ MELU_RUN_ID: runId,
121
+ MELU_OWNER_PID: String(process.pid),
122
+ MELU_EMBEDDER_SOCKET: runtimeContext.embedderSocketPath,
123
+ MELU_EMBEDDER_PID: daemonChild.pid ? String(daemonChild.pid) : undefined,
124
+ MELU_MEMORY_PATH: memPath,
125
+ }, true);
126
+ void workerChild;
127
+ const preparedCommand = prepareForegroundCommand(command, port);
128
+ let finalized = false;
129
+ let foregroundExitCode = 0;
130
+ const finalizeRun = async () => {
131
+ if (finalized)
132
+ return;
133
+ finalized = true;
134
+ preparedCommand.cleanup();
135
+ terminateProcess(proxyChild.pid ?? null);
136
+ clearProxyPidFile(proxyChild.pid ?? null);
137
+ const snapshot = getExtractionQueueSnapshotForRun(runId);
138
+ const stats = readExtractionRunStats(runId) ?? createInitialExtractionRunStats(runId, snapshot.remaining);
139
+ writeExtractionRunStats({
140
+ ...stats,
141
+ remainingQueue: snapshot.remaining,
142
+ updatedAt: new Date().toISOString(),
143
+ });
144
+ printRunSummary(ui, {
145
+ runId,
146
+ processed: stats.processed,
147
+ effectiveNewMemories: stats.effectiveNewMemories,
148
+ failed: stats.failed,
149
+ remainingQueue: snapshot.remaining,
150
+ });
151
+ process.exitCode = foregroundExitCode;
152
+ };
153
+ const child = spawn(preparedCommand.command, preparedCommand.args, {
154
+ env: preparedCommand.env,
155
+ stdio: "inherit",
156
+ shell: false,
157
+ });
158
+ child.on("exit", (code) => {
159
+ foregroundExitCode = code ?? 0;
160
+ void finalizeRun();
161
+ });
162
+ child.on("error", (error) => {
163
+ console.error(`[Melu] 子命令启动失败: ${error.message}`);
164
+ foregroundExitCode = 1;
165
+ void finalizeRun();
166
+ });
167
+ const forwardSignal = (signal) => {
168
+ try {
169
+ child.kill(signal);
170
+ }
171
+ catch {
172
+ // ignore
173
+ }
174
+ };
175
+ process.on("SIGINT", () => forwardSignal("SIGINT"));
176
+ process.on("SIGTERM", () => forwardSignal("SIGTERM"));
177
+ });
178
+ // ── stop ─────────────────────────────────────────────────────────────
179
+ program
180
+ .command("stop")
181
+ .description(startupUi.t("cmdStopDescription"))
182
+ .action(() => {
183
+ const ui = createI18n(loadConfig().uiLanguage);
184
+ const pid = readPid();
185
+ if (pid === null) {
186
+ console.log(ui.t("proxyNotRunning"));
187
+ return;
188
+ }
189
+ try {
190
+ process.kill(pid, "SIGTERM");
191
+ console.log(ui.t("proxyStopped", { pid }));
192
+ }
193
+ catch {
194
+ console.log(ui.t("proxyAlreadyGone"));
195
+ }
196
+ if (existsSync(PID_FILE))
197
+ unlinkSync(PID_FILE);
198
+ });
199
+ // ── list ─────────────────────────────────────────────────────────────
200
+ program
201
+ .command("list")
202
+ .description(startupUi.t("cmdListDescription"))
203
+ .option("-m, --memory <name>", startupUi.t("optMemoryDescription"))
204
+ .option("-a, --all", startupUi.t("optAllDescription"), false)
205
+ .action((opts) => {
206
+ const ui = createI18n(loadConfig().uiLanguage);
207
+ const memPath = getMemoryPath(opts.memory);
208
+ if (!existsSync(memPath)) {
209
+ console.log(ui.t("memoryFileNotFound", { path: memPath }));
210
+ process.exit(1);
211
+ }
212
+ const store = new MemoryStore(memPath);
213
+ store.open();
214
+ const memories = store.listAll(opts.all);
215
+ store.close();
216
+ if (memories.length === 0) {
217
+ console.log(ui.t("noMemories"));
218
+ return;
219
+ }
220
+ console.log(`\n${ui.t("memoriesTitle", { count: memories.length })}\n`);
221
+ console.log("ID".padEnd(12) +
222
+ ui.t("tableType").padEnd(14) +
223
+ ui.t("tableSummary").padEnd(50) +
224
+ ui.t("tableCreatedAt").padEnd(20) +
225
+ ui.t("tableStatus"));
226
+ console.log("-".repeat(100));
227
+ for (const m of memories) {
228
+ const status = m.isActive ? "✓" : "✗";
229
+ console.log(m.id.slice(0, 10).padEnd(12) +
230
+ m.category.padEnd(14) +
231
+ truncateCharacters(m.summary, 46).padEnd(50) +
232
+ m.createdAt.slice(0, 16).padEnd(20) +
233
+ status);
234
+ }
235
+ console.log();
236
+ console.log(ui.t("listShowHint"));
237
+ });
238
+ // ── show ─────────────────────────────────────────────────────────────
239
+ program
240
+ .command("show <id>")
241
+ .description("显示一条记忆的完整信息")
242
+ .option("-m, --memory <name>", startupUi.t("optMemoryDescription"))
243
+ .action((id, opts) => {
244
+ const memPath = getMemoryPath(opts.memory);
245
+ if (!existsSync(memPath)) {
246
+ console.log(`记忆文件不存在: ${memPath}`);
247
+ process.exit(1);
248
+ }
249
+ const store = new MemoryStore(memPath);
250
+ store.open();
251
+ const all = store.listAll(true);
252
+ const matched = all.filter((m) => m.id.startsWith(id));
253
+ store.close();
254
+ if (matched.length === 0) {
255
+ console.log(`未找到 ID 前缀为 "${id}" 的记忆`);
256
+ process.exit(1);
257
+ }
258
+ if (matched.length > 1) {
259
+ console.log(`多条记忆匹配前缀 "${id}",请提供更长的 ID:`);
260
+ for (const m of matched) {
261
+ console.log(` ${m.id.slice(0, 12)} ${m.summary}`);
262
+ }
263
+ process.exit(1);
264
+ }
265
+ const m = matched[0];
266
+ console.log();
267
+ console.log(`ID: ${m.id}`);
268
+ console.log(`类型: ${m.category}`);
269
+ console.log(`主题: ${m.subject}`);
270
+ console.log(`摘要: ${m.summary}`);
271
+ console.log(`内容: ${m.content}`);
272
+ console.log(`置信度: ${m.confidence}`);
273
+ console.log(`状态: ${m.isActive ? "活跃" : "已停用"}`);
274
+ console.log(`创建时间: ${m.createdAt}`);
275
+ console.log(`更新时间: ${m.updatedAt}`);
276
+ if (m.supersedes) {
277
+ console.log(`替代: ${m.supersedes}`);
278
+ }
279
+ console.log();
280
+ });
281
+ // ── delete ───────────────────────────────────────────────────────────
282
+ program
283
+ .command("delete <id>")
284
+ .description(startupUi.t("cmdDeleteDescription"))
285
+ .option("-m, --memory <name>", startupUi.t("optMemoryDescription"))
286
+ .action((id, opts) => {
287
+ const ui = createI18n(loadConfig().uiLanguage);
288
+ const memPath = getMemoryPath(opts.memory);
289
+ const store = new MemoryStore(memPath);
290
+ store.open();
291
+ const all = store.listAll(true);
292
+ const matched = all.filter((m) => m.id.startsWith(id));
293
+ if (matched.length === 0) {
294
+ console.log(ui.t("memoryNotFoundByPrefix", { id }));
295
+ store.close();
296
+ process.exit(1);
297
+ }
298
+ if (matched.length > 1) {
299
+ console.log(ui.t("multipleMemoryMatches"));
300
+ store.close();
301
+ process.exit(1);
302
+ }
303
+ store.delete(matched[0].id);
304
+ store.close();
305
+ console.log(ui.t("deletedMemory", { summary: matched[0].summary }));
306
+ });
307
+ // ── clear ────────────────────────────────────────────────────────────
308
+ program
309
+ .command("clear")
310
+ .description(startupUi.t("cmdClearDescription"))
311
+ .option("-m, --memory <name>", startupUi.t("optMemoryDescription"))
312
+ .option("-y, --yes", startupUi.t("optYesDescription"), false)
313
+ .action(async (opts) => {
314
+ const ui = createI18n(loadConfig().uiLanguage);
315
+ const memPath = getMemoryPath(opts.memory);
316
+ const store = new MemoryStore(memPath);
317
+ store.open();
318
+ const count = store.countActive();
319
+ if (count === 0) {
320
+ console.log(ui.t("memoryAlreadyEmpty"));
321
+ store.close();
322
+ return;
323
+ }
324
+ if (!opts.yes) {
325
+ const readline = await import("node:readline");
326
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
327
+ const answer = await new Promise((resolve) => rl.question(ui.t("confirmClearMemories", { count }), resolve));
328
+ rl.close();
329
+ if (answer.toLowerCase() !== "y") {
330
+ store.close();
331
+ return;
332
+ }
333
+ }
334
+ const deleted = store.clear();
335
+ store.close();
336
+ console.log(ui.t("clearedMemories", { count: deleted }));
337
+ });
338
+ // ── export ───────────────────────────────────────────────────────────
339
+ program
340
+ .command("export")
341
+ .description(startupUi.t("cmdExportDescription"))
342
+ .requiredOption("-o, --output <path>", startupUi.t("optOutputDescription"))
343
+ .option("-m, --memory <name>", startupUi.t("optMemoryDescription"))
344
+ .action(async (opts) => {
345
+ const ui = createI18n(loadConfig().uiLanguage);
346
+ const memPath = getMemoryPath(opts.memory);
347
+ const store = new MemoryStore(memPath);
348
+ store.open();
349
+ let dest = resolve(opts.output);
350
+ if (!dest.endsWith(".memory"))
351
+ dest += ".memory";
352
+ try {
353
+ await store.exportTo(dest);
354
+ console.log(ui.t("exportedTo", { path: dest }));
355
+ }
356
+ finally {
357
+ store.close();
358
+ }
359
+ });
360
+ // ── import ───────────────────────────────────────────────────────────
361
+ program
362
+ .command("import <source>")
363
+ .description(startupUi.t("cmdImportDescription"))
364
+ .option("-m, --memory <name>", startupUi.t("optMemoryDescription"))
365
+ .action((source, opts) => {
366
+ const ui = createI18n(loadConfig().uiLanguage);
367
+ const src = resolve(source);
368
+ if (!existsSync(src)) {
369
+ console.log(ui.t("sourceFileNotFound", { path: src }));
370
+ process.exit(1);
371
+ }
372
+ const memPath = getMemoryPath(opts.memory);
373
+ const store = new MemoryStore(memPath);
374
+ store.open();
375
+ const count = store.importFrom(src);
376
+ store.close();
377
+ console.log(ui.t("importedMemories", { count }));
378
+ });
379
+ // ── status ───────────────────────────────────────────────────────────
380
+ program
381
+ .command("status")
382
+ .description(startupUi.t("cmdStatusDescription"))
383
+ .option("-m, --memory <name>", startupUi.t("optMemoryDescription"))
384
+ .action((opts) => {
385
+ const config = loadConfig();
386
+ const ui = createI18n(config.uiLanguage);
387
+ const pid = readPid();
388
+ if (pid !== null && isProcessAlive(pid)) {
389
+ console.log(ui.t("statusRunning", { pid, port: config.port }));
390
+ }
391
+ else {
392
+ console.log(ui.t("statusStopped"));
393
+ }
394
+ const memPath = getMemoryPath(opts.memory);
395
+ if (existsSync(memPath)) {
396
+ const store = new MemoryStore(memPath);
397
+ store.open();
398
+ const count = store.countActive();
399
+ store.close();
400
+ console.log(ui.t("statusMemoryFile", { path: memPath }));
401
+ console.log(ui.t("statusActiveMemories", { count }));
402
+ }
403
+ else {
404
+ console.log(ui.t("memoryFileNotFound", { path: memPath }));
405
+ }
406
+ console.log(ui.t("statusEmbedding", { model: config.embeddingModel }));
407
+ console.log(ui.t("statusMirrorSource", { label: getMirrorLabel(config.mirror, config.uiLanguage) }));
408
+ console.log(ui.t("statusModelFile", { status: hasEmbeddingModel() ? ui.t("statusDownloaded") : ui.t("statusNotDownloaded") }));
409
+ });
410
+ // ── 内部工具 ─────────────────────────────────────────────────────────
411
+ function waitForProxy(port, timeout = 10000, language = null) {
412
+ return new Promise((resolve, reject) => {
413
+ const ui = createI18n(language);
414
+ const start = Date.now();
415
+ const tryConnect = () => {
416
+ const sock = createConnection({ host: "127.0.0.1", port }, () => {
417
+ sock.destroy();
418
+ resolve();
419
+ });
420
+ sock.on("error", () => {
421
+ if (Date.now() - start > timeout) {
422
+ reject(new Error(ui.t("proxyStartupTimeout")));
423
+ }
424
+ else {
425
+ setTimeout(tryConnect, 300);
426
+ }
427
+ });
428
+ };
429
+ tryConnect();
430
+ });
431
+ }
432
+ function readPid() {
433
+ if (!existsSync(PID_FILE))
434
+ return null;
435
+ try {
436
+ return parseInt(readFileSync(PID_FILE, "utf-8").trim(), 10);
437
+ }
438
+ catch {
439
+ return null;
440
+ }
441
+ }
442
+ function isProcessAlive(pid) {
443
+ try {
444
+ process.kill(pid, 0);
445
+ return true;
446
+ }
447
+ catch {
448
+ return false;
449
+ }
450
+ }
451
+ function checkPort(port) {
452
+ return new Promise((resolve) => {
453
+ const sock = createConnection({ host: "127.0.0.1", port }, () => {
454
+ sock.destroy();
455
+ resolve(true); // 端口有人用
456
+ });
457
+ sock.on("error", () => {
458
+ resolve(false); // 端口空闲
459
+ });
460
+ });
461
+ }
462
+ function stopProxy() {
463
+ const pid = readPid();
464
+ terminateProcess(pid);
465
+ clearProxyPidFile(pid);
466
+ }
467
+ async function prepareEmbedding(config, options) {
468
+ const preparedConfig = { ...config };
469
+ await ensureEmbeddingRuntimeAvailable(preparedConfig.uiLanguage);
470
+ const result = await ensureEmbeddingModelReady({
471
+ config: preparedConfig,
472
+ interactive: options.interactive,
473
+ preferredMirror: options.mirror,
474
+ showProgress: options.showDownloadProgress,
475
+ });
476
+ return result.config;
477
+ }
478
+ function spawnMeluProcess(entrypointFile, env, detached = false) {
479
+ const child = spawn(process.execPath, [resolve(import.meta.dirname ?? ".", entrypointFile)], {
480
+ env,
481
+ cwd: resolve(import.meta.dirname ?? "."),
482
+ detached,
483
+ stdio: detached ? ["ignore", "ignore", "ignore"] : "inherit",
484
+ });
485
+ if (detached) {
486
+ child.unref();
487
+ }
488
+ return child;
489
+ }
490
+ function printRunSummary(ui, stats) {
491
+ console.log("");
492
+ console.log(ui.t("runSummaryTitle", { runId: stats.runId }));
493
+ console.log(ui.t("runSummaryProcessed", { count: stats.processed }));
494
+ console.log(ui.t("runSummaryEffectiveNewMemories", { count: stats.effectiveNewMemories }));
495
+ console.log(ui.t("runSummaryFailed", { count: stats.failed }));
496
+ console.log(ui.t("runSummaryRemainingQueue", { count: stats.remainingQueue }));
497
+ }
498
+ function terminateProcess(pid) {
499
+ if (!Number.isInteger(pid) || (pid ?? 0) <= 0) {
500
+ return;
501
+ }
502
+ try {
503
+ process.kill(pid, "SIGTERM");
504
+ }
505
+ catch {
506
+ // Ignore missing child processes.
507
+ }
508
+ }
509
+ function clearProxyPidFile(expectedPid) {
510
+ const currentPid = readPid();
511
+ if (currentPid === null)
512
+ return;
513
+ if (expectedPid && currentPid !== expectedPid)
514
+ return;
515
+ try {
516
+ unlinkSync(PID_FILE);
517
+ }
518
+ catch {
519
+ // Ignore cleanup failures.
520
+ }
521
+ }
522
+ function prepareForegroundCommand(command, port) {
523
+ const env = { ...process.env };
524
+ env.ANTHROPIC_BASE_URL = `http://127.0.0.1:${port}`;
525
+ if (command.length === 0) {
526
+ throw new Error("Missing foreground command");
527
+ }
528
+ const executableName = basename(command[0]);
529
+ if (executableName !== "claude") {
530
+ return {
531
+ command: command[0],
532
+ args: command.slice(1),
533
+ env,
534
+ cleanup: () => {
535
+ // No-op for non-Claude commands.
536
+ },
537
+ };
538
+ }
539
+ const existingArgs = command.slice(1);
540
+ if (containsClaudeSettingsFlag(existingArgs)) {
541
+ return {
542
+ command: command[0],
543
+ args: existingArgs,
544
+ env,
545
+ cleanup: () => {
546
+ // No-op when the caller explicitly controls Claude settings.
547
+ },
548
+ };
549
+ }
550
+ const tempDir = mkdtempSync(join(tmpdir(), "melu-claude-settings-"));
551
+ const tempSettingsPath = join(tempDir, "settings.json");
552
+ const userSettings = readClaudeUserSettings();
553
+ const settingsEnv = normalizeSettingsEnv(userSettings?.env);
554
+ // Preserve the user's current auth/provider settings while forcing Claude
555
+ // itself to talk to the Melu proxy for this run only.
556
+ settingsEnv.ANTHROPIC_BASE_URL = env.ANTHROPIC_BASE_URL;
557
+ if (process.env.ANTHROPIC_API_KEY?.trim()) {
558
+ settingsEnv.ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
559
+ }
560
+ if (process.env.ANTHROPIC_AUTH_TOKEN?.trim()) {
561
+ settingsEnv.ANTHROPIC_AUTH_TOKEN = process.env.ANTHROPIC_AUTH_TOKEN;
562
+ }
563
+ const tempSettings = {
564
+ ...(userSettings ?? {}),
565
+ env: settingsEnv,
566
+ };
567
+ writeFileSync(tempSettingsPath, JSON.stringify(tempSettings, null, 2), "utf-8");
568
+ return {
569
+ command: command[0],
570
+ args: ["--setting-sources", "project,local", "--settings", tempSettingsPath, ...existingArgs],
571
+ env,
572
+ cleanup: () => {
573
+ try {
574
+ rmSync(tempDir, { recursive: true, force: true });
575
+ }
576
+ catch {
577
+ // Ignore temporary settings cleanup failures.
578
+ }
579
+ },
580
+ };
581
+ }
582
+ function containsClaudeSettingsFlag(args) {
583
+ return args.some((arg) => arg === "--settings" ||
584
+ arg.startsWith("--settings=") ||
585
+ arg === "--setting-sources" ||
586
+ arg.startsWith("--setting-sources="));
587
+ }
588
+ function readClaudeUserSettings() {
589
+ if (!CLAUDE_USER_SETTINGS_PATH || !existsSync(CLAUDE_USER_SETTINGS_PATH)) {
590
+ return null;
591
+ }
592
+ try {
593
+ const raw = readFileSync(CLAUDE_USER_SETTINGS_PATH, "utf-8");
594
+ const parsed = JSON.parse(raw);
595
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
596
+ return null;
597
+ }
598
+ return parsed;
599
+ }
600
+ catch {
601
+ return null;
602
+ }
603
+ }
604
+ function normalizeSettingsEnv(value) {
605
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
606
+ return {};
607
+ }
608
+ const result = {};
609
+ for (const [key, rawValue] of Object.entries(value)) {
610
+ if (rawValue === undefined || rawValue === null)
611
+ continue;
612
+ result[key] = String(rawValue);
613
+ }
614
+ return result;
615
+ }
616
+ function resolveClaudeUpstreamBaseUrl(fallback) {
617
+ const processValue = process.env.ANTHROPIC_BASE_URL?.trim();
618
+ if (processValue) {
619
+ return processValue;
620
+ }
621
+ const userSettings = readClaudeUserSettings();
622
+ const settingsValue = normalizeSettingsEnv(userSettings?.env).ANTHROPIC_BASE_URL?.trim();
623
+ if (settingsValue) {
624
+ return settingsValue;
625
+ }
626
+ return fallback;
627
+ }
628
+ // ── 启动 ─────────────────────────────────────────────────────────────
629
+ program.parse();
630
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}