cc-viewer 0.2.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Claude Code Viewer</title>
7
7
 
8
- <script type="module" crossorigin src="/assets/index-DfxlBPQC.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-Cc1O-iKV.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-C7-c9XfU.css">
10
10
  </head>
11
11
  <body>
package/lib/server.js CHANGED
@@ -56,9 +56,29 @@ function checkPortAlive(port) {
56
56
  });
57
57
  }
58
58
 
59
+ function registerLogToServer(port, logFile) {
60
+ return new Promise((resolve) => {
61
+ const data = JSON.stringify({ logFile });
62
+ const req = httpRequest({
63
+ host: HOST, port, path: '/api/register-log', method: 'POST',
64
+ headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) },
65
+ timeout: 2000,
66
+ }, (res) => {
67
+ res.resume();
68
+ resolve(true);
69
+ });
70
+ req.on('error', () => resolve(false));
71
+ req.on('timeout', () => { req.destroy(); resolve(false); });
72
+ req.write(data);
73
+ req.end();
74
+ });
75
+ }
76
+
59
77
  let clients = [];
60
78
  let server;
61
79
  let actualPort = START_PORT;
80
+ // 跟踪所有被 watch 的日志文件
81
+ const watchedFiles = new Map();
62
82
 
63
83
  const MIME_TYPES = {
64
84
  '.html': 'text/html; charset=utf-8',
@@ -103,11 +123,13 @@ function sendToClients(entry) {
103
123
  });
104
124
  }
105
125
 
106
- function startWatching() {
126
+ function watchLogFile(logFile) {
127
+ if (watchedFiles.has(logFile)) return;
107
128
  let lastSize = 0;
108
- watchFile(LOG_FILE, { interval: 500 }, () => {
129
+ watchedFiles.set(logFile, true);
130
+ watchFile(logFile, { interval: 500 }, () => {
109
131
  try {
110
- const content = readFileSync(LOG_FILE, 'utf-8');
132
+ const content = readFileSync(logFile, 'utf-8');
111
133
  const newContent = content.slice(lastSize);
112
134
  lastSize = content.length;
113
135
 
@@ -128,6 +150,10 @@ function startWatching() {
128
150
  });
129
151
  }
130
152
 
153
+ function startWatching() {
154
+ watchLogFile(LOG_FILE);
155
+ }
156
+
131
157
  function handleRequest(req, res) {
132
158
  const { url, method } = req;
133
159
 
@@ -142,6 +168,29 @@ function handleRequest(req, res) {
142
168
  return;
143
169
  }
144
170
 
171
+ // 注册新的日志文件进行 watch(供新进程复用旧服务时调用)
172
+ if (url === '/api/register-log' && method === 'POST') {
173
+ let body = '';
174
+ req.on('data', chunk => { body += chunk; });
175
+ req.on('end', () => {
176
+ try {
177
+ const { logFile } = JSON.parse(body);
178
+ if (logFile && typeof logFile === 'string' && logFile.startsWith(LOG_DIR) && existsSync(logFile)) {
179
+ watchLogFile(logFile);
180
+ res.writeHead(200, { 'Content-Type': 'application/json' });
181
+ res.end(JSON.stringify({ ok: true }));
182
+ } else {
183
+ res.writeHead(400, { 'Content-Type': 'application/json' });
184
+ res.end(JSON.stringify({ error: 'Invalid log file path' }));
185
+ }
186
+ } catch {
187
+ res.writeHead(400, { 'Content-Type': 'application/json' });
188
+ res.end(JSON.stringify({ error: 'Invalid request body' }));
189
+ }
190
+ });
191
+ return;
192
+ }
193
+
145
194
  // SSE endpoint
146
195
  if (url === '/events' && method === 'GET') {
147
196
  res.writeHead(200, {
@@ -308,6 +357,7 @@ export async function startViewer() {
308
357
  const alive = await checkPortAlive(existingPort);
309
358
  if (alive) {
310
359
  actualPort = existingPort;
360
+ await registerLogToServer(existingPort, LOG_FILE);
311
361
  return null;
312
362
  }
313
363
  }
@@ -326,6 +376,7 @@ export async function startViewer() {
326
376
  const alive = await checkPortAlive(existingPort);
327
377
  if (alive) {
328
378
  actualPort = existingPort;
379
+ await registerLogToServer(existingPort, LOG_FILE);
329
380
  releaseLock();
330
381
  console.log(t('server.reuse', { host: HOST, port: existingPort }));
331
382
  return null;
@@ -378,7 +429,10 @@ export async function startViewer() {
378
429
  }
379
430
 
380
431
  export function stopViewer() {
381
- unwatchFile(LOG_FILE);
432
+ for (const logFile of watchedFiles.keys()) {
433
+ unwatchFile(logFile);
434
+ }
435
+ watchedFiles.clear();
382
436
  clients.forEach(client => client.end());
383
437
  clients = [];
384
438
  if (server) {
package/locales/ar.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer تم الحقن بنجاح",
3
- "cli.inject.exists": " CC Viewer محقون بالفعل، لا حاجة لأي إجراء",
4
- "cli.inject.fail": " فشل الحقن: {error}",
2
+ "cli.alreadyWorking": "CC Viewer يعمل بالفعل",
3
+ "cli.inject.success": "تم تثبيت CC Viewer بنجاح",
4
+ "cli.inject.exists": "CC Viewer مثبت بالفعل، لا حاجة لأي إجراء",
5
+ "cli.inject.fail": "❌ فشل التثبيت: {error}",
5
6
  "cli.inject.notFound": "❌ لم يتم العثور على Claude Code cli.js: {path}",
6
7
  "cli.inject.notFoundHint": " يرجى التأكد من تثبيت @anthropic-ai/claude-code",
7
- "cli.hook.installed": "تم كتابة hook إعادة الحقن التلقائي في {path}",
8
- "cli.hook.exists": "hook إعادة الحقن التلقائي موجود بالفعل في {path}",
8
+ "cli.hook.installed": "تم كتابة hook الإصلاح التلقائي في {path}",
9
+ "cli.hook.exists": "hook الإصلاح التلقائي موجود بالفعل في {path}",
9
10
  "cli.hook.fail": "⚠️ فشل كتابة shell hook: {error}",
10
- "cli.usage.hint": "\nقم بتشغيل claude مباشرة. سيتم إعادة الحقن تلقائياً بعد تحديثات Claude Code",
11
- "cli.usage.uninstallHint": "لإلغاء التثبيت، قم بتشغيل: ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ تم تنظيف حقن cli.js",
11
+ "cli.usage.hint": "\nلإلغاء التثبيت، قم بتشغيل: ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ تم تنظيف cli.js",
13
14
  "cli.uninstall.cliNotFound": "⚠️ لم يتم العثور على Claude Code cli.js، تم التخطي",
14
- "cli.uninstall.cliFail": "❌ فشل تنظيف حقن cli.js",
15
+ "cli.uninstall.cliFail": "❌ فشل تنظيف cli.js",
15
16
  "cli.uninstall.hookRemoved": "✅ تم إزالة shell hook من {path}",
16
17
  "cli.uninstall.hookClean": "✅ لا حاجة للتنظيف في {path}",
17
18
  "cli.uninstall.hookFail": "❌ فشل تنظيف shell hook: {error}",
18
19
  "cli.uninstall.done": "\n🗑️ تم إلغاء تثبيت CC Viewer بالكامل",
19
-
20
20
  "server.started": "\n🔍 تم تشغيل CC Viewer: http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer يعمل بالفعل: http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ المنافذ {start}-{end} كلها مشغولة، لم يتم تشغيل خدمة المراقبة",
23
-
24
23
  "ui.requestList": "الطلبات",
25
24
  "ui.totalRequests": "الإجمالي: {count}",
26
25
  "ui.waitingRequests": "في انتظار الطلبات...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "سياق النظام #{index}",
49
48
  "ui.logCount": "{count} سجلات",
50
49
  "ui.noLogs": "لا توجد ملفات سجلات",
51
-
52
50
  "ui.toolReturn": "نتيجة الأداة",
53
51
  "ui.toolReturnNamed": "نتيجة {name}",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "تم النسخ",
57
54
  "ui.noHeaders": "لا يوجد Headers",
58
55
  "ui.noBody": "لا يوجد Body",
59
56
  "ui.streamingResponse": "⚡ استجابة متدفقة — استخدم هذا الطلب بث SSE، لا يمكن التقاط محتوى الاستجابة بالكامل.",
60
57
  "ui.responseNotCaptured": "لم يتم التقاط بيانات الاستجابة",
61
-
62
58
  "ui.expand": "▶ توسيع",
63
59
  "ui.collapse": "▼ طي",
64
- "ui.noChat": "لا توجد بيانات محادثة MainAgent"
60
+ "ui.noChat": "لا توجد بيانات محادثة MainAgent",
61
+ "ui.diffWithPrev": "الفرق مع الطلب السابق",
62
+ "ui.diffSessionChanged": "حجم نص الطلب انخفض، ربما بسبب /clear أو /compact أو تغيير الجلسة"
65
63
  }
package/locales/da.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer indsprøjtet korrekt",
3
- "cli.inject.exists": "CC Viewer allerede indsprøjtet, ingen handling nødvendig",
4
- "cli.inject.fail": " Indsprøjtning mislykkedes: {error}",
2
+ "cli.alreadyWorking": "CC Viewer fungerer allerede",
3
+ "cli.inject.success": "CC Viewer installeret",
4
+ "cli.inject.exists": "CC Viewer allerede installeret, ingen handling nødvendig",
5
+ "cli.inject.fail": "❌ Installation mislykkedes: {error}",
5
6
  "cli.inject.notFound": "❌ Claude Code cli.js ikke fundet: {path}",
6
7
  "cli.inject.notFoundHint": " Sørg for at @anthropic-ai/claude-code er installeret",
7
- "cli.hook.installed": "Auto-reinject hook skrevet til {path}",
8
- "cli.hook.exists": "Auto-reinject hook findes allerede i {path}",
8
+ "cli.hook.installed": "Auto-reparations-hook skrevet til {path}",
9
+ "cli.hook.exists": "Auto-reparations-hook findes allerede i {path}",
9
10
  "cli.hook.fail": "⚠️ Kunne ikke skrive shell hook: {error}",
10
- "cli.usage.hint": "\nKør claude direkte. Det vil automatisk genindsprøjte efter Claude Code opdateringer",
11
- "cli.usage.uninstallHint": "For at afinstallere, kør: ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ cli.js indsprøjtning renset",
11
+ "cli.usage.hint": "\nFor at afinstallere, kør: ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ cli.js renset",
13
14
  "cli.uninstall.cliNotFound": "⚠️ Claude Code cli.js ikke fundet, sprunget over",
14
- "cli.uninstall.cliFail": "❌ Kunne ikke rense cli.js indsprøjtning",
15
+ "cli.uninstall.cliFail": "❌ Rensning af cli.js mislykkedes",
15
16
  "cli.uninstall.hookRemoved": "✅ Shell hook fjernet fra {path}",
16
17
  "cli.uninstall.hookClean": "✅ Ingen oprydning nødvendig i {path}",
17
18
  "cli.uninstall.hookFail": "❌ Kunne ikke rense shell hook: {error}",
18
19
  "cli.uninstall.done": "\n🗑️ CC Viewer fuldstændigt afinstalleret",
19
-
20
20
  "server.started": "\n🔍 CC Viewer startet: http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer kører allerede: http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ Porte {start}-{end} er alle i brug, overvågningstjeneste ikke startet",
23
-
24
23
  "ui.requestList": "Forespørgsler",
25
24
  "ui.totalRequests": "Total: {count}",
26
25
  "ui.waitingRequests": "Venter på forespørgsler...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "Systemkontekst #{index}",
49
48
  "ui.logCount": "{count} logs",
50
49
  "ui.noLogs": "Ingen logfiler",
51
-
52
50
  "ui.toolReturn": "Værktøjsresultat",
53
51
  "ui.toolReturnNamed": "{name}-resultat",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "Kopieret",
57
54
  "ui.noHeaders": "Ingen Headers",
58
55
  "ui.noBody": "Ingen Body",
59
56
  "ui.streamingResponse": "⚡ Streaming-svar — Denne forespørgsel brugte SSE-streaming, svarindholdet kunne ikke fuldt indfanges.",
60
57
  "ui.responseNotCaptured": "Svardata ikke indfanget",
61
-
62
58
  "ui.expand": "▶ Udvid",
63
59
  "ui.collapse": "▼ Fold sammen",
64
- "ui.noChat": "Ingen MainAgent samtaledata"
60
+ "ui.noChat": "Ingen MainAgent samtaledata",
61
+ "ui.diffWithPrev": "Diff med forrige anmodning",
62
+ "ui.diffSessionChanged": "Anmodningens størrelse er reduceret, muligvis på grund af /clear, /compact eller sessionsændring"
65
63
  }
package/locales/de.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer erfolgreich injiziert",
3
- "cli.inject.exists": "CC Viewer bereits injiziert, keine Aktion nötig",
4
- "cli.inject.fail": " Injektion fehlgeschlagen: {error}",
2
+ "cli.alreadyWorking": "CC Viewer funktioniert bereits",
3
+ "cli.inject.success": "CC Viewer erfolgreich installiert",
4
+ "cli.inject.exists": "CC Viewer bereits installiert, keine Aktion nötig",
5
+ "cli.inject.fail": "❌ Installation fehlgeschlagen: {error}",
5
6
  "cli.inject.notFound": "❌ Claude Code cli.js nicht gefunden: {path}",
6
7
  "cli.inject.notFoundHint": " Bitte stellen Sie sicher, dass @anthropic-ai/claude-code installiert ist",
7
- "cli.hook.installed": "Auto-Reinject-Hook in {path} geschrieben",
8
- "cli.hook.exists": "Auto-Reinject-Hook existiert bereits in {path}",
8
+ "cli.hook.installed": "Auto-Reparatur-Hook in {path} geschrieben",
9
+ "cli.hook.exists": "Auto-Reparatur-Hook existiert bereits in {path}",
9
10
  "cli.hook.fail": "⚠️ Shell-Hook konnte nicht geschrieben werden: {error}",
10
- "cli.usage.hint": "\nFühren Sie claude direkt aus. Nach Claude Code Updates wird automatisch neu injiziert",
11
- "cli.usage.uninstallHint": "Zum Deinstallieren: ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ cli.js-Injektion bereinigt",
11
+ "cli.usage.hint": "\nZum Deinstallieren: ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ cli.js bereinigt",
13
14
  "cli.uninstall.cliNotFound": "⚠️ Claude Code cli.js nicht gefunden, übersprungen",
14
- "cli.uninstall.cliFail": "❌ cli.js-Injektion konnte nicht bereinigt werden",
15
+ "cli.uninstall.cliFail": "❌ cli.js Bereinigung fehlgeschlagen",
15
16
  "cli.uninstall.hookRemoved": "✅ Shell-Hook aus {path} entfernt",
16
17
  "cli.uninstall.hookClean": "✅ Keine Bereinigung in {path} nötig",
17
18
  "cli.uninstall.hookFail": "❌ Shell-Hook-Bereinigung fehlgeschlagen: {error}",
18
19
  "cli.uninstall.done": "\n🗑️ CC Viewer vollständig deinstalliert",
19
-
20
20
  "server.started": "\n🔍 CC Viewer gestartet: http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer läuft bereits: http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ Ports {start}-{end} sind alle belegt, Überwachungsdienst nicht gestartet",
23
-
24
23
  "ui.requestList": "Anfragen",
25
24
  "ui.totalRequests": "Gesamt: {count}",
26
25
  "ui.waitingRequests": "Warte auf Anfragen...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "Systemkontext #{index}",
49
48
  "ui.logCount": "{count} Logs",
50
49
  "ui.noLogs": "Keine Log-Dateien",
51
-
52
50
  "ui.toolReturn": "Tool-Ergebnis",
53
51
  "ui.toolReturnNamed": "{name}-Ergebnis",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "Kopiert",
57
54
  "ui.noHeaders": "Keine Headers",
58
55
  "ui.noBody": "Kein Body",
59
56
  "ui.streamingResponse": "⚡ Streaming-Antwort — Diese Anfrage nutzte SSE-Streaming, der Antwortinhalt konnte nicht vollständig erfasst werden.",
60
57
  "ui.responseNotCaptured": "Antwortdaten nicht erfasst",
61
-
62
58
  "ui.expand": "▶ Aufklappen",
63
59
  "ui.collapse": "▼ Zuklappen",
64
- "ui.noChat": "Keine MainAgent-Gesprächsdaten"
60
+ "ui.noChat": "Keine MainAgent-Gesprächsdaten",
61
+ "ui.diffWithPrev": "Diff zur vorherigen Anfrage",
62
+ "ui.diffSessionChanged": "Anfragekörper wurde kleiner, möglicherweise durch /clear, /compact oder Sitzungswechsel"
65
63
  }
package/locales/en.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer injected successfully",
3
- "cli.inject.exists": "CC Viewer already injected, no action needed",
4
- "cli.inject.fail": " Injection failed: {error}",
2
+ "cli.alreadyWorking": "CC Viewer is already working",
3
+ "cli.inject.success": "CC Viewer installed successfully",
4
+ "cli.inject.exists": "CC Viewer already installed, no action needed",
5
+ "cli.inject.fail": "❌ Installation failed: {error}",
5
6
  "cli.inject.notFound": "❌ Claude Code cli.js not found: {path}",
6
7
  "cli.inject.notFoundHint": " Please make sure @anthropic-ai/claude-code is installed",
7
- "cli.hook.installed": "Auto-reinject hook written to {path}",
8
- "cli.hook.exists": "Auto-reinject hook already exists in {path}",
8
+ "cli.hook.installed": "Auto-repair hook written to {path}",
9
+ "cli.hook.exists": "Auto-repair hook already exists in {path}",
9
10
  "cli.hook.fail": "⚠️ Failed to write shell hook: {error}",
10
- "cli.usage.hint": "\nJust run claude directly. It will auto-reinject after Claude Code updates",
11
- "cli.usage.uninstallHint": "To uninstall, run: ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ cli.js injection cleaned",
11
+ "cli.usage.hint": "\nTo uninstall, run: ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ cli.js cleaned",
13
14
  "cli.uninstall.cliNotFound": "⚠️ Claude Code cli.js not found, skipped",
14
- "cli.uninstall.cliFail": "❌ Failed to clean cli.js injection",
15
+ "cli.uninstall.cliFail": "❌ Failed to clean cli.js",
15
16
  "cli.uninstall.hookRemoved": "✅ Shell hook removed from {path}",
16
17
  "cli.uninstall.hookClean": "✅ No cleanup needed in {path}",
17
18
  "cli.uninstall.hookFail": "❌ Failed to clean shell hook: {error}",
18
19
  "cli.uninstall.done": "\n🗑️ CC Viewer fully uninstalled",
19
-
20
20
  "server.started": "\n🔍 CC Viewer started: http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer already running: http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ Ports {start}-{end} are all in use, monitoring service not started",
23
-
24
23
  "ui.requestList": "Requests",
25
24
  "ui.totalRequests": "Total: {count}",
26
25
  "ui.waitingRequests": "Waiting for requests...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "System context #{index}",
49
48
  "ui.logCount": "{count} logs",
50
49
  "ui.noLogs": "No log files",
51
-
52
50
  "ui.toolReturn": "Tool result",
53
51
  "ui.toolReturnNamed": "{name} result",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "Copied",
57
54
  "ui.noHeaders": "No Headers",
58
55
  "ui.noBody": "No Body",
59
56
  "ui.streamingResponse": "⚡ Streaming response — This request used SSE streaming, response content cannot be fully captured.",
60
57
  "ui.responseNotCaptured": "Response not captured",
61
-
62
58
  "ui.expand": "▶ Expand",
63
59
  "ui.collapse": "▼ Collapse",
64
- "ui.noChat": "No MainAgent conversation data"
60
+ "ui.noChat": "No MainAgent conversation data",
61
+ "ui.diffWithPrev": "Diff with previous request",
62
+ "ui.diffSessionChanged": "Request body size decreased, possibly due to /clear, /compact, or session change"
65
63
  }
package/locales/es.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer inyectado correctamente",
3
- "cli.inject.exists": "CC Viewer ya inyectado, no se requiere acción",
4
- "cli.inject.fail": " Inyección fallida: {error}",
2
+ "cli.alreadyWorking": "CC Viewer ya está funcionando",
3
+ "cli.inject.success": "CC Viewer instalado correctamente",
4
+ "cli.inject.exists": "CC Viewer ya instalado, no se requiere acción",
5
+ "cli.inject.fail": "❌ Instalación fallida: {error}",
5
6
  "cli.inject.notFound": "❌ Claude Code cli.js no encontrado: {path}",
6
7
  "cli.inject.notFoundHint": " Asegúrese de que @anthropic-ai/claude-code esté instalado",
7
- "cli.hook.installed": "Hook de reinyección automática escrito en {path}",
8
- "cli.hook.exists": "Hook de reinyección automática ya existe en {path}",
8
+ "cli.hook.installed": "Hook de auto-reparación escrito en {path}",
9
+ "cli.hook.exists": "Hook de auto-reparación ya existe en {path}",
9
10
  "cli.hook.fail": "⚠️ Error al escribir el shell hook: {error}",
10
- "cli.usage.hint": "\nEjecute claude directamente. Se reinyectará automáticamente tras actualizaciones de Claude Code",
11
- "cli.usage.uninstallHint": "Para desinstalar, ejecute: ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ Inyección de cli.js limpiada",
11
+ "cli.usage.hint": "\nPara desinstalar, ejecute: ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ cli.js limpiado",
13
14
  "cli.uninstall.cliNotFound": "⚠️ Claude Code cli.js no encontrado, omitido",
14
- "cli.uninstall.cliFail": "❌ Error al limpiar la inyección de cli.js",
15
+ "cli.uninstall.cliFail": "❌ Fallo al limpiar cli.js",
15
16
  "cli.uninstall.hookRemoved": "✅ Shell hook eliminado de {path}",
16
17
  "cli.uninstall.hookClean": "✅ No se necesita limpieza en {path}",
17
18
  "cli.uninstall.hookFail": "❌ Error al limpiar el shell hook: {error}",
18
19
  "cli.uninstall.done": "\n🗑️ CC Viewer desinstalado completamente",
19
-
20
20
  "server.started": "\n🔍 CC Viewer iniciado: http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer ya en ejecución: http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ Puertos {start}-{end} están todos en uso, servicio de monitoreo no iniciado",
23
-
24
23
  "ui.requestList": "Solicitudes",
25
24
  "ui.totalRequests": "Total: {count}",
26
25
  "ui.waitingRequests": "Esperando solicitudes...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "Contexto del sistema #{index}",
49
48
  "ui.logCount": "{count} logs",
50
49
  "ui.noLogs": "Sin archivos de log",
51
-
52
50
  "ui.toolReturn": "Resultado de herramienta",
53
51
  "ui.toolReturnNamed": "Resultado de {name}",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "Copiado",
57
54
  "ui.noHeaders": "Sin Headers",
58
55
  "ui.noBody": "Sin Body",
59
56
  "ui.streamingResponse": "⚡ Respuesta en streaming — Esta solicitud usó streaming SSE, el contenido de la respuesta no se pudo capturar completamente.",
60
57
  "ui.responseNotCaptured": "Datos de respuesta no capturados",
61
-
62
58
  "ui.expand": "▶ Expandir",
63
59
  "ui.collapse": "▼ Contraer",
64
- "ui.noChat": "Sin datos de conversación de MainAgent"
60
+ "ui.noChat": "Sin datos de conversación de MainAgent",
61
+ "ui.diffWithPrev": "Diferencia con la solicitud anterior",
62
+ "ui.diffSessionChanged": "El tamaño del cuerpo de la solicitud disminuyó, posiblemente debido a /clear, /compact o cambio de sesión"
65
63
  }
package/locales/fr.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer injecté avec succès",
3
- "cli.inject.exists": "CC Viewer déjà injecté, aucune action nécessaire",
4
- "cli.inject.fail": " Échec de l'injection : {error}",
2
+ "cli.alreadyWorking": "CC Viewer fonctionne déjà",
3
+ "cli.inject.success": "CC Viewer installé avec succès",
4
+ "cli.inject.exists": "CC Viewer déjà installé, aucune action nécessaire",
5
+ "cli.inject.fail": "❌ Échec de l'installation : {error}",
5
6
  "cli.inject.notFound": "❌ Claude Code cli.js introuvable : {path}",
6
7
  "cli.inject.notFoundHint": " Veuillez vérifier que @anthropic-ai/claude-code est installé",
7
- "cli.hook.installed": "Hook de réinjection automatique écrit dans {path}",
8
- "cli.hook.exists": "Hook de réinjection automatique déjà présent dans {path}",
8
+ "cli.hook.installed": "Hook de réparation auto écrit dans {path}",
9
+ "cli.hook.exists": "Hook de réparation auto déjà présent dans {path}",
9
10
  "cli.hook.fail": "⚠️ Échec de l'écriture du shell hook : {error}",
10
- "cli.usage.hint": "\nExécutez claude directement. La réinjection se fera automatiquement après les mises à jour de Claude Code",
11
- "cli.usage.uninstallHint": "Pour désinstaller, exécutez : ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ Injection cli.js nettoyée",
11
+ "cli.usage.hint": "\nPour désinstaller, exécutez : ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ cli.js nettoyé",
13
14
  "cli.uninstall.cliNotFound": "⚠️ Claude Code cli.js introuvable, ignoré",
14
- "cli.uninstall.cliFail": "❌ Échec du nettoyage de l'injection cli.js",
15
+ "cli.uninstall.cliFail": "❌ Échec du nettoyage de cli.js",
15
16
  "cli.uninstall.hookRemoved": "✅ Shell hook supprimé de {path}",
16
17
  "cli.uninstall.hookClean": "✅ Aucun nettoyage nécessaire dans {path}",
17
18
  "cli.uninstall.hookFail": "❌ Échec du nettoyage du shell hook : {error}",
18
19
  "cli.uninstall.done": "\n🗑️ CC Viewer entièrement désinstallé",
19
-
20
20
  "server.started": "\n🔍 CC Viewer démarré : http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer déjà en cours d'exécution : http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ Ports {start}-{end} tous occupés, service de surveillance non démarré",
23
-
24
23
  "ui.requestList": "Requêtes",
25
24
  "ui.totalRequests": "Total : {count}",
26
25
  "ui.waitingRequests": "En attente de requêtes...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "Contexte système #{index}",
49
48
  "ui.logCount": "{count} logs",
50
49
  "ui.noLogs": "Aucun fichier de log",
51
-
52
50
  "ui.toolReturn": "Résultat d'outil",
53
51
  "ui.toolReturnNamed": "Résultat de {name}",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "Copié",
57
54
  "ui.noHeaders": "Pas de Headers",
58
55
  "ui.noBody": "Pas de Body",
59
56
  "ui.streamingResponse": "⚡ Réponse en streaming — Cette requête a utilisé le streaming SSE, le contenu de la réponse n'a pas pu être entièrement capturé.",
60
57
  "ui.responseNotCaptured": "Données de réponse non capturées",
61
-
62
58
  "ui.expand": "▶ Déplier",
63
59
  "ui.collapse": "▼ Replier",
64
- "ui.noChat": "Aucune donnée de conversation MainAgent"
60
+ "ui.noChat": "Aucune donnée de conversation MainAgent",
61
+ "ui.diffWithPrev": "Diff avec la requête précédente",
62
+ "ui.diffSessionChanged": "La taille du corps de la requête a diminué, possiblement dû à /clear, /compact ou un changement de session"
65
63
  }
package/locales/it.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer iniettato con successo",
3
- "cli.inject.exists": "CC Viewer già iniettato, nessuna azione necessaria",
4
- "cli.inject.fail": " Iniezione fallita: {error}",
2
+ "cli.alreadyWorking": "CC Viewer è già funzionante",
3
+ "cli.inject.success": "CC Viewer installato con successo",
4
+ "cli.inject.exists": "CC Viewer già installato, nessuna azione necessaria",
5
+ "cli.inject.fail": "❌ Installazione fallita: {error}",
5
6
  "cli.inject.notFound": "❌ Claude Code cli.js non trovato: {path}",
6
7
  "cli.inject.notFoundHint": " Assicurati che @anthropic-ai/claude-code sia installato",
7
- "cli.hook.installed": "Hook di reiniezione automatica scritto in {path}",
8
- "cli.hook.exists": "Hook di reiniezione automatica già presente in {path}",
8
+ "cli.hook.installed": "Hook di auto-riparazione scritto in {path}",
9
+ "cli.hook.exists": "Hook di auto-riparazione già presente in {path}",
9
10
  "cli.hook.fail": "⚠️ Impossibile scrivere il shell hook: {error}",
10
- "cli.usage.hint": "\nEsegui claude direttamente. Si reinietterà automaticamente dopo gli aggiornamenti di Claude Code",
11
- "cli.usage.uninstallHint": "Per disinstallare, esegui: ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ Iniezione cli.js pulita",
11
+ "cli.usage.hint": "\nPer disinstallare, esegui: ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ cli.js pulito",
13
14
  "cli.uninstall.cliNotFound": "⚠️ Claude Code cli.js non trovato, saltato",
14
- "cli.uninstall.cliFail": "❌ Pulizia iniezione cli.js fallita",
15
+ "cli.uninstall.cliFail": "❌ Pulizia cli.js fallita",
15
16
  "cli.uninstall.hookRemoved": "✅ Shell hook rimosso da {path}",
16
17
  "cli.uninstall.hookClean": "✅ Nessuna pulizia necessaria in {path}",
17
18
  "cli.uninstall.hookFail": "❌ Pulizia shell hook fallita: {error}",
18
19
  "cli.uninstall.done": "\n🗑️ CC Viewer completamente disinstallato",
19
-
20
20
  "server.started": "\n🔍 CC Viewer avviato: http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer già in esecuzione: http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ Porte {start}-{end} tutte in uso, servizio di monitoraggio non avviato",
23
-
24
23
  "ui.requestList": "Richieste",
25
24
  "ui.totalRequests": "Totale: {count}",
26
25
  "ui.waitingRequests": "In attesa di richieste...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "Contesto di sistema #{index}",
49
48
  "ui.logCount": "{count} log",
50
49
  "ui.noLogs": "Nessun file di log",
51
-
52
50
  "ui.toolReturn": "Risultato strumento",
53
51
  "ui.toolReturnNamed": "Risultato di {name}",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "Copiato",
57
54
  "ui.noHeaders": "Nessun Header",
58
55
  "ui.noBody": "Nessun Body",
59
56
  "ui.streamingResponse": "⚡ Risposta in streaming — Questa richiesta ha utilizzato lo streaming SSE, il contenuto della risposta non può essere catturato completamente.",
60
57
  "ui.responseNotCaptured": "Dati di risposta non catturati",
61
-
62
58
  "ui.expand": "▶ Espandi",
63
59
  "ui.collapse": "▼ Comprimi",
64
- "ui.noChat": "Nessun dato di conversazione MainAgent"
60
+ "ui.noChat": "Nessun dato di conversazione MainAgent",
61
+ "ui.diffWithPrev": "Diff con la richiesta precedente",
62
+ "ui.diffSessionChanged": "La dimensione del corpo della richiesta è diminuita, probabilmente a causa di /clear, /compact o cambio di sessione"
65
63
  }
package/locales/ja.json CHANGED
@@ -1,26 +1,25 @@
1
1
  {
2
- "cli.inject.success": "CC Viewer インジェクション成功",
3
- "cli.inject.exists": "CC Viewer は既にインジェクト済み、操作不要",
4
- "cli.inject.fail": " インジェクション失敗: {error}",
2
+ "cli.alreadyWorking": "CC Viewer は既に動作しています",
3
+ "cli.inject.success": "CC Viewer インストール成功",
4
+ "cli.inject.exists": "CC Viewer は既にインストール済み、操作不要",
5
+ "cli.inject.fail": "❌ インストール失敗: {error}",
5
6
  "cli.inject.notFound": "❌ Claude Code cli.js が見つかりません: {path}",
6
7
  "cli.inject.notFoundHint": " @anthropic-ai/claude-code がインストールされていることを確認してください",
7
- "cli.hook.installed": " 自動再インジェクト hook を {path} に書き込みました",
8
- "cli.hook.exists": " 自動再インジェクト hook は既に {path} に存在します",
8
+ "cli.hook.installed": "自動修復 hook を {path} に書き込みました",
9
+ "cli.hook.exists": "自動修復 hook は既に {path} に存在します",
9
10
  "cli.hook.fail": "⚠️ shell hook の書き込みに失敗: {error}",
10
- "cli.usage.hint": "\nclaude を直接実行してください。Claude Code 更新後に自動で再インジェクトされます",
11
- "cli.usage.uninstallHint": "アンインストールするには: ccv --uninstall",
12
- "cli.uninstall.cliCleaned": "✅ cli.js インジェクションをクリーンアップしました",
11
+ "cli.usage.hint": "\nアンインストールするには: ccv --uninstall",
12
+ "cli.usage.uninstallHint": "",
13
+ "cli.uninstall.cliCleaned": "✅ cli.js をクリーンアップしました",
13
14
  "cli.uninstall.cliNotFound": "⚠️ Claude Code cli.js が見つかりません、スキップ",
14
- "cli.uninstall.cliFail": "❌ cli.js インジェクションのクリーンアップに失敗",
15
+ "cli.uninstall.cliFail": "❌ cli.js のクリーンアップに失敗",
15
16
  "cli.uninstall.hookRemoved": "✅ shell hook を {path} から削除しました",
16
17
  "cli.uninstall.hookClean": "✅ {path} のクリーンアップは不要です",
17
18
  "cli.uninstall.hookFail": "❌ shell hook のクリーンアップに失敗: {error}",
18
19
  "cli.uninstall.done": "\n🗑️ CC Viewer を完全にアンインストールしました",
19
-
20
20
  "server.started": "\n🔍 CC Viewer 起動: http://{host}:{port}\n",
21
21
  "server.reuse": "\n🔍 CC Viewer は既に実行中: http://{host}:{port}\n",
22
22
  "server.portsBusy": "⚠️ ポート {start}-{end} はすべて使用中、監視サービスは起動されませんでした",
23
-
24
23
  "ui.requestList": "リクエスト一覧",
25
24
  "ui.totalRequests": "合計: {count}",
26
25
  "ui.waitingRequests": "リクエスト待機中...",
@@ -48,18 +47,17 @@
48
47
  "ui.systemContext": "システムコンテキスト #{index}",
49
48
  "ui.logCount": "{count} 件のログ",
50
49
  "ui.noLogs": "ログファイルなし",
51
-
52
50
  "ui.toolReturn": "ツール結果",
53
51
  "ui.toolReturnNamed": "{name} 結果",
54
52
  "ui.lastResponse": "Last Response",
55
-
56
53
  "ui.copySuccess": "コピーしました",
57
54
  "ui.noHeaders": "Headers なし",
58
55
  "ui.noBody": "Body なし",
59
56
  "ui.streamingResponse": "⚡ ストリーミングレスポンス — このリクエストは SSE ストリーミングを使用しており、レスポンス内容を完全にキャプチャできませんでした。",
60
57
  "ui.responseNotCaptured": "レスポンスデータ未キャプチャ",
61
-
62
58
  "ui.expand": "▶ 展開",
63
59
  "ui.collapse": "▼ 折りたたむ",
64
- "ui.noChat": "MainAgent の会話データがありません"
60
+ "ui.noChat": "MainAgent の会話データがありません",
61
+ "ui.diffWithPrev": "前回リクエストとの差分",
62
+ "ui.diffSessionChanged": "リクエストボディのサイズが減少しました。/clear、/compact、またはセッション変更の可能性があります"
65
63
  }