wormclaude 1.0.116 → 1.0.117
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/compact.js +3 -1
- package/dist/theme.js +1 -1
- package/dist/tools.js +4 -2
- package/dist/tui.js +17 -1
- package/package.json +1 -1
package/dist/compact.js
CHANGED
|
@@ -7,7 +7,9 @@ import { approxTokens } from './usage.js';
|
|
|
7
7
|
// Model tavanı değişirse bu değer de güncellenmeli (ya da WORMCLAUDE_CONTEXT_WINDOW ile override).
|
|
8
8
|
const CONTEXT_WINDOW = Number(process.env.WORMCLAUDE_CONTEXT_WINDOW) || 32768;
|
|
9
9
|
const SUMMARY_RESERVE = 4000; // özet çıktısı için rezerv (CC: ~20K büyük modellerde)
|
|
10
|
-
|
|
10
|
+
// Erken tetikle (~%69): geç tetiklenince tek bir turun büyük çıktısı (grep/curl) pencereyi
|
|
11
|
+
// taşırıp "token bitti → yazılmıyor"a sokuyordu. Erken tazeleme = kesilme yok.
|
|
12
|
+
const AUTOCOMPACT_BUFFER = 6000;
|
|
11
13
|
export function autoCompactThreshold() {
|
|
12
14
|
return CONTEXT_WINDOW - SUMMARY_RESERVE - AUTOCOMPACT_BUFFER;
|
|
13
15
|
}
|
package/dist/theme.js
CHANGED
package/dist/tools.js
CHANGED
|
@@ -1137,7 +1137,9 @@ export async function executeTool(name, args) {
|
|
|
1137
1137
|
const showLineNo = args['-n'] !== false; // content modunda varsayılan true
|
|
1138
1138
|
const after = Number(args['-A'] ?? args['-C'] ?? args.context ?? 0);
|
|
1139
1139
|
const before = Number(args['-B'] ?? args['-C'] ?? args.context ?? 0);
|
|
1140
|
-
|
|
1140
|
+
// Varsayılan 60 eşleşme: yüzlerce satırlık çıktı context'i şişirip modeli tekrar-döngüsüne
|
|
1141
|
+
// (sahte link üretimi) sokuyordu. Model gerekirse head_limit ile artırabilir.
|
|
1142
|
+
const headLimit = args.head_limit === 0 ? Infinity : Number(args.head_limit) || 60;
|
|
1141
1143
|
const offset = Number(args.offset) || 0;
|
|
1142
1144
|
const reset = () => { rx.lastIndex = 0; return rx; };
|
|
1143
1145
|
const entries = [];
|
|
@@ -1206,7 +1208,7 @@ export async function executeTool(name, args) {
|
|
|
1206
1208
|
if (!sliced.length)
|
|
1207
1209
|
return { ok: true, output: '(no matches)' };
|
|
1208
1210
|
const note = entries.length > sliced.length ? `\n(${entries.length - sliced.length} more, raise head_limit to see)` : '';
|
|
1209
|
-
return { ok: true, output: sliced.join('\n').slice(0,
|
|
1211
|
+
return { ok: true, output: sliced.join('\n').slice(0, 6000) + note + `\n\n[${fileCount} file(s) with matches]` };
|
|
1210
1212
|
}
|
|
1211
1213
|
if (name === 'WebFetch') {
|
|
1212
1214
|
let url = String(args.url);
|
package/dist/tui.js
CHANGED
|
@@ -18,7 +18,7 @@ import { getSkill, getSkills, buildSkillPrompt } from './skills.js';
|
|
|
18
18
|
import { getExtCommand, getExtCommands, buildExtCommandPrompt } from './extensions.js';
|
|
19
19
|
import { resolveAtMentions } from './atmention.js';
|
|
20
20
|
import { loadMemoryContext, shouldExtract, triggerMemory } from './memory.js';
|
|
21
|
-
import { shouldAutoCompact, runCompact } from './compact.js';
|
|
21
|
+
import { shouldAutoCompact, runCompact, isContextError } from './compact.js';
|
|
22
22
|
import { recordLearned } from './learn.js';
|
|
23
23
|
import { connectMcpServers } from './mcp.js';
|
|
24
24
|
// Komut çıktılarını context'e eklerken KIS: curl/scan gürültüsü (handshake, tüm header'lar)
|
|
@@ -288,6 +288,7 @@ export async function runTui() {
|
|
|
288
288
|
refresh(); }, 120);
|
|
289
289
|
let lastSig = '', sameCount = 0, usedWeb = false, lastAnswer = '';
|
|
290
290
|
let consecFail = 0, totalFails = 0; // devre-kesici: olmayan araç/sözdizimi döngüsünü kır
|
|
291
|
+
let reactiveRetried = false; // bağlam taşmasında bir kez compact+retry
|
|
291
292
|
try {
|
|
292
293
|
for (let iter = 0; iter < 25; iter++) {
|
|
293
294
|
streamChars = 0;
|
|
@@ -337,6 +338,7 @@ export async function runTui() {
|
|
|
337
338
|
process.stdout.write(out); // imleç içerik bölgesinde → aşağı akar, taşınca scrollback'e
|
|
338
339
|
refresh(); // footer'ı dibe yeniden sabitle
|
|
339
340
|
};
|
|
341
|
+
let gotCtxErr = false;
|
|
340
342
|
for await (const ev of streamChat(history, allToolSchemas(), config)) {
|
|
341
343
|
if (ev.type === 'text') {
|
|
342
344
|
answer += ev.text;
|
|
@@ -350,11 +352,25 @@ export async function runTui() {
|
|
|
350
352
|
ctxUsed = u.input;
|
|
351
353
|
}
|
|
352
354
|
else if (ev.type === 'error') {
|
|
355
|
+
if (isContextError(ev.error))
|
|
356
|
+
gotCtxErr = true;
|
|
353
357
|
answer += `\n[hata: ${ev.error}]`;
|
|
354
358
|
flushStream(false);
|
|
355
359
|
}
|
|
356
360
|
}
|
|
357
361
|
flushStream(true); // kalan yarım satırı bas
|
|
362
|
+
// Reactive compact: bağlam taştıysa bir kez özetle ve turu tekrarla → "token bitti, yazılmıyor" olmaz.
|
|
363
|
+
if (gotCtxErr && !reactiveRetried) {
|
|
364
|
+
reactiveRetried = true;
|
|
365
|
+
printItem({ kind: 'note', text: t('tui.autoCompacted') });
|
|
366
|
+
try {
|
|
367
|
+
const { history: nh } = await runCompact(history, config);
|
|
368
|
+
history.length = 0;
|
|
369
|
+
history.push(...nh);
|
|
370
|
+
}
|
|
371
|
+
catch { }
|
|
372
|
+
continue; // tur sayılmaz, kaldığı yerden devam
|
|
373
|
+
}
|
|
358
374
|
answer = stripInlineToolCalls(cleanModelText(answer)).trim();
|
|
359
375
|
const am = { role: 'assistant', content: answer || '' };
|
|
360
376
|
if (toolCalls.length)
|