wormclaude 1.0.178 → 1.0.180
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/cli.js +7 -0
- package/dist/theme.js +1 -1
- package/dist/tools.js +15 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -916,6 +916,7 @@ function App() {
|
|
|
916
916
|
setThinking(false);
|
|
917
917
|
setPhase(toolCalls.length > 1 ? t('phase.toolsMulti', toolCalls.length) : t('phase.toolRun', toolCalls[0].name));
|
|
918
918
|
const results = await executeToolCalls(toolCalls, {
|
|
919
|
+
signal: ac.signal, // Esc → çalışan aracı (tarama) durdur
|
|
919
920
|
onResult: (c, _i, res) => {
|
|
920
921
|
if ((c.name === 'WebSearch' || c.name === 'WebFetch') && res.ok)
|
|
921
922
|
usedWeb = true;
|
|
@@ -951,6 +952,12 @@ function App() {
|
|
|
951
952
|
role: 'tool', tool_call_id: toolCalls[i].id, content: _capOut(toolCalls[i].name, results[i].output),
|
|
952
953
|
}];
|
|
953
954
|
}
|
|
955
|
+
// Esc ile durdurulduysa: turu burada bitir (sonraki LLM çağrısına gitme).
|
|
956
|
+
if (ac.signal.aborted) {
|
|
957
|
+
push({ kind: 'note', text: t('note.interrupted') });
|
|
958
|
+
done = true;
|
|
959
|
+
break;
|
|
960
|
+
}
|
|
954
961
|
// Araç-grubu özeti (2+ araçta tek satır etiket)
|
|
955
962
|
if (toolCalls.length >= 2) {
|
|
956
963
|
const sum = await summarizeTools(toolCalls.map((t, i) => ({ name: t.name, args: results[i].args })), config);
|
package/dist/theme.js
CHANGED
package/dist/tools.js
CHANGED
|
@@ -743,13 +743,17 @@ async function execOne(call, hooks) {
|
|
|
743
743
|
const _fk = 'full|' + target.toLowerCase();
|
|
744
744
|
const _fc = _scanCache.get(_fk);
|
|
745
745
|
if (_fc && Date.now() - _fc.t < 120000) {
|
|
746
|
-
return { ok: false, args, output: `[ALREADY-SCANNED]
|
|
746
|
+
return { ok: false, args, output: `[ALREADY-SCANNED] full scan "${target}" already ran — findings are above. Do NOT call SecurityScan again; summarize the results in text.` };
|
|
747
747
|
}
|
|
748
748
|
try {
|
|
749
749
|
const { runPentest } = await import('./pentest.js');
|
|
750
750
|
const all = [];
|
|
751
751
|
let rpt = `Tam kapsamlı tarama — ${target}\n`;
|
|
752
752
|
for (const _t of ['recon', 'xss', 'sqli']) {
|
|
753
|
+
if (hooks?.signal?.aborted) {
|
|
754
|
+
rpt += `\n[STOPPED] kullanıcı durdurdu (Esc) — kalan taramalar atlandı.`;
|
|
755
|
+
break;
|
|
756
|
+
}
|
|
753
757
|
try {
|
|
754
758
|
const o = await runPentest(cfg(), _t, target, true, () => { });
|
|
755
759
|
if (o?.ok) {
|
|
@@ -773,7 +777,7 @@ async function execOne(call, hooks) {
|
|
|
773
777
|
rpt += `\n\nToplam ${all.length} bulgu.`;
|
|
774
778
|
if (all.length)
|
|
775
779
|
rpt += '\n' + all.slice(0, 60).map((x) => ' ' + JSON.stringify(x)).join('\n');
|
|
776
|
-
rpt += `\n[full-done] recon+xss+sqli
|
|
780
|
+
rpt += `\n[full-done] recon+xss+sqli all ran. Do NOT call SecurityScan again — report the findings to the user in text (summary + prioritized fixes), in their language.`;
|
|
777
781
|
const _now = Date.now();
|
|
778
782
|
_scanCache.set(_fk, { out: rpt, t: _now });
|
|
779
783
|
// Alt tarama tiplerini de cache'le → full sonrası model tek tek recon/xss/sqli çağıramaz (gereksiz tekrar).
|
|
@@ -810,7 +814,7 @@ async function execOne(call, hooks) {
|
|
|
810
814
|
txt += `${rep.found_count} bulgu:\n` + f.slice(0, 50).map((x) => ' ' + JSON.stringify(x)).join('\n');
|
|
811
815
|
// Tek-tip tarama bitti. Kapsamlı isteniyorsa model TEK çağrıyla SecurityScan(tool:"full") koşmalı
|
|
812
816
|
// (kod deterministik recon+xss+sqli yapar) — kendi recon/xss/sqli zincirlemesin (döngüye girer).
|
|
813
|
-
txt += `\n\n[done]
|
|
817
|
+
txt += `\n\n[done] This single ${tool} scan is finished — summarize the result to the user in text. Do NOT call SecurityScan again on this target.`;
|
|
814
818
|
_scanCache.set(_ck, { out: txt, t: Date.now() }); // döngü-kırıcı için sakla
|
|
815
819
|
return { ok: true, output: txt, args };
|
|
816
820
|
}
|
|
@@ -860,6 +864,10 @@ export async function executeToolCalls(calls, hooks) {
|
|
|
860
864
|
const worker = async () => {
|
|
861
865
|
while (p < b.items.length) {
|
|
862
866
|
const { c, i } = b.items[p++];
|
|
867
|
+
if (hooks?.signal?.aborted) {
|
|
868
|
+
results[i] = { ok: false, output: '[STOPPED] kullanıcı durdurdu (Esc).', args: {} };
|
|
869
|
+
continue;
|
|
870
|
+
}
|
|
863
871
|
hooks?.onStart?.(c, i);
|
|
864
872
|
const _t = Date.now();
|
|
865
873
|
results[i] = await execOne(c, hooks);
|
|
@@ -871,6 +879,10 @@ export async function executeToolCalls(calls, hooks) {
|
|
|
871
879
|
}
|
|
872
880
|
else {
|
|
873
881
|
for (const { c, i } of b.items) {
|
|
882
|
+
if (hooks?.signal?.aborted) {
|
|
883
|
+
results[i] = { ok: false, output: '[STOPPED] kullanıcı durdurdu (Esc).', args: {} };
|
|
884
|
+
continue;
|
|
885
|
+
}
|
|
874
886
|
hooks?.onStart?.(c, i);
|
|
875
887
|
const _t = Date.now();
|
|
876
888
|
results[i] = await execOne(c, hooks);
|